From 2c05228c6e54c382604a228af553519f9a9e0d34 Mon Sep 17 00:00:00 2001 From: Florent Maitre Date: Mon, 3 Aug 2026 10:54:40 +0200 Subject: [PATCH] Add tinted parameter to OudsTopAppBarAction icon --- .../ouds/app/ui/components/ComponentCode.kt | 6 ++- .../topappbar/TopAppBarDemoScreen.kt | 26 +++++++--- .../topappbar/TopAppBarDemoState.kt | 20 ++++++-- app/src/main/res/values/strings.xml | 1 + .../ouds/core/test/OudsTopAppBarTest.kt | 8 ++- .../ouds/core/component/OudsTopAppBar.kt | 48 ++++++++++++++++-- .../component/samples/OudsTopAppBarSamples.kt | 24 +++++++++ .../utilities/OudsPreviewableComponent.kt | 15 ++++++ ...ithUntintedIcon_takeLightThemeSnapshot.png | Bin 0 -> 5952 bytes ...ithUntintedIcon_takeLightThemeSnapshot.png | Bin 0 -> 6775 bytes ...ithUntintedIcon_takeLightThemeSnapshot.png | Bin 0 -> 6747 bytes ...ithUntintedIcon_takeLightThemeSnapshot.png | Bin 0 -> 8683 bytes 12 files changed, 130 insertions(+), 18 deletions(-) create mode 100644 theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png create mode 100644 theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png create mode 100644 theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png create mode 100644 theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentCode.kt b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentCode.kt index 47fa0d193e..dc5f836b2e 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentCode.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentCode.kt @@ -49,15 +49,17 @@ internal inline fun FunctionCall.Builder.annotatedStringArgument(nam } inline fun FunctionCall.Builder.iconArgument( - name: String, + name: String?, @DrawableRes resId: Int, @StringRes contentDescriptionResId: Int? = null, - tinted: Boolean = true + tinted: Boolean = true, + noinline init: FunctionCall.Builder.() -> Unit = {} ) { constructorCallArgument(name) { painterArgument(if (tinted) resId else R.drawable.ic_untinted_square) contentDescriptionResId?.let { contentDescriptionArgument(it) } if (!tinted) tintedArgument(tinted) + init() } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoScreen.kt index a2f4063a39..e383ad6ddb 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoScreen.kt @@ -24,6 +24,7 @@ import com.orange.ouds.app.R import com.orange.ouds.app.ui.components.Component import com.orange.ouds.app.ui.components.colorArgument import com.orange.ouds.app.ui.components.contentDescriptionArgument +import com.orange.ouds.app.ui.components.iconArgument import com.orange.ouds.app.ui.components.onClickArgument import com.orange.ouds.app.ui.components.painterArgument import com.orange.ouds.app.ui.components.topappbar.TopAppBarDemoState.Companion.ActionIconBadgeCount @@ -37,6 +38,7 @@ import com.orange.ouds.app.ui.utilities.composable.CustomizationSwitchItem import com.orange.ouds.app.ui.utilities.composable.CustomizationTextInput import com.orange.ouds.app.ui.utilities.composable.DemoScreen import com.orange.ouds.app.ui.utilities.nestedName +import com.orange.ouds.app.ui.utilities.rememberUntintedIconPainter import com.orange.ouds.core.component.OudsCenterAlignedTopAppBar import com.orange.ouds.core.component.OudsLargeTopAppBar import com.orange.ouds.core.component.OudsMediumTopAppBar @@ -102,10 +104,17 @@ private fun TopAppBarDemoBottomSheetContent(state: TopAppBarDemoState) { CustomizationFilterChips( applyTopPadding = true, label = stringResource(R.string.app_components_topAppBar_lastActionIconBadge_tech), - chips = TopAppBarDemoState.ActionIconBadge.entries.map { CustomizationFilterChip(it.name, lastActionIconBadgeFilterChipsEnabled) }, + chips = TopAppBarDemoState.ActionIconBadge.entries.map { CustomizationFilterChip(it.name, lastActionIconOptionsEnabled) }, selectedChipIndex = TopAppBarDemoState.ActionIconBadge.entries.indexOf(lastActionIconBadge), onSelectionChange = { index -> lastActionIconBadge = TopAppBarDemoState.ActionIconBadge.entries[index] }, ) + CustomizationFilterChips( + applyTopPadding = true, + label = stringResource(R.string.app_components_topAppBar_lastActionIcon_tech), + chips = TopAppBarDemoState.Icon.entries.map { CustomizationFilterChip(stringResource(it.labelRes), lastActionIconOptionsEnabled) }, + selectedChipIndex = TopAppBarDemoState.Icon.entries.indexOf(lastActionIcon), + onSelectionChange = { index -> lastActionIcon = TopAppBarDemoState.Icon.entries[index] } + ) CustomizationFilterChips( applyTopPadding = true, label = stringResource(R.string.app_components_topAppBar_actionAvatar_tech), @@ -157,10 +166,12 @@ private fun TopAppBarDemoContent(state: TopAppBarDemoState) { val contentDescription = getActionContentDescriptionResId(index)?.let { stringResource(it) }.orEmpty() when (action) { TopAppBarDemoState.Action.Icon -> { + val tinted = lastActionIcon == TopAppBarDemoState.Icon.Tinted || index != lastActionIconIndex OudsTopAppBarAction.Icon( - painter = painterResource(id = LocalThemeDrawableResources.current.tipsAndTricks), + painter = if (tinted) painterResource(id = themeDrawableResources.tipsAndTricks) else rememberUntintedIconPainter(), contentDescription = contentDescription, badge = if (index == lastActionIconIndex) lastTopAppBarActionIconBadge else null, + tinted = tinted, onClick = {} ) } @@ -258,11 +269,12 @@ private fun Code.Builder.topAppBarDemoCodeSnippet(state: TopAppBarDemoState, the val contentDescriptionResId = getActionContentDescriptionResId(index) when (action) { TopAppBarDemoState.Action.Icon -> { - constructorCallArgument(null) { - painterArgument(themeDrawableResources.tipsAndTricks) - if (contentDescriptionResId != null) { - contentDescriptionArgument(contentDescriptionResId) - } + iconArgument( + null, + themeDrawableResources.tipsAndTricks, + contentDescriptionResId, + lastActionIcon == TopAppBarDemoState.Icon.Tinted + ) { val lastActionIconIndex = actions.indexOfLast { it == TopAppBarDemoState.Action.Icon } if (lastActionIconIndex == index && lastActionIconBadge != TopAppBarDemoState.ActionIconBadge.None) { constructorCallArgument("badge") { diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoState.kt b/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoState.kt index c4cf398a7d..2aa9fa6e2a 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoState.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/topappbar/TopAppBarDemoState.kt @@ -30,6 +30,7 @@ fun rememberTopAppBarDemoState( title: String = stringResource(id = R.string.app_components_topAppBar_title_label), actionCount: Int = 2, lastActionIconBadge: TopAppBarDemoState.ActionIconBadge = TopAppBarDemoState.ActionIconBadge.None, + lastActionIcon: TopAppBarDemoState.Icon = TopAppBarDemoState.Icon.Tinted, actionAvatar: TopAppBarDemoState.ActionAvatar = TopAppBarDemoState.ActionAvatar.Image, actionAvatarMonogram: Char = 'A' ) = rememberSaveable( @@ -39,11 +40,12 @@ fun rememberTopAppBarDemoState( title, actionCount, lastActionIconBadge, + lastActionIcon, actionAvatar, actionAvatarMonogram, saver = TopAppBarDemoState.Saver ) { - TopAppBarDemoState(size, centerAligned, navigationIcon, title, actionCount, lastActionIconBadge, actionAvatar, actionAvatarMonogram) + TopAppBarDemoState(size, centerAligned, navigationIcon, title, actionCount, lastActionIconBadge, lastActionIcon, actionAvatar, actionAvatarMonogram) } class TopAppBarDemoState( @@ -53,6 +55,7 @@ class TopAppBarDemoState( title: String, actionCount: Int, lastActionIconBadge: ActionIconBadge, + lastActionIcon: Icon, actionAvatar: ActionAvatar, actionAvatarMonogram: Char ) { @@ -72,6 +75,7 @@ class TopAppBarDemoState( title, actionCount, lastActionIconBadge, + lastActionIcon, actionAvatar, actionAvatarMonogram ) @@ -85,8 +89,9 @@ class TopAppBarDemoState( list[3] as String, list[4] as Int, list[5] as ActionIconBadge, - list[6] as ActionAvatar, - list[7] as Char + list[6] as Icon, + list[7] as ActionAvatar, + list[8] as Char ) } ) @@ -117,6 +122,8 @@ class TopAppBarDemoState( var lastActionIconBadge: ActionIconBadge by mutableStateOf(lastActionIconBadge) + var lastActionIcon: Icon by mutableStateOf(lastActionIcon) + var actionAvatar: ActionAvatar by mutableStateOf(actionAvatar) var actionAvatarMonogram: Char by mutableStateOf(actionAvatarMonogram) @@ -124,7 +131,7 @@ class TopAppBarDemoState( val centerAlignedSwitchEnabled: Boolean get() = size == Size.Small - val lastActionIconBadgeFilterChipsEnabled: Boolean + val lastActionIconOptionsEnabled: Boolean get() = actions.contains(Action.Icon) val actionAvatarFilterChipsEnabled: Boolean @@ -162,4 +169,9 @@ class TopAppBarDemoState( Icon, Avatar } + + enum class Icon(@StringRes val labelRes: Int) { + Tinted(R.string.app_components_common_tintedIcon_tech), + Untinted(R.string.app_components_common_untintedIcon_tech) + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a0b764c122..17059d04e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -409,6 +409,7 @@ Title Action count Last action icon badge + Last action icon Action avatar Monogram Action avatar monogram diff --git a/core-test/src/main/java/com/orange/ouds/core/test/OudsTopAppBarTest.kt b/core-test/src/main/java/com/orange/ouds/core/test/OudsTopAppBarTest.kt index 149cc6489d..d952c7defb 100644 --- a/core-test/src/main/java/com/orange/ouds/core/test/OudsTopAppBarTest.kt +++ b/core-test/src/main/java/com/orange/ouds/core/test/OudsTopAppBarTest.kt @@ -19,7 +19,7 @@ import org.junit.runners.Parameterized @RunWith(Enclosed::class) -internal class OudsTopAppBarTest() { +internal class OudsTopAppBarTest { @RunWith(Parameterized::class) class Default(parameter: Any) : OudsComponentSnapshotTest( @@ -76,4 +76,10 @@ internal class OudsTopAppBarTest() { internal fun data() = OudsPreviewableComponent.TopAppBar.Large.parameters } } + + class WithUntintedIcon : OudsComponentSnapshotTest( + OudsPreviewableComponent.TopAppBar.WithUntintedIcon, + parameter = null, + OudsComponentTestSuite.theme + ) } diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsTopAppBar.kt b/core/src/main/java/com/orange/ouds/core/component/OudsTopAppBar.kt index 2a63411972..80933e53f3 100644 --- a/core/src/main/java/com/orange/ouds/core/component/OudsTopAppBar.kt +++ b/core/src/main/java/com/orange/ouds/core/component/OudsTopAppBar.kt @@ -59,6 +59,7 @@ import com.orange.ouds.core.utilities.CheckerboardPainter import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.core.utilities.OudsPreviewLightDark import com.orange.ouds.core.utilities.getPreviewTheme +import com.orange.ouds.core.utilities.rememberRainbowHeartPainter import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.theme.OudsThemeContract @@ -104,6 +105,8 @@ import com.orange.ouds.theme.OudsThemeContract * scrolls. See [TopAppBarScrollBehavior.nestedScrollConnection]. * * @sample com.orange.ouds.core.component.samples.OudsTopAppBarSample + * + * @sample com.orange.ouds.core.component.samples.OudsTopAppBarWithUntintedIconSample */ @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -177,6 +180,8 @@ fun OudsTopAppBar( * scrolls. See [TopAppBarScrollBehavior.nestedScrollConnection]. * * @sample com.orange.ouds.core.component.samples.OudsCenterAlignedTopAppBarSample + * + * @sample com.orange.ouds.core.component.samples.OudsTopAppBarWithUntintedIconSample */ @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -260,6 +265,8 @@ fun OudsCenterAlignedTopAppBar( * [collapsedHeight] * * @sample com.orange.ouds.core.component.samples.OudsMediumTopAppBarSample + * + * @sample com.orange.ouds.core.component.samples.OudsTopAppBarWithUntintedIconSample */ @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -345,6 +352,8 @@ fun OudsMediumTopAppBar( * [collapsedHeight] * * @sample com.orange.ouds.core.component.samples.OudsLargeTopAppBarSample + * + * @sample com.orange.ouds.core.component.samples.OudsTopAppBarWithUntintedIconSample */ @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -515,6 +524,7 @@ sealed interface OudsTopAppBarAction : OudsPolymorphicComponentContent { graphicsObject: Any, contentDescription: String, badge: OudsTopAppBarActionBadge?, + override val tinted: Boolean, onClick: () -> Unit ) : OudsTopAppBarAction, OudsComponentIcon(Nothing::class.java, { graphicsObject }, { contentDescription }, onClick) { @@ -535,14 +545,19 @@ sealed interface OudsTopAppBarAction : OudsPolymorphicComponentContent { * @param painter Painter of the icon. * @param contentDescription The content description associated with this [OudsTopAppBarAction.Icon]. * @param badge Optional badge displayed on the icon. + * @param tinted Controls whether the icon should be tinted with the theme color. Defaults to `true`. + * When set to `false`, the icon is displayed with its original colors (e.g., for multi-color icons). + * Note that untinted icons must ensure sufficient contrast with the background for accessibility reasons. * @param onClick Callback invoked when the icon is clicked. */ + @JvmOverloads constructor( painter: Painter, contentDescription: String, badge: OudsTopAppBarActionBadge? = null, + tinted: Boolean = true, onClick: () -> Unit - ) : this(painter as Any, contentDescription, badge, onClick) + ) : this(painter as Any, contentDescription, badge, tinted, onClick) /** * Creates an instance of [OudsTopAppBarAction.Icon]. @@ -550,14 +565,19 @@ sealed interface OudsTopAppBarAction : OudsPolymorphicComponentContent { * @param imageVector Image vector of the icon. * @param contentDescription The content description associated with this [OudsTopAppBarAction.Icon]. * @param badge Optional badge displayed on the icon. + * @param tinted Controls whether the icon should be tinted with the theme color. Defaults to `true`. + * When set to `false`, the icon is displayed with its original colors (e.g., for multi-color icons). + * Note that untinted icons must ensure sufficient contrast with the background for accessibility reasons. * @param onClick Callback invoked when the icon is clicked. */ + @JvmOverloads constructor( imageVector: ImageVector, contentDescription: String, badge: OudsTopAppBarActionBadge? = null, + tinted: Boolean = true, onClick: () -> Unit - ) : this(imageVector as Any, contentDescription, badge, onClick) + ) : this(imageVector as Any, contentDescription, badge, tinted, onClick) /** * Creates an instance of [OudsTopAppBarAction.Icon]. @@ -565,14 +585,19 @@ sealed interface OudsTopAppBarAction : OudsPolymorphicComponentContent { * @param bitmap Image bitmap of the icon. * @param contentDescription The content description associated with this [OudsTopAppBarAction.Icon]. * @param badge Optional badge displayed on the icon. + * @param tinted Controls whether the icon should be tinted with the theme color. Defaults to `true`. + * When set to `false`, the icon is displayed with its original colors (e.g., for multi-color icons). + * Note that untinted icons must ensure sufficient contrast with the background for accessibility reasons. * @param onClick Callback invoked when the icon is clicked. */ + @JvmOverloads constructor( bitmap: ImageBitmap, contentDescription: String, badge: OudsTopAppBarActionBadge? = null, + tinted: Boolean = true, onClick: () -> Unit - ) : this(bitmap as Any, contentDescription, badge, onClick) + ) : this(bitmap as Any, contentDescription, badge, tinted, onClick) } /** @@ -769,13 +794,28 @@ internal fun PreviewOudsLargeTopAppBar( } } +@OudsPreview +@Composable +@Suppress("PreviewShouldNotBeCalledRecursively") +private fun PreviewOudsTopAppBarWithUntintedIcon() = PreviewOudsTopAppBarWithUntintedIcon(getPreviewTheme()) + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +internal fun PreviewOudsTopAppBarWithUntintedIcon(theme: OudsThemeContract) = OudsPreview(theme = theme) { + OudsTopAppBar( + title = "Title", + navigationIcon = OudsTopAppBarNavigationIcon.Back(onClick = {}), + actions = listOf(OudsTopAppBarAction.Icon(painter = rememberRainbowHeartPainter(), contentDescription = "", tinted = false, onClick = {})) + ) +} + internal data class OudsTopAppBarPreviewParameter( val title: String = "Title", val navigationIcon: OudsTopAppBarNavigationIcon? = null, val actions: List = emptyList() ) -internal class OudsTopAppBarPreviewParameterProvider() : BasicPreviewParameterProvider(*previewParameterValues.toTypedArray()) +internal class OudsTopAppBarPreviewParameterProvider : BasicPreviewParameterProvider(*previewParameterValues.toTypedArray()) private val previewParameterValues: List get() = listOf( diff --git a/core/src/main/java/com/orange/ouds/core/component/samples/OudsTopAppBarSamples.kt b/core/src/main/java/com/orange/ouds/core/component/samples/OudsTopAppBarSamples.kt index 8179de9c2f..dd5f96c710 100644 --- a/core/src/main/java/com/orange/ouds/core/component/samples/OudsTopAppBarSamples.kt +++ b/core/src/main/java/com/orange/ouds/core/component/samples/OudsTopAppBarSamples.kt @@ -25,6 +25,7 @@ import com.orange.ouds.core.component.OudsTopAppBar import com.orange.ouds.core.component.OudsTopAppBarAction import com.orange.ouds.core.component.OudsTopAppBarNavigationIcon import com.orange.ouds.core.utilities.OudsPreview +import com.orange.ouds.core.utilities.rememberRainbowHeartPainter @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -78,6 +79,23 @@ internal fun OudsLargeTopAppBarSample() { ) } +@OptIn(ExperimentalMaterial3Api::class) +@Composable +internal fun OudsTopAppBarWithUntintedIconSample() { + OudsTopAppBar( + title = "Title", + navigationIcon = OudsTopAppBarNavigationIcon.Back {}, + actions = listOf( + OudsTopAppBarAction.Icon( + painter = rememberRainbowHeartPainter(), + contentDescription = "", + tinted = false, + onClick = {} + ) + ) + ) +} + @PreviewLightDark @Composable private fun PreviewOudsTopAppBarSample() = OudsPreview { @@ -101,3 +119,9 @@ private fun PreviewOudsMediumTopAppBarSample() = OudsPreview { private fun PreviewOudsLargeTopAppBarSample() = OudsPreview { OudsLargeTopAppBarSample() } + +@PreviewLightDark +@Composable +private fun PreviewOudsTopAppBarWithUntintedIconSample() = OudsPreview { + OudsTopAppBarWithUntintedIconSample() +} diff --git a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt index 661f6c488e..2a07fff1eb 100644 --- a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt +++ b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt @@ -202,6 +202,7 @@ import com.orange.ouds.core.component.PreviewOudsTextInputWithRichText import com.orange.ouds.core.component.PreviewOudsTextInputWithRoundedCorners import com.orange.ouds.core.component.PreviewOudsTextInputWithUntintedLeadingIcon import com.orange.ouds.core.component.PreviewOudsTopAppBar +import com.orange.ouds.core.component.PreviewOudsTopAppBarWithUntintedIcon import com.orange.ouds.core.theme.WindowWidthSizeClass import com.orange.ouds.foundation.InternalOudsApi import com.orange.ouds.theme.OudsThemeContract @@ -254,6 +255,7 @@ interface OudsPreviewableComponent { } object WithUntintedIcon : OudsPreviewableComponent { + override val parameters: List = emptyList() @Composable @@ -984,6 +986,7 @@ interface OudsPreviewableComponent { } object WithUntintedIcon : OudsPreviewableComponent { + override val parameters: List = emptyList() @Composable @@ -1855,5 +1858,17 @@ interface OudsPreviewableComponent { ) } } + + object WithUntintedIcon : OudsPreviewableComponent { + + override val parameters: List = emptyList() + + @Composable + override fun Preview(theme: OudsThemeContract, darkThemeEnabled: Boolean, highContrastModeEnabled: Boolean, parameter: Any?) { + PreviewOudsTopAppBarWithUntintedIcon(theme = theme) + } + + override fun isPreviewAvailable(darkThemeEnabled: Boolean, highContrastModeEnabled: Boolean) = !darkThemeEnabled && !highContrastModeEnabled + } } } diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png new file mode 100644 index 0000000000000000000000000000000000000000..45216f839677a0b5b887e1376a71cd58b0f15f6d GIT binary patch literal 5952 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 literal 0 HcmV?d00001 diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png new file mode 100644 index 0000000000000000000000000000000000000000..c70235c9b9baeb992fe181c4466a23d190c51d21 GIT binary patch literal 6775 zcmd^EXIN9&o6jH)gD8$7AP`_wnqnFHMVf^wZ9oNSG7?3KKp^y%0S4(|=zOW`oi3oe25r}zeJCmxh6+8l2_E#rFl=PSK1 z{&YbXJak}iIy1K+7lm%hUD*CqX4k+0M0j?2H~Bhv z!Z>-^W7q*OT%odma`Hy8A3wp_BL^24{%HQ;f13CO`CnFipZNCT_gDTg@%>BxZQ}p+ zr+WiQ>Z?ZTj8?t}kO*7-)HhA*{Wgrz zZ}y1R8Ef@afuePzxaBqfvlr|90&RC22Fa|!0-Q`x1WA{=HF4gqUeUVJ$;|s^K z-L4Y%r1w{cPHx;n!H>9|DRfMvLQnilh2hqLZAS=J8nOZ1la-)+Z8l^B1z$gv0#=Hy0S^syrCcxNFw{M;BfrXIIj@VG6EmR8}= z*{v++-4jXn8!I5YwkXN1G$nC`qWynVqL`fW6erQSKnnV_X^QlAQGjB#Hy%$A zQPG_J=yhDn@nhChqstYlzNzV@O}V35%s1@p(AP>gE)4{|g?J%sg4ZT}7|wYn z$3h6=j5`g{(uA81;k3W~kcTrv?yY@nR19oPH$r+Rmc`MdtIJuM)`USVM|T@hp@3!G zls0tSPUidkFWrK1(vZAvTMVKrk17KWN~um^tI2&^{HU#J!2N&!(o^PwpS>dcNN@6`9;XuQy~H8@rhI9xWcU zKX6ua4@Ha)73DQTrVg~=9uA?~q6~M5Tnl#-Mgv$ffg`&Ch6qZ%LDJ@iJ*{**BTcP^ z>}#+L?IsYkOCChzk3GGfe|O{W;yl&H5pE1xoONR@Cy!64i_&Vduo_DcBZRtk2O+Mj ztGHW@1dcbFt3ewfI+B^x+J-Nwvpx=i_eZMrsno9t!b-2+sq`33K2h^4Lows4Tq%Xw zPSA-&jg32<74!idA~J9FcbvmmV*n$;BN)M2$PS!;DR=MPpYL~q4g!oR&Mz!x788n2Vq76NE}AqMuwZSXauqH#qvf6ov0fL4hhJiBV6D;etS5%9VX+%ok&%%&hql=KydTRx%$#MXH2wkn1s4B@uScibU5}ZSR`<>z4eLTQI_Rz zhgNv7<934uzU*N1ukCnovNzBrf%Pi3+4IlCBFg76TKijvhzS?%>RU0QYS|Bt`~**v z{I;!;hf%Py=9XJgJ~t*YP71nAA8%ohyIG~ZsF_DrCkWm9>-*q@($Ls>jTW-Q&g>IH z0HWaTLd>v0+E5F*!Bdwx_acVjw93G3%{}1Y;@a%JY1-yV6t(

p7KXDX?dWes~ti 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 literal 0 HcmV?d00001 diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsTopAppBarTest$WithUntintedIcon_takeLightThemeSnapshot.png new file mode 100644 index 0000000000000000000000000000000000000000..e3393442ce7a7c3b015e403fc70e689ef29f9620 GIT binary patch literal 6747 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 EADuvL!T?~YraM8M3)|HYa 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 literal 0 HcmV?d00001