From d66ddfeb8bca1a535fa7ce7c95863a5230f0909b Mon Sep 17 00:00:00 2001 From: sameerasw Date: Thu, 22 Oct 2026 22:00:26 +0530 Subject: [PATCH 1/7] refactor: skip progress notifications in notification listener when handled by progress plugin --- .../essentials/services/NotificationListener.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sameerasw/essentials/services/NotificationListener.kt b/app/src/main/java/com/sameerasw/essentials/services/NotificationListener.kt index 7045073cd..a705aae64 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/NotificationListener.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/NotificationListener.kt @@ -1085,7 +1085,9 @@ class NotificationListener : NotificationListenerService() { scheduleProgressRefresh() } - if (!isRepost && isHeadsUpNotification(sbn, rankingMap, allowSilent = true)) { + if (isHandledAsProgress(sbn)) { + // Shown by the progress plugin instead + } else if (!isRepost && isHeadsUpNotification(sbn, rankingMap, allowSilent = true)) { val alert = extractNotificationAlert(sbn)?.copy( isSilent = isSilentNotification(sbn, rankingMap), blockedByDnd = isBlockedByDnd(sbn, rankingMap), @@ -2098,6 +2100,7 @@ class NotificationListener : NotificationListenerService() { private fun hubAlertOf(sbn: StatusBarNotification, rankingMap: RankingMap?): ActiveNotificationAlert? { if (sbn.packageName == packageName || !hasReadableExtras(sbn) || isMediaNotification(sbn)) return null + if (isHandledAsProgress(sbn)) return null if ((sbn.notification.flags and Notification.FLAG_GROUP_SUMMARY) != 0 && !isStandaloneSummary(sbn)) return null return extractNotificationAlert(sbn)?.copy( isSilent = isSilentNotification(sbn, rankingMap), @@ -2109,6 +2112,13 @@ class NotificationListener : NotificationListenerService() { ) } + private fun isHandledAsProgress(sbn: StatusBarNotification): Boolean { + if (!SettingsRepository(applicationContext).isIslandNotifKeepProgressEnabled()) return false + val extras = sbn.notification?.extras ?: return false + return extras.getInt(Notification.EXTRA_PROGRESS_MAX, 0) > 0 || + extras.getBoolean(Notification.EXTRA_PROGRESS_INDETERMINATE, false) + } + fun hubAlerts(): List = safeActiveNotifications().orEmpty().mapNotNull { hubAlertOf(it, null) }.sortedByDescending { it.timestamp } From 61399b8e69ab3c1124de347e7a24704f6a8afb9e Mon Sep 17 00:00:00 2001 From: sameerasw Date: Thu, 22 Oct 2026 22:15:25 +0530 Subject: [PATCH 2/7] feat: add customizable island icon color settings --- .../data/repository/SettingsRepository.kt | 5 ++ .../island/plugins/signal/SignalBars.kt | 4 +- .../island/service/IslandCoordinator.kt | 14 +++++ .../essentials/island/ui/IslandLayoutSpec.kt | 3 ++ .../essentials/island/ui/IslandRoot.kt | 26 ++++++++++ .../essentials/island/ui/IslandStack.kt | 9 +++- .../island/ui/components/IslandComponents.kt | 14 ++++- .../ui/core/pickers/ColorSwatchPicker.kt | 19 +++++++ .../features/display/IslandSubSettingsUI.kt | 52 +++++++++++++++++++ app/src/main/res/values/strings.xml | 4 ++ 10 files changed, 145 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt index 1879056d5..df8e511ff 100644 --- a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt +++ b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt @@ -560,6 +560,11 @@ class SettingsRepository( const val KEY_ISLAND_SHOW_CONSCIOUS_GATE = "island_show_conscious_gate" const val KEY_ISLAND_SHOW_TIME_BATTERY = "island_show_time_battery" const val KEY_ISLAND_TIME_SHOW_SECONDS = "island_time_show_seconds" + const val KEY_ISLAND_ICON_COLOR_MODE = "island_icon_color_mode" + const val KEY_ISLAND_ICON_COLOR_CUSTOM = "island_icon_color_custom" + const val KEY_ISLAND_ICON_MATERIAL_YOU = "island_icon_material_you" + const val ISLAND_ICON_COLOR_DYNAMIC = "dynamic" + const val ISLAND_ICON_COLOR_CUSTOM = "custom" const val KEY_ISLAND_TIME_FORMAT = "island_time_format" const val KEY_ISLAND_TIME_PERIOD = "island_time_period" const val KEY_ISLAND_TIME_LEADING_ZERO = "island_time_leading_zero" diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalBars.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalBars.kt index b91e8790d..b5f4b7e98 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalBars.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalBars.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.components.resolveIconTint private const val LABEL_SHIFT_X = 0.15f private const val LABEL_SHIFT_Y = 0.15f @@ -64,7 +65,8 @@ fun SignalBars(level: Int, color: Color, label: String?, modifier: Modifier = Mo } @Composable -fun SignalIndicator(wifiLevel: Int?, mobileLevel: Int, color: Color, label: String?, modifier: Modifier = Modifier) { +fun SignalIndicator(wifiLevel: Int?, mobileLevel: Int, rawColor: Color, label: String?, modifier: Modifier = Modifier) { + val color = resolveIconTint(rawColor) AnimatedContent( targetState = wifiLevel, transitionSpec = { diff --git a/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt b/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt index 6fc070e78..9690f3ce5 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt @@ -670,6 +670,8 @@ class IslandCoordinator( val scale = if (flatExpanded) 1f else settings.getIslandExpandedScale().coerceIn(1f, 1.3f) val lineWidth = minOf(settings.getIslandMaxWidth(), available) val expandedWidth = minOf(settings.getIslandExpandedWidth(), available / scale) + val iconCustomMode = settings.getString(SettingsRepository.KEY_ISLAND_ICON_COLOR_MODE, null) == SettingsRepository.ISLAND_ICON_COLOR_CUSTOM + val iconMaterialYou = settings.getBoolean(SettingsRepository.KEY_ISLAND_ICON_MATERIAL_YOU, true) spec.value = IslandLayoutSpec( cameraDiameter = (geo.diameter / density).dp, cameraGap = (geo.gap / density).dp, @@ -709,6 +711,15 @@ class IslandCoordinator( else -> QueueStyle.Stack }, queueInline = settings.isIslandNotifQueueInlineEnabled(), + iconColorCustom = if (iconCustomMode && !iconMaterialYou) { + runCatching { + Color(AndroidColor.parseColor(settings.getString(SettingsRepository.KEY_ISLAND_ICON_COLOR_CUSTOM, null) ?: "#FFFFFF")) + }.getOrDefault(Color.White) + } else { + null + }, + iconDynamic = !iconCustomMode, + iconMaterialYou = iconMaterialYou, ) windowHost.maxWidthPx = (maxOf(lineWidth, expandedWidth * scale) * density).toInt() windowHost.updateGeometry(geo) @@ -819,6 +830,9 @@ class IslandCoordinator( SettingsRepository.KEY_ISLAND_MAX_WIDTH, SettingsRepository.KEY_ISLAND_CUTOUT_GAP, SettingsRepository.KEY_ISLAND_EXPANDED_WIDTH, + SettingsRepository.KEY_ISLAND_ICON_COLOR_MODE, + SettingsRepository.KEY_ISLAND_ICON_COLOR_CUSTOM, + SettingsRepository.KEY_ISLAND_ICON_MATERIAL_YOU, SettingsRepository.KEY_ISLAND_BORDER_OUTLINE_ENABLED, SettingsRepository.KEY_ISLAND_BORDER_OUTLINE_COLOR, SettingsRepository.KEY_ISLAND_BORDER_OUTLINE_DYNAMIC, diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt index ec64f347d..a3b69d8ec 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt @@ -40,6 +40,9 @@ data class IslandLayoutSpec( val pulseDurationMs: Int = 1450, val queueStyle: QueueStyle = QueueStyle.Stack, val queueInline: Boolean = false, + val iconColorCustom: Color? = null, + val iconDynamic: Boolean = true, + val iconMaterialYou: Boolean = true, ) { val compactHeight: Dp get() = cameraDiameter + verticalGap * 2 val cameraSlotWidth: Dp get() = (cameraDiameter + cameraGap * 2) * cameraPresence diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt index 7dcc04510..643078162 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt @@ -68,6 +68,7 @@ import androidx.compose.ui.graphics.Path import androidx.compose.ui.geometry.Rect import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import com.sameerasw.essentials.island.ui.components.LocalIslandIconColor import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.derivedStateOf @@ -141,6 +142,31 @@ fun IslandRoot( onTargetBoundsChanged: (IntRect) -> Unit, registerCollapseAnimator: (((() -> Unit) -> Unit)?) -> Unit = {}, showCameraRing: Boolean = false, +) { + val primary = MaterialTheme.colorScheme.primary + val focused = state.items[state.focusedKey] + val dynamicAccent = (focused?.outlineAccent ?: focused?.accent) + ?: state.arrangement.visibleItems.firstNotNullOfOrNull { key -> state.items[key]?.let { it.outlineAccent ?: it.accent } } + val iconBase = if (targetSpec.iconMaterialYou) primary else Color.White + val iconTarget = if (targetSpec.iconDynamic) { + dynamicAccent ?: iconBase + } else { + targetSpec.iconColorCustom ?: iconBase + } + val iconColor by animateColorAsState(iconTarget, label = "islandIconColor") + CompositionLocalProvider(LocalIslandIconColor provides iconColor) { + IslandRootContent(state, targetSpec, actions, onTargetBoundsChanged, registerCollapseAnimator, showCameraRing) + } +} + +@Composable +private fun IslandRootContent( + state: IslandUiState, + targetSpec: IslandLayoutSpec, + actions: IslandActions, + onTargetBoundsChanged: (IntRect) -> Unit, + registerCollapseAnimator: (((() -> Unit) -> Unit)?) -> Unit = {}, + showCameraRing: Boolean = false, ) { val view = LocalView.current val density = LocalDensity.current diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandStack.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandStack.kt index 5d76ceae7..a2680518e 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandStack.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandStack.kt @@ -1,6 +1,8 @@ package com.sameerasw.essentials.island.ui import com.sameerasw.essentials.island.model.SideBubble +import androidx.compose.ui.graphics.lerp +import com.sameerasw.essentials.island.ui.components.LocalIslandIconColor import com.sameerasw.essentials.island.model.CompactCell import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.MutableTransitionState @@ -195,6 +197,9 @@ private fun queueVisible(icons: List, max: Int): List { private const val OVERFLOW_KEY = "queue_overflow" +@Composable +private fun overflowBackground(): Color = lerp(LocalIslandIconColor.current ?: Color.White, Color.Black, 0.65f) + private fun queueOverflowIcon(count: Int) = StackIcon(OVERFLOW_KEY) { size -> QueueOverflowCounter(count, size) } @Composable @@ -203,7 +208,7 @@ private fun QueueOverflowCounter(count: Int, size: Dp) { Modifier .size(size) .clip(CircleShape) - .background(Color.White.copy(alpha = 0.18f)), + .background(overflowBackground()), contentAlignment = Alignment.Center, ) { AnimatedContent( @@ -385,7 +390,7 @@ fun IslandStackPill( .padding(4.dp) .size(iconSize) .clip(CircleShape) - .background(Color.White.copy(alpha = 0.18f)), + .background(overflowBackground()), contentAlignment = Alignment.Center, ) { Text( diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/components/IslandComponents.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/components/IslandComponents.kt index aee81ee22..73e380be7 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/components/IslandComponents.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/components/IslandComponents.kt @@ -19,6 +19,7 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.runtime.Composable +import androidx.compose.runtime.compositionLocalOf import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.layout.onSizeChanged import androidx.compose.runtime.setValue @@ -87,9 +88,18 @@ fun IslandBitmap( } } +val LocalIslandIconColor = compositionLocalOf { null } + +@Composable +fun resolveIconTint(tint: Color): Color { + val override = LocalIslandIconColor.current ?: return tint + if (tint.red == 0f && tint.green == 0f && tint.blue == 0f) return tint + return override.copy(alpha = override.alpha * tint.alpha) +} + @Composable fun IslandIcon(res: Int, tint: Color = Color.White, size: Dp = 20.dp, modifier: Modifier = Modifier) { - Icon(painterResource(res), contentDescription = null, tint = tint, modifier = modifier.squareFit(size)) + Icon(painterResource(res), contentDescription = null, tint = resolveIconTint(tint), modifier = modifier.squareFit(size)) } @Composable @@ -131,7 +141,7 @@ fun EqualizerBars( @Composable fun BatteryRing(level: Int, color: Color, modifier: Modifier = Modifier, showLevel: Boolean = false, size: Dp = if (showLevel) 24.dp else 18.dp) { val sweep by animateFloatAsState(360f * level.coerceIn(0, 100) / 100f, IslandMotion.float(), label = "batterySweep") - val ringColor by animateColorAsState(color, label = "batteryColor") + val ringColor by animateColorAsState(resolveIconTint(color), label = "batteryColor") var ringPx by remember { mutableStateOf(0) } val density = LocalDensity.current Box(modifier.squareFit(size).onSizeChanged { ringPx = minOf(it.width, it.height) }, contentAlignment = Alignment.Center) { diff --git a/app/src/main/java/com/sameerasw/essentials/ui/core/pickers/ColorSwatchPicker.kt b/app/src/main/java/com/sameerasw/essentials/ui/core/pickers/ColorSwatchPicker.kt index 81b8ef97a..ecc5696b8 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/core/pickers/ColorSwatchPicker.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/core/pickers/ColorSwatchPicker.kt @@ -61,6 +61,25 @@ val DUO_PRESET_COLORS = "#FF1744", // Bright Red ) +val ISLAND_ICON_PASTEL_COLORS = + listOf( + "#FFFFFF", + "#FFB3BA", + "#FFDFBA", + "#FFFFBA", + "#BAFFC9", + "#A0E7E5", + "#BAE1FF", + "#C7CEEA", + "#D5BAFF", + "#E0BBE4", + "#FFC8DD", + "#FFDAC1", + "#CDEAC0", + "#B4F8C8", + "#FBE7C6", + ) + @OptIn(ExperimentalMaterial3Api::class) @Composable fun ColorSwatchPicker( diff --git a/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt index adff40db5..4d19b1211 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt @@ -47,6 +47,7 @@ import com.sameerasw.essentials.ui.components.sliders.ConfigSliderItem import com.sameerasw.essentials.ui.core.cards.IconToggleItem import com.sameerasw.essentials.ui.core.containers.RoundedCardContainer import com.sameerasw.essentials.ui.core.pickers.ColorSwatchPicker +import com.sameerasw.essentials.ui.core.pickers.ISLAND_ICON_PASTEL_COLORS import com.sameerasw.essentials.ui.core.pickers.SegmentedPicker import com.sameerasw.essentials.ui.core.sheets.AppSelectionSheet import com.sameerasw.essentials.ui.core.sheets.PermissionsBottomSheet @@ -485,6 +486,57 @@ fun IslandVisualsSettingsUI( modifier = Modifier.highlight(highlightSetting == "island_pulse_shadow_on_notification"), ) } + + IslandSettingsSection(R.string.island_section_icon_color) { + val iconSettings = remember { SettingsRepository(context) } + var colorMode by remember { + mutableStateOf(iconSettings.getString(SettingsRepository.KEY_ISLAND_ICON_COLOR_MODE, null) ?: SettingsRepository.ISLAND_ICON_COLOR_DYNAMIC) + } + var materialYou by remember { mutableStateOf(iconSettings.getBoolean(SettingsRepository.KEY_ISLAND_ICON_MATERIAL_YOU, true)) } + var customColor by remember { + mutableStateOf(iconSettings.getString(SettingsRepository.KEY_ISLAND_ICON_COLOR_CUSTOM, null) ?: "#FFFFFF") + } + val modeLabels = mapOf( + SettingsRepository.ISLAND_ICON_COLOR_DYNAMIC to stringResource(R.string.island_icon_color_dynamic), + SettingsRepository.ISLAND_ICON_COLOR_CUSTOM to stringResource(R.string.island_icon_color_custom), + ) + SegmentedPicker( + items = modeLabels.keys.toList(), + selectedItem = colorMode, + onItemSelected = { + HapticUtil.performVirtualKeyHaptic(view) + colorMode = it + iconSettings.putString(SettingsRepository.KEY_ISLAND_ICON_COLOR_MODE, it) + }, + labelProvider = { modeLabels[it].orEmpty() }, + title = R.string.island_section_icon_color, + modifier = Modifier.fillMaxWidth().highlight(highlightSetting == "island_icon_color_mode"), + ) + IconToggleItem( + iconRes = R.drawable.rounded_palette_24, + title = stringResource(R.string.island_icon_material_you_title), + isChecked = materialYou, + onCheckedChange = { checked -> + HapticUtil.performVirtualKeyHaptic(view) + materialYou = checked + iconSettings.putBoolean(SettingsRepository.KEY_ISLAND_ICON_MATERIAL_YOU, checked) + }, + ) + AnimatedVisibility( + visible = colorMode == SettingsRepository.ISLAND_ICON_COLOR_CUSTOM && !materialYou, + enter = fadeIn() + expandVertically(), + exit = fadeOut() + shrinkVertically(), + ) { + ColorSwatchPicker( + selectedColorHex = customColor, + onColorSelected = { + customColor = it + iconSettings.putString(SettingsRepository.KEY_ISLAND_ICON_COLOR_CUSTOM, it) + }, + colors = ISLAND_ICON_PASTEL_COLORS, + ) + } + } } if (showBorderOutlineSheet) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c5d9b1724..9f464ad52 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3174,6 +3174,10 @@ Open app Tap action Time + Icon color + Dynamic + Custom + Use Material You colors Time format System 12 hr From 910cef1ea28ada9be111f42b5e1a127e4f108ac1 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Thu, 22 Oct 2026 22:20:20 +0530 Subject: [PATCH 3/7] feat: add themed text color support to dynamic island UI and settings --- .../data/repository/SettingsRepository.kt | 1 + .../island/plugins/brief/BriefPlugin.kt | 5 ++- .../plugins/calendar/CalendarExpanded.kt | 3 +- .../plugins/navigation/NavigationExpanded.kt | 5 ++- .../notifications/NotificationExpanded.kt | 5 ++- .../plugins/progress/ProgressExpanded.kt | 5 ++- .../island/plugins/travel/TravelPlugin.kt | 3 +- .../island/remote/RemoteBriefCards.kt | 3 +- .../island/service/IslandCoordinator.kt | 2 + .../essentials/island/ui/IslandLayoutSpec.kt | 1 + .../essentials/island/ui/IslandRoot.kt | 5 ++- .../essentials/island/ui/LineTemplate.kt | 39 ++++++++++++++----- .../features/display/IslandSubSettingsUI.kt | 12 ++++++ app/src/main/res/values/strings.xml | 1 + 14 files changed, 68 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt index df8e511ff..be508fa05 100644 --- a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt +++ b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt @@ -560,6 +560,7 @@ class SettingsRepository( const val KEY_ISLAND_SHOW_CONSCIOUS_GATE = "island_show_conscious_gate" const val KEY_ISLAND_SHOW_TIME_BATTERY = "island_show_time_battery" const val KEY_ISLAND_TIME_SHOW_SECONDS = "island_time_show_seconds" + const val KEY_ISLAND_THEMED_TEXT = "island_themed_text" const val KEY_ISLAND_ICON_COLOR_MODE = "island_icon_color_mode" const val KEY_ISLAND_ICON_COLOR_CUSTOM = "island_icon_color_custom" const val KEY_ISLAND_ICON_MATERIAL_YOU = "island_icon_material_you" diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/brief/BriefPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/brief/BriefPlugin.kt index 9d367f4b3..84bd83d83 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/brief/BriefPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/brief/BriefPlugin.kt @@ -109,6 +109,7 @@ import com.sameerasw.essentials.island.model.IslandItem import com.sameerasw.essentials.island.model.IslandPriority import com.sameerasw.essentials.island.plugins.BaseIslandPlugin import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.islandTextColor import com.sameerasw.essentials.island.ui.components.BatteryGlyph import com.sameerasw.essentials.island.ui.components.BatteryRing import com.sameerasw.essentials.island.ui.components.CameraRow @@ -584,7 +585,7 @@ private fun BriefEventRow(event: UpcomingCalendarEvent, now: Long, accent: Color Column(Modifier.weight(1f)) { Text( text = event.title, - style = IslandTextStyles.body.copy(color = Color.White, fontSize = 15.sp), + style = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp), maxLines = 1, overflow = TextOverflow.Ellipsis, ) @@ -628,7 +629,7 @@ private fun BriefPlayer(media: MediaSnapshot, artwork: ImageBitmap?, onClick: () } Spacer(Modifier.width(12.dp)) Column(Modifier.weight(1f)) { - MarqueeText(text = media.title, style = IslandTextStyles.body.copy(color = Color.White, fontSize = 15.sp)) + MarqueeText(text = media.title, style = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp)) MarqueeText(text = media.artist, style = IslandTextStyles.body) } media.actions.like?.let { diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarExpanded.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarExpanded.kt index 9c96518c7..3834bc48d 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarExpanded.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarExpanded.kt @@ -35,6 +35,7 @@ import com.sameerasw.essentials.R import com.sameerasw.essentials.island.model.IslandExpandedScope import com.sameerasw.essentials.island.plugins.soften import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.islandTextColor import com.sameerasw.essentials.island.ui.components.CameraRow import com.sameerasw.essentials.island.ui.components.ConnectedButtonRow import com.sameerasw.essentials.island.ui.components.ConnectedItem @@ -68,7 +69,7 @@ fun CalendarExpanded( "${timeFormat.format(Date(event.startTimeMillis))} – ${timeFormat.format(Date(event.endTimeMillis))}" else -> timeFormat.format(Date(event.startTimeMillis)) } - val detailStyle = IslandTextStyles.body.copy(color = Color.White, fontSize = 15.sp, lineHeight = 20.sp) + val detailStyle = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp, lineHeight = 20.sp) Box(propagateMinConstraints = true) { if (drawBackground && !SurfaceBackdrop { Box(Modifier.fillMaxSize().accentGlow(calendarColor, showGlow, scope.cameraClearance)) }) { diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationExpanded.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationExpanded.kt index 1d9eefe7c..5bca0c4a8 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationExpanded.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationExpanded.kt @@ -21,6 +21,7 @@ import com.sameerasw.essentials.domain.model.NavigationNotificationData import com.sameerasw.essentials.island.model.IslandExpandedScope import com.sameerasw.essentials.island.ui.IslandLayoutSpec import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.islandTextColor import com.sameerasw.essentials.island.ui.components.CameraRow import com.sameerasw.essentials.island.ui.components.ConnectedButtonRow import com.sameerasw.essentials.island.ui.components.ConnectedItem @@ -53,7 +54,7 @@ fun NavigationExpanded( Spacer(Modifier.height(8.dp)) Text( text = data.instruction, - style = IslandTextStyles.title.copy(color = Color.White, fontSize = 20.sp, lineHeight = 25.sp), + style = IslandTextStyles.title.copy(color = islandTextColor(), fontSize = 20.sp, lineHeight = 25.sp), maxLines = 2, overflow = TextOverflow.Ellipsis, modifier = Modifier.fillMaxWidth().padding(horizontal = sidePadding), @@ -63,7 +64,7 @@ fun NavigationExpanded( Spacer(Modifier.height(2.dp)) Text( text = data.eta, - style = IslandTextStyles.body.copy(color = Color.White.copy(alpha = 0.7f)), + style = IslandTextStyles.body.copy(color = islandTextColor(0.7f)), maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier.fillMaxWidth().padding(horizontal = sidePadding), diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationExpanded.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationExpanded.kt index 8a216a644..ff3f243f6 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationExpanded.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationExpanded.kt @@ -54,6 +54,7 @@ import com.sameerasw.essentials.domain.model.ActiveNotificationAlert import com.sameerasw.essentials.domain.model.NotificationActionItem import com.sameerasw.essentials.island.model.IslandExpandedScope import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.islandTextColor import com.sameerasw.essentials.island.ui.components.CameraRow import com.sameerasw.essentials.island.ui.components.ConnectedButtonRow import com.sameerasw.essentials.island.ui.components.ConnectedItem @@ -111,7 +112,7 @@ fun NotificationExpanded( Spacer(Modifier.height(4.dp)) Text( text = message, - style = IslandTextStyles.body.copy(color = Color.White, fontSize = 15.sp, lineHeight = 20.sp), + style = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp, lineHeight = 20.sp), maxLines = 7, overflow = TextOverflow.Ellipsis, modifier = Modifier.fillMaxWidth().padding(horizontal = sidePadding), @@ -205,7 +206,7 @@ private fun ReplyField( scope.keepAlive() }, singleLine = true, - textStyle = IslandTextStyles.body.copy(color = Color.White, fontSize = 15.sp), + textStyle = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp), cursorBrush = SolidColor(accent), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Send, capitalization = KeyboardCapitalization.Sentences), keyboardActions = KeyboardActions(onSend = { send() }), diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/progress/ProgressExpanded.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/progress/ProgressExpanded.kt index 4c8d6bbd9..9e4383d3b 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/progress/ProgressExpanded.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/progress/ProgressExpanded.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.unit.sp import com.sameerasw.essentials.R import com.sameerasw.essentials.island.model.IslandExpandedScope import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.islandTextColor import com.sameerasw.essentials.island.ui.components.CameraRow import com.sameerasw.essentials.island.ui.components.ConnectedButtonRow import com.sameerasw.essentials.island.ui.components.ConnectedItem @@ -51,14 +52,14 @@ fun ProgressExpanded( MarqueeText(text = title, style = IslandTextStyles.title, modifier = Modifier.weight(1f)) }, end = { - if (!indeterminate) Text("${(progress * 100).toInt()}%", style = IslandTextStyles.body.copy(color = Color.White)) + if (!indeterminate) Text("${(progress * 100).toInt()}%", style = IslandTextStyles.body.copy(color = islandTextColor())) }, ) if (!text.isNullOrBlank()) { Spacer(Modifier.height(4.dp)) Text( text = text, - style = IslandTextStyles.body.copy(color = Color.White, fontSize = 15.sp, lineHeight = 20.sp), + style = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp, lineHeight = 20.sp), maxLines = 3, overflow = TextOverflow.Ellipsis, modifier = Modifier.fillMaxWidth().padding(horizontal = sidePadding), diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/travel/TravelPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/travel/TravelPlugin.kt index 989e4a4f8..240ba7a20 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/travel/TravelPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/travel/TravelPlugin.kt @@ -29,6 +29,7 @@ import com.sameerasw.essentials.island.model.IslandPriority import com.sameerasw.essentials.island.model.LineContent import com.sameerasw.essentials.island.plugins.BaseIslandPlugin import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.islandTextColor import com.sameerasw.essentials.island.ui.components.CameraRow import com.sameerasw.essentials.island.ui.components.ConnectedButtonRow import com.sameerasw.essentials.island.ui.components.ConnectedItem @@ -148,7 +149,7 @@ class TravelPlugin : BaseIslandPlugin() { Spacer(Modifier.height(4.dp)) Text( text = trip.time, - style = IslandTextStyles.body.copy(color = Color.White, fontSize = 15.sp, lineHeight = 20.sp), + style = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp, lineHeight = 20.sp), modifier = Modifier.fillMaxWidth().padding(horizontal = sidePadding), ) } diff --git a/app/src/main/java/com/sameerasw/essentials/island/remote/RemoteBriefCards.kt b/app/src/main/java/com/sameerasw/essentials/island/remote/RemoteBriefCards.kt index 833cb7992..e51a6ee59 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/remote/RemoteBriefCards.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/remote/RemoteBriefCards.kt @@ -19,6 +19,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.sameerasw.essentials.island.ui.IslandTextStyles +import com.sameerasw.essentials.island.ui.islandTextColor import com.sameerasw.island.sdk.BriefCardPayload import com.sameerasw.island.sdk.IslandSurfaceKey import kotlinx.coroutines.flow.MutableStateFlow @@ -66,7 +67,7 @@ fun RemoteBriefCardRow(card: RemoteBriefCard, onClick: () -> Unit, modifier: Mod Spacer(Modifier.width(12.dp)) Text( text = payload.subtitle.orEmpty(), - style = IslandTextStyles.body.copy(color = Color.White, fontSize = 14.sp), + style = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 14.sp), maxLines = 2, overflow = TextOverflow.Ellipsis, modifier = Modifier.weight(1f), diff --git a/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt b/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt index 9690f3ce5..9f5fd291d 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/service/IslandCoordinator.kt @@ -719,6 +719,7 @@ class IslandCoordinator( null }, iconDynamic = !iconCustomMode, + themedText = settings.getBoolean(SettingsRepository.KEY_ISLAND_THEMED_TEXT, false), iconMaterialYou = iconMaterialYou, ) windowHost.maxWidthPx = (maxOf(lineWidth, expandedWidth * scale) * density).toInt() @@ -833,6 +834,7 @@ class IslandCoordinator( SettingsRepository.KEY_ISLAND_ICON_COLOR_MODE, SettingsRepository.KEY_ISLAND_ICON_COLOR_CUSTOM, SettingsRepository.KEY_ISLAND_ICON_MATERIAL_YOU, + SettingsRepository.KEY_ISLAND_THEMED_TEXT, SettingsRepository.KEY_ISLAND_BORDER_OUTLINE_ENABLED, SettingsRepository.KEY_ISLAND_BORDER_OUTLINE_COLOR, SettingsRepository.KEY_ISLAND_BORDER_OUTLINE_DYNAMIC, diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt index a3b69d8ec..36dc9c7ed 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandLayoutSpec.kt @@ -42,6 +42,7 @@ data class IslandLayoutSpec( val queueInline: Boolean = false, val iconColorCustom: Color? = null, val iconDynamic: Boolean = true, + val themedText: Boolean = false, val iconMaterialYou: Boolean = true, ) { val compactHeight: Dp get() = cameraDiameter + verticalGap * 2 diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt index 643078162..a54c5eea0 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/IslandRoot.kt @@ -154,7 +154,10 @@ fun IslandRoot( targetSpec.iconColorCustom ?: iconBase } val iconColor by animateColorAsState(iconTarget, label = "islandIconColor") - CompositionLocalProvider(LocalIslandIconColor provides iconColor) { + CompositionLocalProvider( + LocalIslandIconColor provides iconColor, + LocalIslandTextColor provides if (targetSpec.themedText) pastelOf(iconColor) else null, + ) { IslandRootContent(state, targetSpec, actions, onTargetBoundsChanged, registerCollapseAnimator, showCameraRing) } } diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/LineTemplate.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/LineTemplate.kt index 66211c80f..c32fdd9d0 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/LineTemplate.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/LineTemplate.kt @@ -25,6 +25,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb +import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.AnnotatedString @@ -233,15 +235,32 @@ private fun flexFont(weight: Int) = Font( val IslandFontFamily = FontFamily(flexFont(400), flexFont(500), flexFont(600), flexFont(700)) +val LocalIslandTextColor = compositionLocalOf { null } + +@Composable +fun islandTextColor(alpha: Float = 1f): Color = (LocalIslandTextColor.current ?: Color.White).let { it.copy(alpha = it.alpha * alpha) } + +fun pastelOf(color: Color): Color { + val hsv = FloatArray(3) + android.graphics.Color.colorToHSV(color.toArgb(), hsv) + hsv[1] = minOf(hsv[1], 0.4f) + hsv[2] = 1f + return Color(android.graphics.Color.HSVToColor(hsv)) +} + object IslandTextStyles { - val line = TextStyle(color = Color.White, fontSize = 13.sp, fontFamily = IslandFontFamily, fontWeight = FontWeight.Medium) - val compact = TextStyle( - color = Color.White, - fontSize = 14.sp, - fontFamily = IslandFontFamily, - fontWeight = FontWeight.SemiBold, - fontFeatureSettings = "tnum", - ) - val title = TextStyle(color = Color.White, fontSize = 15.sp, fontFamily = IslandFontFamily, fontWeight = FontWeight.SemiBold) - val body = TextStyle(color = Color.White.copy(alpha = 0.72f), fontSize = 13.sp, fontFamily = IslandFontFamily) + val line: TextStyle + @Composable get() = TextStyle(color = islandTextColor(), fontSize = 13.sp, fontFamily = IslandFontFamily, fontWeight = FontWeight.Medium) + val compact: TextStyle + @Composable get() = TextStyle( + color = islandTextColor(), + fontSize = 14.sp, + fontFamily = IslandFontFamily, + fontWeight = FontWeight.SemiBold, + fontFeatureSettings = "tnum", + ) + val title: TextStyle + @Composable get() = TextStyle(color = islandTextColor(), fontSize = 15.sp, fontFamily = IslandFontFamily, fontWeight = FontWeight.SemiBold) + val body: TextStyle + @Composable get() = TextStyle(color = islandTextColor(0.72f), fontSize = 13.sp, fontFamily = IslandFontFamily) } diff --git a/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt index 4d19b1211..3183dadf2 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/features/display/IslandSubSettingsUI.kt @@ -536,6 +536,18 @@ fun IslandVisualsSettingsUI( colors = ISLAND_ICON_PASTEL_COLORS, ) } + + var themedText by remember { mutableStateOf(iconSettings.getBoolean(SettingsRepository.KEY_ISLAND_THEMED_TEXT, false)) } + IconToggleItem( + iconRes = R.drawable.rounded_palette_24, + title = stringResource(R.string.island_themed_text_title), + isChecked = themedText, + onCheckedChange = { checked -> + HapticUtil.performVirtualKeyHaptic(view) + themedText = checked + iconSettings.putBoolean(SettingsRepository.KEY_ISLAND_THEMED_TEXT, checked) + }, + ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9f464ad52..0f50484bf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3175,6 +3175,7 @@ Tap action Time Icon color + Themed text color Dynamic Custom Use Material You colors From b0e023d5202f186f66d516c230b78ee03fafcdc3 Mon Sep 17 00:00:00 2001 From: spaina93 <72979505+spaina93@users.noreply.github.com> Date: Sat, 24 Oct 2026 15:08:14 +0200 Subject: [PATCH 4/7] fix: AOD wallpaper overlay stuck on screen after wake on One UI One UI stops animators of processes it considers in background ("CoreRune.SYSPERF_ACTIVE_APP_BBA_ENABLE : stop animation in background states"). The overlay window was only removed from the fade-out onAnimationEnd, so when the animator was paused the window stayed on screen, half transparent, until the accessibility service restarted. The same pause kept a newly picked image from being applied, since the bitmap is swapped at the end of the crossfade. - Remove the window from a Handler fallback if the fade-out has not finished shortly after its duration, and finish any pending removal before showing again or tearing down. - Apply the target bitmap and opacity from a fallback if the crossfade stalls, and set the final alpha if the fade-in stalls. - Skip the fade-in on Samsung: One UI skips drawing app windows while the AOD is showing, so only the first frame (alpha ~0) reached the screen and the wallpaper was invisible on AOD. Tested on Galaxy Z Fold 5 (One UI 8.5, Android 16), cover and inner display, waking with double tap, power button and fingerprint. Refs #951 Co-Authored-By: Claude Opus 5.5 --- .../handlers/AodWallpaperOverlayHandler.kt | 144 ++++++++++++++---- 1 file changed, 111 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt b/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt index 9953d7958..2cfa2d0e6 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt @@ -93,6 +93,9 @@ class AodWallpaperOverlayHandler( private var isMediaListenerRegistered = false private var crossfadeAnimator: ValueAnimator? = null private var fadeInAnimator: ObjectAnimator? = null + private var fadeOutAnimator: ObjectAnimator? = null + private var pendingRemoval: Runnable? = null + private var pendingSwapBitmap: Bitmap? = null private val powerManager by lazy { service.getSystemService(Context.POWER_SERVICE) as? PowerManager } private val displayManager by lazy { service.getSystemService(Context.DISPLAY_SERVICE) as? DisplayManager } @@ -207,6 +210,37 @@ class AodWallpaperOverlayHandler( } } + // Fallbacks that put the overlay in its final state when animators are paused by the system. + private val removalFallbackRunnable = Runnable { + if (pendingRemoval != null) { + Log.w("AodWallpaperOverlay", "Fade-out did not finish, removing overlay directly") + runPendingRemoval() + } + } + + private val fadeInFallbackRunnable = Runnable { + val container = overlayContainer ?: return@Runnable + if (isOverlayAdded && pendingRemoval == null && container.alpha < 1f) { + fadeInAnimator?.cancel() + fadeInAnimator = null + container.alpha = 1f + } + } + + private val bitmapSwapFallbackRunnable = Runnable { + val bitmap = pendingSwapBitmap ?: return@Runnable + pendingSwapBitmap = null + val imageView = wallpaperImageView ?: return@Runnable + if (currentDisplayedBitmap !== bitmap) return@Runnable + crossfadeAnimator?.let { + crossfadeAnimator = null + it.removeAllListeners() + it.cancel() + } + imageView.setImageBitmap(bitmap) + imageView.alpha = prefs.getFloat(SettingsRepository.KEY_AOD_WALLPAPER_OPACITY, 0.3f) + } + private val timeoutRunnable: Runnable = Runnable { if (isOverlayAdded && isScreenOff) { val keepOnMedia = prefs.getBoolean(SettingsRepository.KEY_AOD_WALLPAPER_KEEP_ON_MEDIA, false) @@ -733,6 +767,8 @@ class AodWallpaperOverlayHandler( hideOverlay() return } + // A window still fading out cannot be reused, finish removing it before showing a fresh one. + runPendingRemoval() registerDisplayListener() val opacity = prefs.getFloat(SettingsRepository.KEY_AOD_WALLPAPER_OPACITY, 0.3f) val blurRadius = prefs.getFloat(SettingsRepository.KEY_AOD_WALLPAPER_BLUR, 0f) @@ -813,18 +849,26 @@ class AodWallpaperOverlayHandler( try { val container = overlayContainer ?: return + // One UI skips drawing app windows while the AOD is showing, so only the first + // frame ever reaches the screen. Fading in from 0 there leaves the overlay invisible. + val fadeIn = !Build.MANUFACTURER.equals("samsung", ignoreCase = true) container.visibility = View.VISIBLE - container.alpha = 0f + container.alpha = if (fadeIn) 0f else 1f applyBurnInShift(animated = false) windowManager?.addView(container, params) isOverlayAdded = true fadeInAnimator?.cancel() - fadeInAnimator = - ObjectAnimator.ofFloat(container, "alpha", 0f, 1f).apply { - duration = 2000 - start() - } + fadeInAnimator = null + handler.removeCallbacks(fadeInFallbackRunnable) + if (fadeIn) { + fadeInAnimator = + ObjectAnimator.ofFloat(container, "alpha", 0f, 1f).apply { + duration = FADE_IN_DURATION_MS + start() + } + handler.postDelayed(fadeInFallbackRunnable, FADE_IN_DURATION_MS + ANIMATION_FALLBACK_SLACK_MS) + } handler.removeCallbacks(burnInShiftRunnable) handler.postDelayed(burnInShiftRunnable, BURN_IN_INTERVAL_MS) @@ -1074,6 +1118,8 @@ class AodWallpaperOverlayHandler( currentDisplayedBitmap = bitmap + handler.removeCallbacks(bitmapSwapFallbackRunnable) + pendingSwapBitmap = null if (!animated || imageView.drawable == null) { crossfadeAnimator?.cancel() crossfadeAnimator = null @@ -1082,7 +1128,7 @@ class AodWallpaperOverlayHandler( val targetOpacity = prefs.getFloat(SettingsRepository.KEY_AOD_WALLPAPER_OPACITY, 0.3f) crossfadeAnimator?.cancel() crossfadeAnimator = ValueAnimator.ofFloat(1f, 0f).apply { - duration = 350 + duration = CROSSFADE_HALF_DURATION_MS addUpdateListener { animator -> val fraction = animator.animatedValue as Float imageView.alpha = targetOpacity * fraction @@ -1090,8 +1136,8 @@ class AodWallpaperOverlayHandler( addListener(object : android.animation.AnimatorListenerAdapter() { override fun onAnimationEnd(animation: android.animation.Animator) { imageView.setImageBitmap(bitmap) - ValueAnimator.ofFloat(0f, 1f).apply { - duration = 350 + crossfadeAnimator = ValueAnimator.ofFloat(0f, 1f).apply { + duration = CROSSFADE_HALF_DURATION_MS addUpdateListener { inAnim -> val fraction = inAnim.animatedValue as Float imageView.alpha = targetOpacity * fraction @@ -1102,6 +1148,12 @@ class AodWallpaperOverlayHandler( }) start() } + // Without this the new image is never applied if the system pauses the crossfade. + pendingSwapBitmap = bitmap + handler.postDelayed( + bitmapSwapFallbackRunnable, + CROSSFADE_HALF_DURATION_MS * 2 + ANIMATION_FALLBACK_SLACK_MS, + ) } } @@ -1197,7 +1249,9 @@ class AodWallpaperOverlayHandler( currentDisplayedBitmap = null handler.removeCallbacks(burnInShiftRunnable) handler.removeCallbacks(timeoutRunnable) - if (isOverlayAdded && overlayContainer != null) { + handler.removeCallbacks(fadeInFallbackRunnable) + handler.removeCallbacks(bitmapSwapFallbackRunnable) + if (isOverlayAdded && overlayContainer != null && pendingRemoval == null) { val currentView = overlayContainer ?: return val imageView = wallpaperImageView @@ -1224,36 +1278,55 @@ class AodWallpaperOverlayHandler( } } - ObjectAnimator.ofFloat(currentView, "alpha", currentView.alpha, 0f).apply { - duration = 500 + pendingRemoval = Runnable { + currentView.visibility = View.GONE + imageView?.translationX = 0f + imageView?.translationY = 0f + imageView?.scaleX = 1.0f + imageView?.scaleY = 1.0f + extendedInfoColumn?.translationX = 0f + extendedInfoColumn?.translationY = 0f + try { + windowManager?.removeView(currentView) + } catch (_: Exception) { + } + isOverlayAdded = false + overlayContainer = null + maskedContainer = null + wallpaperImageView = null + extendedLayer = null + extendedInfoColumn = null + mediaTitleText = null + mediaNoteIcon = null + appIconCachePackage = null + mediaSubtitleText = null + } + + fadeOutAnimator = ObjectAnimator.ofFloat(currentView, "alpha", currentView.alpha, 0f).apply { + duration = FADE_OUT_DURATION_MS addListener(object : android.animation.AnimatorListenerAdapter() { override fun onAnimationEnd(animation: android.animation.Animator) { - currentView.visibility = View.GONE - imageView?.translationX = 0f - imageView?.translationY = 0f - imageView?.scaleX = 1.0f - imageView?.scaleY = 1.0f - extendedInfoColumn?.translationX = 0f - extendedInfoColumn?.translationY = 0f - try { - windowManager?.removeView(currentView) - } catch (_: Exception) { - } - isOverlayAdded = false - overlayContainer = null - maskedContainer = null - wallpaperImageView = null - extendedLayer = null - extendedInfoColumn = null - mediaTitleText = null - mediaNoteIcon = null - appIconCachePackage = null - mediaSubtitleText = null + runPendingRemoval() } }) start() } + // Some OEMs (e.g. One UI) stop animators of processes they consider in background, + // so the fade-out may never end. Remove the window anyway once it should have finished. + handler.postDelayed(removalFallbackRunnable, FADE_OUT_DURATION_MS + ANIMATION_FALLBACK_SLACK_MS) + } + } + + private fun runPendingRemoval() { + val removal = pendingRemoval ?: return + pendingRemoval = null + handler.removeCallbacks(removalFallbackRunnable) + fadeOutAnimator?.let { + fadeOutAnimator = null + it.removeAllListeners() + it.cancel() } + removal.run() } fun removeOverlay() { @@ -1261,6 +1334,7 @@ class AodWallpaperOverlayHandler( handler.removeCallbacks(burnInShiftRunnable) handler.removeCallbacks(timeoutRunnable) hideOverlay() + runPendingRemoval() setLockScreenMediaSuppressed(false) overlayContainer = null maskedContainer = null @@ -1274,5 +1348,9 @@ class AodWallpaperOverlayHandler( const val LOCK_SCREEN_MEDIA_KEY = "media_controls_lock_screen" const val KEY_SAVED_LOCK_SCREEN_MEDIA = "saved_lock_screen_media" const val NO_SAVED_VALUE = -1 + const val FADE_IN_DURATION_MS = 2000L + const val FADE_OUT_DURATION_MS = 500L + const val CROSSFADE_HALF_DURATION_MS = 350L + const val ANIMATION_FALLBACK_SLACK_MS = 250L } } From b2c0b7d1e9a52161e88850d51b1264a63d6463b3 Mon Sep 17 00:00:00 2001 From: spaina93 <72979505+spaina93@users.noreply.github.com> Date: Sat, 24 Oct 2026 15:27:10 +0200 Subject: [PATCH 5/7] fix: refresh AOD wallpaper after picking another custom image Picking a new custom image rewrites custom_aod_wallpaper.png and sets aod_wallpaper_custom_image to true. When a custom image was already set the pref does not change, so no change listener fires, the cache is never invalidated and the overlay keeps showing the old image until the service restarts. Track the file's last modified time when loading the wallpaper and drop the cached bitmap when it changes. Co-Authored-By: Claude Opus 5.5 --- .../services/handlers/AodWallpaperOverlayHandler.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt b/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt index 2cfa2d0e6..72aad82e0 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt @@ -1158,6 +1158,7 @@ class AodWallpaperOverlayHandler( } private var lastWallpaperId = -1 + private var lastCustomImageModified = 0L private fun loadAndApplyWallpaper() { val wallpaperManager = WallpaperManager.getInstance(service) @@ -1170,6 +1171,15 @@ class AodWallpaperOverlayHandler( lastWallpaperId = effectiveId } } + // Picking another custom image rewrites the file but leaves the pref at true, which + // fires no change listener, so detect the new image from the file itself. + if (prefs.getBoolean(SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE, false)) { + val modified = File(service.filesDir, CUSTOM_IMAGE_FILE_NAME).lastModified() + if (modified != lastCustomImageModified) { + cachedWallpaperBitmap = null + lastCustomImageModified = modified + } + } evaluateAndApplyDisplayBitmap(animated = false) } @@ -1177,7 +1187,7 @@ class AodWallpaperOverlayHandler( private fun extractCurrentWallpaper(): Bitmap? { return try { if (prefs.getBoolean(SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE, false)) { - val file = File(service.filesDir, "custom_aod_wallpaper.png") + val file = File(service.filesDir, CUSTOM_IMAGE_FILE_NAME) if (file.exists()) { val customBmp = AppUtil.decodeSampledBitmapFromFile(file.absolutePath, reqWidth = 1440, reqHeight = 3200) if (customBmp != null) return customBmp @@ -1348,6 +1358,7 @@ class AodWallpaperOverlayHandler( const val LOCK_SCREEN_MEDIA_KEY = "media_controls_lock_screen" const val KEY_SAVED_LOCK_SCREEN_MEDIA = "saved_lock_screen_media" const val NO_SAVED_VALUE = -1 + const val CUSTOM_IMAGE_FILE_NAME = "custom_aod_wallpaper.png" const val FADE_IN_DURATION_MS = 2000L const val FADE_OUT_DURATION_MS = 500L const val CROSSFADE_HALF_DURATION_MS = 350L From def5452bc3e2c1837da4269de361f936b42b373d Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sat, 24 Oct 2026 22:51:17 +0530 Subject: [PATCH 6/7] feat: add AOD wallpaper compatibility mode and tighten overlay animation fallbacks --- .../data/repository/SettingsRepository.kt | 2 + .../handlers/AodWallpaperOverlayHandler.kt | 33 ++++----- .../tiles/ScreenOffAccessibilityService.kt | 4 +- .../sheets/AodCompatibilityInfoBottomSheet.kt | 70 +++++++++++++++++++ .../display/AodWallpaperSettingsUI.kt | 23 ++++++ .../essentials/viewmodels/MainViewModel.kt | 1 + app/src/main/res/values-ach-rUG/strings.xml | 3 + app/src/main/res/values-ach/strings.xml | 3 + app/src/main/res/values-af-rZA/strings.xml | 3 + app/src/main/res/values-af/strings.xml | 3 + app/src/main/res/values-ar-rSA/strings.xml | 3 + app/src/main/res/values-ar/strings.xml | 3 + app/src/main/res/values-bn-rBD/strings.xml | 3 + app/src/main/res/values-ca-rES/strings.xml | 3 + app/src/main/res/values-ca/strings.xml | 3 + app/src/main/res/values-cs-rCZ/strings.xml | 3 + app/src/main/res/values-cs/strings.xml | 3 + app/src/main/res/values-da-rDK/strings.xml | 3 + app/src/main/res/values-da/strings.xml | 3 + app/src/main/res/values-de-rDE/strings.xml | 3 + app/src/main/res/values-de/strings.xml | 3 + app/src/main/res/values-el-rGR/strings.xml | 3 + app/src/main/res/values-el/strings.xml | 3 + app/src/main/res/values-en-rUS/strings.xml | 3 + app/src/main/res/values-en/strings.xml | 3 + app/src/main/res/values-es-rES/strings.xml | 3 + app/src/main/res/values-es/strings.xml | 3 + app/src/main/res/values-fi-rFI/strings.xml | 3 + app/src/main/res/values-fi/strings.xml | 3 + app/src/main/res/values-fil-rPH/strings.xml | 3 + app/src/main/res/values-fr-rFR/strings.xml | 3 + app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values-he/strings.xml | 3 + app/src/main/res/values-hi-rIN/strings.xml | 3 + app/src/main/res/values-hu-rHU/strings.xml | 3 + app/src/main/res/values-hu/strings.xml | 3 + app/src/main/res/values-id/strings.xml | 3 + app/src/main/res/values-in-rID/strings.xml | 3 + app/src/main/res/values-it-rIT/strings.xml | 3 + app/src/main/res/values-it/strings.xml | 3 + app/src/main/res/values-iw-rIL/strings.xml | 3 + app/src/main/res/values-ja-rJP/strings.xml | 3 + app/src/main/res/values-ja/strings.xml | 3 + app/src/main/res/values-kk-rKZ/strings.xml | 3 + app/src/main/res/values-kk/strings.xml | 3 + app/src/main/res/values-ko-rKR/strings.xml | 3 + app/src/main/res/values-ko/strings.xml | 3 + app/src/main/res/values-ml-rIN/strings.xml | 3 + app/src/main/res/values-ne-rNP/strings.xml | 3 + app/src/main/res/values-nl-rNL/strings.xml | 3 + app/src/main/res/values-nl/strings.xml | 3 + app/src/main/res/values-no-rNO/strings.xml | 3 + app/src/main/res/values-no/strings.xml | 3 + app/src/main/res/values-pl-rPL/strings.xml | 3 + app/src/main/res/values-pl/strings.xml | 3 + app/src/main/res/values-pt-rBR/strings.xml | 3 + app/src/main/res/values-pt-rPT/strings.xml | 3 + app/src/main/res/values-pt/strings.xml | 3 + app/src/main/res/values-ro-rRO/strings.xml | 3 + app/src/main/res/values-ro/strings.xml | 3 + app/src/main/res/values-ru-rRU/strings.xml | 3 + app/src/main/res/values-ru/strings.xml | 3 + app/src/main/res/values-si-rLK/strings.xml | 3 + app/src/main/res/values-si/strings.xml | 3 + app/src/main/res/values-sk-rSK/strings.xml | 3 + app/src/main/res/values-sr-rSP/strings.xml | 3 + app/src/main/res/values-sr/strings.xml | 3 + app/src/main/res/values-sv-rSE/strings.xml | 3 + app/src/main/res/values-sv/strings.xml | 3 + app/src/main/res/values-ta-rIN/strings.xml | 3 + app/src/main/res/values-tr-rTR/strings.xml | 3 + app/src/main/res/values-tr/strings.xml | 3 + app/src/main/res/values-uk-rUA/strings.xml | 3 + app/src/main/res/values-uk/strings.xml | 3 + app/src/main/res/values-vi-rVN/strings.xml | 3 + app/src/main/res/values-vi/strings.xml | 3 + app/src/main/res/values-zh-rCN/strings.xml | 3 + app/src/main/res/values-zh-rTW/strings.xml | 3 + app/src/main/res/values-zh/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 80 files changed, 335 insertions(+), 20 deletions(-) create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/core/sheets/AodCompatibilityInfoBottomSheet.kt diff --git a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt index d0819da57..9995802ec 100644 --- a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt +++ b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt @@ -423,6 +423,8 @@ class SettingsRepository( const val KEY_AOD_WALLPAPER_VIGNETTE = "aod_wallpaper_vignette" const val KEY_AOD_WALLPAPER_BLACK_THRESHOLD = "aod_wallpaper_black_threshold" const val KEY_AOD_WALLPAPER_CUSTOM_IMAGE = "aod_wallpaper_custom_image" + const val KEY_AOD_WALLPAPER_CUSTOM_IMAGE_VERSION = "aod_wallpaper_custom_image_version" + const val KEY_AOD_WALLPAPER_COMPAT = "aod_wallpaper_compat_mode" const val KEY_AOD_WALLPAPER_USE_ALBUM_ART = "aod_wallpaper_use_album_art" const val KEY_AOD_WALLPAPER_DISABLE_ON_DND = "aod_wallpaper_disable_on_dnd" const val KEY_AOD_WALLPAPER_KEEP_ON_MEDIA = "aod_wallpaper_keep_on_media" diff --git a/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt b/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt index 72aad82e0..3459c7219 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/AodWallpaperOverlayHandler.kt @@ -210,7 +210,6 @@ class AodWallpaperOverlayHandler( } } - // Fallbacks that put the overlay in its final state when animators are paused by the system. private val removalFallbackRunnable = Runnable { if (pendingRemoval != null) { Log.w("AodWallpaperOverlay", "Fade-out did not finish, removing overlay directly") @@ -767,7 +766,6 @@ class AodWallpaperOverlayHandler( hideOverlay() return } - // A window still fading out cannot be reused, finish removing it before showing a fresh one. runPendingRemoval() registerDisplayListener() val opacity = prefs.getFloat(SettingsRepository.KEY_AOD_WALLPAPER_OPACITY, 0.3f) @@ -849,9 +847,7 @@ class AodWallpaperOverlayHandler( try { val container = overlayContainer ?: return - // One UI skips drawing app windows while the AOD is showing, so only the first - // frame ever reaches the screen. Fading in from 0 there leaves the overlay invisible. - val fadeIn = !Build.MANUFACTURER.equals("samsung", ignoreCase = true) + val fadeIn = !compatMode() container.visibility = View.VISIBLE container.alpha = if (fadeIn) 0f else 1f applyBurnInShift(animated = false) @@ -1120,7 +1116,7 @@ class AodWallpaperOverlayHandler( handler.removeCallbacks(bitmapSwapFallbackRunnable) pendingSwapBitmap = null - if (!animated || imageView.drawable == null) { + if (!animated || compatMode() || imageView.drawable == null) { crossfadeAnimator?.cancel() crossfadeAnimator = null imageView.setImageBitmap(bitmap) @@ -1142,13 +1138,18 @@ class AodWallpaperOverlayHandler( val fraction = inAnim.animatedValue as Float imageView.alpha = targetOpacity * fraction } + addListener(object : android.animation.AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: android.animation.Animator) { + pendingSwapBitmap = null + handler.removeCallbacks(bitmapSwapFallbackRunnable) + } + }) start() } } }) start() } - // Without this the new image is never applied if the system pauses the crossfade. pendingSwapBitmap = bitmap handler.postDelayed( bitmapSwapFallbackRunnable, @@ -1158,7 +1159,6 @@ class AodWallpaperOverlayHandler( } private var lastWallpaperId = -1 - private var lastCustomImageModified = 0L private fun loadAndApplyWallpaper() { val wallpaperManager = WallpaperManager.getInstance(service) @@ -1171,15 +1171,6 @@ class AodWallpaperOverlayHandler( lastWallpaperId = effectiveId } } - // Picking another custom image rewrites the file but leaves the pref at true, which - // fires no change listener, so detect the new image from the file itself. - if (prefs.getBoolean(SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE, false)) { - val modified = File(service.filesDir, CUSTOM_IMAGE_FILE_NAME).lastModified() - if (modified != lastCustomImageModified) { - cachedWallpaperBitmap = null - lastCustomImageModified = modified - } - } evaluateAndApplyDisplayBitmap(animated = false) } @@ -1312,6 +1303,10 @@ class AodWallpaperOverlayHandler( mediaSubtitleText = null } + if (compatMode()) { + runPendingRemoval() + return + } fadeOutAnimator = ObjectAnimator.ofFloat(currentView, "alpha", currentView.alpha, 0f).apply { duration = FADE_OUT_DURATION_MS addListener(object : android.animation.AnimatorListenerAdapter() { @@ -1321,12 +1316,12 @@ class AodWallpaperOverlayHandler( }) start() } - // Some OEMs (e.g. One UI) stop animators of processes they consider in background, - // so the fade-out may never end. Remove the window anyway once it should have finished. handler.postDelayed(removalFallbackRunnable, FADE_OUT_DURATION_MS + ANIMATION_FALLBACK_SLACK_MS) } } + private fun compatMode(): Boolean = prefs.getBoolean(SettingsRepository.KEY_AOD_WALLPAPER_COMPAT, false) + private fun runPendingRemoval() { val removal = pendingRemoval ?: return pendingRemoval = null diff --git a/app/src/main/java/com/sameerasw/essentials/services/tiles/ScreenOffAccessibilityService.kt b/app/src/main/java/com/sameerasw/essentials/services/tiles/ScreenOffAccessibilityService.kt index c6b86b60f..a8594623e 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/tiles/ScreenOffAccessibilityService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/tiles/ScreenOffAccessibilityService.kt @@ -264,6 +264,8 @@ class ScreenOffAccessibilityService : key == SettingsRepository.KEY_AOD_WALLPAPER_VIGNETTE || key == SettingsRepository.KEY_AOD_WALLPAPER_BLACK_THRESHOLD || key == SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE || + key == SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE_VERSION || + key == SettingsRepository.KEY_AOD_WALLPAPER_COMPAT || key == SettingsRepository.KEY_AOD_WALLPAPER_USE_ALBUM_ART || key == SettingsRepository.KEY_AOD_WALLPAPER_KEEP_ON_MEDIA || key == SettingsRepository.KEY_AOD_WALLPAPER_EXTENDED_MEDIA || @@ -271,7 +273,7 @@ class ScreenOffAccessibilityService : key == SettingsRepository.KEY_AOD_WALLPAPER_EXTENDED_TEXT_SCALE || key == SettingsRepository.KEY_AOD_WALLPAPER_MEDIA_EXCLUDED_APPS ) { - if (key == SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE) { + if (key == SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE || key == SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE_VERSION) { aodWallpaperOverlayHandler.invalidateWallpaperCache() } aodWallpaperOverlayHandler.updateState() diff --git a/app/src/main/java/com/sameerasw/essentials/ui/core/sheets/AodCompatibilityInfoBottomSheet.kt b/app/src/main/java/com/sameerasw/essentials/ui/core/sheets/AodCompatibilityInfoBottomSheet.kt new file mode 100644 index 000000000..3f5cf7a4a --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/core/sheets/AodCompatibilityInfoBottomSheet.kt @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2026 sameerasw.com + * License: MIT License + * + * Feature Module: UI Core Components + * File: AodCompatibilityInfoBottomSheet.kt + * Description: Info sheet explaining the AOD wallpaper compatibility mode. + */ + +package com.sameerasw.essentials.ui.core.sheets + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.sameerasw.essentials.R +import com.sameerasw.essentials.utils.HapticUtil + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AodCompatibilityInfoBottomSheet(onDismissRequest: () -> Unit) { + val view = LocalView.current + EssentialsBottomSheet(onDismissRequest = onDismissRequest) { + Column( + modifier = + Modifier + .fillMaxWidth() + .verticalScroll(rememberScrollState()) + .padding(horizontal = 24.dp) + .padding(bottom = 32.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + Text( + text = stringResource(R.string.feat_aod_wallpaper_compat_title), + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.onSurface, + ) + Text( + text = stringResource(R.string.feat_aod_wallpaper_compat_info_why), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + Text( + text = stringResource(R.string.feat_aod_wallpaper_compat_info_what), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + Button( + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + onDismissRequest() + }, + modifier = Modifier.fillMaxWidth(), + ) { + Text(stringResource(R.string.action_got_it)) + } + } + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/ui/features/display/AodWallpaperSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/features/display/AodWallpaperSettingsUI.kt index 71e7aa1e0..dcdb9e1df 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/features/display/AodWallpaperSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/features/display/AodWallpaperSettingsUI.kt @@ -36,11 +36,13 @@ import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.sameerasw.essentials.R +import com.sameerasw.essentials.data.repository.SettingsRepository import com.sameerasw.essentials.ui.components.menus.SegmentedDropdownMenuItem import com.sameerasw.essentials.ui.components.sliders.ConfigSliderItem import com.sameerasw.essentials.ui.core.cards.ConfigPickerItem import com.sameerasw.essentials.ui.core.cards.IconToggleItem import com.sameerasw.essentials.ui.core.containers.RoundedCardContainer +import com.sameerasw.essentials.ui.core.sheets.AodCompatibilityInfoBottomSheet import com.sameerasw.essentials.ui.core.sheets.AppSelectionSheet import com.sameerasw.essentials.ui.core.sheets.PermissionsBottomSheet import com.sameerasw.essentials.ui.modifiers.highlight @@ -59,6 +61,7 @@ fun AodWallpaperSettingsUI( val view = LocalView.current var showMediaAppSelectionSheet by remember { mutableStateOf(false) } + var showCompatInfoSheet by remember { mutableStateOf(false) } var requestingPermissionsFor by remember { mutableStateOf>?>(null) } val isAccessibilityEnabled = viewModel.isAccessibilityEnabled.value @@ -384,8 +387,28 @@ fun AodWallpaperSettingsUI( } } + val compatSettings = remember { SettingsRepository(context) } + var compatMode by remember { mutableStateOf(compatSettings.getBoolean(SettingsRepository.KEY_AOD_WALLPAPER_COMPAT, false)) } + RoundedCardContainer { + IconToggleItem( + iconRes = R.drawable.rounded_bug_report_24, + title = stringResource(R.string.feat_aod_wallpaper_compat_title), + isChecked = compatMode, + onCheckedChange = { checked -> + HapticUtil.performVirtualKeyHaptic(view) + compatMode = checked + compatSettings.putBoolean(SettingsRepository.KEY_AOD_WALLPAPER_COMPAT, checked) + }, + onInfoClick = { showCompatInfoSheet = true }, + ) + } + Spacer(modifier = Modifier.height(80.dp)) + if (showCompatInfoSheet) { + AodCompatibilityInfoBottomSheet(onDismissRequest = { showCompatInfoSheet = false }) + } + if (showMediaAppSelectionSheet) { AppSelectionSheet( onDismissRequest = { showMediaAppSelectionSheet = false }, diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index e99c0317a..b120323a4 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -9729,6 +9729,7 @@ class MainViewModel : ViewModel() { FileOutputStream(file).use { output -> sampledBitmap.compress(Bitmap.CompressFormat.PNG, 95, output) } + settingsRepository.putLong(SettingsRepository.KEY_AOD_WALLPAPER_CUSTOM_IMAGE_VERSION, System.currentTimeMillis()) settingsRepository.setAodWallpaperCustomImage(true) withContext(Dispatchers.Main) { hasAodWallpaperCustomImage.value = true diff --git a/app/src/main/res/values-ach-rUG/strings.xml b/app/src/main/res/values-ach-rUG/strings.xml index d03a5805c..4515075e9 100644 --- a/app/src/main/res/values-ach-rUG/strings.xml +++ b/app/src/main/res/values-ach-rUG/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ach/strings.xml b/app/src/main/res/values-ach/strings.xml index e02c3d553..ed41f6e8f 100644 --- a/app/src/main/res/values-ach/strings.xml +++ b/app/src/main/res/values-ach/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index c0ec064ef..a2f868555 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index b978976ba..89da30c0c 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 4296dbea4..1942849ec 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 0494cbbd1..06c936367 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -2207,4 +2207,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. \ No newline at end of file diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 7fd23b7ec..cdc4b15ea 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 8af9091e7..c9e49044f 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 0e6afec35..157e771af 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -1638,4 +1638,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 7134d672a..82c1b4c65 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 9d9721a5e..f95803e0d 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 2dd250cdb..d8387e611 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 18d75694d..d178c4cd6 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index e095dd859..ea547640d 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7f91dc700..1293edd6a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -2003,4 +2003,7 @@ Die Stufen können nur von der normalen Lautstärke abwärts, niemals darüber h Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 254016d08..4ff6d099b 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 10dec4e20..3a5c229ba 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1517,4 +1517,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index 50c8358de..af72d99b3 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index c43d776c5..f82f994ab 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1488,4 +1488,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index fd8e43ba5..9efc6acd1 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1734,4 +1734,7 @@ Cuando llegue un mensaje o alerta de una aplicación seleccionada, la Pantalla s Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b63551d8a..b4227e90b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1890,4 +1890,7 @@ Requiere permiso de administrador del dispositivo si se utiliza el bloqueo.Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 175f7ce73..ba7adcbcf 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 82d29be81..d331cdbfc 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index a02f00163..b419758a4 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 297ea30b7..11b8420d7 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 19fd19c1c..6b0f21490 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1756,4 +1756,7 @@ Les effets de la LED HiLight peuvent être aussi utilisés comme une action dans Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 2fce85550..a3856bf44 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 3a571d8bb..2a584e8da 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 2b5ba08a7..bbc52f14d 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 02d67d4f2..f5f6604a7 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1566,4 +1566,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index ff736abe8..d2b303b91 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -159,4 +159,7 @@ Anda dapat menyesuaikan gaya animasi, warna, dan perilakunya. Fitur ini berfungs Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. \ No newline at end of file diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index c508e5b66..bbcdf71cf 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -1751,4 +1751,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index d06cf59cd..fcdfc416c 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 14a6323ac..d186c76f3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1623,4 +1623,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index d13ebe189..1800f4741 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 8bd6c15ca..4247404e0 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index fb155d3fe..99d2b44ae 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1920,4 +1920,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-kk-rKZ/strings.xml b/app/src/main/res/values-kk-rKZ/strings.xml index b15ec5203..47e775b2f 100644 --- a/app/src/main/res/values-kk-rKZ/strings.xml +++ b/app/src/main/res/values-kk-rKZ/strings.xml @@ -2120,4 +2120,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index b15ec5203..47e775b2f 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -2120,4 +2120,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 722baf2e0..51c7b8d8f 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index e84e1ea63..535cda735 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1636,4 +1636,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index a02f00163..b419758a4 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index a02f00163..b419758a4 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 47d67ff58..f5b17582e 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index b4b00d191..92caed4ec 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1717,4 +1717,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index d2d5d9f28..69d7cfdf5 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 6c32657e0..22f828cfe 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -1598,4 +1598,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 266c018c1..3f8cd30e7 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index cdbd56bca..2bdf57f0d 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1607,4 +1607,7 @@ Aby ustawienie zadziałało, może być konieczne wielokrotne zastosowanie.Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d9ee216d9..ce9dbd8f3 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 0ba2b651e..88ebd738c 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 73b3041c3..7fc40238b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1786,4 +1786,7 @@ adicionar algum app Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 05c4a2639..46e98f392 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index d4e2f8821..c9cb3c037 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 21c186920..fea65033a 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e4936cb92..6b28efaa2 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1893,4 +1893,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 256336b7b..7cea2de59 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 7a3bd0471..c10d938db 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -1483,4 +1483,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index a02f00163..b419758a4 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 4d8cdb0ca..2458192ab 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 4cdab025f..cb0477bfe 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 6e8ee997b..32f43019b 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 66ae74144..758f4a418 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1477,4 +1477,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index a02f00163..b419758a4 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 2d8532376..854f2f955 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -1733,4 +1733,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 4285567e9..ecb44cfca 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1878,4 +1878,7 @@ Düğme yeniden eşleme bir ses seviyesi tuşu için uzun basma eylemi varsa, o Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index f39230326..6dfb1883b 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 68fe29da5..0b5879de0 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1532,4 +1532,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index ba0536a93..bb3e187d3 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -1732,4 +1732,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index e171a3ed7..c12517f97 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -2023,4 +2023,7 @@ Các tiện ích trong chồng (stack) sẽ tự động chuyển đổi theo b Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d0d528d08..3b9b438cb 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -2119,4 +2119,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 583532eac..4d7f9f882 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1515,4 +1515,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 158281080..8f7b5aaf7 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1765,4 +1765,7 @@ Fine tune the system back gesture.\n\nAdjust the edge widths for the left and right gesture areas and set up per-app back gesture behavior. Requires secure settings permission. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f6f60ca84..6f3e19ad8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3590,4 +3590,7 @@ Resets every Essentials setting for this feature to its default. System settings and permissions are not changed. Island chips Compact time + Compatibility mode + Some devices, especially on One UI, pause app animations while the always-on display is showing and skip drawing app windows. This can leave the AOD wallpaper half transparent or invisible, or stuck on screen after waking the device. + Compatibility mode turns off the fade animations of the wallpaper. The wallpaper appears at full strength right away, disappears instantly when the screen wakes, and image changes are applied without a crossfade. Turn it on only if the wallpaper looks faded, never shows, or stays after waking. From 430faf61e168b01a78db4db9306b758e3c96ace1 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sat, 24 Oct 2026 22:53:08 +0530 Subject: [PATCH 7/7] fix: compute user id from uid directly in AppVolumeController --- .../sameerasw/essentials/utils/media/AppVolumeController.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/utils/media/AppVolumeController.kt b/app/src/main/java/com/sameerasw/essentials/utils/media/AppVolumeController.kt index 7ff390f7d..4e0162561 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/media/AppVolumeController.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/media/AppVolumeController.kt @@ -18,7 +18,6 @@ import android.os.IBinder import android.os.Looper import android.os.Parcel import android.os.Process -import android.os.UserHandle import android.util.Log import com.sameerasw.essentials.data.repository.SettingsRepository import com.sameerasw.essentials.utils.ShizukuUtils @@ -35,6 +34,7 @@ object AppVolumeController { private const val AUDIO_SERVICE = "android.media.IAudioService" private const val DISPATCHER = "android.media.IPlaybackConfigDispatcher" private const val PLAYER_STATE_STARTED = 2 + private const val PER_USER_RANGE = 100000 private val handler = Handler(Looper.getMainLooper()) private val appliedVolumes = mutableMapOf() @@ -152,7 +152,7 @@ object AppVolumeController { private fun packageOf(config: AudioPlaybackConfiguration): String? { val uid = invoke(config, "getClientUid") as? Int ?: return null if (uid < Process.FIRST_APPLICATION_UID) return null - if (UserHandle.getUserId(uid) != UserHandle.getUserId(Process.myUid())) return null + if (uid / PER_USER_RANGE != Process.myUid() / PER_USER_RANGE) return null val packages = try { appContext?.packageManager?.getPackagesForUid(uid) } catch (e: Exception) {