From 073de3cf35ecec3406f842b2deff2b91b75220cf Mon Sep 17 00:00:00 2001 From: darken Date: Sun, 1 Mar 2026 22:42:48 +0100 Subject: [PATCH] feat(settings): Add pro gating for theme customization Gate theme mode, style, and color settings behind pro/upgrade status. Add Material Design 3 surface container color tokens to all color palettes. Move upgrade prompt string to main resources with generic wording. Disable theme preference items for non-pro users instead of late rejection. --- .../capod/common/theming/CapodColorsAmber.kt | 54 ++++++ .../capod/common/theming/CapodColorsBlue.kt | 54 ++++++ .../capod/common/theming/CapodColorsGreen.kt | 54 ++++++ .../darken/capod/common/theming/CapodTheme.kt | 16 +- .../common/theming/ThemeColorProvider.kt | 162 ++++++++++++++++++ .../darken/capod/main/core/GeneralSettings.kt | 31 ++-- .../main/core/GeneralSettingsExtensions.kt | 13 ++ .../eu/darken/capod/main/ui/MainActivity.kt | 2 + .../settings/general/GeneralSettingsScreen.kt | 23 ++- .../general/GeneralSettingsViewModel.kt | 40 ++++- .../ui/widget/WidgetConfigurationActivity.kt | 2 + .../capod/reaction/ui/popup/PopUpWindow.kt | 1 + app/src/main/res/values-af-rZA/strings.xml | 1 - app/src/main/res/values-am/strings.xml | 1 - app/src/main/res/values-ar/strings.xml | 1 - app/src/main/res/values-az/strings.xml | 1 - app/src/main/res/values-be/strings.xml | 1 - app/src/main/res/values-bg/strings.xml | 1 - app/src/main/res/values-bn-rBD/strings.xml | 1 - app/src/main/res/values-ca/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 1 - app/src/main/res/values-da/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-el/strings.xml | 1 - app/src/main/res/values-es-rAR/strings.xml | 1 - app/src/main/res/values-es-rMX/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-et-rEE/strings.xml | 1 - app/src/main/res/values-eu-rES/strings.xml | 1 - app/src/main/res/values-fa/strings.xml | 1 - app/src/main/res/values-fi/strings.xml | 1 - app/src/main/res/values-fil/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-gl-rES/strings.xml | 1 - app/src/main/res/values-hi-rIN/strings.xml | 1 - app/src/main/res/values-hr/strings.xml | 1 - app/src/main/res/values-hu/strings.xml | 1 - app/src/main/res/values-hy-rAM/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-is/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-iw/strings.xml | 1 - app/src/main/res/values-ja/strings.xml | 1 - app/src/main/res/values-ka-rGE/strings.xml | 1 - app/src/main/res/values-km-rKH/strings.xml | 1 - app/src/main/res/values-kmr-rTR/strings.xml | 1 - app/src/main/res/values-kn-rIN/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-ky-rKG/strings.xml | 1 - app/src/main/res/values-lo-rLA/strings.xml | 1 - app/src/main/res/values-lt/strings.xml | 1 - app/src/main/res/values-lv/strings.xml | 1 - app/src/main/res/values-mk-rMK/strings.xml | 1 - app/src/main/res/values-ml-rIN/strings.xml | 1 - app/src/main/res/values-mn-rMN/strings.xml | 1 - app/src/main/res/values-mr-rIN/strings.xml | 1 - app/src/main/res/values-ms/strings.xml | 1 - app/src/main/res/values-my-rMM/strings.xml | 1 - app/src/main/res/values-nb/strings.xml | 1 - app/src/main/res/values-ne-rNP/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt/strings.xml | 1 - app/src/main/res/values-rm/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sc-rIT/strings.xml | 1 - app/src/main/res/values-si-rLK/strings.xml | 1 - app/src/main/res/values-sk/strings.xml | 1 - app/src/main/res/values-sl/strings.xml | 1 - app/src/main/res/values-sq-rAL/strings.xml | 1 - app/src/main/res/values-sr/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-sw/strings.xml | 1 - app/src/main/res/values-ta-rIN/strings.xml | 1 - app/src/main/res/values-te-rIN/strings.xml | 1 - app/src/main/res/values-th/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values-ur-rIN/strings.xml | 1 - app/src/main/res/values-uz/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rHK/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values-zu/strings.xml | 1 - app/src/main/res/values/strings.xml | 2 +- 88 files changed, 419 insertions(+), 110 deletions(-) create mode 100644 app/src/main/java/eu/darken/capod/main/core/GeneralSettingsExtensions.kt diff --git a/app/src/main/java/eu/darken/capod/common/theming/CapodColorsAmber.kt b/app/src/main/java/eu/darken/capod/common/theming/CapodColorsAmber.kt index 1f25a08b..daa2f962 100644 --- a/app/src/main/java/eu/darken/capod/common/theming/CapodColorsAmber.kt +++ b/app/src/main/java/eu/darken/capod/common/theming/CapodColorsAmber.kt @@ -30,6 +30,15 @@ object CapodColorsAmber { val inverseSurfaceLight = Color(0xFF362F2B) val inverseOnSurfaceLight = Color(0xFFFBEEE8) val inversePrimaryLight = Color(0xFFFFB68E) + val outlineVariantLight = Color(0xFFD8C2BB) + val scrimLight = Color(0xFF000000) + val surfaceDimLight = Color(0xFFE4D7D4) + val surfaceBrightLight = Color(0xFFFFF8F6) + val surfaceContainerLowestLight = Color(0xFFFFFFFF) + val surfaceContainerLowLight = Color(0xFFFEF1ED) + val surfaceContainerLight = Color(0xFFF8EBE7) + val surfaceContainerHighLight = Color(0xFFF3E5E2) + val surfaceContainerHighestLight = Color(0xFFEDE0DC) // Dark val primaryDark = Color(0xFFFFB68E) @@ -58,6 +67,15 @@ object CapodColorsAmber { val inverseSurfaceDark = Color(0xFFECE0DA) val inverseOnSurfaceDark = Color(0xFF201A17) val inversePrimaryDark = Color(0xFF9D4300) + val outlineVariantDark = Color(0xFF53433E) + val scrimDark = Color(0xFF000000) + val surfaceDimDark = Color(0xFF181210) + val surfaceBrightDark = Color(0xFF3F3835) + val surfaceContainerLowestDark = Color(0xFF120D0B) + val surfaceContainerLowDark = Color(0xFF201A18) + val surfaceContainerDark = Color(0xFF251E1C) + val surfaceContainerHighDark = Color(0xFF2F2826) + val surfaceContainerHighestDark = Color(0xFF3B3331) // Light Medium Contrast val primaryLightMediumContrast = Color(0xFF6E2D00) @@ -86,6 +104,15 @@ object CapodColorsAmber { val inverseSurfaceLightMediumContrast = Color(0xFF362F2B) val inverseOnSurfaceLightMediumContrast = Color(0xFFFBEEE8) val inversePrimaryLightMediumContrast = Color(0xFFFFB68E) + val outlineVariantLightMediumContrast = Color(0xFFC9B4AD) + val scrimLightMediumContrast = Color(0xFF000000) + val surfaceDimLightMediumContrast = Color(0xFFE4D7D4) + val surfaceBrightLightMediumContrast = Color(0xFFFFF8F6) + val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF) + val surfaceContainerLowLightMediumContrast = Color(0xFFFEF1ED) + val surfaceContainerLightMediumContrast = Color(0xFFF8EBE7) + val surfaceContainerHighLightMediumContrast = Color(0xFFF3E5E2) + val surfaceContainerHighestLightMediumContrast = Color(0xFFEDE0DC) // Dark Medium Contrast val primaryDarkMediumContrast = Color(0xFFFFBC98) @@ -114,6 +141,15 @@ object CapodColorsAmber { val inverseSurfaceDarkMediumContrast = Color(0xFFECE0DA) val inverseOnSurfaceDarkMediumContrast = Color(0xFF201A17) val inversePrimaryDarkMediumContrast = Color(0xFF7A3300) + val outlineVariantDarkMediumContrast = Color(0xFF5F4F49) + val scrimDarkMediumContrast = Color(0xFF000000) + val surfaceDimDarkMediumContrast = Color(0xFF181210) + val surfaceBrightDarkMediumContrast = Color(0xFF3F3835) + val surfaceContainerLowestDarkMediumContrast = Color(0xFF120D0B) + val surfaceContainerLowDarkMediumContrast = Color(0xFF201A18) + val surfaceContainerDarkMediumContrast = Color(0xFF251E1C) + val surfaceContainerHighDarkMediumContrast = Color(0xFF2F2826) + val surfaceContainerHighestDarkMediumContrast = Color(0xFF3B3331) // Light High Contrast val primaryLightHighContrast = Color(0xFF3D1600) @@ -142,6 +178,15 @@ object CapodColorsAmber { val inverseSurfaceLightHighContrast = Color(0xFF362F2B) val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF) val inversePrimaryLightHighContrast = Color(0xFFFFE7DA) + val outlineVariantLightHighContrast = Color(0xFF786761) + val scrimLightHighContrast = Color(0xFF000000) + val surfaceDimLightHighContrast = Color(0xFFE4D7D4) + val surfaceBrightLightHighContrast = Color(0xFFFFF8F6) + val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF) + val surfaceContainerLowLightHighContrast = Color(0xFFFEF1ED) + val surfaceContainerLightHighContrast = Color(0xFFF8EBE7) + val surfaceContainerHighLightHighContrast = Color(0xFFF3E5E2) + val surfaceContainerHighestLightHighContrast = Color(0xFFEDE0DC) // Dark High Contrast val primaryDarkHighContrast = Color(0xFFFFFAF8) @@ -170,4 +215,13 @@ object CapodColorsAmber { val inverseSurfaceDarkHighContrast = Color(0xFFECE0DA) val inverseOnSurfaceDarkHighContrast = Color(0xFF000000) val inversePrimaryDarkHighContrast = Color(0xFF4C1D00) + val outlineVariantDarkHighContrast = Color(0xFF92807A) + val scrimDarkHighContrast = Color(0xFF000000) + val surfaceDimDarkHighContrast = Color(0xFF181210) + val surfaceBrightDarkHighContrast = Color(0xFF3F3835) + val surfaceContainerLowestDarkHighContrast = Color(0xFF120D0B) + val surfaceContainerLowDarkHighContrast = Color(0xFF201A18) + val surfaceContainerDarkHighContrast = Color(0xFF251E1C) + val surfaceContainerHighDarkHighContrast = Color(0xFF2F2826) + val surfaceContainerHighestDarkHighContrast = Color(0xFF3B3331) } diff --git a/app/src/main/java/eu/darken/capod/common/theming/CapodColorsBlue.kt b/app/src/main/java/eu/darken/capod/common/theming/CapodColorsBlue.kt index 131c05b4..d0e0f026 100644 --- a/app/src/main/java/eu/darken/capod/common/theming/CapodColorsBlue.kt +++ b/app/src/main/java/eu/darken/capod/common/theming/CapodColorsBlue.kt @@ -30,6 +30,15 @@ object CapodColorsBlue { val inverseSurfaceLight = Color(0xFF303033) val inverseOnSurfaceLight = Color(0xFFF2F0F5) val inversePrimaryLight = Color(0xFFB1C5FF) + val outlineVariantLight = Color(0xFFC5C6D0) + val scrimLight = Color(0xFF000000) + val surfaceDimLight = Color(0xFFDBD9DD) + val surfaceBrightLight = Color(0xFFFBF8FD) + val surfaceContainerLowestLight = Color(0xFFFFFFFF) + val surfaceContainerLowLight = Color(0xFFF5F3F7) + val surfaceContainerLight = Color(0xFFEFEDF1) + val surfaceContainerHighLight = Color(0xFFE9E7EC) + val surfaceContainerHighestLight = Color(0xFFE4E2E6) // Dark val primaryDark = Color(0xFF3F7AFF) @@ -58,6 +67,15 @@ object CapodColorsBlue { val inverseSurfaceDark = Color(0xFFE3E1E6) val inverseOnSurfaceDark = Color(0xFF1B1B1F) val inversePrimaryDark = Color(0xFF0054D9) + val outlineVariantDark = Color(0xFF45464F) + val scrimDark = Color(0xFF000000) + val surfaceDimDark = Color(0xFF131316) + val surfaceBrightDark = Color(0xFF39393C) + val surfaceContainerLowestDark = Color(0xFF0D0E11) + val surfaceContainerLowDark = Color(0xFF1B1B1F) + val surfaceContainerDark = Color(0xFF1F1F23) + val surfaceContainerHighDark = Color(0xFF292A2D) + val surfaceContainerHighestDark = Color(0xFF343438) // Light Medium Contrast val primaryLightMediumContrast = Color(0xFF003DA3) @@ -86,6 +104,15 @@ object CapodColorsBlue { val inverseSurfaceLightMediumContrast = Color(0xFF303033) val inverseOnSurfaceLightMediumContrast = Color(0xFFF2F0F5) val inversePrimaryLightMediumContrast = Color(0xFFB1C5FF) + val outlineVariantLightMediumContrast = Color(0xFFB7B8C2) + val scrimLightMediumContrast = Color(0xFF000000) + val surfaceDimLightMediumContrast = Color(0xFFDBD9DD) + val surfaceBrightLightMediumContrast = Color(0xFFFBF8FD) + val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF) + val surfaceContainerLowLightMediumContrast = Color(0xFFF5F3F7) + val surfaceContainerLightMediumContrast = Color(0xFFEFEDF1) + val surfaceContainerHighLightMediumContrast = Color(0xFFE9E7EC) + val surfaceContainerHighestLightMediumContrast = Color(0xFFE4E2E6) // Dark Medium Contrast val primaryDarkMediumContrast = Color(0xFF7FA3FF) @@ -114,6 +141,15 @@ object CapodColorsBlue { val inverseSurfaceDarkMediumContrast = Color(0xFFE3E1E6) val inverseOnSurfaceDarkMediumContrast = Color(0xFF1B1B1F) val inversePrimaryDarkMediumContrast = Color(0xFF003FB0) + val outlineVariantDarkMediumContrast = Color(0xFF50525A) + val scrimDarkMediumContrast = Color(0xFF000000) + val surfaceDimDarkMediumContrast = Color(0xFF131316) + val surfaceBrightDarkMediumContrast = Color(0xFF39393C) + val surfaceContainerLowestDarkMediumContrast = Color(0xFF0D0E11) + val surfaceContainerLowDarkMediumContrast = Color(0xFF1B1B1F) + val surfaceContainerDarkMediumContrast = Color(0xFF1F1F23) + val surfaceContainerHighDarkMediumContrast = Color(0xFF292A2D) + val surfaceContainerHighestDarkMediumContrast = Color(0xFF343438) // Light High Contrast val primaryLightHighContrast = Color(0xFF001F5C) @@ -142,6 +178,15 @@ object CapodColorsBlue { val inverseSurfaceLightHighContrast = Color(0xFF303033) val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF) val inversePrimaryLightHighContrast = Color(0xFFE2E8FF) + val outlineVariantLightHighContrast = Color(0xFF696A73) + val scrimLightHighContrast = Color(0xFF000000) + val surfaceDimLightHighContrast = Color(0xFFDBD9DD) + val surfaceBrightLightHighContrast = Color(0xFFFBF8FD) + val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF) + val surfaceContainerLowLightHighContrast = Color(0xFFF5F3F7) + val surfaceContainerLightHighContrast = Color(0xFFEFEDF1) + val surfaceContainerHighLightHighContrast = Color(0xFFE9E7EC) + val surfaceContainerHighestLightHighContrast = Color(0xFFE4E2E6) // Dark High Contrast val primaryDarkHighContrast = Color(0xFFFCFAFF) @@ -170,4 +215,13 @@ object CapodColorsBlue { val inverseSurfaceDarkHighContrast = Color(0xFFE3E1E6) val inverseOnSurfaceDarkHighContrast = Color(0xFF000000) val inversePrimaryDarkHighContrast = Color(0xFF002568) + val outlineVariantDarkHighContrast = Color(0xFF82838C) + val scrimDarkHighContrast = Color(0xFF000000) + val surfaceDimDarkHighContrast = Color(0xFF131316) + val surfaceBrightDarkHighContrast = Color(0xFF39393C) + val surfaceContainerLowestDarkHighContrast = Color(0xFF0D0E11) + val surfaceContainerLowDarkHighContrast = Color(0xFF1B1B1F) + val surfaceContainerDarkHighContrast = Color(0xFF1F1F23) + val surfaceContainerHighDarkHighContrast = Color(0xFF292A2D) + val surfaceContainerHighestDarkHighContrast = Color(0xFF343438) } diff --git a/app/src/main/java/eu/darken/capod/common/theming/CapodColorsGreen.kt b/app/src/main/java/eu/darken/capod/common/theming/CapodColorsGreen.kt index 4a2715a5..e5c0518e 100644 --- a/app/src/main/java/eu/darken/capod/common/theming/CapodColorsGreen.kt +++ b/app/src/main/java/eu/darken/capod/common/theming/CapodColorsGreen.kt @@ -30,6 +30,15 @@ object CapodColorsGreen { val inverseSurfaceLight = Color(0xFF2E312E) val inverseOnSurfaceLight = Color(0xFFF0F1EC) val inversePrimaryLight = Color(0xFF33E286) + val outlineVariantLight = Color(0xFFC1C9BF) + val scrimLight = Color(0xFF000000) + val surfaceDimLight = Color(0xFFD9DBD6) + val surfaceBrightLight = Color(0xFFF9FAF5) + val surfaceContainerLowestLight = Color(0xFFFFFFFF) + val surfaceContainerLowLight = Color(0xFFF3F4EF) + val surfaceContainerLight = Color(0xFFEDEEE9) + val surfaceContainerHighLight = Color(0xFFE7E9E4) + val surfaceContainerHighestLight = Color(0xFFE1E3DE) // Dark val primaryDark = Color(0xFF33E286) @@ -58,6 +67,15 @@ object CapodColorsGreen { val inverseSurfaceDark = Color(0xFFE1E3DE) val inverseOnSurfaceDark = Color(0xFF191C19) val inversePrimaryDark = Color(0xFF006D39) + val outlineVariantDark = Color(0xFF414941) + val scrimDark = Color(0xFF000000) + val surfaceDimDark = Color(0xFF111411) + val surfaceBrightDark = Color(0xFF373A37) + val surfaceContainerLowestDark = Color(0xFF0C0F0C) + val surfaceContainerLowDark = Color(0xFF191C19) + val surfaceContainerDark = Color(0xFF1D201D) + val surfaceContainerHighDark = Color(0xFF282B28) + val surfaceContainerHighestDark = Color(0xFF333532) // Light Medium Contrast val primaryLightMediumContrast = Color(0xFF004F28) @@ -86,6 +104,15 @@ object CapodColorsGreen { val inverseSurfaceLightMediumContrast = Color(0xFF2E312E) val inverseOnSurfaceLightMediumContrast = Color(0xFFF0F1EC) val inversePrimaryLightMediumContrast = Color(0xFF33E286) + val outlineVariantLightMediumContrast = Color(0xFFB3BBB1) + val scrimLightMediumContrast = Color(0xFF000000) + val surfaceDimLightMediumContrast = Color(0xFFD9DBD6) + val surfaceBrightLightMediumContrast = Color(0xFFF9FAF5) + val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF) + val surfaceContainerLowLightMediumContrast = Color(0xFFF3F4EF) + val surfaceContainerLightMediumContrast = Color(0xFFEDEEE9) + val surfaceContainerHighLightMediumContrast = Color(0xFFE7E9E4) + val surfaceContainerHighestLightMediumContrast = Color(0xFFE1E3DE) // Dark Medium Contrast val primaryDarkMediumContrast = Color(0xFF3FE78B) @@ -114,6 +141,15 @@ object CapodColorsGreen { val inverseSurfaceDarkMediumContrast = Color(0xFFE1E3DE) val inverseOnSurfaceDarkMediumContrast = Color(0xFF191C19) val inversePrimaryDarkMediumContrast = Color(0xFF00542A) + val outlineVariantDarkMediumContrast = Color(0xFF4D544D) + val scrimDarkMediumContrast = Color(0xFF000000) + val surfaceDimDarkMediumContrast = Color(0xFF111411) + val surfaceBrightDarkMediumContrast = Color(0xFF373A37) + val surfaceContainerLowestDarkMediumContrast = Color(0xFF0C0F0C) + val surfaceContainerLowDarkMediumContrast = Color(0xFF191C19) + val surfaceContainerDarkMediumContrast = Color(0xFF1D201D) + val surfaceContainerHighDarkMediumContrast = Color(0xFF282B28) + val surfaceContainerHighestDarkMediumContrast = Color(0xFF333532) // Light High Contrast val primaryLightHighContrast = Color(0xFF002913) @@ -142,6 +178,15 @@ object CapodColorsGreen { val inverseSurfaceLightHighContrast = Color(0xFF2E312E) val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF) val inversePrimaryLightHighContrast = Color(0xFFBBFFCA) + val outlineVariantLightHighContrast = Color(0xFF656D65) + val scrimLightHighContrast = Color(0xFF000000) + val surfaceDimLightHighContrast = Color(0xFFD9DBD6) + val surfaceBrightLightHighContrast = Color(0xFFF9FAF5) + val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF) + val surfaceContainerLowLightHighContrast = Color(0xFFF3F4EF) + val surfaceContainerLightHighContrast = Color(0xFFEDEEE9) + val surfaceContainerHighLightHighContrast = Color(0xFFE7E9E4) + val surfaceContainerHighestLightHighContrast = Color(0xFFE1E3DE) // Dark High Contrast val primaryDarkHighContrast = Color(0xFFEDFFED) @@ -170,4 +215,13 @@ object CapodColorsGreen { val inverseSurfaceDarkHighContrast = Color(0xFFE1E3DE) val inverseOnSurfaceDarkHighContrast = Color(0xFF000000) val inversePrimaryDarkHighContrast = Color(0xFF003118) + val outlineVariantDarkHighContrast = Color(0xFF7E867D) + val scrimDarkHighContrast = Color(0xFF000000) + val surfaceDimDarkHighContrast = Color(0xFF111411) + val surfaceBrightDarkHighContrast = Color(0xFF373A37) + val surfaceContainerLowestDarkHighContrast = Color(0xFF0C0F0C) + val surfaceContainerLowDarkHighContrast = Color(0xFF191C19) + val surfaceContainerDarkHighContrast = Color(0xFF1D201D) + val surfaceContainerHighDarkHighContrast = Color(0xFF282B28) + val surfaceContainerHighestDarkHighContrast = Color(0xFF333532) } diff --git a/app/src/main/java/eu/darken/capod/common/theming/CapodTheme.kt b/app/src/main/java/eu/darken/capod/common/theming/CapodTheme.kt index 24f5775d..f6841604 100644 --- a/app/src/main/java/eu/darken/capod/common/theming/CapodTheme.kt +++ b/app/src/main/java/eu/darken/capod/common/theming/CapodTheme.kt @@ -6,6 +6,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext @Composable @@ -21,14 +22,13 @@ fun CapodTheme( val dynamicColors = state.style == ThemeStyle.MATERIAL_YOU && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S - val colorScheme = if (dynamicColors) { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } else { - if (darkTheme) { - ThemeColorProvider.getDarkColorScheme(state.color, state.style) - } else { - ThemeColorProvider.getLightColorScheme(state.color, state.style) + val context = LocalContext.current + val colorScheme = remember(state, darkTheme, dynamicColors) { + when { + dynamicColors && darkTheme -> dynamicDarkColorScheme(context) + dynamicColors && !darkTheme -> dynamicLightColorScheme(context) + darkTheme -> ThemeColorProvider.getDarkColorScheme(state.color, state.style) + else -> ThemeColorProvider.getLightColorScheme(state.color, state.style) } } diff --git a/app/src/main/java/eu/darken/capod/common/theming/ThemeColorProvider.kt b/app/src/main/java/eu/darken/capod/common/theming/ThemeColorProvider.kt index e3d809cc..e5be8274 100644 --- a/app/src/main/java/eu/darken/capod/common/theming/ThemeColorProvider.kt +++ b/app/src/main/java/eu/darken/capod/common/theming/ThemeColorProvider.kt @@ -45,9 +45,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLightMediumContrast, onSurfaceVariant = c.onSurfaceVariantLightMediumContrast, outline = c.outlineLightMediumContrast, + outlineVariant = c.outlineVariantLightMediumContrast, + scrim = c.scrimLightMediumContrast, inverseSurface = c.inverseSurfaceLightMediumContrast, inverseOnSurface = c.inverseOnSurfaceLightMediumContrast, inversePrimary = c.inversePrimaryLightMediumContrast, + surfaceDim = c.surfaceDimLightMediumContrast, + surfaceBright = c.surfaceBrightLightMediumContrast, + surfaceContainerLowest = c.surfaceContainerLowestLightMediumContrast, + surfaceContainerLow = c.surfaceContainerLowLightMediumContrast, + surfaceContainer = c.surfaceContainerLightMediumContrast, + surfaceContainerHigh = c.surfaceContainerHighLightMediumContrast, + surfaceContainerHighest = c.surfaceContainerHighestLightMediumContrast, ) ThemeStyle.HIGH_CONTRAST -> lightColorScheme( primary = c.primaryLightHighContrast, @@ -73,9 +82,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLightHighContrast, onSurfaceVariant = c.onSurfaceVariantLightHighContrast, outline = c.outlineLightHighContrast, + outlineVariant = c.outlineVariantLightHighContrast, + scrim = c.scrimLightHighContrast, inverseSurface = c.inverseSurfaceLightHighContrast, inverseOnSurface = c.inverseOnSurfaceLightHighContrast, inversePrimary = c.inversePrimaryLightHighContrast, + surfaceDim = c.surfaceDimLightHighContrast, + surfaceBright = c.surfaceBrightLightHighContrast, + surfaceContainerLowest = c.surfaceContainerLowestLightHighContrast, + surfaceContainerLow = c.surfaceContainerLowLightHighContrast, + surfaceContainer = c.surfaceContainerLightHighContrast, + surfaceContainerHigh = c.surfaceContainerHighLightHighContrast, + surfaceContainerHighest = c.surfaceContainerHighestLightHighContrast, ) else -> lightColorScheme( primary = c.primaryLight, @@ -101,9 +119,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLight, onSurfaceVariant = c.onSurfaceVariantLight, outline = c.outlineLight, + outlineVariant = c.outlineVariantLight, + scrim = c.scrimLight, inverseSurface = c.inverseSurfaceLight, inverseOnSurface = c.inverseOnSurfaceLight, inversePrimary = c.inversePrimaryLight, + surfaceDim = c.surfaceDimLight, + surfaceBright = c.surfaceBrightLight, + surfaceContainerLowest = c.surfaceContainerLowestLight, + surfaceContainerLow = c.surfaceContainerLowLight, + surfaceContainer = c.surfaceContainerLight, + surfaceContainerHigh = c.surfaceContainerHighLight, + surfaceContainerHighest = c.surfaceContainerHighestLight, ) } } @@ -135,9 +162,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDarkMediumContrast, onSurfaceVariant = c.onSurfaceVariantDarkMediumContrast, outline = c.outlineDarkMediumContrast, + outlineVariant = c.outlineVariantDarkMediumContrast, + scrim = c.scrimDarkMediumContrast, inverseSurface = c.inverseSurfaceDarkMediumContrast, inverseOnSurface = c.inverseOnSurfaceDarkMediumContrast, inversePrimary = c.inversePrimaryDarkMediumContrast, + surfaceDim = c.surfaceDimDarkMediumContrast, + surfaceBright = c.surfaceBrightDarkMediumContrast, + surfaceContainerLowest = c.surfaceContainerLowestDarkMediumContrast, + surfaceContainerLow = c.surfaceContainerLowDarkMediumContrast, + surfaceContainer = c.surfaceContainerDarkMediumContrast, + surfaceContainerHigh = c.surfaceContainerHighDarkMediumContrast, + surfaceContainerHighest = c.surfaceContainerHighestDarkMediumContrast, ) ThemeStyle.HIGH_CONTRAST -> darkColorScheme( primary = c.primaryDarkHighContrast, @@ -163,9 +199,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDarkHighContrast, onSurfaceVariant = c.onSurfaceVariantDarkHighContrast, outline = c.outlineDarkHighContrast, + outlineVariant = c.outlineVariantDarkHighContrast, + scrim = c.scrimDarkHighContrast, inverseSurface = c.inverseSurfaceDarkHighContrast, inverseOnSurface = c.inverseOnSurfaceDarkHighContrast, inversePrimary = c.inversePrimaryDarkHighContrast, + surfaceDim = c.surfaceDimDarkHighContrast, + surfaceBright = c.surfaceBrightDarkHighContrast, + surfaceContainerLowest = c.surfaceContainerLowestDarkHighContrast, + surfaceContainerLow = c.surfaceContainerLowDarkHighContrast, + surfaceContainer = c.surfaceContainerDarkHighContrast, + surfaceContainerHigh = c.surfaceContainerHighDarkHighContrast, + surfaceContainerHighest = c.surfaceContainerHighestDarkHighContrast, ) else -> darkColorScheme( primary = c.primaryDark, @@ -191,9 +236,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDark, onSurfaceVariant = c.onSurfaceVariantDark, outline = c.outlineDark, + outlineVariant = c.outlineVariantDark, + scrim = c.scrimDark, inverseSurface = c.inverseSurfaceDark, inverseOnSurface = c.inverseOnSurfaceDark, inversePrimary = c.inversePrimaryDark, + surfaceDim = c.surfaceDimDark, + surfaceBright = c.surfaceBrightDark, + surfaceContainerLowest = c.surfaceContainerLowestDark, + surfaceContainerLow = c.surfaceContainerLowDark, + surfaceContainer = c.surfaceContainerDark, + surfaceContainerHigh = c.surfaceContainerHighDark, + surfaceContainerHighest = c.surfaceContainerHighestDark, ) } } @@ -225,9 +279,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLightMediumContrast, onSurfaceVariant = c.onSurfaceVariantLightMediumContrast, outline = c.outlineLightMediumContrast, + outlineVariant = c.outlineVariantLightMediumContrast, + scrim = c.scrimLightMediumContrast, inverseSurface = c.inverseSurfaceLightMediumContrast, inverseOnSurface = c.inverseOnSurfaceLightMediumContrast, inversePrimary = c.inversePrimaryLightMediumContrast, + surfaceDim = c.surfaceDimLightMediumContrast, + surfaceBright = c.surfaceBrightLightMediumContrast, + surfaceContainerLowest = c.surfaceContainerLowestLightMediumContrast, + surfaceContainerLow = c.surfaceContainerLowLightMediumContrast, + surfaceContainer = c.surfaceContainerLightMediumContrast, + surfaceContainerHigh = c.surfaceContainerHighLightMediumContrast, + surfaceContainerHighest = c.surfaceContainerHighestLightMediumContrast, ) ThemeStyle.HIGH_CONTRAST -> lightColorScheme( primary = c.primaryLightHighContrast, @@ -253,9 +316,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLightHighContrast, onSurfaceVariant = c.onSurfaceVariantLightHighContrast, outline = c.outlineLightHighContrast, + outlineVariant = c.outlineVariantLightHighContrast, + scrim = c.scrimLightHighContrast, inverseSurface = c.inverseSurfaceLightHighContrast, inverseOnSurface = c.inverseOnSurfaceLightHighContrast, inversePrimary = c.inversePrimaryLightHighContrast, + surfaceDim = c.surfaceDimLightHighContrast, + surfaceBright = c.surfaceBrightLightHighContrast, + surfaceContainerLowest = c.surfaceContainerLowestLightHighContrast, + surfaceContainerLow = c.surfaceContainerLowLightHighContrast, + surfaceContainer = c.surfaceContainerLightHighContrast, + surfaceContainerHigh = c.surfaceContainerHighLightHighContrast, + surfaceContainerHighest = c.surfaceContainerHighestLightHighContrast, ) else -> lightColorScheme( primary = c.primaryLight, @@ -281,9 +353,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLight, onSurfaceVariant = c.onSurfaceVariantLight, outline = c.outlineLight, + outlineVariant = c.outlineVariantLight, + scrim = c.scrimLight, inverseSurface = c.inverseSurfaceLight, inverseOnSurface = c.inverseOnSurfaceLight, inversePrimary = c.inversePrimaryLight, + surfaceDim = c.surfaceDimLight, + surfaceBright = c.surfaceBrightLight, + surfaceContainerLowest = c.surfaceContainerLowestLight, + surfaceContainerLow = c.surfaceContainerLowLight, + surfaceContainer = c.surfaceContainerLight, + surfaceContainerHigh = c.surfaceContainerHighLight, + surfaceContainerHighest = c.surfaceContainerHighestLight, ) } } @@ -315,9 +396,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDarkMediumContrast, onSurfaceVariant = c.onSurfaceVariantDarkMediumContrast, outline = c.outlineDarkMediumContrast, + outlineVariant = c.outlineVariantDarkMediumContrast, + scrim = c.scrimDarkMediumContrast, inverseSurface = c.inverseSurfaceDarkMediumContrast, inverseOnSurface = c.inverseOnSurfaceDarkMediumContrast, inversePrimary = c.inversePrimaryDarkMediumContrast, + surfaceDim = c.surfaceDimDarkMediumContrast, + surfaceBright = c.surfaceBrightDarkMediumContrast, + surfaceContainerLowest = c.surfaceContainerLowestDarkMediumContrast, + surfaceContainerLow = c.surfaceContainerLowDarkMediumContrast, + surfaceContainer = c.surfaceContainerDarkMediumContrast, + surfaceContainerHigh = c.surfaceContainerHighDarkMediumContrast, + surfaceContainerHighest = c.surfaceContainerHighestDarkMediumContrast, ) ThemeStyle.HIGH_CONTRAST -> darkColorScheme( primary = c.primaryDarkHighContrast, @@ -343,9 +433,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDarkHighContrast, onSurfaceVariant = c.onSurfaceVariantDarkHighContrast, outline = c.outlineDarkHighContrast, + outlineVariant = c.outlineVariantDarkHighContrast, + scrim = c.scrimDarkHighContrast, inverseSurface = c.inverseSurfaceDarkHighContrast, inverseOnSurface = c.inverseOnSurfaceDarkHighContrast, inversePrimary = c.inversePrimaryDarkHighContrast, + surfaceDim = c.surfaceDimDarkHighContrast, + surfaceBright = c.surfaceBrightDarkHighContrast, + surfaceContainerLowest = c.surfaceContainerLowestDarkHighContrast, + surfaceContainerLow = c.surfaceContainerLowDarkHighContrast, + surfaceContainer = c.surfaceContainerDarkHighContrast, + surfaceContainerHigh = c.surfaceContainerHighDarkHighContrast, + surfaceContainerHighest = c.surfaceContainerHighestDarkHighContrast, ) else -> darkColorScheme( primary = c.primaryDark, @@ -371,9 +470,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDark, onSurfaceVariant = c.onSurfaceVariantDark, outline = c.outlineDark, + outlineVariant = c.outlineVariantDark, + scrim = c.scrimDark, inverseSurface = c.inverseSurfaceDark, inverseOnSurface = c.inverseOnSurfaceDark, inversePrimary = c.inversePrimaryDark, + surfaceDim = c.surfaceDimDark, + surfaceBright = c.surfaceBrightDark, + surfaceContainerLowest = c.surfaceContainerLowestDark, + surfaceContainerLow = c.surfaceContainerLowDark, + surfaceContainer = c.surfaceContainerDark, + surfaceContainerHigh = c.surfaceContainerHighDark, + surfaceContainerHighest = c.surfaceContainerHighestDark, ) } } @@ -405,9 +513,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLightMediumContrast, onSurfaceVariant = c.onSurfaceVariantLightMediumContrast, outline = c.outlineLightMediumContrast, + outlineVariant = c.outlineVariantLightMediumContrast, + scrim = c.scrimLightMediumContrast, inverseSurface = c.inverseSurfaceLightMediumContrast, inverseOnSurface = c.inverseOnSurfaceLightMediumContrast, inversePrimary = c.inversePrimaryLightMediumContrast, + surfaceDim = c.surfaceDimLightMediumContrast, + surfaceBright = c.surfaceBrightLightMediumContrast, + surfaceContainerLowest = c.surfaceContainerLowestLightMediumContrast, + surfaceContainerLow = c.surfaceContainerLowLightMediumContrast, + surfaceContainer = c.surfaceContainerLightMediumContrast, + surfaceContainerHigh = c.surfaceContainerHighLightMediumContrast, + surfaceContainerHighest = c.surfaceContainerHighestLightMediumContrast, ) ThemeStyle.HIGH_CONTRAST -> lightColorScheme( primary = c.primaryLightHighContrast, @@ -433,9 +550,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLightHighContrast, onSurfaceVariant = c.onSurfaceVariantLightHighContrast, outline = c.outlineLightHighContrast, + outlineVariant = c.outlineVariantLightHighContrast, + scrim = c.scrimLightHighContrast, inverseSurface = c.inverseSurfaceLightHighContrast, inverseOnSurface = c.inverseOnSurfaceLightHighContrast, inversePrimary = c.inversePrimaryLightHighContrast, + surfaceDim = c.surfaceDimLightHighContrast, + surfaceBright = c.surfaceBrightLightHighContrast, + surfaceContainerLowest = c.surfaceContainerLowestLightHighContrast, + surfaceContainerLow = c.surfaceContainerLowLightHighContrast, + surfaceContainer = c.surfaceContainerLightHighContrast, + surfaceContainerHigh = c.surfaceContainerHighLightHighContrast, + surfaceContainerHighest = c.surfaceContainerHighestLightHighContrast, ) else -> lightColorScheme( primary = c.primaryLight, @@ -461,9 +587,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantLight, onSurfaceVariant = c.onSurfaceVariantLight, outline = c.outlineLight, + outlineVariant = c.outlineVariantLight, + scrim = c.scrimLight, inverseSurface = c.inverseSurfaceLight, inverseOnSurface = c.inverseOnSurfaceLight, inversePrimary = c.inversePrimaryLight, + surfaceDim = c.surfaceDimLight, + surfaceBright = c.surfaceBrightLight, + surfaceContainerLowest = c.surfaceContainerLowestLight, + surfaceContainerLow = c.surfaceContainerLowLight, + surfaceContainer = c.surfaceContainerLight, + surfaceContainerHigh = c.surfaceContainerHighLight, + surfaceContainerHighest = c.surfaceContainerHighestLight, ) } } @@ -495,9 +630,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDarkMediumContrast, onSurfaceVariant = c.onSurfaceVariantDarkMediumContrast, outline = c.outlineDarkMediumContrast, + outlineVariant = c.outlineVariantDarkMediumContrast, + scrim = c.scrimDarkMediumContrast, inverseSurface = c.inverseSurfaceDarkMediumContrast, inverseOnSurface = c.inverseOnSurfaceDarkMediumContrast, inversePrimary = c.inversePrimaryDarkMediumContrast, + surfaceDim = c.surfaceDimDarkMediumContrast, + surfaceBright = c.surfaceBrightDarkMediumContrast, + surfaceContainerLowest = c.surfaceContainerLowestDarkMediumContrast, + surfaceContainerLow = c.surfaceContainerLowDarkMediumContrast, + surfaceContainer = c.surfaceContainerDarkMediumContrast, + surfaceContainerHigh = c.surfaceContainerHighDarkMediumContrast, + surfaceContainerHighest = c.surfaceContainerHighestDarkMediumContrast, ) ThemeStyle.HIGH_CONTRAST -> darkColorScheme( primary = c.primaryDarkHighContrast, @@ -523,9 +667,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDarkHighContrast, onSurfaceVariant = c.onSurfaceVariantDarkHighContrast, outline = c.outlineDarkHighContrast, + outlineVariant = c.outlineVariantDarkHighContrast, + scrim = c.scrimDarkHighContrast, inverseSurface = c.inverseSurfaceDarkHighContrast, inverseOnSurface = c.inverseOnSurfaceDarkHighContrast, inversePrimary = c.inversePrimaryDarkHighContrast, + surfaceDim = c.surfaceDimDarkHighContrast, + surfaceBright = c.surfaceBrightDarkHighContrast, + surfaceContainerLowest = c.surfaceContainerLowestDarkHighContrast, + surfaceContainerLow = c.surfaceContainerLowDarkHighContrast, + surfaceContainer = c.surfaceContainerDarkHighContrast, + surfaceContainerHigh = c.surfaceContainerHighDarkHighContrast, + surfaceContainerHighest = c.surfaceContainerHighestDarkHighContrast, ) else -> darkColorScheme( primary = c.primaryDark, @@ -551,9 +704,18 @@ object ThemeColorProvider { surfaceVariant = c.surfaceVariantDark, onSurfaceVariant = c.onSurfaceVariantDark, outline = c.outlineDark, + outlineVariant = c.outlineVariantDark, + scrim = c.scrimDark, inverseSurface = c.inverseSurfaceDark, inverseOnSurface = c.inverseOnSurfaceDark, inversePrimary = c.inversePrimaryDark, + surfaceDim = c.surfaceDimDark, + surfaceBright = c.surfaceBrightDark, + surfaceContainerLowest = c.surfaceContainerLowestDark, + surfaceContainerLow = c.surfaceContainerLowDark, + surfaceContainer = c.surfaceContainerDark, + surfaceContainerHigh = c.surfaceContainerHighDark, + surfaceContainerHighest = c.surfaceContainerHighestDark, ) } } diff --git a/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt b/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt index 21bdb30a..5a59109c 100644 --- a/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt +++ b/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt @@ -5,6 +5,7 @@ import android.content.SharedPreferences import androidx.preference.PreferenceDataStore import com.squareup.moshi.Moshi import dagger.hilt.android.qualifiers.ApplicationContext +import eu.darken.capod.common.BuildConfigWrap import eu.darken.capod.common.bluetooth.BluetoothAddress import eu.darken.capod.common.bluetooth.ScannerMode import eu.darken.capod.common.debug.DebugSettings @@ -13,13 +14,10 @@ import eu.darken.capod.common.preferences.Settings import eu.darken.capod.common.preferences.createFlowPreference import eu.darken.capod.common.theming.ThemeColor import eu.darken.capod.common.theming.ThemeMode -import eu.darken.capod.common.theming.ThemeState import eu.darken.capod.common.theming.ThemeStyle import eu.darken.capod.pods.core.PodDevice import eu.darken.capod.pods.core.apple.protocol.IdentityResolvingKey import eu.darken.capod.pods.core.apple.protocol.ProximityEncryptionKey -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine import javax.inject.Inject import javax.inject.Singleton @@ -69,27 +67,24 @@ class GeneralSettings @Inject constructor( val isOnboardingDone = preferences.createFlowPreference("core.onboarding.done", false) val themeMode = preferences.createFlowPreference( - "core.ui.theme.mode", ThemeMode.SYSTEM, moshi, onErrorFallbackToDefault = true + "core.ui.theme.mode", + ThemeMode.SYSTEM, + moshi, + onErrorFallbackToDefault = BuildConfigWrap.BUILD_TYPE != BuildConfigWrap.BuildType.DEV, ) val themeStyle = preferences.createFlowPreference( - "core.ui.theme.style", ThemeStyle.DEFAULT, moshi, onErrorFallbackToDefault = true + "core.ui.theme.style", + ThemeStyle.DEFAULT, + moshi, + onErrorFallbackToDefault = BuildConfigWrap.BUILD_TYPE != BuildConfigWrap.BuildType.DEV, ) val themeColor = preferences.createFlowPreference( - "core.ui.theme.color", ThemeColor.BLUE, moshi, onErrorFallbackToDefault = true + "core.ui.theme.color", + ThemeColor.BLUE, + moshi, + onErrorFallbackToDefault = BuildConfigWrap.BUILD_TYPE != BuildConfigWrap.BuildType.DEV, ) - val currentThemeState: ThemeState - get() = ThemeState( - mode = themeMode.value, - style = themeStyle.value, - color = themeColor.value, - ) - - val themeState: Flow - get() = combine(themeMode.flow, themeStyle.flow, themeColor.flow) { mode, style, color -> - ThemeState(mode, style, color) - } - override val preferenceDataStore: PreferenceDataStore = PreferenceStoreMapper( monitorMode, useExtraMonitorNotification, diff --git a/app/src/main/java/eu/darken/capod/main/core/GeneralSettingsExtensions.kt b/app/src/main/java/eu/darken/capod/main/core/GeneralSettingsExtensions.kt new file mode 100644 index 00000000..93ca5664 --- /dev/null +++ b/app/src/main/java/eu/darken/capod/main/core/GeneralSettingsExtensions.kt @@ -0,0 +1,13 @@ +package eu.darken.capod.main.core + +import eu.darken.capod.common.theming.ThemeState +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine + +val GeneralSettings.themeState: Flow + get() = combine(themeMode.flow, themeStyle.flow, themeColor.flow) { mode, style, color -> + ThemeState(mode, style, color) + } + +val GeneralSettings.currentThemeState: ThemeState + get() = ThemeState(themeMode.value, themeStyle.value, themeColor.value) diff --git a/app/src/main/java/eu/darken/capod/main/ui/MainActivity.kt b/app/src/main/java/eu/darken/capod/main/ui/MainActivity.kt index 4eef75a9..e26e0d0a 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/MainActivity.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/MainActivity.kt @@ -26,6 +26,8 @@ import eu.darken.capod.common.navigation.NavigationEntry import eu.darken.capod.common.theming.CapodTheme import eu.darken.capod.common.uix.Activity2 import eu.darken.capod.main.core.GeneralSettings +import eu.darken.capod.main.core.currentThemeState +import eu.darken.capod.main.core.themeState import javax.inject.Inject @AndroidEntryPoint diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsScreen.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsScreen.kt index 316e1b57..71827300 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsScreen.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsScreen.kt @@ -1,5 +1,6 @@ package eu.darken.capod.main.ui.settings.general +import android.app.Activity import android.os.Build import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -33,12 +34,14 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp @@ -65,6 +68,11 @@ fun GeneralSettingsScreenHost(vm: GeneralSettingsViewModel = hiltViewModel()) { ErrorEventHandler(vm) NavigationEventHandler(vm) + val activity = LocalContext.current as? Activity + LaunchedEffect(Unit) { + vm.launchUpgradeFlow.collect { action -> activity?.let { action(it) } } + } + val state by waitForState(vm.state) state?.let { GeneralSettingsScreen( @@ -149,6 +157,16 @@ fun GeneralSettingsScreen( item { SettingsCategoryHeader(text = stringResource(R.string.settings_category_appearance_label)) } + if (!state.isPro) { + item { + Text( + text = stringResource(R.string.common_feature_requires_pro_msg), + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.error, + modifier = Modifier.padding(start = 56.dp, end = 16.dp, bottom = 4.dp), + ) + } + } item { SettingsListPreferenceItem( icon = Icons.TwoTone.DarkMode, @@ -157,6 +175,7 @@ fun GeneralSettingsScreen( selectedEntry = state.themeState.mode, onEntrySelected = onThemeModeSelected, entryLabel = { stringResource(it.labelRes) }, + enabled = state.isPro, ) } item { @@ -167,6 +186,7 @@ fun GeneralSettingsScreen( selectedEntry = state.themeState.style, onEntrySelected = onThemeStyleSelected, entryLabel = { stringResource(it.labelRes) }, + enabled = state.isPro, ) } item { @@ -179,7 +199,7 @@ fun GeneralSettingsScreen( }, icon = Icons.TwoTone.Palette, onClick = { showColorDialog = true }, - enabled = !isMaterialYouActive, + enabled = state.isPro && !isMaterialYouActive, ) } item { @@ -321,6 +341,7 @@ fun GeneralSettingsScreen( private fun GeneralSettingsScreenPreview() = PreviewWrapper { GeneralSettingsScreen( state = GeneralSettingsViewModel.State( + isPro = true, monitorMode = MonitorMode.AUTOMATIC, scannerMode = ScannerMode.BALANCED, showConnectedNotification = true, diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsViewModel.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsViewModel.kt index fc6be237..53ba384c 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsViewModel.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/general/GeneralSettingsViewModel.kt @@ -1,9 +1,11 @@ package eu.darken.capod.main.ui.settings.general +import android.app.Activity import dagger.hilt.android.lifecycle.HiltViewModel import eu.darken.capod.common.bluetooth.ScannerMode import eu.darken.capod.common.coroutine.DispatcherProvider import eu.darken.capod.common.debug.logging.logTag +import eu.darken.capod.common.flow.SingleEventFlow import eu.darken.capod.common.flow.shareLatest import eu.darken.capod.common.navigation.Nav import eu.darken.capod.common.theming.ThemeColor @@ -11,18 +13,24 @@ import eu.darken.capod.common.theming.ThemeMode import eu.darken.capod.common.theming.ThemeState import eu.darken.capod.common.theming.ThemeStyle import eu.darken.capod.common.uix.ViewModel4 +import eu.darken.capod.common.upgrade.UpgradeRepo import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.main.core.MonitorMode +import eu.darken.capod.main.core.themeState import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map import javax.inject.Inject @HiltViewModel class GeneralSettingsViewModel @Inject constructor( dispatcherProvider: DispatcherProvider, private val generalSettings: GeneralSettings, + private val upgradeRepo: UpgradeRepo, ) : ViewModel4(dispatcherProvider) { data class State( + val isPro: Boolean, val monitorMode: MonitorMode, val scannerMode: ScannerMode, val showConnectedNotification: Boolean, @@ -33,6 +41,10 @@ class GeneralSettingsViewModel @Inject constructor( val themeState: ThemeState, ) + private val isPro = upgradeRepo.upgradeInfo.map { it.isPro }.shareLatest(scope = vmScope) + + val launchUpgradeFlow = SingleEventFlow<(Activity) -> Unit>() + val state = combine( combine( generalSettings.monitorMode.flow, @@ -52,8 +64,10 @@ class GeneralSettingsViewModel @Inject constructor( arrayOf(filtering as Any, batching as Any, indirect as Any) }, generalSettings.themeState, - ) { general, compat, themeState -> + isPro, + ) { general, compat, themeState, isPro -> State( + isPro = isPro, monitorMode = general[0] as MonitorMode, scannerMode = general[1] as ScannerMode, showConnectedNotification = general[2] as Boolean, @@ -93,16 +107,28 @@ class GeneralSettingsViewModel @Inject constructor( generalSettings.useIndirectScanResultCallback.value = enabled } - fun setThemeMode(mode: ThemeMode) { - generalSettings.themeMode.value = mode + fun setThemeMode(mode: ThemeMode) = launch { + if (isPro.first()) { + generalSettings.themeMode.value = mode + } else { + launchUpgradeFlow.tryEmit { upgradeRepo.launchBillingFlow(it) } + } } - fun setThemeStyle(style: ThemeStyle) { - generalSettings.themeStyle.value = style + fun setThemeStyle(style: ThemeStyle) = launch { + if (isPro.first()) { + generalSettings.themeStyle.value = style + } else { + launchUpgradeFlow.tryEmit { upgradeRepo.launchBillingFlow(it) } + } } - fun setThemeColor(color: ThemeColor) { - generalSettings.themeColor.value = color + fun setThemeColor(color: ThemeColor) = launch { + if (isPro.first()) { + generalSettings.themeColor.value = color + } else { + launchUpgradeFlow.tryEmit { upgradeRepo.launchBillingFlow(it) } + } } fun goToDebugSettings() { diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt index e1558031..224cb908 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt @@ -25,6 +25,8 @@ import eu.darken.capod.common.theming.CapodTheme import eu.darken.capod.common.uix.Activity2 import eu.darken.capod.common.upgrade.UpgradeRepo import eu.darken.capod.main.core.GeneralSettings +import eu.darken.capod.main.core.currentThemeState +import eu.darken.capod.main.core.themeState import kotlinx.coroutines.launch import javax.inject.Inject diff --git a/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpWindow.kt b/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpWindow.kt index f16c1bb9..6e107027 100644 --- a/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpWindow.kt +++ b/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpWindow.kt @@ -22,6 +22,7 @@ import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.theming.CapodTheme import eu.darken.capod.main.core.GeneralSettings +import eu.darken.capod.main.core.currentThemeState import eu.darken.capod.pods.core.PodDevice import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 183cd54c..b799ac5a 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -103,7 +103,6 @@ \'n Legstuk wat die laas bekende toestelstatus wys. Kies toestel Kies watter toestelprofiel hierdie legstuk moet wys. - Hierdie kenmerk vereis CAPod Pro. Geen data Voorkoms Voorafstellings diff --git a/app/src/main/res/values-am/strings.xml b/app/src/main/res/values-am/strings.xml index 90d90047..db657113 100644 --- a/app/src/main/res/values-am/strings.xml +++ b/app/src/main/res/values-am/strings.xml @@ -103,7 +103,6 @@ የመጨረሻውን የታወቀ የመሣሪያ ሁኔታ የሚያሳይ መግብር። መሣሪያ ይምረጡ ይህ መግብር የትኛውን የመሣሪያ መገለጫ ማሳየት እንዳለበት ይምረጡ። - ይህ ባህሪ CAPod Pro ይፈልጋል። ምንም መረጃ የለም መልክ ቅድመ ምረጫዎች diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 64a3f5d8..99a5d8ff 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -103,7 +103,6 @@ أداة تعرض آخر حالة معروفة للجهاز. اختيار الجهاز اختر ملف تعريف الجهاز الذي يجب أن تعرضه هذه الأداة. - تتطلب هذه الميزة CAPod Pro. لا توجد بيانات المظهر الإعدادات المسبقة diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index ff1dfa74..c3adbcbd 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -103,7 +103,6 @@ Ən son məlum cihaz statusunu göstərən bir vidcet. Cihaz seçin Bu vidcetin hansı cihaz profilini göstərəcəyini seçin. - Bu funksiya CAPod Pro tələb edir. Məlumat yoxdur Görünüş Hazır şablonlar diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index c4efc334..9191286e 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -103,7 +103,6 @@ Віджэт, які паказвае апошні вядомы стан прылады. Выбраць прыладу Выберыце, які профіль прылады павінен адлюстроўваць гэты віджэт. - Гэта функцыя патрабуе CAPod Pro. Няма даных Вонкавы выгляд Прэсеты diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index c939484d..0582e042 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -103,7 +103,6 @@ Приспособление, показващо последното известно състояние на устройството. Избор на устройство Изберете кой профил на устройство да показва това приспособление. - Тази функция изисква CAPod Pro. Няма данни Външен вид Предварителни настройки diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 814434fa..d9c2790a 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -103,7 +103,6 @@ সর্বশেষ পরিচিত ডিভাইস স্ট্যাটাস দেখানো একটি উইজেট। ডিভাইস নির্বাচন করুন এই উইজেটটি কোন ডিভাইস প্রোফাইল প্রদর্শন করবে তা চয়ন করুন। - এই বৈশিষ্ট্যটির জন্য CAPod Pro প্রয়োজন। কোনো ডেটা নেই চেহারা প্রিসেট diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index e26bf4b2..9b057835 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -103,7 +103,6 @@ Un giny que mostra l\'estat de l\'últim dispositiu conegut. Seleccioneu un dispositiu Trieu quin perfil de dispositiu ha de mostrar aquest giny. - Aquesta funció requereix el CAPod Pro. Sense dades Aparença Predefinits diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 6763385a..9ab86667 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -103,7 +103,6 @@ Widget zobrazující poslední známý stav zařízení. Vybrat zařízení Vyberte, který profil zařízení má tento widget zobrazovat. - Tato funkce vyžaduje CAPod Pro. Žádná data Vzhled Předvolby diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index c7124aad..d0cf5a22 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -103,7 +103,6 @@ En widget, der viser den sidst kendte enhedsstatus. Vælg enhed Vælg hvilken enhedsprofil denne widget skal vise. - Denne funktion kræver CAPod Pro. Ingen data Udseende Forudindstillinger diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9cdb2623..0485b806 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -103,7 +103,6 @@ Ein Widget, das den letzten bekannten Gerätestatus anzeigt. Gerät auswählen Wähle aus, welches Geräteprofil dieses Widget anzeigen soll. - Diese Funktion erfordert CAPod Pro. Keine Daten Erscheinungsbild Voreinstellungen diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 90c38e62..2e5bab79 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -103,7 +103,6 @@ Ένα widget που εμφανίζει την τελευταία γνωστή κατάσταση της συσκευής. Επιλογή συσκευής Επιλέξτε ποιο προφίλ συσκευής θα εμφανίζει αυτό το widget. - Αυτή η λειτουργία απαιτεί CAPod Pro. Δεν υπάρχουν δεδομένα Εμφάνιση Προρυθμίσεις diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index aaaf304b..f06e0360 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -103,7 +103,6 @@ Un widget que muestra el último estado conocido del dispositivo. Selecciona el dispositivo Elige qué perfil del dispositivo debe mostrar este complemento. - Esta función requiere CAPod Pro. Sin datos Apariencia Ajustes preestablecidos diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index ae396779..d94f9660 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -103,7 +103,6 @@ Un widget que muestra el último estado conocido del dispositivo. Selecciona el dispositivo Elige qué perfil del dispositivo debe mostrar este complemento. - Esta función requiere CAPod Pro. Sin datos Apariencia Preajustes diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 812e1358..e78b3ee0 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -103,7 +103,6 @@ Un widget que muestra el último estado conocido del dispositivo. Selecciona el dispositivo Elige qué perfil del dispositivo debe mostrar este complemento. - Esta función requiere CAPod Pro. Sin datos Apariencia Ajustes preestablecidos diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 1ca70c75..faea7445 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -103,7 +103,6 @@ Viimast teadaolevat seadme seisu näitab vidin. Vali seade Valige, millist seadmeprofiili see vidin võiks kuvada. - Selleks on vaja osta CAPod Pro. Andmed puuduvad Välimus Eelseadistused diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml index 2ae4adb4..43153a8f 100644 --- a/app/src/main/res/values-eu-rES/strings.xml +++ b/app/src/main/res/values-eu-rES/strings.xml @@ -103,7 +103,6 @@ Azken gailuaren egoera ezaguna erakusten duen trepeta. Hautatu Gailua Aukeratu trepeta honek zein gailu-profil erakutsi behar duen. - Ezaugarri honek CAPod Pro behar du. Daturik ez Itxura Aurrealdeak diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 9e67a6fe..7fa025d2 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -103,7 +103,6 @@ ویجتی که آخرین وضعیت شناخته‌شده دستگاه را نشان می‌دهد. انتخاب دستگاه انتخاب کنید این ویجت کدام پروفایل دستگاه را نمایش دهد. - این ویژگی به CAPod Pro نیاز دارد. بدون داده ظاهر تنظیمات از پیش تعریف شده diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 1cc6cbc3..2cae342a 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -103,7 +103,6 @@ Widget, joka näyttää laitteen viimeisimmän tunnetun tilan. Valitse laite Valitse, minkä laiteprofiilin tämä widget näyttää. - Tämä ominaisuus vaatii CAPod Pron. Ei tietoja Ulkoasu Esiasetukset diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 5f399d4b..a60b975d 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -103,7 +103,6 @@ Isang widget na nagpapakita ng huling kilalang status ng device. Pumili ng Device Piliin kung aling device profile ang ipapakita ng widget na ito. - Kailangan ng CAPod Pro ang feature na ito. Walang data Hitsura Mga Preset diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6f826c02..6e7aea52 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -103,7 +103,6 @@ Un widget qui affiche le dernier état connu de l’appareil. Choisir un appareil Choisissez le profil d’appareil que ce widget doit afficher. - Cette fonction est offerte avec CAPod Pro. Aucune donnée Apparence Présets diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index deafc473..90e57400 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -103,7 +103,6 @@ Un widget que mostra o último estado coñecido do dispositivo. Seleccionar dispositivo Escolle que perfil de dispositivo debe mostrar este widget. - Esta función require CAPod Pro. Sen datos Aparencia Predefinidos diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index a79ea0f9..0faea709 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -103,7 +103,6 @@ डिवाइस की अंतिम ज्ञात स्थिति दिखाने वाला एक विजेट। डिवाइस चुनें चुनें कि यह विजेट कौन सा डिवाइस प्रोफ़ाइल प्रदर्शित करेगा। - इस सुविधा के लिए CAPod Pro आवश्यक है। कोई डेटा नहीं उपस्थिति प्रीसेट diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 007ce0e2..1eb88897 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -103,7 +103,6 @@ Widget koji prikazuje posljednji poznati status uređaja. Odaberi uređaj Odaberite koji profil uređaja ovaj widget treba prikazivati. - Ova značajka zahtijeva CAPod Pro. Nema podataka Izgled Unaprijed postavljene opcije diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index f1451704..97dc0e16 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -103,7 +103,6 @@ A widget az utolsó ismert eszköz adatait mutatja. Eszköz kiválasztása Válassza ki, melyik eszközprofilt jelenítse meg ez a widget. - Ez a funkció CAPod Pro-t igényel. Nincs adat Megjelenés Előbeállítások diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index 9f533b0b..893db678 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -103,7 +103,6 @@ Վիջեթ, որը ցույց է տալիս սարքի վերջին հայտնի կարգավիճակը։ Ընտրել սարք Ընտրեք, թե որ սարքի պրոֆիլը պետք է ցուցադրի այս վիջեթը։ - Այս գործառույթը պահանջում է CAPod Pro։ Տվյալներ չկան Տեսք Նախասահմանադ diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 7b11409f..86d11a47 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -103,7 +103,6 @@ Widget yang menampilkan status perangkat terakhir yang diketahui. Pilih Perangkat Pilih profil perangkat mana yang akan ditampilkan widget ini. - Fitur ini memerlukan CAPod Pro. Tidak ada data Penampilan Prasetel diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index f774b6bd..86279656 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -103,7 +103,6 @@ Græja sem sýnir síðast þekkta stöðu tækis. Velja tæki Veldu hvaða tækjasnið þessi græja á að sýna. - Þessi eiginleiki krefst CAPod Pro. Engin gögn Útlit Forstillingar diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a4267626..b134cc2a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -103,7 +103,6 @@ Un widget che mostra l\'ultimo stato noto del dispositivo. Seleziona dispositivo Scegli quale profilo dispositivo questo widget dovrebbe visualizzare. - Questa funzionalità richiede CAPod Pro. Nessun dato Aspetto Preset diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 0e8e30eb..a23805f7 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -103,7 +103,6 @@ ווידג\'ט המציג את מצב האחרון הידוע של המכשיר. בחירת מכשיר בחר איזה פרופיל מכשיר הווידג\'ט צריך להציג. - תכונה זו דורשת CAPod Pro. אין נתונים מראה הגדרות מוגדרות מראש diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 44c0f560..af220dda 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -103,7 +103,6 @@ デバイスの最後に確認されたステータスを表示するウィジェット。 デバイスを選択 このウィジェットに表示するデバイスプロファイルを選択してください。 - この機能にはCAPod Proが必要です。 データなし 外観 プリセット diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 3af6c7b3..97d2488e 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -103,7 +103,6 @@ ვიჯეტი, რომელიც აჩვენებს მოწყობილობის ბოლო ცნობილ სტატუსს. მოწყობილობის არჩევა აირჩიეთ, რომელი მოწყობილობის პროფილი უნდა აჩვენოს ამ ვიჯეტმა. - ეს ფუნქცია მოითხოვს CAPod Pro-ს. მონაცემები არ არის გარეგნობა პრესეტები diff --git a/app/src/main/res/values-km-rKH/strings.xml b/app/src/main/res/values-km-rKH/strings.xml index 90d8003a..5e90e49c 100644 --- a/app/src/main/res/values-km-rKH/strings.xml +++ b/app/src/main/res/values-km-rKH/strings.xml @@ -103,7 +103,6 @@ ធាតុក្រាហ្វិកបង្ហាញស្ថានភាពឧបករណ៍ដែលស្គាល់ចុងក្រោយ។ ជ្រើសរើសឧបករណ៍ ជ្រើសរើសទម្រង់ឧបករណ៍ណាមួយដែលធាតុក្រាហ្វិកនេះគួរបង្ហាញ។ - មុខងារនេះត្រូវការ CAPod Pro។ គ្មានទិន្នន័យ រូបរាង ការកំណត់ដើម diff --git a/app/src/main/res/values-kmr-rTR/strings.xml b/app/src/main/res/values-kmr-rTR/strings.xml index 1c197f26..6feb034d 100644 --- a/app/src/main/res/values-kmr-rTR/strings.xml +++ b/app/src/main/res/values-kmr-rTR/strings.xml @@ -103,7 +103,6 @@ Widgetek ku rewşa dawîn a naskirî ya amûrê nîşan dide. Amûr Hilbijêre Hilbijêrin ka kîjan profîla amûrê divê ev widget nîşan bide. - Ev taybetmendî CAPod Pro hewce dike. Dane tune Xuyandin Pêşkêşan diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index b7bf4c2b..66604e40 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -103,7 +103,6 @@ ಸಾಧನದ ಕೊನೆಯದಾಗಿ ತಿಳಿದಿರುವ ಸ್ಥಿತಿಯನ್ನು ತೋರಿಸುವ ವಿಜೆಟ್. ಸಾಧನ ಆಯ್ಕೆಮಾಡಿ ಈ ವಿಜೆಟ್ ಯಾವ ಸಾಧನ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ. - ಈ ವೈಶಿಷ್ಟ್ಯಕ್ಕೆ CAPod Pro ಅಗತ್ಯವಿದೆ. ಡೇಟಾ ಇಲ್ಲ ನೋಟ ಪೂರ್ವನಿರ್ಧಾರಿತಗಳು diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 31bdfa51..f6d286d0 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -103,7 +103,6 @@ 마지막으로 알려진 기기 상태를 표시하는 위젯입니다. 기기 선택 이 위젯에 표시할 기기 프로필을 선택해 주세요. - 이 기능을 사용하기 위해 CAPod Pro가 필요합니다. 데이터 없음 외관 사전 설정 diff --git a/app/src/main/res/values-ky-rKG/strings.xml b/app/src/main/res/values-ky-rKG/strings.xml index 3cd2f626..41df6172 100644 --- a/app/src/main/res/values-ky-rKG/strings.xml +++ b/app/src/main/res/values-ky-rKG/strings.xml @@ -103,7 +103,6 @@ Акыркы белгилүү түзмөк абалын көрсөткөн виджет. Түзмөк тандоо Бул виджетте кайсы түзмөк профили көрсөтүлүшү керектигин тандаңыз. - Бул функция CAPod Pro талап кылат. Маалымат жок Көрүнүшү Шаблондор diff --git a/app/src/main/res/values-lo-rLA/strings.xml b/app/src/main/res/values-lo-rLA/strings.xml index cb76e82c..ccdead80 100644 --- a/app/src/main/res/values-lo-rLA/strings.xml +++ b/app/src/main/res/values-lo-rLA/strings.xml @@ -103,7 +103,6 @@ ວິດເຈັດສະແດງສະຖານະອຸປະກອນທີ່ຮູ້ຈັກຫຼ້າສຸດ. ເລືອກອຸປະກອນ ເລືອກໂປຣໄຟລ໌ອຸປະກອນທີ່ວິດເຈັດນີ້ຄວນສະແດງ. - ຄຸນສົມບັດນີ້ຕ້ອງການ CAPod Pro. ບໍ່ມີຂໍ້ມູນ ລັກສະການ ຕັ້ງໂຫມດ diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index a9ecc692..261d970f 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -103,7 +103,6 @@ Valdiklis, rodantis paskutinę žinomą įrenginio būseną. Pasirinkite įrenginį Pasirinkite, kurio įrenginio profilį šis valdiklis turėtų rodyti. - Šiai funkcijai reikalingas CAPod Pro. Nėra duomenų Išvaizda Nustatymai diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index c7bd638a..31630a33 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -103,7 +103,6 @@ Logrīks, kas rāda pēdējo zināmo ierīces statusu. Izvēlieties ierīci Izvēlieties, kuru ierīces profilu šim logrīkam vajadzētu rādīt. - Šī funkcija prasa CAPod Pro. Nav datu Izskats Priekšiestatījumi diff --git a/app/src/main/res/values-mk-rMK/strings.xml b/app/src/main/res/values-mk-rMK/strings.xml index aee29454..bec97d1c 100644 --- a/app/src/main/res/values-mk-rMK/strings.xml +++ b/app/src/main/res/values-mk-rMK/strings.xml @@ -103,7 +103,6 @@ Виџет што го прикажува последниот познат статус на уредот. Изберете уред Изберете кој профил на уред треба да го прикажува овој виџет. - Оваа функција бара CAPod Pro. Нема податоци Изглед Предустановки diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index dd53d278..d21dc0ec 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -103,7 +103,6 @@ അവസാനമായി അറിയപ്പെടുന്ന ഉപകരണ നില കാണിക്കുന്ന ഒരു വിഡ്ജറ്റ്. ഉപകരണം തിരഞ്ഞെടുക്കുക ഈ വിഡ്ജറ്റ് ഏത് ഉപകരണ പ്രൊഫൈൽ പ്രദർശിപ്പിക്കണമെന്ന് തിരഞ്ഞെടുക്കുക. - ഈ സവിശേഷതയ്ക്ക് CAPod Pro ആവശ്യമാണ്. ഡാറ്റ ഇല്ല രൂപരേഖ പ്രിസെറ്റുകള്‍ diff --git a/app/src/main/res/values-mn-rMN/strings.xml b/app/src/main/res/values-mn-rMN/strings.xml index 11895633..e54452c1 100644 --- a/app/src/main/res/values-mn-rMN/strings.xml +++ b/app/src/main/res/values-mn-rMN/strings.xml @@ -103,7 +103,6 @@ Төхөөрөмжийн хамгийн сүүлийн үеийн мэдэгдэж буй төлвийг харуулсан виджет. Төхөөрөмж сонгох Энэ виджет аль төхөөрөмжийн профайлыг харуулахыг сонгоно уу. - Энэ функц нь CAPod Pro шаарддаг. Өгөгдөл алга Гадаад төрх Урьдчилсан сонголтууд diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index 22fbf510..e2987258 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -103,7 +103,6 @@ डिव्हाइसची शेवटची ज्ञात स्थिती दर्शवणारे विजेट. डिव्हाइस निवडा या विजेटने कोणत्या डिव्हाइस प्रोफाइलचे प्रदर्शन करावे ते निवडा. - या वैशिष्ट्यासाठी CAPod Pro आवश्यक आहे. डेटा नाही दिखावट प्रीसेट्स diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 71ecf99b..bf84e32f 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -103,7 +103,6 @@ Widget yang menunjukkan status peranti terakhir yang diketahui. Pilih Peranti Pilih profil peranti yang perlu dipaparkan oleh widget ini. - Ciri ini memerlukan CAPod Pro. Tiada data Penampilan Praset diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index c09690e5..fd59edd0 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -103,7 +103,6 @@ စက်ပစ္စည်း၏ နောက်ဆုံးသိရှိထားသော အခြေအနေကိုပြသသည့် ဝစ်ဂျက်။ စက်ပစ္စည်းရွေးချယ်ပါ ဤဝစ်ဂျက်တွင် မည်သည့်စက်ပစ္စည်းပရိုဖိုင်ကို ပြသမည်ကို ရွေးချယ်ပါ။ - ဤအင်္ဂါရပ်အတွက် CAPod Pro လိုအပ်သည်။ ဒေတာမရှိပါ အသွင်အပြင် စိတ်ကြိုက်ချမ်းသာများ diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 2be580c2..a051fcba 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -103,7 +103,6 @@ En widget som viser sist kjent enhetsstatus. Velg enhet Velg hvilken enhetsprofil denne widgeten skal vise. - Denne funksjonen krever CAPod Pro. Ingen data Utseende Forhåndsinnstillinger diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 0e6a5128..fe5fe8c2 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -103,7 +103,6 @@ उपकरणको अन्तिम ज्ञात स्थिति देखाउने विजेट। उपकरण छान्नुहोस् यो विजेटले कुन उपकरण प्रोफाइल देखाउनुपर्छ भनेर छान्नुहोस्। - यो सुविधाको लागि CAPod Pro आवश्यक छ। डाटा छैन उपस्थिति प्रिसेट्स diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 5141235d..128d950c 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -103,7 +103,6 @@ Een widget dat de laatst gekende apparaatstatus toont. Selecteer Apparaat Kies welk apparaatprofiel deze widget moet weergeven. - Voor deze functie is CAPod Pro vereist. Geen data Uiterlijk Vooringestelde waarden diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d241b729..a51f0438 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -103,7 +103,6 @@ Widżet pokazujący ostatni znany stan urządzenia. Wybierz urządzenie Wybierz profil urządzenia, które ma być wyświetlane przez widżet. - Funkcja wymaga CAPod Pro. Brak danych Wygląd Predefiniowane diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3c58560b..dee321bf 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -103,7 +103,6 @@ Um widget que mostra o último status conhecido do dispositivo. Selecionar Dispositivo Escolha qual o perfil de dispositivo este widget deve exibir. - Este recurso requer CAPod Pro. Sem Informação Aparência Predefinições diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index a9c6bf11..69bed37b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -103,7 +103,6 @@ Um widget que mostra o último estado conhecido do dispositivo. Selecionar Dispositivo Escolha qual perfil de dispositivo este widget deve apresentar. - Esta funcionalidade requer CAPod Pro. Sem dados Aparência Predefinições diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml index 8ce3e0d2..a2ce3738 100644 --- a/app/src/main/res/values-rm/strings.xml +++ b/app/src/main/res/values-rm/strings.xml @@ -103,7 +103,6 @@ In widget che mussa il davos stadi enconuschent da l\'apparat. Tscherner l\'apparat Tscherner tge profil d\'apparat quest widget duai mussar. - Questa funcziun pretenda CAPod Pro. Naginas datas Apparenza Presets diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index b3577218..77f0095e 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -103,7 +103,6 @@ Un widget care arată starea ultimului dispozitiv cunoscut. Selectare Dispozitiv Alegeți ce profil de dispozitiv ar trebui să afișeze acest widget. - Această funcție necesită CAPod Pro. Fără date Aspect Presetări diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a51c17ee..6c849983 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -104,7 +104,6 @@ AL_Cool_T Виджет показывающий последний известный статус устройства. Выберите устройство Выберите, какой профиль устройства должен отображать виджет. - Эта функция требует CAPod Pro. Нет данных Внешний вид Предустановки diff --git a/app/src/main/res/values-sc-rIT/strings.xml b/app/src/main/res/values-sc-rIT/strings.xml index db9d1bbe..49589291 100644 --- a/app/src/main/res/values-sc-rIT/strings.xml +++ b/app/src/main/res/values-sc-rIT/strings.xml @@ -103,7 +103,6 @@ Unu widget chi mustrat s\'ùrtimu istadu connotu de su dispositivu. Seletziona dispositivu Sceglide cale profilu de dispositivu custu widget depet mustrare. - Custa funtzione recheret CAPod Pro. Perunu datu Apparitzia Preset diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index a56e952d..2f4410ca 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -103,7 +103,6 @@ අවසාන වරට දන්නා උපාංග තත්ත්වය පෙන්වන විජට් එකක්. උපාංගය තෝරන්න මෙම විජට් එක කුමන උපාංග පැතිකඩ පෙන්විය යුතුද යන්න තෝරන්න. - මෙම විශේෂාංගයට CAPod Pro අවශ්‍ය වේ. දත්ත නොමැත පෙනුම පෙර සැකසුම් diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 684e6d4c..19153f4e 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -103,7 +103,6 @@ Miniaplikácia zobrazujúca posledný známy stav zariadenia. Vybrať zariadenie Vyberte, ktorý profil zariadenia by mal tento widget zobrazovať. - Táto funkcia vyžaduje CAPod Pro. Žiadne údaje Vzhľad Prednastavenia diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 7cf737de..77fdee2f 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -103,7 +103,6 @@ Pripomoček, ki prikazuje zadnje znano stanje naprave. Izberi napravo Izberite, kateri profil naprave naj ta pripomoček prikazuje. - Ta funkcija zahteva CAPod Pro. Ni podatkov Videz Prednastavke diff --git a/app/src/main/res/values-sq-rAL/strings.xml b/app/src/main/res/values-sq-rAL/strings.xml index 69726852..15514fbf 100644 --- a/app/src/main/res/values-sq-rAL/strings.xml +++ b/app/src/main/res/values-sq-rAL/strings.xml @@ -103,7 +103,6 @@ Një widget që tregon statusin e fundit të njohur të pajisjes. Zgjidh pajisjen Zgjidhni cilin profil pajisje duhet të shfaqë ky widget. - Kjo veçori kërkon CAPod Pro. Asnjë e dhënë Pamja dhe ndjesia Parapërmbledhjet diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 272b1d1d..7bed1972 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -103,7 +103,6 @@ Виџет који приказује последњи познати статус уређаја. Изаберите уређај Изаберите који профил уређаја овај виџет треба да приказује. - Ова функција захтева CAPod Pro. Нема података Изглед Предложени шаблони diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 80c97f4c..2aef6f61 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -103,7 +103,6 @@ En widget som visar den senast kända enhetsstatusen. Välj enhet Välj vilken enhetsprofil denna widget ska visa. - Denna funktion kräver CAPod Pro. Ingen data Utseende Förinställningar diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml index 9f5835f4..75fab280 100644 --- a/app/src/main/res/values-sw/strings.xml +++ b/app/src/main/res/values-sw/strings.xml @@ -103,7 +103,6 @@ Wijeti inayoonyesha hali ya mwisho inayojulikana ya kifaa. Chagua Kifaa Chagua wasifu gani wa kifaa wijeti hii inapaswa kuonyesha. - Kipengele hiki kinahitaji CAPod Pro. Hakuna data Muonekano Maamuzi mapema diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index a1a37186..a92a7096 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -103,7 +103,6 @@ கடைசியாக அறியப்பட்ட சாதன நிலையைக் காட்டும் ஒரு விட்ஜெட். சாதனத்தைத் தேர்ந்தெடு இந்த விட்ஜெட் எந்த சாதன சுயவிவரத்தைக் காட்ட வேண்டும் என்பதைத் தேர்ந்தெடுக்கவும். - இந்த அம்சத்திற்கு CAPod Pro தேவை. தரவு இல்லை தோற்றம் முன்னமைப்புகள் diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index b2bf246e..00ea92af 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -103,7 +103,6 @@ చివరిగా తెలిసిన పరికర స్థితిని చూపే విడ్జెట్. పరికరాన్ని ఎంచుకోండి ఈ విడ్జెట్ ఏ పరికర ప్రొఫైల్‌ను ప్రదర్శించాలో ఎంచుకోండి. - ఈ ఫీచర్‌కు CAPod Pro అవసరం. డేటా లేదు ఆవిర్భావం ప్రీసెట్‌లు diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index c186fab0..979a410e 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -103,7 +103,6 @@ วิดเจ็ตที่แสดงสถานะอุปกรณ์ล่าสุดที่ทราบ เลือกอุปกรณ์ เลือกโปรไฟล์อุปกรณ์ที่วิดเจ็ตนี้ควรแสดง - คุณสมบัตินี้ต้องการ CAPod Pro ไม่มีข้อมูล ลักษณะที่ปรากฏ พรีเซ็ต diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 263575ea..62cc2a5d 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -103,7 +103,6 @@ Bilinen son cihaz durumunu gösteren bir pencere öğesi (widget). Cihaz Seçin Bu widget\'ın hangi cihaz profilini göstereceğini seçin. - Bu özellik CAPod Pro gerektirir. Veri yok Görünüm Ön Ayarlar diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 81efec25..380ec2b2 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -103,7 +103,6 @@ Віджет, який показує останній відомий стан пристрою. Оберіть пристрій Оберіть, який профіль пристрою має відображати цей віджет. - Ця функція вимагає CAPod Pro. Немає даних Зовнішній вигляд Попередні встановлення diff --git a/app/src/main/res/values-ur-rIN/strings.xml b/app/src/main/res/values-ur-rIN/strings.xml index 39a8dbf3..828f953c 100644 --- a/app/src/main/res/values-ur-rIN/strings.xml +++ b/app/src/main/res/values-ur-rIN/strings.xml @@ -103,7 +103,6 @@ ایک ویجیٹ جو آخری معلوم آلہ کی حیثیت دکھاتا ہے۔ آلہ منتخب کریں منتخب کریں کہ یہ ویجیٹ کون سا آلہ پروفائل دکھائے۔ - اس خصوصیت کے لئے CAPod Pro درکار ہے۔ کوئی ڈیٹا نہیں ظہور پری سیٹنگز diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index c237583c..d40eb59f 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -103,7 +103,6 @@ Qurilmaning oxirgi ma\'lum holatini ko\'rsatadigan vidjet. Qurilmani tanlang Ushbu vidjet qaysi qurilma profilini ko\'rsatishi kerakligini tanlang. - Bu funksiya CAPod Pro talab qiladi. Ma\'lumot yo\'q Tashqi ko‘rinish Preset‘lar diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 82ec9362..0474a35f 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -103,7 +103,6 @@ Một widget hiển thị trạng thái thiết bị được biết đến gần đây nhất. Chọn thiết bị Chọn hồ sơ thiết bị mà tiện ích này sẽ hiển thị. - Tính năng này yêu cầu CAPod Pro. Không có dữ liệu Giao diện Cài đặt sẵn diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 515953be..0735e3c3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -103,7 +103,6 @@ 显示上次连接设备状态的小部件 选择设备 选择此部件应显示的设备配置文件。 - 此功能需要 CAPod Pro。 暂无数据 外观 预设 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index a78dfd85..0097728e 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -103,7 +103,6 @@ 顯示最後已知裝置狀態的小工具。 選擇裝置 選擇此小工具要顯示的裝置設定檔。 - 此功能需要 CAPod Pro。 無資料 外觀 預設 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 797f74fa..8e136447 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -103,7 +103,6 @@ 顯示最後已知裝置狀態的小工具。 選擇裝置 選擇此小工具要顯示的裝置設定檔。 - 此功能需 CAPod Pro。 無資料 外觀 預設 diff --git a/app/src/main/res/values-zu/strings.xml b/app/src/main/res/values-zu/strings.xml index b8d7f96d..f7d88549 100644 --- a/app/src/main/res/values-zu/strings.xml +++ b/app/src/main/res/values-zu/strings.xml @@ -103,7 +103,6 @@ Iwindi elibonisa isimo sakamuva esaziwayo sedivayisi. Khetha Idivayisi Khetha ukuthi iyiphi iphrofayili yedivayisi leli wiji okufanele liyibonise. - Lesi sici sidinga i-CAPod Pro. Ayikho idatha Ukuonakala Imikhakha diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5615695b..06721a99 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ Copy Thank you Upgrade + Upgrade to unlock. Donate Check Close @@ -120,7 +121,6 @@ Widget Configuration Select Device Choose which device profile this widget should display. - This feature requires CAPod Pro. No data Error loading widget