commit 844d36b47db1a5c2ead2b8842545e5f5e88a9cb3 parent 25d57d1b70cc2d44f83c20d6baa0040702209719 Author: John Oberhauser <j.git-global@obez.io> Date: Fri, 9 Jan 2026 19:33:48 +0000 Bug 2009058 - Part 2: Refactoring compose previews to use @PreviewParameter for private mode themed previews r=android-reviewers,007 Differential Revision: https://phabricator.services.mozilla.com/D278387 Diffstat:
10 files changed, 94 insertions(+), 208 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/CustomTabMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/CustomTabMenu.kt @@ -30,7 +30,7 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTag import androidx.compose.ui.semantics.testTagsAsResourceId import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import mozilla.components.browser.state.state.CustomTabMenuItem import mozilla.components.feature.addons.Addon @@ -41,6 +41,7 @@ import org.mozilla.fenix.components.menu.MenuDialogTestTag.DESKTOP_SITE_ON import org.mozilla.fenix.components.menu.store.WebExtensionMenuItem import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR /** @@ -306,10 +307,12 @@ private fun PoweredByFirefoxItem(modifier: Modifier = Modifier) { } } -@PreviewLightDark +@Preview @Composable -private fun CustomTabMenuPreview() { - FirefoxTheme { +private fun CustomTabMenuPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Column( modifier = Modifier .background(color = MaterialTheme.colorScheme.surface) @@ -350,8 +353,10 @@ private fun CustomTabMenuPreview() { @Preview @Composable -private fun CustomTabMenuPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +private fun CustomTabMenuDisabledButtonsPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Column( modifier = Modifier .background(color = MaterialTheme.colorScheme.surface) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MenuBanner.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MenuBanner.kt @@ -31,13 +31,14 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import mozilla.components.compose.base.theme.surfaceDimVariant import org.mozilla.fenix.R import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR private val ROUNDED_CORNER_SHAPE = RoundedCornerShape(28.dp) @@ -127,24 +128,12 @@ fun MenuBanner( } } -@PreviewLightDark -@Composable -private fun MenuBannerPreview() { - FirefoxTheme { - MenuBanner( - onDismiss = {}, - onClick = {}, - modifier = Modifier - .background(color = MaterialTheme.colorScheme.surface) - .padding(all = FirefoxTheme.layout.space.static200), - ) - } -} - @Preview @Composable -private fun MenuBannerPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +private fun MenuBannerPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { MenuBanner( onDismiss = {}, onClick = {}, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MenuNavigation.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MenuNavigation.kt @@ -33,12 +33,12 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.style.Hyphens import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR @Suppress("LongParameterList") @@ -186,10 +186,12 @@ private fun getIconTint(state: MenuItemState): Color { } } -@PreviewLightDark +@Preview @Composable -private fun MenuNavigationPreview() { - FirefoxTheme { +private fun MenuNavigationPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { MenuNavigation( isSiteLoading = false, isExtensionsExpanded = false, @@ -203,10 +205,12 @@ private fun MenuNavigationPreview() { } } -@PreviewLightDark +@Preview @Composable -private fun MenuNavigationExpandedPreview() { - FirefoxTheme { +private fun MenuNavigationExpandedPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { MenuNavigation( isSiteLoading = false, isExtensionsExpanded = true, @@ -222,12 +226,12 @@ private fun MenuNavigationExpandedPreview() { @Preview @Composable -private fun MenuNavigationPrivatePreview( - @PreviewParameter(SiteLoadingPreviewParameterProvider::class) isSiteLoading: Boolean, +private fun MenuNavigationSiteLoadingPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, ) { - FirefoxTheme(theme = Theme.Private) { + FirefoxTheme(theme) { MenuNavigation( - isSiteLoading = isSiteLoading, + isSiteLoading = true, isExtensionsExpanded = false, isMoreMenuExpanded = false, onBackButtonClick = {}, @@ -241,12 +245,12 @@ private fun MenuNavigationPrivatePreview( @Preview @Composable -private fun MenuNavigationExpandedPrivatePreview( - @PreviewParameter(SiteLoadingPreviewParameterProvider::class) isSiteLoading: Boolean, +private fun MenuNavigationExpandedSiteLoadingPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, ) { - FirefoxTheme(theme = Theme.Private) { + FirefoxTheme(theme) { MenuNavigation( - isSiteLoading = isSiteLoading, + isSiteLoading = true, isExtensionsExpanded = true, isMoreMenuExpanded = false, onBackButtonClick = {}, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MoreSettingsSubmenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MoreSettingsSubmenu.kt @@ -14,12 +14,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.components.menu.store.TranslationInfo import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR @Suppress("LongParameterList", "CognitiveComplexMethod") @@ -178,10 +179,12 @@ private fun ShortcutsMenuItem( ) } -@PreviewLightDark +@Preview @Composable -private fun MoreSettingsSubmenuPreview() { - FirefoxTheme { +private fun MoreSettingsSubmenuPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Column( modifier = Modifier .background(color = MaterialTheme.colorScheme.surface) @@ -222,8 +225,10 @@ private fun MoreSettingsSubmenuPreview() { @Preview @Composable -private fun MoreSettingsSubmenuPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +private fun MoreSettingsSubmenuDisabledOpenPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Column( modifier = Modifier .background(color = MaterialTheme.colorScheme.surface) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/header/MozillaAccountMenuItem.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/header/MozillaAccountMenuItem.kt @@ -37,7 +37,7 @@ import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.role import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import mozilla.components.compose.base.theme.surfaceDimVariant import mozilla.components.service.fxa.manager.AccountState @@ -50,6 +50,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.compose.Image import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR private val BUTTON_HEIGHT = 56.dp @@ -271,18 +272,12 @@ private fun MozillaAccountMenuItemPreviewContent() { } } -@PreviewLightDark -@Composable -private fun MozillaAccountMenuItemPreview() { - FirefoxTheme { - MozillaAccountMenuItemPreviewContent() - } -} - @Preview @Composable -private fun MozillaAccountMenuItemPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +private fun MozillaAccountMenuItemPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { MozillaAccountMenuItemPreviewContent() } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/header/SubmenuHeader.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/header/SubmenuHeader.kt @@ -27,10 +27,11 @@ import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.heading import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR @Composable @@ -72,26 +73,12 @@ internal fun SubmenuHeader( } } -@PreviewLightDark -@Composable -private fun SubmenuHeaderPreview() { - FirefoxTheme { - Column( - modifier = Modifier - .background(color = MaterialTheme.colorScheme.surface), - ) { - SubmenuHeader( - header = "sub-menu header", - onClick = {}, - ) - } - } -} - @Preview @Composable -private fun SubmenuMenuHeaderPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +private fun SubmenuHeaderPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Column( modifier = Modifier .background(color = MaterialTheme.colorScheme.surface), diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/DismissibleItemBackground.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/DismissibleItemBackground.kt @@ -22,10 +22,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Shape import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR /** @@ -103,18 +104,12 @@ private fun DismissibleItemBackgroundPreviewContent() { } } -@Composable -@PreviewLightDark -private fun DismissedTabBackgroundPreview() { - FirefoxTheme { - DismissibleItemBackgroundPreviewContent() - } -} - -@Composable @Preview -private fun DismissedTabBackgroundPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +@Composable +private fun DismissedTabBackgroundPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { DismissibleItemBackgroundPreviewContent() } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/Favicon.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/Favicon.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import mozilla.components.browser.icons.IconRequest @@ -30,6 +30,7 @@ import mozilla.components.compose.base.utils.inComposePreview import org.mozilla.fenix.components.components import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider internal val FAVICON_ROUNDED_CORNER_SHAPE = RoundedCornerShape(2.dp) @@ -176,24 +177,12 @@ private fun FaviconPlaceholder( ) } -@Composable -@PreviewLightDark -private fun FaviconPreview() { - FirefoxTheme { - Favicon( - url = "www.mozilla.com", - size = 64.dp, - modifier = Modifier - .background(MaterialTheme.colorScheme.surfaceContainerLowest) - .padding(all = FirefoxTheme.layout.space.static200), - ) - } -} - -@Composable @Preview -private fun FaviconPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +@Composable +private fun FaviconPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Favicon( url = "www.mozilla.com", size = 64.dp, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/InfoCardContainer.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/InfoCardContainer.kt @@ -37,13 +37,14 @@ import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.heading import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.shopping.ui.ext.headingResource import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import mozilla.components.ui.icons.R as iconsR private val cardShape = RoundedCornerShape(8.dp) @@ -158,45 +159,12 @@ fun InfoCardContainer( } } -@PreviewLightDark -@Composable -private fun InfoCardContainerPreview() { - FirefoxTheme { - Surface { - Column(modifier = Modifier.padding(16.dp)) { - var isExpanded by remember { mutableStateOf(true) } - - InfoCardContainer( - modifier = Modifier.fillMaxWidth(), - ) { - Text( - text = "Info Check Card Content", - style = FirefoxTheme.typography.headline8, - ) - } - - Spacer(modifier = Modifier.height(16.dp)) - - ExpandableInfoCardContainer( - title = "Info Expandable Card", - modifier = Modifier.fillMaxWidth(), - isExpanded = isExpanded, - onExpandToggleClick = { isExpanded = !isExpanded }, - ) { - Text( - text = "content", - style = FirefoxTheme.typography.body2, - ) - } - } - } - } -} - @Preview @Composable -private fun InfoCardContainerPrivatePreview() { - FirefoxTheme(theme = Theme.Private) { +private fun InfoCardContainerPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Surface { Column(modifier = Modifier.padding(16.dp)) { var isExpanded by remember { mutableStateOf(true) } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/MessageCard.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/MessageCard.kt @@ -13,7 +13,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewLightDark +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import mozilla.components.compose.base.Banner import mozilla.components.compose.base.BannerColors @@ -22,6 +22,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.home.fake.FakeHomepagePreview import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.Theme +import org.mozilla.fenix.theme.ThemeProvider import org.mozilla.fenix.wallpapers.WallpaperState /** @@ -60,10 +61,12 @@ fun MessageCard( } } +@Preview @Composable -@PreviewLightDark -private fun MessageCardPreview() { - FirefoxTheme { +private fun MessageCardPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Surface { MessageCard( messageCardState = FakeHomepagePreview.messageCardState(), @@ -75,27 +78,12 @@ private fun MessageCardPreview() { } } -@Composable @Preview -private fun MessageCardPrivatePreview() { - FirefoxTheme( - theme = Theme.Private, - ) { - Surface { - MessageCard( - messageCardState = FakeHomepagePreview.messageCardState(), - modifier = Modifier.padding(all = 16.dp), - onClick = {}, - onCloseButtonClick = {}, - ) - } - } -} - @Composable -@PreviewLightDark -private fun MessageCardWithoutTitlePreview() { - FirefoxTheme { +private fun MessageCardWithoutTitlePreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Surface { MessageCard( messageCardState = MessageCardState( @@ -110,51 +98,12 @@ private fun MessageCardWithoutTitlePreview() { } } -@Composable @Preview -private fun MessageCardWithoutTitlePrivatePreview() { - FirefoxTheme( - theme = Theme.Private, - ) { - Surface { - MessageCard( - messageCardState = MessageCardState( - messageText = stringResource(id = R.string.default_browser_experiment_card_text), - bannerColors = BannerColors.bannerColors(), - ), - modifier = Modifier.padding(all = 16.dp), - onClick = {}, - onCloseButtonClick = {}, - ) - } - } -} - -@Composable -@PreviewLightDark -private fun MessageCardWithButtonLabelPreview() { - FirefoxTheme { - Surface { - MessageCard( - messageCardState = MessageCardState( - messageText = stringResource(id = R.string.default_browser_experiment_card_text), - titleText = stringResource(id = R.string.default_browser_experiment_card_title), - buttonText = stringResource(id = R.string.preferences_set_as_default_browser), - bannerColors = BannerColors.bannerColors(), - ), - onClick = {}, - onCloseButtonClick = {}, - ) - } - } -} - @Composable -@Preview -private fun MessageCardWithButtonLabelPrivatePreview() { - FirefoxTheme( - theme = Theme.Private, - ) { +private fun MessageCardWithButtonLabelPreview( + @PreviewParameter(ThemeProvider::class) theme: Theme, +) { + FirefoxTheme(theme) { Surface { MessageCard( messageCardState = MessageCardState(