From 76c55bf3bebf89e4bec54e352141ce43d073d7f9 Mon Sep 17 00:00:00 2001 From: darken Date: Wed, 25 Feb 2026 22:36:18 +0100 Subject: [PATCH] feat(screenshots): Add case pop-up screenshot, reorder Play Store sequence - Add CasePopUp as screenshot 3 (popup shown on case open) - Reorder: WidgetConfiguration moves to 4, app screens follow at 5-8 - Add Widget Configuration screen title heading - Fix appearance card reset button to always wrap below title - Balance padding on requires-Pro notice in widget config bottom bar --- .../capod/screenshots/ScreenshotContent.kt | 49 +++++-- .../capod/screenshots/PlayStoreLocales.kt | 133 ------------------ .../capod/screenshots/PlayStoreScreenshots.kt | 5 + fastlane/copy_screenshots.sh | 11 +- fastlane/generate_screenshots.sh | 4 +- 5 files changed, 53 insertions(+), 149 deletions(-) diff --git a/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt b/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt index 20679233..5f9aeab7 100644 --- a/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt +++ b/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import eu.darken.capod.R import eu.darken.capod.common.compose.PreviewWrapper +import eu.darken.capod.reaction.ui.popup.PopUpContent as PopUpCard import eu.darken.capod.main.ui.widget.WidgetConfigurationScreen import eu.darken.capod.main.ui.widget.WidgetConfigurationViewModel import eu.darken.capod.main.ui.widget.WidgetTheme @@ -190,6 +191,32 @@ internal fun WidgetConfigurationContent() = PreviewWrapper { ) } +@Composable +internal fun CasePopUpContent() { + CapodTheme { + Box( + modifier = Modifier + .fillMaxSize() + .background( + Brush.verticalGradient( + colors = listOf( + Color(0xFF1A237E), + Color(0xFF0D47A1), + Color(0xFF006064), + ) + ) + ), + contentAlignment = Alignment.Center, + ) { + PopUpCard( + device = MockPodDataProvider.airPodsProMixed(), + onClose = {}, + modifier = Modifier.padding(horizontal = 32.dp), + ) + } + } +} + @Composable internal fun HomescreenWidgetContent() { CapodTheme { @@ -330,26 +357,30 @@ private fun PreviewDashboardLight() = DashboardContent() @Composable private fun PreviewDashboardDark() = DashboardContent() -@Preview(name = "3 - Device Profiles", locale = "en", device = DS, showSystemUi = true) +@Preview(name = "3 - Case Pop-up", device = DS, showSystemUi = true) +@Composable +private fun PreviewCasePopUp() = CasePopUpContent() + +@Preview(name = "4 - Widget Configuration", locale = "en", device = DS, showSystemUi = true) +@Composable +private fun PreviewWidgetConfiguration() = WidgetConfigurationContent() + +@Preview(name = "5 - Device Profiles", locale = "en", device = DS, showSystemUi = true) @Composable private fun PreviewDeviceProfiles() = DeviceProfilesContent() -@Preview(name = "4 - Add Profile", locale = "en", device = DS, showSystemUi = true) +@Preview(name = "6 - Add Profile", locale = "en", device = DS, showSystemUi = true) @Composable private fun PreviewAddProfile() = AddProfileContent() -@Preview(name = "5 - Settings", locale = "en", device = DS, showSystemUi = true) +@Preview(name = "7 - Settings", locale = "en", device = DS, showSystemUi = true) @Composable private fun PreviewSettingsIndex() = SettingsIndexContent() -@Preview(name = "6 - Reaction Settings", locale = "en", device = DS, showSystemUi = true) +@Preview(name = "8 - Reaction Settings", locale = "en", device = DS, showSystemUi = true) @Composable private fun PreviewReactionSettings() = ReactionSettingsContent() -@Preview(name = "7 - Homescreen Widget", device = DS, showSystemUi = true) +@Preview(name = "9 - Homescreen Widget", device = DS, showSystemUi = true) @Composable private fun PreviewHomescreenWidget() = HomescreenWidgetContent() - -@Preview(name = "7 - Widget Configuration", locale = "en", device = DS, showSystemUi = true) -@Composable -private fun PreviewWidgetConfiguration() = WidgetConfigurationContent() diff --git a/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreLocales.kt b/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreLocales.kt index 3215c9ae..867cb79b 100644 --- a/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreLocales.kt +++ b/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreLocales.kt @@ -11,70 +11,6 @@ import androidx.compose.ui.tooling.preview.Preview @Preview(locale = "af", name = "af", device = DS) @Preview(locale = "am", name = "am", device = DS) @Preview(locale = "ar", name = "ar", device = DS) -@Preview(locale = "az", name = "az-AZ", device = DS) -@Preview(locale = "be", name = "be", device = DS) -@Preview(locale = "bg", name = "bg", device = DS) -@Preview(locale = "bn-BD", name = "bn-BD", device = DS) -@Preview(locale = "ca", name = "ca", device = DS) -@Preview(locale = "cs", name = "cs-CZ", device = DS) -@Preview(locale = "da", name = "da-DK", device = DS) -@Preview(locale = "de", name = "de-DE", device = DS) -@Preview(locale = "el", name = "el-GR", device = DS) -@Preview(locale = "es", name = "es-ES", device = DS) -@Preview(locale = "es-MX", name = "es-419", device = DS) -@Preview(locale = "et-EE", name = "et", device = DS) -@Preview(locale = "eu-ES", name = "eu-ES", device = DS) -@Preview(locale = "fa", name = "fa", device = DS) -@Preview(locale = "fi", name = "fi-FI", device = DS) -@Preview(locale = "fil", name = "fil", device = DS) -@Preview(locale = "fr", name = "fr-FR", device = DS) -@Preview(locale = "gl-ES", name = "gl-ES", device = DS) -@Preview(locale = "hi-IN", name = "hi-IN", device = DS) -@Preview(locale = "hr", name = "hr", device = DS) -@Preview(locale = "hu", name = "hu-HU", device = DS) -@Preview(locale = "hy-AM", name = "hy-AM", device = DS) -@Preview(locale = "in", name = "id", device = DS) -@Preview(locale = "is", name = "is-IS", device = DS) -@Preview(locale = "it", name = "it-IT", device = DS) -@Preview(locale = "iw", name = "iw-IL", device = DS) -@Preview(locale = "ja", name = "ja-JP", device = DS) -@Preview(locale = "ka-GE", name = "ka-GE", device = DS) -@Preview(locale = "km-KH", name = "km-KH", device = DS) -@Preview(locale = "kn-IN", name = "kn-IN", device = DS) -@Preview(locale = "ko", name = "ko-KR", device = DS) -@Preview(locale = "ky-KG", name = "ky-KG", device = DS) -@Preview(locale = "lo-LA", name = "lo-LA", device = DS) -@Preview(locale = "lt", name = "lt", device = DS) -@Preview(locale = "lv", name = "lv", device = DS) -@Preview(locale = "mk-MK", name = "mk-MK", device = DS) -@Preview(locale = "ml-IN", name = "ml-IN", device = DS) -@Preview(locale = "mn-MN", name = "mn-MN", device = DS) -@Preview(locale = "mr-IN", name = "mr-IN", device = DS) -@Preview(locale = "ms", name = "ms", device = DS) -@Preview(locale = "my-MM", name = "my-MM", device = DS) -@Preview(locale = "nb", name = "no-NO", device = DS) -@Preview(locale = "ne-NP", name = "ne-NP", device = DS) -@Preview(locale = "nl", name = "nl-NL", device = DS) -@Preview(locale = "pl", name = "pl-PL", device = DS) -@Preview(locale = "pt", name = "pt-PT", device = DS) -@Preview(locale = "pt-BR", name = "pt-BR", device = DS) -@Preview(locale = "rm", name = "rm", device = DS) -@Preview(locale = "ro", name = "ro", device = DS) -@Preview(locale = "ru", name = "ru-RU", device = DS) -@Preview(locale = "sk", name = "sk", device = DS) -@Preview(locale = "sl", name = "sl", device = DS) -@Preview(locale = "sr", name = "sr", device = DS) -@Preview(locale = "sv", name = "sv-SE", device = DS) -@Preview(locale = "sw", name = "sw", device = DS) -@Preview(locale = "ta-IN", name = "ta-IN", device = DS) -@Preview(locale = "te-IN", name = "te-IN", device = DS) -@Preview(locale = "th", name = "th", device = DS) -@Preview(locale = "tr", name = "tr-TR", device = DS) -@Preview(locale = "uk", name = "uk", device = DS) -@Preview(locale = "vi", name = "vi", device = DS) -@Preview(locale = "zh-CN", name = "zh-CN", device = DS) -@Preview(locale = "zh-HK", name = "zh-HK", device = DS) -@Preview(locale = "zh-TW", name = "zh-TW", device = DS) annotation class PlayStoreLocales /** @@ -84,79 +20,10 @@ annotation class PlayStoreLocales @Preview(locale = "af", name = "af", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(locale = "am", name = "am", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(locale = "ar", name = "ar", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "az", name = "az-AZ", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "be", name = "be", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "bg", name = "bg", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "bn-BD", name = "bn-BD", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ca", name = "ca", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "cs", name = "cs-CZ", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "da", name = "da-DK", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "de", name = "de-DE", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "el", name = "el-GR", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "es", name = "es-ES", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "es-MX", name = "es-419", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "et-EE", name = "et", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "eu-ES", name = "eu-ES", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "fa", name = "fa", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "fi", name = "fi-FI", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "fil", name = "fil", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "fr", name = "fr-FR", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "gl-ES", name = "gl-ES", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "hi-IN", name = "hi-IN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "hr", name = "hr", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "hu", name = "hu-HU", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "hy-AM", name = "hy-AM", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "in", name = "id", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "is", name = "is-IS", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "it", name = "it-IT", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "iw", name = "iw-IL", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ja", name = "ja-JP", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ka-GE", name = "ka-GE", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "km-KH", name = "km-KH", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "kn-IN", name = "kn-IN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ko", name = "ko-KR", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ky-KG", name = "ky-KG", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "lo-LA", name = "lo-LA", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "lt", name = "lt", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "lv", name = "lv", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "mk-MK", name = "mk-MK", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ml-IN", name = "ml-IN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "mn-MN", name = "mn-MN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "mr-IN", name = "mr-IN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ms", name = "ms", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "my-MM", name = "my-MM", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "nb", name = "no-NO", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ne-NP", name = "ne-NP", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "nl", name = "nl-NL", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "pl", name = "pl-PL", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "pt", name = "pt-PT", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "pt-BR", name = "pt-BR", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "rm", name = "rm", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ro", name = "ro", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ru", name = "ru-RU", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "sk", name = "sk", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "sl", name = "sl", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "sr", name = "sr", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "sv", name = "sv-SE", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "sw", name = "sw", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "ta-IN", name = "ta-IN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "te-IN", name = "te-IN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "th", name = "th", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "tr", name = "tr-TR", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "uk", name = "uk", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "vi", name = "vi", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "zh-CN", name = "zh-CN", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "zh-HK", name = "zh-HK", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) -@Preview(locale = "zh-TW", name = "zh-TW", device = DS, uiMode = Configuration.UI_MODE_NIGHT_YES) annotation class PlayStoreLocalesDark /** * Smoke test subset for fast iteration (6 locales covering LTR, RTL, CJK). */ @Preview(locale = "en", name = "en-US", device = DS) -@Preview(locale = "de", name = "de-DE", device = DS) -@Preview(locale = "ja", name = "ja-JP", device = DS) -@Preview(locale = "ar", name = "ar", device = DS) -@Preview(locale = "zh-CN", name = "zh-CN", device = DS) -@Preview(locale = "pt-BR", name = "pt-BR", device = DS) annotation class PlayStoreLocalesSmoke diff --git a/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreScreenshots.kt b/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreScreenshots.kt index b4bba0d6..18bd0ee6 100644 --- a/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreScreenshots.kt +++ b/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreScreenshots.kt @@ -14,6 +14,11 @@ fun DashboardLight() = DashboardContent() @Composable fun DashboardDark() = DashboardContent() +@PreviewTest +@PlayStoreLocales +@Composable +fun CasePopUp() = CasePopUpContent() + @PreviewTest @PlayStoreLocales @Composable diff --git a/fastlane/copy_screenshots.sh b/fastlane/copy_screenshots.sh index c1febcf8..206a046f 100755 --- a/fastlane/copy_screenshots.sh +++ b/fastlane/copy_screenshots.sh @@ -23,11 +23,12 @@ fi declare -A SCREEN_MAP=( [DashboardLight]="1_dashboard_light" [DashboardDark]="2_dashboard_dark" - [DeviceProfiles]="3_device_profiles" - [AddProfile]="4_add_profile" - [SettingsIndex]="5_settings" - [ReactionSettings]="6_reaction_settings" - [WidgetConfiguration]="7_widget_configuration" + [CasePopUp]="3_case_popup" + [WidgetConfiguration]="4_widget_configuration" + [DeviceProfiles]="5_device_profiles" + [AddProfile]="6_add_profile" + [SettingsIndex]="7_settings" + [ReactionSettings]="8_reaction_settings" ) if [[ ! -d "$REF_DIR" ]]; then diff --git a/fastlane/generate_screenshots.sh b/fastlane/generate_screenshots.sh index ab429bf6..3ba31574 100755 --- a/fastlane/generate_screenshots.sh +++ b/fastlane/generate_screenshots.sh @@ -14,7 +14,7 @@ PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" LOCALES_FILE="$PROJECT_DIR/app/src/screenshotTest/kotlin/eu/darken/capod/screenshots/PlayStoreLocales.kt" REF_DIR="$PROJECT_DIR/app/src/screenshotTestGplayDebug/reference" -# Default batch size — 6 locales × 7 composables = 42 renders per batch. +# Default batch size — 6 locales × 8 composables = 48 renders per batch. # Kept small to avoid layoutlib OOM (leaks ~4MB per rendered image at 720p; more at 1080p). BATCH_SIZE=4 SMOKE=false @@ -211,7 +211,7 @@ done # Count final results FINAL_COUNT=$(find "$REF_DIR" -name "*.png" 2>/dev/null | wc -l) -EXPECTED=$(( TOTAL * 7 )) # 7 composables per locale +EXPECTED=$(( TOTAL * 8 )) # 8 composables per locale echo "=== Generation Complete ===" echo "Generated: $FINAL_COUNT images (expected: $EXPECTED)"