1212
1313package com.orange.ouds.app.ui.components.topappbar
1414
15+ import android.R.attr.label
1516import androidx.compose.foundation.layout.PaddingValues
1617import androidx.compose.material3.ExperimentalMaterial3Api
1718import androidx.compose.runtime.Composable
1819import androidx.compose.ui.graphics.Color
1920import androidx.compose.ui.res.painterResource
21+ import androidx.compose.ui.res.pluralStringResource
2022import androidx.compose.ui.res.stringResource
2123import androidx.compose.ui.tooling.preview.PreviewLightDark
2224import com.orange.ouds.app.R
@@ -25,6 +27,7 @@ import com.orange.ouds.app.ui.components.colorArgument
2527import com.orange.ouds.app.ui.components.contentDescriptionArgument
2628import com.orange.ouds.app.ui.components.onClickArgument
2729import com.orange.ouds.app.ui.components.painterArgument
30+ import com.orange.ouds.app.ui.components.topappbar.TopAppBarDemoState.Companion.ActionIconBadgeCount
2831import com.orange.ouds.app.ui.utilities.Code
2932import com.orange.ouds.app.ui.utilities.LocalThemeDrawableResources
3033import com.orange.ouds.app.ui.utilities.ThemeDrawableResources
@@ -39,6 +42,7 @@ import com.orange.ouds.core.component.OudsLargeTopAppBar
3942import com.orange.ouds.core.component.OudsMediumTopAppBar
4043import com.orange.ouds.core.component.OudsTopAppBar
4144import com.orange.ouds.core.component.OudsTopAppBarAction
45+ import com.orange.ouds.core.component.OudsTopAppBarActionBadge
4246import com.orange.ouds.core.component.OudsTopAppBarNavigationIcon
4347import com.orange.ouds.core.theme.OudsTheme
4448import com.orange.ouds.foundation.extensions.orElse
@@ -89,17 +93,24 @@ private fun TopAppBarDemoBottomSheetContent(state: TopAppBarDemoState) {
8993 )
9094 CustomizationFilterChips (
9195 applyTopPadding = true ,
92- label = stringResource(R .string.app_components_topAppBar_avatar_label),
93- chipLabels = TopAppBarDemoState .Avatar .entries.map { stringResource(it.labelRes) },
94- selectedChipIndex = TopAppBarDemoState .Avatar .entries.indexOf(avatar),
95- onSelectionChange = { id -> avatar = TopAppBarDemoState .Avatar .entries[id] }
96+ label = stringResource(R .string.app_components_topAppBar_actionIconBadge_label),
97+ chipLabels = TopAppBarDemoState .ActionIconBadge .entries.map { it.name },
98+ selectedChipIndex = TopAppBarDemoState .ActionIconBadge .entries.indexOf(actionIconBadge),
99+ onSelectionChange = { id -> actionIconBadge = TopAppBarDemoState .ActionIconBadge .entries[id] }
100+ )
101+ CustomizationFilterChips (
102+ applyTopPadding = true ,
103+ label = stringResource(R .string.app_components_topAppBar_actionAvatar_label),
104+ chipLabels = TopAppBarDemoState .ActionAvatar .entries.map { stringResource(it.labelRes) },
105+ selectedChipIndex = TopAppBarDemoState .ActionAvatar .entries.indexOf(actionAvatar),
106+ onSelectionChange = { id -> actionAvatar = TopAppBarDemoState .ActionAvatar .entries[id] }
96107 )
97108 CustomizationTextField (
98109 applyTopPadding = true ,
99- label = stringResource(R .string.app_components_topAppBar_avatarMonogram_label ),
100- value = avatarMonogram .toString().trim(),
101- onValueChange = { value -> avatarMonogram = value.firstOrNull().orElse { ' ' } },
102- enabled = avatarMonogramTextFieldEnabled
110+ label = stringResource(R .string.app_components_topAppBar_actionAvatarMonogram_label ),
111+ value = actionAvatarMonogram .toString().trim(),
112+ onValueChange = { value -> actionAvatarMonogram = value.firstOrNull().orElse { ' ' } },
113+ enabled = actionAvatarMonogramTextFieldEnabled
103114 )
104115 }
105116}
@@ -120,29 +131,41 @@ private fun TopAppBarDemoContent(state: TopAppBarDemoState) {
120131 onClick = {}
121132 )
122133 }
123- val avatarContentDescription = stringResource(R .string.app_components_topAppBar_secondAction_a11y)
124- val avatarAction = when (avatar) {
125- TopAppBarDemoState .Avatar .Image -> OudsTopAppBarAction .Avatar (
134+
135+ val firstAction = OudsTopAppBarAction .Icon (
136+ painter = painterResource(id = LocalThemeDrawableResources .current.tipsAndTricks),
137+ contentDescription = stringResource(R .string.app_components_topAppBar_firstAction_a11y),
138+ badge = when (actionIconBadge) {
139+ TopAppBarDemoState .ActionIconBadge .None -> null
140+ TopAppBarDemoState .ActionIconBadge .Standard -> OudsTopAppBarActionBadge (contentDescription = stringResource(id = R .string.app_components_common_unreadNotificationsBadge_a11y))
141+ TopAppBarDemoState .ActionIconBadge .Count -> OudsTopAppBarActionBadge (
142+ contentDescription = pluralStringResource(
143+ id = R .plurals.app_components_common_unreadMessageCountBadge_a11y,
144+ count = ActionIconBadgeCount ,
145+ ActionIconBadgeCount
146+ ),
147+ count = ActionIconBadgeCount
148+ )
149+ },
150+ onClick = {}
151+ )
152+ val secondActionContentDescription = stringResource(R .string.app_components_topAppBar_secondAction_a11y)
153+ val secondAction = when (actionAvatar) {
154+ TopAppBarDemoState .ActionAvatar .Image -> OudsTopAppBarAction .Avatar (
126155 painter = painterResource(id = R .drawable.il_top_app_bar_avatar),
127- contentDescription = avatarContentDescription ,
156+ contentDescription = secondActionContentDescription ,
128157 onClick = {}
129158 )
130- TopAppBarDemoState .Avatar .Monogram -> OudsTopAppBarAction .Avatar (
131- monogram = avatarMonogram ,
159+ TopAppBarDemoState .ActionAvatar .Monogram -> OudsTopAppBarAction .Avatar (
160+ monogram = actionAvatarMonogram ,
132161 color = Color .White ,
133162 backgroundColor = Color (0xff138126 ),
134- contentDescription = avatarContentDescription ,
163+ contentDescription = secondActionContentDescription ,
135164 onClick = {}
136165 )
137166 }
138- val actions = listOf (
139- OudsTopAppBarAction .Icon (
140- painter = painterResource(id = LocalThemeDrawableResources .current.tipsAndTricks),
141- contentDescription = stringResource(R .string.app_components_topAppBar_firstAction_a11y),
142- onClick = {}
143- ),
144- avatarAction
145- )
167+ val actions = listOf (firstAction, secondAction)
168+
146169 when (size) {
147170 TopAppBarDemoState .Size .Small -> {
148171 if (centerAligned) {
@@ -207,15 +230,31 @@ private fun Code.Builder.topAppBarDemoCodeSnippet(state: TopAppBarDemoState, the
207230 constructorCallArgument<OudsTopAppBarAction .Icon >(null ) {
208231 painterArgument(themeDrawableResources.tipsAndTricks)
209232 contentDescriptionArgument(R .string.app_components_topAppBar_firstAction_a11y)
233+ if (actionIconBadge != TopAppBarDemoState .ActionIconBadge .None ) {
234+ functionCallArgument(" badge" , OudsTopAppBarActionBadge ::class .simpleName.orEmpty()) {
235+ when (actionIconBadge) {
236+ TopAppBarDemoState .ActionIconBadge .None -> {}
237+ TopAppBarDemoState .ActionIconBadge .Standard -> contentDescriptionArgument(id = R .string.app_components_common_unreadNotificationsBadge_a11y)
238+ TopAppBarDemoState .ActionIconBadge .Count -> contentDescriptionArgument(
239+ id = R .plurals.app_components_common_unreadMessageCountBadge_a11y,
240+ count = ActionIconBadgeCount ,
241+ ActionIconBadgeCount
242+ )
243+ }
244+ if (actionIconBadge == TopAppBarDemoState .ActionIconBadge .Count ) {
245+ typedArgument(" count" , ActionIconBadgeCount )
246+ }
247+ }
248+ }
210249 onClickArgument()
211250 }
212251 constructorCallArgument<OudsTopAppBarAction .Avatar >(null ) {
213- when (avatar ) {
214- TopAppBarDemoState .Avatar .Image -> {
252+ when (actionAvatar ) {
253+ TopAppBarDemoState .ActionAvatar .Image -> {
215254 painterArgument(R .drawable.il_top_app_bar_avatar)
216255 }
217- TopAppBarDemoState .Avatar .Monogram -> {
218- typedArgument(" monogram" , avatarMonogram )
256+ TopAppBarDemoState .ActionAvatar .Monogram -> {
257+ typedArgument(" monogram" , actionAvatarMonogram )
219258 colorArgument(" color" , Color .White )
220259 colorArgument(" backgroundColor" , Color (0xff138126 ))
221260 }
0 commit comments