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.
This commit is contained in:
darken
2026-03-02 16:36:52 +01:00
committed by Matthias Urhahn
parent 8c278f2a3c
commit 073de3cf35
88 changed files with 419 additions and 110 deletions
@@ -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)
}
@@ -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)
}
@@ -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)
}
@@ -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)
}
}
@@ -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,
)
}
}
@@ -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<ThemeState>
get() = combine(themeMode.flow, themeStyle.flow, themeColor.flow) { mode, style, color ->
ThemeState(mode, style, color)
}
override val preferenceDataStore: PreferenceDataStore = PreferenceStoreMapper(
monitorMode,
useExtraMonitorNotification,
@@ -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<ThemeState>
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)
@@ -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
@@ -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,
@@ -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<Any>(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() {
@@ -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
@@ -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
@@ -103,7 +103,6 @@
<string name="widget_description">\'n Legstuk wat die laas bekende toestelstatus wys.</string>
<string name="widget_configuration_title">Kies toestel</string>
<string name="widget_configuration_description">Kies watter toestelprofiel hierdie legstuk moet wys.</string>
<string name="common_feature_requires_pro_msg">Hierdie kenmerk vereis CAPod Pro.</string>
<string name="widget_no_data_label">Geen data</string>
<string name="widget_config_appearance_label">Voorkoms</string>
<string name="widget_config_preset_label">Voorafstellings</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">የመጨረሻውን የታወቀ የመሣሪያ ሁኔታ የሚያሳይ መግብር።</string>
<string name="widget_configuration_title">መሣሪያ ይምረጡ</string>
<string name="widget_configuration_description">ይህ መግብር የትኛውን የመሣሪያ መገለጫ ማሳየት እንዳለበት ይምረጡ።</string>
<string name="common_feature_requires_pro_msg">ይህ ባህሪ CAPod Pro ይፈልጋል።</string>
<string name="widget_no_data_label">ምንም መረጃ የለም</string>
<string name="widget_config_appearance_label">መልክ</string>
<string name="widget_config_preset_label">ቅድመ ምረጫዎች</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">أداة تعرض آخر حالة معروفة للجهاز.</string>
<string name="widget_configuration_title">اختيار الجهاز</string>
<string name="widget_configuration_description">اختر ملف تعريف الجهاز الذي يجب أن تعرضه هذه الأداة.</string>
<string name="common_feature_requires_pro_msg">تتطلب هذه الميزة CAPod Pro.</string>
<string name="widget_no_data_label">لا توجد بيانات</string>
<string name="widget_config_appearance_label">المظهر</string>
<string name="widget_config_preset_label">الإعدادات المسبقة</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Ən son məlum cihaz statusunu göstərən bir vidcet.</string>
<string name="widget_configuration_title">Cihaz seçin</string>
<string name="widget_configuration_description">Bu vidcetin hansı cihaz profilini göstərəcəyini seçin.</string>
<string name="common_feature_requires_pro_msg">Bu funksiya CAPod Pro tələb edir.</string>
<string name="widget_no_data_label">Məlumat yoxdur</string>
<string name="widget_config_appearance_label">Görünüş</string>
<string name="widget_config_preset_label">Hazır şablonlar</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Віджэт, які паказвае апошні вядомы стан прылады.</string>
<string name="widget_configuration_title">Выбраць прыладу</string>
<string name="widget_configuration_description">Выберыце, які профіль прылады павінен адлюстроўваць гэты віджэт.</string>
<string name="common_feature_requires_pro_msg">Гэта функцыя патрабуе CAPod Pro.</string>
<string name="widget_no_data_label">Няма даных</string>
<string name="widget_config_appearance_label">Вонкавы выгляд</string>
<string name="widget_config_preset_label">Прэсеты</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Приспособление, показващо последното известно състояние на устройството.</string>
<string name="widget_configuration_title">Избор на устройство</string>
<string name="widget_configuration_description">Изберете кой профил на устройство да показва това приспособление.</string>
<string name="common_feature_requires_pro_msg">Тази функция изисква CAPod Pro.</string>
<string name="widget_no_data_label">Няма данни</string>
<string name="widget_config_appearance_label">Външен вид</string>
<string name="widget_config_preset_label">Предварителни настройки</string>
@@ -103,7 +103,6 @@
<string name="widget_description">সর্বশেষ পরিচিত ডিভাইস স্ট্যাটাস দেখানো একটি উইজেট।</string>
<string name="widget_configuration_title">ডিভাইস নির্বাচন করুন</string>
<string name="widget_configuration_description">এই উইজেটটি কোন ডিভাইস প্রোফাইল প্রদর্শন করবে তা চয়ন করুন।</string>
<string name="common_feature_requires_pro_msg">এই বৈশিষ্ট্যটির জন্য CAPod Pro প্রয়োজন।</string>
<string name="widget_no_data_label">কোনো ডেটা নেই</string>
<string name="widget_config_appearance_label">চেহারা</string>
<string name="widget_config_preset_label">প্রিসেট</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Un giny que mostra l\'estat de l\'últim dispositiu conegut.</string>
<string name="widget_configuration_title">Seleccioneu un dispositiu</string>
<string name="widget_configuration_description">Trieu quin perfil de dispositiu ha de mostrar aquest giny.</string>
<string name="common_feature_requires_pro_msg">Aquesta funció requereix el CAPod Pro.</string>
<string name="widget_no_data_label">Sense dades</string>
<string name="widget_config_appearance_label">Aparença</string>
<string name="widget_config_preset_label">Predefinits</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Widget zobrazující poslední známý stav zařízení.</string>
<string name="widget_configuration_title">Vybrat zařízení</string>
<string name="widget_configuration_description">Vyberte, který profil zařízení má tento widget zobrazovat.</string>
<string name="common_feature_requires_pro_msg">Tato funkce vyžaduje CAPod Pro.</string>
<string name="widget_no_data_label">Žádná data</string>
<string name="widget_config_appearance_label">Vzhled</string>
<string name="widget_config_preset_label">Předvolby</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">En widget, der viser den sidst kendte enhedsstatus.</string>
<string name="widget_configuration_title">Vælg enhed</string>
<string name="widget_configuration_description">Vælg hvilken enhedsprofil denne widget skal vise.</string>
<string name="common_feature_requires_pro_msg">Denne funktion kræver CAPod Pro.</string>
<string name="widget_no_data_label">Ingen data</string>
<string name="widget_config_appearance_label">Udseende</string>
<string name="widget_config_preset_label">Forudindstillinger</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Ein Widget, das den letzten bekannten Gerätestatus anzeigt.</string>
<string name="widget_configuration_title">Gerät auswählen</string>
<string name="widget_configuration_description">Wähle aus, welches Geräteprofil dieses Widget anzeigen soll.</string>
<string name="common_feature_requires_pro_msg">Diese Funktion erfordert CAPod Pro.</string>
<string name="widget_no_data_label">Keine Daten</string>
<string name="widget_config_appearance_label">Erscheinungsbild</string>
<string name="widget_config_preset_label">Voreinstellungen</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Ένα widget που εμφανίζει την τελευταία γνωστή κατάσταση της συσκευής.</string>
<string name="widget_configuration_title">Επιλογή συσκευής</string>
<string name="widget_configuration_description">Επιλέξτε ποιο προφίλ συσκευής θα εμφανίζει αυτό το widget.</string>
<string name="common_feature_requires_pro_msg">Αυτή η λειτουργία απαιτεί CAPod Pro.</string>
<string name="widget_no_data_label">Δεν υπάρχουν δεδομένα</string>
<string name="widget_config_appearance_label">Εμφάνιση</string>
<string name="widget_config_preset_label">Προρυθμίσεις</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string>
<string name="widget_configuration_title">Selecciona el dispositivo</string>
<string name="widget_configuration_description">Elige qué perfil del dispositivo debe mostrar este complemento.</string>
<string name="common_feature_requires_pro_msg">Esta función requiere CAPod Pro.</string>
<string name="widget_no_data_label">Sin datos</string>
<string name="widget_config_appearance_label">Apariencia</string>
<string name="widget_config_preset_label">Ajustes preestablecidos</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string>
<string name="widget_configuration_title">Selecciona el dispositivo</string>
<string name="widget_configuration_description">Elige qué perfil del dispositivo debe mostrar este complemento.</string>
<string name="common_feature_requires_pro_msg">Esta función requiere CAPod Pro.</string>
<string name="widget_no_data_label">Sin datos</string>
<string name="widget_config_appearance_label">Apariencia</string>
<string name="widget_config_preset_label">Preajustes</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Un widget que muestra el último estado conocido del dispositivo.</string>
<string name="widget_configuration_title">Selecciona el dispositivo</string>
<string name="widget_configuration_description">Elige qué perfil del dispositivo debe mostrar este complemento.</string>
<string name="common_feature_requires_pro_msg">Esta función requiere CAPod Pro.</string>
<string name="widget_no_data_label">Sin datos</string>
<string name="widget_config_appearance_label">Apariencia</string>
<string name="widget_config_preset_label">Ajustes preestablecidos</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Viimast teadaolevat seadme seisu näitab vidin.</string>
<string name="widget_configuration_title">Vali seade</string>
<string name="widget_configuration_description">Valige, millist seadmeprofiili see vidin võiks kuvada.</string>
<string name="common_feature_requires_pro_msg">Selleks on vaja osta CAPod Pro.</string>
<string name="widget_no_data_label">Andmed puuduvad</string>
<string name="widget_config_appearance_label">Välimus</string>
<string name="widget_config_preset_label">Eelseadistused</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Azken gailuaren egoera ezaguna erakusten duen trepeta.</string>
<string name="widget_configuration_title">Hautatu Gailua</string>
<string name="widget_configuration_description">Aukeratu trepeta honek zein gailu-profil erakutsi behar duen.</string>
<string name="common_feature_requires_pro_msg">Ezaugarri honek CAPod Pro behar du.</string>
<string name="widget_no_data_label">Daturik ez</string>
<string name="widget_config_appearance_label">Itxura</string>
<string name="widget_config_preset_label">Aurrealdeak</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">ویجتی که آخرین وضعیت شناخته‌شده دستگاه را نشان می‌دهد.</string>
<string name="widget_configuration_title">انتخاب دستگاه</string>
<string name="widget_configuration_description">انتخاب کنید این ویجت کدام پروفایل دستگاه را نمایش دهد.</string>
<string name="common_feature_requires_pro_msg">این ویژگی به CAPod Pro نیاز دارد.</string>
<string name="widget_no_data_label">بدون داده</string>
<string name="widget_config_appearance_label">ظاهر</string>
<string name="widget_config_preset_label">تنظیمات از پیش تعریف شده</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Widget, joka näyttää laitteen viimeisimmän tunnetun tilan.</string>
<string name="widget_configuration_title">Valitse laite</string>
<string name="widget_configuration_description">Valitse, minkä laiteprofiilin tämä widget näyttää.</string>
<string name="common_feature_requires_pro_msg">Tämä ominaisuus vaatii CAPod Pron.</string>
<string name="widget_no_data_label">Ei tietoja</string>
<string name="widget_config_appearance_label">Ulkoasu</string>
<string name="widget_config_preset_label">Esiasetukset</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Isang widget na nagpapakita ng huling kilalang status ng device.</string>
<string name="widget_configuration_title">Pumili ng Device</string>
<string name="widget_configuration_description">Piliin kung aling device profile ang ipapakita ng widget na ito.</string>
<string name="common_feature_requires_pro_msg">Kailangan ng CAPod Pro ang feature na ito.</string>
<string name="widget_no_data_label">Walang data</string>
<string name="widget_config_appearance_label">Hitsura</string>
<string name="widget_config_preset_label">Mga Preset</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Un widget qui affiche le dernier état connu de lappareil.</string>
<string name="widget_configuration_title">Choisir un appareil</string>
<string name="widget_configuration_description">Choisissez le profil dappareil que ce widget doit afficher.</string>
<string name="common_feature_requires_pro_msg">Cette fonction est offerte avec CAPod Pro.</string>
<string name="widget_no_data_label">Aucune donnée</string>
<string name="widget_config_appearance_label">Apparence</string>
<string name="widget_config_preset_label">Présets</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Un widget que mostra o último estado coñecido do dispositivo.</string>
<string name="widget_configuration_title">Seleccionar dispositivo</string>
<string name="widget_configuration_description">Escolle que perfil de dispositivo debe mostrar este widget.</string>
<string name="common_feature_requires_pro_msg">Esta función require CAPod Pro.</string>
<string name="widget_no_data_label">Sen datos</string>
<string name="widget_config_appearance_label">Aparencia</string>
<string name="widget_config_preset_label">Predefinidos</string>
@@ -103,7 +103,6 @@
<string name="widget_description">डिवाइस की अंतिम ज्ञात स्थिति दिखाने वाला एक विजेट।</string>
<string name="widget_configuration_title">डिवाइस चुनें</string>
<string name="widget_configuration_description">चुनें कि यह विजेट कौन सा डिवाइस प्रोफ़ाइल प्रदर्शित करेगा।</string>
<string name="common_feature_requires_pro_msg">इस सुविधा के लिए CAPod Pro आवश्यक है।</string>
<string name="widget_no_data_label">कोई डेटा नहीं</string>
<string name="widget_config_appearance_label">उपस्थिति</string>
<string name="widget_config_preset_label">प्रीसेट</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Widget koji prikazuje posljednji poznati status uređaja.</string>
<string name="widget_configuration_title">Odaberi uređaj</string>
<string name="widget_configuration_description">Odaberite koji profil uređaja ovaj widget treba prikazivati.</string>
<string name="common_feature_requires_pro_msg">Ova značajka zahtijeva CAPod Pro.</string>
<string name="widget_no_data_label">Nema podataka</string>
<string name="widget_config_appearance_label">Izgled</string>
<string name="widget_config_preset_label">Unaprijed postavljene opcije</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">A widget az utolsó ismert eszköz adatait mutatja.</string>
<string name="widget_configuration_title">Eszköz kiválasztása</string>
<string name="widget_configuration_description">Válassza ki, melyik eszközprofilt jelenítse meg ez a widget.</string>
<string name="common_feature_requires_pro_msg">Ez a funkció CAPod Pro-t igényel.</string>
<string name="widget_no_data_label">Nincs adat</string>
<string name="widget_config_appearance_label">Megjelenés</string>
<string name="widget_config_preset_label">Előbeállítások</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Վիջեթ, որը ցույց է տալիս սարքի վերջին հայտնի կարգավիճակը։</string>
<string name="widget_configuration_title">Ընտրել սարք</string>
<string name="widget_configuration_description">Ընտրեք, թե որ սարքի պրոֆիլը պետք է ցուցադրի այս վիջեթը։</string>
<string name="common_feature_requires_pro_msg">Այս գործառույթը պահանջում է CAPod Pro։</string>
<string name="widget_no_data_label">Տվյալներ չկան</string>
<string name="widget_config_appearance_label">Տեսք</string>
<string name="widget_config_preset_label">Նախասահմանադ</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Widget yang menampilkan status perangkat terakhir yang diketahui.</string>
<string name="widget_configuration_title">Pilih Perangkat</string>
<string name="widget_configuration_description">Pilih profil perangkat mana yang akan ditampilkan widget ini.</string>
<string name="common_feature_requires_pro_msg">Fitur ini memerlukan CAPod Pro.</string>
<string name="widget_no_data_label">Tidak ada data</string>
<string name="widget_config_appearance_label">Penampilan</string>
<string name="widget_config_preset_label">Prasetel</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Græja sem sýnir síðast þekkta stöðu tækis.</string>
<string name="widget_configuration_title">Velja tæki</string>
<string name="widget_configuration_description">Veldu hvaða tækjasnið þessi græja á að sýna.</string>
<string name="common_feature_requires_pro_msg">Þessi eiginleiki krefst CAPod Pro.</string>
<string name="widget_no_data_label">Engin gögn</string>
<string name="widget_config_appearance_label">Útlit</string>
<string name="widget_config_preset_label">Forstillingar</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Un widget che mostra l\'ultimo stato noto del dispositivo.</string>
<string name="widget_configuration_title">Seleziona dispositivo</string>
<string name="widget_configuration_description">Scegli quale profilo dispositivo questo widget dovrebbe visualizzare.</string>
<string name="common_feature_requires_pro_msg">Questa funzionalità richiede CAPod Pro.</string>
<string name="widget_no_data_label">Nessun dato</string>
<string name="widget_config_appearance_label">Aspetto</string>
<string name="widget_config_preset_label">Preset</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">ווידג\'ט המציג את מצב האחרון הידוע של המכשיר.</string>
<string name="widget_configuration_title">בחירת מכשיר</string>
<string name="widget_configuration_description">בחר איזה פרופיל מכשיר הווידג\'ט צריך להציג.</string>
<string name="common_feature_requires_pro_msg">תכונה זו דורשת CAPod Pro.</string>
<string name="widget_no_data_label">אין נתונים</string>
<string name="widget_config_appearance_label">מראה</string>
<string name="widget_config_preset_label">הגדרות מוגדרות מראש</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">デバイスの最後に確認されたステータスを表示するウィジェット。</string>
<string name="widget_configuration_title">デバイスを選択</string>
<string name="widget_configuration_description">このウィジェットに表示するデバイスプロファイルを選択してください。</string>
<string name="common_feature_requires_pro_msg">この機能にはCAPod Proが必要です。</string>
<string name="widget_no_data_label">データなし</string>
<string name="widget_config_appearance_label">外観</string>
<string name="widget_config_preset_label">プリセット</string>
@@ -103,7 +103,6 @@
<string name="widget_description">ვიჯეტი, რომელიც აჩვენებს მოწყობილობის ბოლო ცნობილ სტატუსს.</string>
<string name="widget_configuration_title">მოწყობილობის არჩევა</string>
<string name="widget_configuration_description">აირჩიეთ, რომელი მოწყობილობის პროფილი უნდა აჩვენოს ამ ვიჯეტმა.</string>
<string name="common_feature_requires_pro_msg">ეს ფუნქცია მოითხოვს CAPod Pro-ს.</string>
<string name="widget_no_data_label">მონაცემები არ არის</string>
<string name="widget_config_appearance_label">გარეგნობა</string>
<string name="widget_config_preset_label">პრესეტები</string>
@@ -103,7 +103,6 @@
<string name="widget_description">ធាតុក្រាហ្វិកបង្ហាញស្ថានភាពឧបករណ៍ដែលស្គាល់ចុងក្រោយ។</string>
<string name="widget_configuration_title">ជ្រើសរើសឧបករណ៍</string>
<string name="widget_configuration_description">ជ្រើសរើសទម្រង់ឧបករណ៍ណាមួយដែលធាតុក្រាហ្វិកនេះគួរបង្ហាញ។</string>
<string name="common_feature_requires_pro_msg">មុខងារនេះត្រូវការ CAPod Pro។</string>
<string name="widget_no_data_label">គ្មានទិន្នន័យ</string>
<string name="widget_config_appearance_label">រូបរាង</string>
<string name="widget_config_preset_label">ការកំណត់ដើម</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Widgetek ku rewşa dawîn a naskirî ya amûrê nîşan dide.</string>
<string name="widget_configuration_title">Amûr Hilbijêre</string>
<string name="widget_configuration_description">Hilbijêrin ka kîjan profîla amûrê divê ev widget nîşan bide.</string>
<string name="common_feature_requires_pro_msg">Ev taybetmendî CAPod Pro hewce dike.</string>
<string name="widget_no_data_label">Dane tune</string>
<string name="widget_config_appearance_label">Xuyandin</string>
<string name="widget_config_preset_label">Pêşkêşan</string>
@@ -103,7 +103,6 @@
<string name="widget_description">ಸಾಧನದ ಕೊನೆಯದಾಗಿ ತಿಳಿದಿರುವ ಸ್ಥಿತಿಯನ್ನು ತೋರಿಸುವ ವಿಜೆಟ್.</string>
<string name="widget_configuration_title">ಸಾಧನ ಆಯ್ಕೆಮಾಡಿ</string>
<string name="widget_configuration_description">ಈ ವಿಜೆಟ್ ಯಾವ ಸಾಧನ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ.</string>
<string name="common_feature_requires_pro_msg">ಈ ವೈಶಿಷ್ಟ್ಯಕ್ಕೆ CAPod Pro ಅಗತ್ಯವಿದೆ.</string>
<string name="widget_no_data_label">ಡೇಟಾ ಇಲ್ಲ</string>
<string name="widget_config_appearance_label">ನೋಟ</string>
<string name="widget_config_preset_label">ಪೂರ್ವನಿರ್ಧಾರಿತಗಳು</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">마지막으로 알려진 기기 상태를 표시하는 위젯입니다.</string>
<string name="widget_configuration_title">기기 선택</string>
<string name="widget_configuration_description">이 위젯에 표시할 기기 프로필을 선택해 주세요.</string>
<string name="common_feature_requires_pro_msg">이 기능을 사용하기 위해 CAPod Pro가 필요합니다.</string>
<string name="widget_no_data_label">데이터 없음</string>
<string name="widget_config_appearance_label">외관</string>
<string name="widget_config_preset_label">사전 설정</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Акыркы белгилүү түзмөк абалын көрсөткөн виджет.</string>
<string name="widget_configuration_title">Түзмөк тандоо</string>
<string name="widget_configuration_description">Бул виджетте кайсы түзмөк профили көрсөтүлүшү керектигин тандаңыз.</string>
<string name="common_feature_requires_pro_msg">Бул функция CAPod Pro талап кылат.</string>
<string name="widget_no_data_label">Маалымат жок</string>
<string name="widget_config_appearance_label">Көрүнүшү</string>
<string name="widget_config_preset_label">Шаблондор</string>
@@ -103,7 +103,6 @@
<string name="widget_description">ວິດເຈັດສະແດງສະຖານະອຸປະກອນທີ່ຮູ້ຈັກຫຼ້າສຸດ.</string>
<string name="widget_configuration_title">ເລືອກອຸປະກອນ</string>
<string name="widget_configuration_description">ເລືອກໂປຣໄຟລ໌ອຸປະກອນທີ່ວິດເຈັດນີ້ຄວນສະແດງ.</string>
<string name="common_feature_requires_pro_msg">ຄຸນສົມບັດນີ້ຕ້ອງການ CAPod Pro.</string>
<string name="widget_no_data_label">ບໍ່ມີຂໍ້ມູນ</string>
<string name="widget_config_appearance_label">ລັກສະການ</string>
<string name="widget_config_preset_label">ຕັ້ງໂຫມດ</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Valdiklis, rodantis paskutinę žinomą įrenginio būseną.</string>
<string name="widget_configuration_title">Pasirinkite įrenginį</string>
<string name="widget_configuration_description">Pasirinkite, kurio įrenginio profilį šis valdiklis turėtų rodyti.</string>
<string name="common_feature_requires_pro_msg">Šiai funkcijai reikalingas CAPod Pro.</string>
<string name="widget_no_data_label">Nėra duomenų</string>
<string name="widget_config_appearance_label">Išvaizda</string>
<string name="widget_config_preset_label">Nustatymai</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Logrīks, kas rāda pēdējo zināmo ierīces statusu.</string>
<string name="widget_configuration_title">Izvēlieties ierīci</string>
<string name="widget_configuration_description">Izvēlieties, kuru ierīces profilu šim logrīkam vajadzētu rādīt.</string>
<string name="common_feature_requires_pro_msg">Šī funkcija prasa CAPod Pro.</string>
<string name="widget_no_data_label">Nav datu</string>
<string name="widget_config_appearance_label">Izskats</string>
<string name="widget_config_preset_label">Priekšiestatījumi</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Виџет што го прикажува последниот познат статус на уредот.</string>
<string name="widget_configuration_title">Изберете уред</string>
<string name="widget_configuration_description">Изберете кој профил на уред треба да го прикажува овој виџет.</string>
<string name="common_feature_requires_pro_msg">Оваа функција бара CAPod Pro.</string>
<string name="widget_no_data_label">Нема податоци</string>
<string name="widget_config_appearance_label">Изглед</string>
<string name="widget_config_preset_label">Предустановки</string>
@@ -103,7 +103,6 @@
<string name="widget_description">അവസാനമായി അറിയപ്പെടുന്ന ഉപകരണ നില കാണിക്കുന്ന ഒരു വിഡ്ജറ്റ്.</string>
<string name="widget_configuration_title">ഉപകരണം തിരഞ്ഞെടുക്കുക</string>
<string name="widget_configuration_description">ഈ വിഡ്ജറ്റ് ഏത് ഉപകരണ പ്രൊഫൈൽ പ്രദർശിപ്പിക്കണമെന്ന് തിരഞ്ഞെടുക്കുക.</string>
<string name="common_feature_requires_pro_msg">ഈ സവിശേഷതയ്ക്ക് CAPod Pro ആവശ്യമാണ്.</string>
<string name="widget_no_data_label">ഡാറ്റ ഇല്ല</string>
<string name="widget_config_appearance_label">രൂപരേഖ</string>
<string name="widget_config_preset_label">പ്രിസെറ്റുകള്‍</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Төхөөрөмжийн хамгийн сүүлийн үеийн мэдэгдэж буй төлвийг харуулсан виджет.</string>
<string name="widget_configuration_title">Төхөөрөмж сонгох</string>
<string name="widget_configuration_description">Энэ виджет аль төхөөрөмжийн профайлыг харуулахыг сонгоно уу.</string>
<string name="common_feature_requires_pro_msg">Энэ функц нь CAPod Pro шаарддаг.</string>
<string name="widget_no_data_label">Өгөгдөл алга</string>
<string name="widget_config_appearance_label">Гадаад төрх</string>
<string name="widget_config_preset_label">Урьдчилсан сонголтууд</string>
@@ -103,7 +103,6 @@
<string name="widget_description">डिव्हाइसची शेवटची ज्ञात स्थिती दर्शवणारे विजेट.</string>
<string name="widget_configuration_title">डिव्हाइस निवडा</string>
<string name="widget_configuration_description">या विजेटने कोणत्या डिव्हाइस प्रोफाइलचे प्रदर्शन करावे ते निवडा.</string>
<string name="common_feature_requires_pro_msg">या वैशिष्ट्यासाठी CAPod Pro आवश्यक आहे.</string>
<string name="widget_no_data_label">डेटा नाही</string>
<string name="widget_config_appearance_label">दिखावट</string>
<string name="widget_config_preset_label">प्रीसेट्स</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Widget yang menunjukkan status peranti terakhir yang diketahui.</string>
<string name="widget_configuration_title">Pilih Peranti</string>
<string name="widget_configuration_description">Pilih profil peranti yang perlu dipaparkan oleh widget ini.</string>
<string name="common_feature_requires_pro_msg">Ciri ini memerlukan CAPod Pro.</string>
<string name="widget_no_data_label">Tiada data</string>
<string name="widget_config_appearance_label">Penampilan</string>
<string name="widget_config_preset_label">Praset</string>
@@ -103,7 +103,6 @@
<string name="widget_description">စက်ပစ္စည်း၏ နောက်ဆုံးသိရှိထားသော အခြေအနေကိုပြသသည့် ဝစ်ဂျက်။</string>
<string name="widget_configuration_title">စက်ပစ္စည်းရွေးချယ်ပါ</string>
<string name="widget_configuration_description">ဤဝစ်ဂျက်တွင် မည်သည့်စက်ပစ္စည်းပရိုဖိုင်ကို ပြသမည်ကို ရွေးချယ်ပါ။</string>
<string name="common_feature_requires_pro_msg">ဤအင်္ဂါရပ်အတွက် CAPod Pro လိုအပ်သည်။</string>
<string name="widget_no_data_label">ဒေတာမရှိပါ</string>
<string name="widget_config_appearance_label">အသွင်အပြင်</string>
<string name="widget_config_preset_label">စိတ်ကြိုက်ချမ်းသာများ</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">En widget som viser sist kjent enhetsstatus.</string>
<string name="widget_configuration_title">Velg enhet</string>
<string name="widget_configuration_description">Velg hvilken enhetsprofil denne widgeten skal vise.</string>
<string name="common_feature_requires_pro_msg">Denne funksjonen krever CAPod Pro.</string>
<string name="widget_no_data_label">Ingen data</string>
<string name="widget_config_appearance_label">Utseende</string>
<string name="widget_config_preset_label">Forhåndsinnstillinger</string>
@@ -103,7 +103,6 @@
<string name="widget_description">उपकरणको अन्तिम ज्ञात स्थिति देखाउने विजेट।</string>
<string name="widget_configuration_title">उपकरण छान्नुहोस्</string>
<string name="widget_configuration_description">यो विजेटले कुन उपकरण प्रोफाइल देखाउनुपर्छ भनेर छान्नुहोस्।</string>
<string name="common_feature_requires_pro_msg">यो सुविधाको लागि CAPod Pro आवश्यक छ।</string>
<string name="widget_no_data_label">डाटा छैन</string>
<string name="widget_config_appearance_label">उपस्थिति</string>
<string name="widget_config_preset_label">प्रिसेट्स</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Een widget dat de laatst gekende apparaatstatus toont.</string>
<string name="widget_configuration_title">Selecteer Apparaat</string>
<string name="widget_configuration_description">Kies welk apparaatprofiel deze widget moet weergeven.</string>
<string name="common_feature_requires_pro_msg">Voor deze functie is CAPod Pro vereist.</string>
<string name="widget_no_data_label">Geen data</string>
<string name="widget_config_appearance_label">Uiterlijk</string>
<string name="widget_config_preset_label">Vooringestelde waarden</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Widżet pokazujący ostatni znany stan urządzenia.</string>
<string name="widget_configuration_title">Wybierz urządzenie</string>
<string name="widget_configuration_description">Wybierz profil urządzenia, które ma być wyświetlane przez widżet.</string>
<string name="common_feature_requires_pro_msg">Funkcja wymaga CAPod Pro.</string>
<string name="widget_no_data_label">Brak danych</string>
<string name="widget_config_appearance_label">Wygląd</string>
<string name="widget_config_preset_label">Predefiniowane</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Um widget que mostra o último status conhecido do dispositivo.</string>
<string name="widget_configuration_title">Selecionar Dispositivo</string>
<string name="widget_configuration_description">Escolha qual o perfil de dispositivo este widget deve exibir.</string>
<string name="common_feature_requires_pro_msg">Este recurso requer CAPod Pro.</string>
<string name="widget_no_data_label">Sem Informação</string>
<string name="widget_config_appearance_label">Aparência</string>
<string name="widget_config_preset_label">Predefinições</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Um widget que mostra o último estado conhecido do dispositivo.</string>
<string name="widget_configuration_title">Selecionar Dispositivo</string>
<string name="widget_configuration_description">Escolha qual perfil de dispositivo este widget deve apresentar.</string>
<string name="common_feature_requires_pro_msg">Esta funcionalidade requer CAPod Pro.</string>
<string name="widget_no_data_label">Sem dados</string>
<string name="widget_config_appearance_label">Aparência</string>
<string name="widget_config_preset_label">Predefinições</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">In widget che mussa il davos stadi enconuschent da l\'apparat.</string>
<string name="widget_configuration_title">Tscherner l\'apparat</string>
<string name="widget_configuration_description">Tscherner tge profil d\'apparat quest widget duai mussar.</string>
<string name="common_feature_requires_pro_msg">Questa funcziun pretenda CAPod Pro.</string>
<string name="widget_no_data_label">Naginas datas</string>
<string name="widget_config_appearance_label">Apparenza</string>
<string name="widget_config_preset_label">Presets</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Un widget care arată starea ultimului dispozitiv cunoscut.</string>
<string name="widget_configuration_title">Selectare Dispozitiv</string>
<string name="widget_configuration_description">Alegeți ce profil de dispozitiv ar trebui să afișeze acest widget.</string>
<string name="common_feature_requires_pro_msg">Această funcție necesită CAPod Pro.</string>
<string name="widget_no_data_label">Fără date</string>
<string name="widget_config_appearance_label">Aspect</string>
<string name="widget_config_preset_label">Presetări</string>
-1
View File
@@ -104,7 +104,6 @@ AL_Cool_T</string>
<string name="widget_description">Виджет показывающий последний известный статус устройства.</string>
<string name="widget_configuration_title">Выберите устройство</string>
<string name="widget_configuration_description">Выберите, какой профиль устройства должен отображать виджет.</string>
<string name="common_feature_requires_pro_msg">Эта функция требует CAPod Pro.</string>
<string name="widget_no_data_label">Нет данных</string>
<string name="widget_config_appearance_label">Внешний вид</string>
<string name="widget_config_preset_label">Предустановки</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Unu widget chi mustrat s\'ùrtimu istadu connotu de su dispositivu.</string>
<string name="widget_configuration_title">Seletziona dispositivu</string>
<string name="widget_configuration_description">Sceglide cale profilu de dispositivu custu widget depet mustrare.</string>
<string name="common_feature_requires_pro_msg">Custa funtzione recheret CAPod Pro.</string>
<string name="widget_no_data_label">Perunu datu</string>
<string name="widget_config_appearance_label">Apparitzia</string>
<string name="widget_config_preset_label">Preset</string>
@@ -103,7 +103,6 @@
<string name="widget_description">අවසාන වරට දන්නා උපාංග තත්ත්වය පෙන්වන විජට් එකක්.</string>
<string name="widget_configuration_title">උපාංගය තෝරන්න</string>
<string name="widget_configuration_description">මෙම විජට් එක කුමන උපාංග පැතිකඩ පෙන්විය යුතුද යන්න තෝරන්න.</string>
<string name="common_feature_requires_pro_msg">මෙම විශේෂාංගයට CAPod Pro අවශ්‍ය වේ.</string>
<string name="widget_no_data_label">දත්ත නොමැත</string>
<string name="widget_config_appearance_label">පෙනුම</string>
<string name="widget_config_preset_label">පෙර සැකසුම්</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Miniaplikácia zobrazujúca posledný známy stav zariadenia.</string>
<string name="widget_configuration_title">Vybrať zariadenie</string>
<string name="widget_configuration_description">Vyberte, ktorý profil zariadenia by mal tento widget zobrazovať.</string>
<string name="common_feature_requires_pro_msg">Táto funkcia vyžaduje CAPod Pro.</string>
<string name="widget_no_data_label">Žiadne údaje</string>
<string name="widget_config_appearance_label">Vzhľad</string>
<string name="widget_config_preset_label">Prednastavenia</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Pripomoček, ki prikazuje zadnje znano stanje naprave.</string>
<string name="widget_configuration_title">Izberi napravo</string>
<string name="widget_configuration_description">Izberite, kateri profil naprave naj ta pripomoček prikazuje.</string>
<string name="common_feature_requires_pro_msg">Ta funkcija zahteva CAPod Pro.</string>
<string name="widget_no_data_label">Ni podatkov</string>
<string name="widget_config_appearance_label">Videz</string>
<string name="widget_config_preset_label">Prednastavke</string>
@@ -103,7 +103,6 @@
<string name="widget_description">Një widget që tregon statusin e fundit të njohur të pajisjes.</string>
<string name="widget_configuration_title">Zgjidh pajisjen</string>
<string name="widget_configuration_description">Zgjidhni cilin profil pajisje duhet të shfaqë ky widget.</string>
<string name="common_feature_requires_pro_msg">Kjo veçori kërkon CAPod Pro.</string>
<string name="widget_no_data_label">Asnjë e dhënë</string>
<string name="widget_config_appearance_label">Pamja dhe ndjesia</string>
<string name="widget_config_preset_label">Parapërmbledhjet</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Виџет који приказује последњи познати статус уређаја.</string>
<string name="widget_configuration_title">Изаберите уређај</string>
<string name="widget_configuration_description">Изаберите који профил уређаја овај виџет треба да приказује.</string>
<string name="common_feature_requires_pro_msg">Ова функција захтева CAPod Pro.</string>
<string name="widget_no_data_label">Нема података</string>
<string name="widget_config_appearance_label">Изглед</string>
<string name="widget_config_preset_label">Предложени шаблони</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">En widget som visar den senast kända enhetsstatusen.</string>
<string name="widget_configuration_title">Välj enhet</string>
<string name="widget_configuration_description">Välj vilken enhetsprofil denna widget ska visa.</string>
<string name="common_feature_requires_pro_msg">Denna funktion kräver CAPod Pro.</string>
<string name="widget_no_data_label">Ingen data</string>
<string name="widget_config_appearance_label">Utseende</string>
<string name="widget_config_preset_label">Förinställningar</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Wijeti inayoonyesha hali ya mwisho inayojulikana ya kifaa.</string>
<string name="widget_configuration_title">Chagua Kifaa</string>
<string name="widget_configuration_description">Chagua wasifu gani wa kifaa wijeti hii inapaswa kuonyesha.</string>
<string name="common_feature_requires_pro_msg">Kipengele hiki kinahitaji CAPod Pro.</string>
<string name="widget_no_data_label">Hakuna data</string>
<string name="widget_config_appearance_label">Muonekano</string>
<string name="widget_config_preset_label">Maamuzi mapema</string>
@@ -103,7 +103,6 @@
<string name="widget_description">கடைசியாக அறியப்பட்ட சாதன நிலையைக் காட்டும் ஒரு விட்ஜெட்.</string>
<string name="widget_configuration_title">சாதனத்தைத் தேர்ந்தெடு</string>
<string name="widget_configuration_description">இந்த விட்ஜெட் எந்த சாதன சுயவிவரத்தைக் காட்ட வேண்டும் என்பதைத் தேர்ந்தெடுக்கவும்.</string>
<string name="common_feature_requires_pro_msg">இந்த அம்சத்திற்கு CAPod Pro தேவை.</string>
<string name="widget_no_data_label">தரவு இல்லை</string>
<string name="widget_config_appearance_label">தோற்றம்</string>
<string name="widget_config_preset_label">முன்னமைப்புகள்</string>
@@ -103,7 +103,6 @@
<string name="widget_description">చివరిగా తెలిసిన పరికర స్థితిని చూపే విడ్జెట్.</string>
<string name="widget_configuration_title">పరికరాన్ని ఎంచుకోండి</string>
<string name="widget_configuration_description">ఈ విడ్జెట్ ఏ పరికర ప్రొఫైల్‌ను ప్రదర్శించాలో ఎంచుకోండి.</string>
<string name="common_feature_requires_pro_msg">ఈ ఫీచర్‌కు CAPod Pro అవసరం.</string>
<string name="widget_no_data_label">డేటా లేదు</string>
<string name="widget_config_appearance_label">ఆవిర్భావం</string>
<string name="widget_config_preset_label">ప్రీసెట్‌లు</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">วิดเจ็ตที่แสดงสถานะอุปกรณ์ล่าสุดที่ทราบ</string>
<string name="widget_configuration_title">เลือกอุปกรณ์</string>
<string name="widget_configuration_description">เลือกโปรไฟล์อุปกรณ์ที่วิดเจ็ตนี้ควรแสดง</string>
<string name="common_feature_requires_pro_msg">คุณสมบัตินี้ต้องการ CAPod Pro</string>
<string name="widget_no_data_label">ไม่มีข้อมูล</string>
<string name="widget_config_appearance_label">ลักษณะที่ปรากฏ</string>
<string name="widget_config_preset_label">พรีเซ็ต</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Bilinen son cihaz durumunu gösteren bir pencere öğesi (widget).</string>
<string name="widget_configuration_title">Cihaz Seçin</string>
<string name="widget_configuration_description">Bu widget\'ın hangi cihaz profilini göstereceğini seçin.</string>
<string name="common_feature_requires_pro_msg">Bu özellik CAPod Pro gerektirir.</string>
<string name="widget_no_data_label">Veri yok</string>
<string name="widget_config_appearance_label">Görünüm</string>
<string name="widget_config_preset_label">Ön Ayarlar</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Віджет, який показує останній відомий стан пристрою.</string>
<string name="widget_configuration_title">Оберіть пристрій</string>
<string name="widget_configuration_description">Оберіть, який профіль пристрою має відображати цей віджет.</string>
<string name="common_feature_requires_pro_msg">Ця функція вимагає CAPod Pro.</string>
<string name="widget_no_data_label">Немає даних</string>
<string name="widget_config_appearance_label">Зовнішній вигляд</string>
<string name="widget_config_preset_label">Попередні встановлення</string>
@@ -103,7 +103,6 @@
<string name="widget_description">ایک ویجیٹ جو آخری معلوم آلہ کی حیثیت دکھاتا ہے۔</string>
<string name="widget_configuration_title">آلہ منتخب کریں</string>
<string name="widget_configuration_description">منتخب کریں کہ یہ ویجیٹ کون سا آلہ پروفائل دکھائے۔</string>
<string name="common_feature_requires_pro_msg">اس خصوصیت کے لئے CAPod Pro درکار ہے۔</string>
<string name="widget_no_data_label">کوئی ڈیٹا نہیں</string>
<string name="widget_config_appearance_label">ظہور</string>
<string name="widget_config_preset_label">پری سیٹنگز</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Qurilmaning oxirgi ma\'lum holatini ko\'rsatadigan vidjet.</string>
<string name="widget_configuration_title">Qurilmani tanlang</string>
<string name="widget_configuration_description">Ushbu vidjet qaysi qurilma profilini ko\'rsatishi kerakligini tanlang.</string>
<string name="common_feature_requires_pro_msg">Bu funksiya CAPod Pro talab qiladi.</string>
<string name="widget_no_data_label">Ma\'lumot yo\'q</string>
<string name="widget_config_appearance_label">Tashqi korinish</string>
<string name="widget_config_preset_label">Presetlar</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Một widget hiển thị trạng thái thiết bị được biết đến gần đây nhất.</string>
<string name="widget_configuration_title">Chọn thiết bị</string>
<string name="widget_configuration_description">Chọn hồ sơ thiết bị mà tiện ích này sẽ hiển thị.</string>
<string name="common_feature_requires_pro_msg">Tính năng này yêu cầu CAPod Pro.</string>
<string name="widget_no_data_label">Không có dữ liệu</string>
<string name="widget_config_appearance_label">Giao diện</string>
<string name="widget_config_preset_label">Cài đặt sẵn</string>
@@ -103,7 +103,6 @@
<string name="widget_description">显示上次连接设备状态的小部件</string>
<string name="widget_configuration_title">选择设备</string>
<string name="widget_configuration_description">选择此部件应显示的设备配置文件。</string>
<string name="common_feature_requires_pro_msg">此功能需要 CAPod Pro。</string>
<string name="widget_no_data_label">暂无数据</string>
<string name="widget_config_appearance_label">外观</string>
<string name="widget_config_preset_label">预设</string>
@@ -103,7 +103,6 @@
<string name="widget_description">顯示最後已知裝置狀態的小工具。</string>
<string name="widget_configuration_title">選擇裝置</string>
<string name="widget_configuration_description">選擇此小工具要顯示的裝置設定檔。</string>
<string name="common_feature_requires_pro_msg">此功能需要 CAPod Pro。</string>
<string name="widget_no_data_label">無資料</string>
<string name="widget_config_appearance_label">外觀</string>
<string name="widget_config_preset_label">預設</string>
@@ -103,7 +103,6 @@
<string name="widget_description">顯示最後已知裝置狀態的小工具。</string>
<string name="widget_configuration_title">選擇裝置</string>
<string name="widget_configuration_description">選擇此小工具要顯示的裝置設定檔。</string>
<string name="common_feature_requires_pro_msg">此功能需 CAPod Pro。</string>
<string name="widget_no_data_label">無資料</string>
<string name="widget_config_appearance_label">外觀</string>
<string name="widget_config_preset_label">預設</string>
-1
View File
@@ -103,7 +103,6 @@
<string name="widget_description">Iwindi elibonisa isimo sakamuva esaziwayo sedivayisi.</string>
<string name="widget_configuration_title">Khetha Idivayisi</string>
<string name="widget_configuration_description">Khetha ukuthi iyiphi iphrofayili yedivayisi leli wiji okufanele liyibonise.</string>
<string name="common_feature_requires_pro_msg">Lesi sici sidinga i-CAPod Pro.</string>
<string name="widget_no_data_label">Ayikho idatha</string>
<string name="widget_config_appearance_label">Ukuonakala</string>
<string name="widget_config_preset_label">Imikhakha</string>
+1 -1
View File
@@ -5,6 +5,7 @@
<string name="general_copy_action">Copy</string>
<string name="general_thank_you_label">Thank you</string>
<string name="general_upgrade_action">Upgrade</string>
<string name="common_feature_requires_pro_msg">Upgrade to unlock.</string>
<string name="general_donate_action">Donate</string>
<string name="general_check_action">Check</string>
<string name="general_close_action">Close</string>
@@ -120,7 +121,6 @@
<string name="widget_config_screen_title">Widget Configuration</string>
<string name="widget_configuration_title">Select Device</string>
<string name="widget_configuration_description">Choose which device profile this widget should display.</string>
<string name="common_feature_requires_pro_msg">This feature requires CAPod Pro.</string>
<string name="widget_no_data_label">No data</string>
<string name="widget_error_loading_label">Error loading widget</string>