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 9995802ec..29a828101 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 @@ -95,7 +95,7 @@ class SettingsRepository( "Cycle sound modes" -> Action.CycleSoundModes "Toggle media volume" -> Action.ToggleMediaVolume "Like current song" -> Action.LikeCurrentSong - "Circle to Search" -> Action.CircleToSearch + "Circle to Search" -> Action.CircleToSearch() else -> null } setRemapAction(key, action) @@ -299,6 +299,7 @@ class SettingsRepository( const val KEY_CIRCLE_TO_SEARCH_GESTURE_HEIGHT = "circle_to_search_gesture_height" const val KEY_CIRCLE_TO_SEARCH_GESTURE_WIDTH = "circle_to_search_gesture_width" const val KEY_CIRCLE_TO_SEARCH_PREVIEW_ENABLED = "circle_to_search_preview_enabled" + const val KEY_CIRCLE_TO_SEARCH_HIDE_ON_SHADE = "circle_to_search_hide_on_shade" const val KEY_AUTO_UPDATE_ENABLED = "auto_update_enabled" const val KEY_UPDATE_NOTIFICATION_ENABLED = "update_notification_enabled" const val KEY_LAST_UPDATE_CHECK_TIME = "last_update_check_time" @@ -564,7 +565,9 @@ class SettingsRepository( 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_THEMED_APP_ICONS = "island_themed_app_icons" const val KEY_ISLAND_CHIPS = "island_chips" + const val KEY_ISLAND_TIME_CHIP = "island_time_chip" 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" @@ -573,6 +576,7 @@ class SettingsRepository( 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" + const val KEY_ISLAND_TIME_DAY_SUFFIX = "island_time_day_suffix" const val ISLAND_TIME_FORMAT_SYSTEM = "system" const val ISLAND_TIME_FORMAT_12H = "12h" const val ISLAND_TIME_FORMAT_24H = "24h" diff --git a/app/src/main/java/com/sameerasw/essentials/domain/diy/Action.kt b/app/src/main/java/com/sameerasw/essentials/domain/diy/Action.kt index e2acdb4ac..fc5d67bcd 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/diy/Action.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/diy/Action.kt @@ -351,11 +351,16 @@ sealed interface Action { override val isConfigurable: Boolean = true } + enum class CircleToSearchMethod { ACCESSIBILITY, SHIZUKU } + @Keep - data object CircleToSearch : Action { - override val title: Int = R.string.diy_action_circle_to_search - override val icon: Int = R.drawable.rounded_search_24 - override val permissions: List = listOf("shizuku", "root") + data class CircleToSearch( + @SerializedName("method") val method: CircleToSearchMethod = CircleToSearchMethod.ACCESSIBILITY, + ) : Action { + override val title: Int get() = R.string.diy_action_circle_to_search + override val icon: Int get() = R.drawable.rounded_search_24 + override val permissions: List get() = + if (method == CircleToSearchMethod.SHIZUKU) listOf("shizuku", "root") else listOf("ACCESSIBILITY") } @Keep diff --git a/app/src/main/java/com/sameerasw/essentials/domain/diy/ActionRegistry.kt b/app/src/main/java/com/sameerasw/essentials/domain/diy/ActionRegistry.kt index 17253ab27..46a57cb85 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/diy/ActionRegistry.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/diy/ActionRegistry.kt @@ -83,7 +83,7 @@ object ActionRegistry { add(Action.CustomSettings()) add(Action.Wait()) add(Action.SendNotification()) - add(Action.CircleToSearch) + add(Action.CircleToSearch()) add(Action.TurnOffBackGesture) add(Action.TurnOnBackGesture) // TakeScreenshot only available on screen-on context (null means no filter = include always) diff --git a/app/src/main/java/com/sameerasw/essentials/island/IslandTimeFormat.kt b/app/src/main/java/com/sameerasw/essentials/island/IslandTimeFormat.kt new file mode 100644 index 000000000..9137f5dc6 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/island/IslandTimeFormat.kt @@ -0,0 +1,41 @@ +package com.sameerasw.essentials.island + +import android.content.Context +import android.text.format.DateFormat +import com.sameerasw.essentials.data.repository.SettingsRepository +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +object IslandTimeFormat { + fun is24Hour(context: Context, settings: SettingsRepository): Boolean = + when (settings.getString(SettingsRepository.KEY_ISLAND_TIME_FORMAT, null)) { + SettingsRepository.ISLAND_TIME_FORMAT_12H -> false + SettingsRepository.ISLAND_TIME_FORMAT_24H -> true + else -> DateFormat.is24HourFormat(context) + } + + fun leadingZero(context: Context, settings: SettingsRepository): Boolean = + if (settings.contains(SettingsRepository.KEY_ISLAND_TIME_LEADING_ZERO)) { + settings.getBoolean(SettingsRepository.KEY_ISLAND_TIME_LEADING_ZERO, false) + } else { + is24Hour(context, settings) + } + + fun pattern(context: Context, settings: SettingsRepository, seconds: Boolean = false, period: Boolean? = null): String { + val is24 = is24Hour(context, settings) + val hours = if (is24) { + if (leadingZero(context, settings)) "HH" else "H" + } else if (leadingZero(context, settings)) { + "hh" + } else { + "h" + } + val base = if (seconds) "$hours:mm:ss" else "$hours:mm" + val showPeriod = !is24 && (period ?: (settings.getString(SettingsRepository.KEY_ISLAND_TIME_PERIOD, null) == SettingsRepository.ISLAND_TIME_PERIOD_AM_PM)) + return if (showPeriod) "$base a" else base + } + + fun format(context: Context, settings: SettingsRepository, millis: Long, seconds: Boolean = false, period: Boolean? = null): String = + SimpleDateFormat(pattern(context, settings, seconds, period), Locale.getDefault()).format(Date(millis)) +} diff --git a/app/src/main/java/com/sameerasw/essentials/island/model/IslandModels.kt b/app/src/main/java/com/sameerasw/essentials/island/model/IslandModels.kt index 3c0be1ac4..d31bad2ad 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/model/IslandModels.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/model/IslandModels.kt @@ -111,7 +111,7 @@ object SideBubblePriority { object IslandChips { val items = setOf( - "media", "calendar", "timer", "alarm", "caffeinate", "flashlight", "sound_mode", "devices", "travel", "navigation", + "media", "calendar", "timer", "alarm", "caffeinate", "flashlight", "sound_mode", "devices", "travel", "navigation", "call", ) } @@ -150,6 +150,8 @@ class IslandItem( val stack: List = emptyList(), val queued: List? = null, val priorityGroup: String? = null, + // Rendered inside a colored chip when Island chips is enabled. + val chip: Boolean = key in IslandChips.items, ) { var userPriority: Int? = null @@ -178,6 +180,7 @@ class IslandItem( stack = stack, queued = queued, priorityGroup = priorityGroup, + chip = chip, ).also { it.userPriority = userPriority } val effectivePriority: Int get() = priorityOverride ?: userPriority ?: priority diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/alarm/AlarmPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/alarm/AlarmPlugin.kt index 141709e4b..3ff505ae6 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/alarm/AlarmPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/alarm/AlarmPlugin.kt @@ -1,5 +1,6 @@ package com.sameerasw.essentials.island.plugins.alarm +import com.sameerasw.essentials.island.IslandTimeFormat import android.app.AlarmManager import android.content.BroadcastReceiver import android.content.Context @@ -31,6 +32,9 @@ class AlarmPlugin : BaseIslandPlugin() { SettingsRepository.KEY_ISLAND_SHOW_ALARM, SettingsRepository.KEY_ISLAND_ALARM_WINDOW_HOURS, SettingsRepository.KEY_ISLAND_ALARM_HIDE_TIME, + SettingsRepository.KEY_ISLAND_TIME_FORMAT, + SettingsRepository.KEY_ISLAND_TIME_LEADING_ZERO, + SettingsRepository.KEY_ISLAND_TIME_PERIOD, ) private var registered = false @@ -135,11 +139,6 @@ object NextAlarm { } fun format(context: Context, millis: Long, withPeriod: Boolean): String { - val pattern = when { - DateFormat.is24HourFormat(context) -> "HH:mm" - withPeriod -> "h:mm a" - else -> "h:mm" - } - return SimpleDateFormat(pattern, Locale.getDefault()).format(Date(millis)) + return IslandTimeFormat.format(context, SettingsRepository(context), millis, period = withPeriod) } } 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 b470a43bc..15decc38b 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 @@ -1,5 +1,6 @@ package com.sameerasw.essentials.island.plugins.brief +import com.sameerasw.essentials.island.IslandTimeFormat import com.sameerasw.essentials.island.ui.components.LocalIslandIconColor import com.sameerasw.essentials.island.plugins.alarm.NextAlarm import androidx.compose.foundation.layout.fillMaxSize @@ -440,8 +441,8 @@ private fun BriefOverview( } } - val timePattern = if (DateFormat.is24HourFormat(context)) "HH:mm" else "h:mm" - val time = SimpleDateFormat(timePattern, Locale.getDefault()).format(Date(now)) + val timeSettings = remember { SettingsRepository(context) } + val time = IslandTimeFormat.format(context, timeSettings, now) val date = SimpleDateFormat(DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEMMMd"), Locale.getDefault()).format(Date(now)) val artwork = remember(media?.artwork) { media?.artwork?.asImageBitmap() } @@ -686,7 +687,8 @@ private fun BriefPlayerButton( } private fun briefWhen(context: Context, event: UpcomingCalendarEvent, now: Long): String { - val timeFormat = DateFormat.getTimeFormat(context) + val timeSettings = SettingsRepository(context) + val timeText = { millis: Long -> IslandTimeFormat.format(context, timeSettings, millis) } val start = event.startTimeMillis val tomorrow = !isSameDay(start, now) && start > now if (event.allDay) { @@ -694,7 +696,7 @@ private fun briefWhen(context: Context, event: UpcomingCalendarEvent, now: Long) return if (tomorrow) context.getString(R.string.island_brief_tomorrow, all) else all } if (start <= now) { - return context.getString(R.string.island_brief_now_until, timeFormat.format(Date(event.endTimeMillis))) + return context.getString(R.string.island_brief_now_until, timeText(event.endTimeMillis)) } val minutes = ((start - now + 59_999L) / 60_000L).toInt() val hours = minutes / 60 @@ -707,8 +709,8 @@ private fun briefWhen(context: Context, event: UpcomingCalendarEvent, now: Long) context.getString(R.string.island_brief_in_hours_minutes, hours, rest) } minutes < 12 * 60 -> context.getString(R.string.island_brief_in_hours, if (rest >= 30) hours + 1 else hours) - tomorrow -> context.getString(R.string.island_brief_tomorrow, timeFormat.format(Date(start))) - else -> context.getString(R.string.island_brief_today, timeFormat.format(Date(start))) + tomorrow -> context.getString(R.string.island_brief_tomorrow, timeText(start)) + else -> context.getString(R.string.island_brief_today, timeText(start)) } } 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 3834bc48d..f76484286 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 @@ -1,5 +1,7 @@ package com.sameerasw.essentials.island.plugins.calendar +import com.sameerasw.essentials.data.repository.SettingsRepository +import com.sameerasw.essentials.island.IslandTimeFormat import com.sameerasw.essentials.island.ui.squareFit import androidx.compose.foundation.layout.fillMaxSize import com.sameerasw.essentials.island.ui.SurfaceBackdrop @@ -62,12 +64,13 @@ fun CalendarExpanded( val context = LocalContext.current val sidePadding = spec.expandedPadding + spec.expandedCorner * 0.35f val calendarColor = event.calendarColor?.let { Color(soften(it)) } ?: MaterialTheme.colorScheme.primary - val timeFormat = DateFormat.getTimeFormat(context) + val timeSettings = remember { SettingsRepository(context) } + val timeText = { millis: Long -> IslandTimeFormat.format(context, timeSettings, millis) } val timeRange = when { event.allDay -> stringResource(R.string.island_calendar_all_day) event.endTimeMillis > event.startTimeMillis -> - "${timeFormat.format(Date(event.startTimeMillis))} – ${timeFormat.format(Date(event.endTimeMillis))}" - else -> timeFormat.format(Date(event.startTimeMillis)) + "${timeText(event.startTimeMillis)} – ${timeText(event.endTimeMillis)}" + else -> timeText(event.startTimeMillis) } val detailStyle = IslandTextStyles.body.copy(color = islandTextColor(), fontSize = 15.sp, lineHeight = 20.sp) diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarPlugin.kt index 87b941ffb..0962d9dec 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/calendar/CalendarPlugin.kt @@ -1,5 +1,6 @@ package com.sameerasw.essentials.island.plugins.calendar +import com.sameerasw.essentials.island.IslandTimeFormat import android.app.KeyguardManager import android.content.ContentUris import android.content.Context @@ -36,6 +37,9 @@ class CalendarPlugin : BaseIslandPlugin() { SettingsRepository.KEY_ISLAND_CALENDAR_PRIORITY_MINUTES, SettingsRepository.KEY_ISLAND_CALENDAR_HIDE_LOCKED, SettingsRepository.KEY_ISLAND_CALENDAR_COMPACT_TIME, + SettingsRepository.KEY_ISLAND_TIME_FORMAT, + SettingsRepository.KEY_ISLAND_TIME_LEADING_ZERO, + SettingsRepository.KEY_ISLAND_TIME_PERIOD, ) private var event: UpcomingCalendarEvent? = null @@ -86,8 +90,7 @@ class CalendarPlugin : BaseIslandPlugin() { val now = System.currentTimeMillis() val full = CalendarEventUtil.formatRelativeTime(context, e.startTimeMillis, now) val short = if (settings.getBoolean(SettingsRepository.KEY_ISLAND_CALENDAR_COMPACT_TIME, false) && e.startTimeMillis - now >= 60 * 60_000L) { - val pattern = if (DateFormat.is24HourFormat(context)) "H:mm" else "h:mm" - SimpleDateFormat(pattern, Locale.getDefault()).format(Date(e.startTimeMillis)) + IslandTimeFormat.format(context, settings, e.startTimeMillis, period = false) } else { CalendarEventUtil.formatRelativeTimeCompact(e.startTimeMillis, now) } diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/consciousgate/ConsciousGatePlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/consciousgate/ConsciousGatePlugin.kt index cbc930f87..0a73d3b66 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/consciousgate/ConsciousGatePlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/consciousgate/ConsciousGatePlugin.kt @@ -1,5 +1,6 @@ package com.sameerasw.essentials.island.plugins.consciousgate +import com.sameerasw.essentials.utils.AppIconUtil import com.sameerasw.essentials.island.ui.components.MarqueeText import android.content.Context import android.os.PowerManager @@ -68,7 +69,7 @@ class ConsciousGatePlugin : BaseIslandPlugin() { if (cachedPkg != session.packageName || cachedIcon == null) { cachedPkg = session.packageName cachedIcon = try { - AppUtil.drawableToBitmap(context.packageManager.getApplicationIcon(session.packageName)) + AppUtil.drawableToBitmap(AppIconUtil.islandAppIcon(context, session.packageName)) } catch (_: Exception) { null } diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/media/MediaSessionSource.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/media/MediaSessionSource.kt index 7e325c2cf..efd7671f0 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/media/MediaSessionSource.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/media/MediaSessionSource.kt @@ -1,5 +1,6 @@ package com.sameerasw.essentials.island.plugins.media +import com.sameerasw.essentials.utils.AppIconUtil import android.content.ComponentName import android.content.Context import android.graphics.Bitmap @@ -150,7 +151,7 @@ class MediaSessionSource( } fun appIcon(context: Context, packageName: String): Bitmap? = try { - AppUtil.drawableToBitmap(context.packageManager.getApplicationIcon(packageName)) + AppUtil.drawableToBitmap(AppIconUtil.islandAppIcon(context, packageName)) } catch (_: Exception) { null } diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationPlugin.kt index 8ecb378b6..b0f05a92c 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/navigation/NavigationPlugin.kt @@ -74,16 +74,17 @@ class NavigationPlugin : BaseIslandPlugin() { override fun refresh() { ctx ?: return - data = NotificationListener.getLatestNavigationNotification() + data = stabilized(NotificationListener.getLatestNavigationNotification()) render() } private fun update(next: NavigationNotificationData?) { val c = ctx ?: return - val turned = next?.instruction != null && next.instruction != data?.instruction - data = next + val stable = stabilized(next) + val turned = stable?.instruction != null && stable.instruction != data?.instruction + data = stable render() - if (next == null) { + if (stable == null) { c.mainHandler.removeCallbacks(endExpand) c.mainHandler.removeCallbacks(peekAfterCollapse) c.mainHandler.removeCallbacks(endRoute) @@ -94,9 +95,9 @@ class NavigationPlugin : BaseIslandPlugin() { if (!enabled()) return val focused = c.focusedKey() val action = trigger.decide( - instruction = next.instruction.orEmpty(), + instruction = stable.instruction.orEmpty(), turned = turned, - meters = NavigationParser.meters(next.distance), + meters = NavigationParser.meters(stable.distance), threshold = settings.getIslandNavigationExpandDistance(), onNew = settings.getIslandNavigationOnNew(), canPeek = settings.isIslandLineStageEnabled(), @@ -110,6 +111,12 @@ class NavigationPlugin : BaseIslandPlugin() { } } + private fun stabilized(next: NavigationNotificationData?): NavigationNotificationData? { + val previous = data?.maneuver ?: return next + val incoming = next?.maneuver ?: return next + return if (previous !== incoming && previous.sameAs(incoming)) next.copy(maneuver = previous) else next + } + private fun expand(c: IslandPluginContext) { if (c.focusedKey() == ITEM_KEY && c.currentStage() == IslandStage.Expanded) return c.mainHandler.removeCallbacks(peekAfterCollapse) diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/network/NetworkPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/network/NetworkPlugin.kt index 2404b7356..f2d231bc8 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/network/NetworkPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/network/NetworkPlugin.kt @@ -1,5 +1,6 @@ package com.sameerasw.essentials.island.plugins.network +import com.sameerasw.essentials.utils.NetworkUtil import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -66,9 +67,11 @@ class NetworkPlugin : BaseIslandPlugin() { override fun onStart() { val c = ctx ?: return airplane = readAirplane() - wifiNetwork = connectivity.activeNetwork?.takeIf { - connectivity.getNetworkCapabilities(it)?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true - } + wifiNetwork = connectivity.allNetworks.firstOrNull { network -> + connectivity.getNetworkCapabilities(network)?.let { + it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && !it.hasTransport(NetworkCapabilities.TRANSPORT_VPN) + } == true + }.takeIf { NetworkUtil.isWifiConnected(connectivity) } ssid = wifiNetwork?.let { WifiUtil.getCurrentSsid(context) } try { val request = NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build() @@ -102,7 +105,7 @@ class NetworkPlugin : BaseIslandPlugin() { override fun refresh() = render() private fun onWifi(network: Network, caps: NetworkCapabilities) { - if (ctx == null || !caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) return + if (ctx == null || !caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) return if (network == wifiNetwork) { if (ssid == null) ssidFrom(caps)?.let { ssid = it } return diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationsPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationsPlugin.kt index c606e9fc2..bf9b4c064 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationsPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/notifications/NotificationsPlugin.kt @@ -638,7 +638,7 @@ class NotificationsPlugin : BaseIslandPlugin() { } val stack = alerts.map { stackIconFor(it, current = it === alert) } val waitingAlerts = waitingInOrder(alert).filter { !it.hubOnly && it.key !in seen } - val queued = if (hub() && alert.hubOnly) { + val queued = if (hub()) { hubEntries().filter { entry -> entry.alerts.none { it === alert } }.map { hubIconFor(it) } } else { waitingAlerts.map { stackIconFor(it, current = false) } diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalPlugin.kt index c213188aa..3a3846e86 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/signal/SignalPlugin.kt @@ -1,5 +1,6 @@ package com.sameerasw.essentials.island.plugins.signal +import com.sameerasw.essentials.utils.NetworkUtil import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -211,8 +212,8 @@ class SignalPlugin : BaseIslandPlugin() { ) return } - val caps = connectivity.getNetworkCapabilities(connectivity.activeNetwork) - val wifiLevel = if (settings.isIslandSignalWifiEnabled() && caps?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true) { + val caps = NetworkUtil.underlyingWifi(connectivity) + val wifiLevel = if (settings.isIslandSignalWifiEnabled() && caps != null) { readWifiLevel(caps) } else { null @@ -246,9 +247,13 @@ class SignalPlugin : BaseIslandPlugin() { val wifi = context.getSystemService(Context.WIFI_SERVICE) as? WifiManager var rssi: Int? = null if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) rssi = (caps.transportInfo as? WifiInfo)?.rssi - if (rssi == null && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + if (rssi == null || rssi <= -127) { @Suppress("DEPRECATION") - rssi = wifi?.connectionInfo?.rssi + rssi = try { + wifi?.connectionInfo?.rssi + } catch (_: Exception) { + null + } } if (rssi == null || rssi <= -127) return 0 return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && wifi != null) { diff --git a/app/src/main/java/com/sameerasw/essentials/island/plugins/timebattery/TimeBatteryPlugin.kt b/app/src/main/java/com/sameerasw/essentials/island/plugins/timebattery/TimeBatteryPlugin.kt index bcf8ad6cb..d923cec40 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/plugins/timebattery/TimeBatteryPlugin.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/plugins/timebattery/TimeBatteryPlugin.kt @@ -1,5 +1,14 @@ package com.sameerasw.essentials.island.plugins.timebattery +import com.sameerasw.essentials.island.ui.islandTextColor +import com.sameerasw.essentials.island.ui.IslandTextStyles +import androidx.compose.ui.unit.sp +import androidx.compose.ui.Modifier +import androidx.compose.ui.Alignment +import androidx.compose.material3.Text +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.Row +import com.sameerasw.essentials.island.IslandTimeFormat import android.app.KeyguardManager import android.content.BroadcastReceiver import android.content.Context @@ -39,7 +48,9 @@ class TimeBatteryPlugin : BaseIslandPlugin() { SettingsRepository.KEY_ISLAND_TIME_FORMAT, SettingsRepository.KEY_ISLAND_TIME_PERIOD, SettingsRepository.KEY_ISLAND_TIME_LEADING_ZERO, + SettingsRepository.KEY_ISLAND_TIME_DAY_SUFFIX, SettingsRepository.KEY_ISLAND_TIME_HIDE_LOCKED, + SettingsRepository.KEY_ISLAND_TIME_CHIP, SettingsRepository.KEY_ISLAND_BATTERY_HIDE_LOCKED, SettingsRepository.KEY_ISLAND_SHOW_BATTERY, SettingsRepository.KEY_ISLAND_BATTERY_STYLE, @@ -63,6 +74,7 @@ class TimeBatteryPlugin : BaseIslandPlugin() { ) private var time = "" + private var day = "" private var level = -1 private var charging = false private var shielded = false @@ -175,24 +187,12 @@ class TimeBatteryPlugin : BaseIslandPlugin() { private fun showSeconds() = settings.getBoolean(SettingsRepository.KEY_ISLAND_TIME_SHOW_SECONDS, false) private fun readTime() { - val format = settings.getString(SettingsRepository.KEY_ISLAND_TIME_FORMAT, null) ?: SettingsRepository.ISLAND_TIME_FORMAT_SYSTEM - val is24 = when (format) { - SettingsRepository.ISLAND_TIME_FORMAT_12H -> false - SettingsRepository.ISLAND_TIME_FORMAT_24H -> true - else -> DateFormat.is24HourFormat(context) - } - val base = if (is24) { - "HH:mm" - } else if (settings.getBoolean(SettingsRepository.KEY_ISLAND_TIME_LEADING_ZERO, false)) { - "hh:mm" + time = IslandTimeFormat.format(context, settings, System.currentTimeMillis(), seconds = showSeconds()) + day = if (settings.getBoolean(SettingsRepository.KEY_ISLAND_TIME_DAY_SUFFIX, false)) { + SimpleDateFormat("EEE", Locale.getDefault()).format(Date()) } else { - "h:mm" + "" } - val withSeconds = if (showSeconds()) "$base:ss" else base - val showPeriod = !is24 && - settings.getString(SettingsRepository.KEY_ISLAND_TIME_PERIOD, null) == SettingsRepository.ISLAND_TIME_PERIOD_AM_PM - val pattern = if (showPeriod) "$withSeconds a" else withSeconds - time = SimpleDateFormat(pattern, Locale.getDefault()).format(Date()) } private fun readBattery(intent: Intent?) { @@ -246,6 +246,7 @@ class TimeBatteryPlugin : BaseIslandPlugin() { return } val timeText = time + val dayText = day val batteryLevel = level val stateColor = stateColor() val displayColor = stateColor ?: idleColor() @@ -264,8 +265,20 @@ class TimeBatteryPlugin : BaseIslandPlugin() { priority = IslandPriority.TIME, placement = CompactPlacement.Pinned, needsCompanyAtCenter = settings.isIslandBatteryIconConditional(), + chip = settings.getBoolean(SettingsRepository.KEY_ISLAND_TIME_CHIP, false), compact = listOf( - CompactCell("time") { RollingText(timeText) }, + CompactCell("time") { + Row(verticalAlignment = Alignment.CenterVertically) { + RollingText(timeText) + if (dayText.isNotEmpty()) { + Text( + dayText, + style = IslandTextStyles.compact.copy(fontSize = 8.sp, color = islandTextColor(0.7f)), + modifier = Modifier.padding(start = 2.dp), + ) + } + } + }, ), ) val batteryItem = IslandItem( diff --git a/app/src/main/java/com/sameerasw/essentials/island/state/IslandController.kt b/app/src/main/java/com/sameerasw/essentials/island/state/IslandController.kt index a75f457ca..f165e9ffe 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/state/IslandController.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/state/IslandController.kt @@ -1,6 +1,5 @@ package com.sameerasw.essentials.island.state -import com.sameerasw.essentials.island.model.IslandChips import com.sameerasw.essentials.island.model.SideBubble import com.sameerasw.essentials.island.ui.inlineBubbleCell import com.sameerasw.essentials.island.model.CompactPlacement @@ -308,7 +307,7 @@ class IslandController( item.compact.filter { it.soloOnly }.map { it.key }, item.needsCompanyAtCenter, item.companionOnly, - chipsEnabled && item.key in IslandChips.items, + chipsEnabled && item.chip, ) }, anchorProvider(), diff --git a/app/src/main/java/com/sameerasw/essentials/island/ui/CompactTemplate.kt b/app/src/main/java/com/sameerasw/essentials/island/ui/CompactTemplate.kt index 4558d3360..fbb8f08e6 100644 --- a/app/src/main/java/com/sameerasw/essentials/island/ui/CompactTemplate.kt +++ b/app/src/main/java/com/sameerasw/essentials/island/ui/CompactTemplate.kt @@ -58,7 +58,6 @@ import androidx.compose.ui.layout.Layout import androidx.compose.ui.layout.Placeable import androidx.compose.ui.unit.Constraints import com.sameerasw.essentials.island.model.CompactCell -import com.sameerasw.essentials.island.model.IslandChips import com.sameerasw.essentials.island.state.IslandUiState @Composable @@ -121,7 +120,7 @@ fun CompactTemplate( state.items.values.forEach { item -> item.compact.forEach { put(it.key, item.key to it) } } } fun chipColorOf(itemKey: String): Color? = - if (spec.chips && itemKey in IslandChips.items) state.items[itemKey]?.let { it.accent ?: iconColor ?: primary } else null + state.items[itemKey]?.takeIf { spec.chips && it.chip }?.let { it.accent ?: iconColor ?: primary } fun group(keys: List, before: Boolean): List { val units = mutableListOf>() @@ -220,7 +219,7 @@ fun CompactTemplate( modifier = Modifier .height(spec.cellSize) .then( - if (member.cell.key.endsWith(".art")) { + if (member.cell.key.endsWith(".art") || member.cell.key.endsWith(".avatar")) { Modifier } else { Modifier.defaultMinSize(minWidth = spec.cellSize).padding(horizontal = 4.dp) 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 3a8b7ccc8..21b0bb775 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 @@ -183,7 +183,7 @@ fun BatteryRing(level: Int, color: Color, modifier: Modifier = Modifier, showLev @Composable fun BatteryGlyph(level: Int, color: Color, modifier: Modifier = Modifier, showLevel: Boolean = true) { val fraction by animateFloatAsState(level.coerceIn(0, 100) / 100f, IslandMotion.float(), label = "batteryFill") - val fillColor by animateColorAsState(color, label = "batteryGlyphColor") + val fillColor by animateColorAsState(resolveIconTint(color), label = "batteryGlyphColor") val onFill = if (fillColor.luminance() > 0.5f) Color.Black else Color.White val textStyle = IslandTextStyles.compact.copy(fontSize = 11.sp, lineHeight = 11.sp, fontWeight = FontWeight.Bold) val label = level.coerceIn(0, 100).toString() 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 b6402dbb3..929b0a581 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/NotificationListener.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/NotificationListener.kt @@ -9,6 +9,7 @@ package com.sameerasw.essentials.services +import com.sameerasw.essentials.utils.AppIconUtil import android.graphics.drawable.Icon import android.content.pm.LauncherApps import com.sameerasw.essentials.domain.controller.HilightController @@ -1897,19 +1898,7 @@ class NotificationListener : NotificationListenerService() { if (bitmap == null) { try { - val smallIcon = notif.smallIcon - if (smallIcon != null) { - val drawable = smallIcon.loadDrawable(this) - if (drawable != null) { - bitmap = AppUtil.drawableToBitmap(drawable) - } - } - } catch (_: Exception) {} - } - - if (bitmap == null) { - try { - val appIconDrawable = packageManager.getApplicationIcon(sbn.packageName) + val appIconDrawable = AppIconUtil.islandAppIcon(this, sbn.packageName) bitmap = AppUtil.drawableToBitmap(appIconDrawable) } catch (_: Exception) {} } @@ -2123,7 +2112,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 (isHandledAsProgress(sbn) || isShownByDedicatedFeature(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), @@ -2135,6 +2124,12 @@ class NotificationListener : NotificationListenerService() { ) } + private fun isShownByDedicatedFeature(sbn: StatusBarNotification): Boolean { + val settings = SettingsRepository(applicationContext) + if (CallNotificationParser.isCall(sbn) && settings.isIslandShowCallsEnabled()) return true + return sbn.isOngoing && settings.isIslandShowNavigationEnabled() && isNavigationNotification(sbn) + } + private fun isHandledAsProgress(sbn: StatusBarNotification): Boolean { if (!SettingsRepository(applicationContext).isIslandNotifKeepProgressEnabled()) return false val extras = sbn.notification?.extras ?: return false @@ -2304,7 +2299,7 @@ class NotificationListener : NotificationListenerService() { var appIcon: Bitmap? = null try { - val appIconDrawable = packageManager.getApplicationIcon(sbn.packageName) + val appIconDrawable = AppIconUtil.islandAppIcon(this, sbn.packageName) appIcon = AppUtil.drawableToBitmap(appIconDrawable) } catch (_: Exception) {} diff --git a/app/src/main/java/com/sameerasw/essentials/services/automation/executors/CombinedActionExecutor.kt b/app/src/main/java/com/sameerasw/essentials/services/automation/executors/CombinedActionExecutor.kt index ab755f7b7..45dea2875 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/automation/executors/CombinedActionExecutor.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/automation/executors/CombinedActionExecutor.kt @@ -589,7 +589,7 @@ object CombinedActionExecutor { is Action.CircleToSearch -> { com.sameerasw.essentials.utils.OmniTriggerUtil - .trigger(context) + .trigger(context, useShizuku = action.method == Action.CircleToSearchMethod.SHIZUKU) } is Action.SplitScreen -> SplitScreenUtil.toggle(context) diff --git a/app/src/main/java/com/sameerasw/essentials/services/handlers/DuoOverlayHandler.kt b/app/src/main/java/com/sameerasw/essentials/services/handlers/DuoOverlayHandler.kt index ab94b3f0a..b08b6bba4 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/handlers/DuoOverlayHandler.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/DuoOverlayHandler.kt @@ -58,6 +58,7 @@ import com.sameerasw.essentials.domain.model.ActiveNotificationAlert import com.sameerasw.essentials.domain.model.AppSelection import com.sameerasw.essentials.domain.model.ProgressNotificationData import com.sameerasw.essentials.services.NotificationListener +import com.sameerasw.essentials.utils.NetworkUtil import com.sameerasw.essentials.utils.AppUtil import com.sameerasw.essentials.utils.DuoOverlayView import com.sameerasw.essentials.utils.FlashlightUtil @@ -477,36 +478,10 @@ class DuoOverlayHandler( var level = -1 var isWifi = false - val activeNetwork = connectivityManager?.activeNetwork - val capabilities = activeNetwork?.let { connectivityManager?.getNetworkCapabilities(it) } - if (capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true) { + val wifiCapabilities = underlyingWifiCapabilities() + if (wifiCapabilities != null) { isWifi = true - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - val transportInfo = capabilities.transportInfo - if (transportInfo is WifiInfo) { - val rssi = transportInfo.rssi - if (rssi > -127) { - level = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && wifiManager != null) { - wifiManager?.calculateSignalLevel(rssi)?.coerceIn(0, 4) ?: 0 - } else { - @Suppress("DEPRECATION") - WifiManager.calculateSignalLevel(rssi, 5).coerceIn(0, 4) - } - } - } - } - if (level == -1 && wifiManager != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { - @Suppress("DEPRECATION") - val info = wifiManager?.connectionInfo - if (info != null && info.rssi > -127) { - level = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - wifiManager?.calculateSignalLevel(info.rssi)?.coerceIn(0, 4) ?: 0 - } else { - @Suppress("DEPRECATION") - WifiManager.calculateSignalLevel(info.rssi, 5).coerceIn(0, 4) - } - } - } + level = wifiLevelOf(wifiCapabilities) } if (level == -1) { @@ -522,10 +497,32 @@ class DuoOverlayHandler( } overlayView?.isWifi = isWifi - if (level >= 0) { - overlayView?.signalLevel = level + overlayView?.signalLevel = level.coerceAtLeast(0) + } + } + + private fun underlyingWifiCapabilities(): NetworkCapabilities? = NetworkUtil.underlyingWifi(connectivityManager) + + private fun wifiLevelOf(capabilities: NetworkCapabilities): Int { + var rssi = Int.MIN_VALUE + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + (capabilities.transportInfo as? WifiInfo)?.let { rssi = it.rssi } + } + if (rssi <= -127) { + @Suppress("DEPRECATION") + rssi = try { + wifiManager?.connectionInfo?.rssi ?: Int.MIN_VALUE + } catch (_: Exception) { + Int.MIN_VALUE } } + if (rssi <= -127) return -1 + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && wifiManager != null) { + wifiManager?.calculateSignalLevel(rssi)?.coerceIn(0, 4) ?: 0 + } else { + @Suppress("DEPRECATION") + WifiManager.calculateSignalLevel(rssi, 5).coerceIn(0, 4) + } } private fun getExcludedPackages(): Set { diff --git a/app/src/main/java/com/sameerasw/essentials/services/handlers/StatusBarIconHandler.kt b/app/src/main/java/com/sameerasw/essentials/services/handlers/StatusBarIconHandler.kt index ca97f9b87..f4db5d710 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/handlers/StatusBarIconHandler.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/StatusBarIconHandler.kt @@ -9,6 +9,7 @@ package com.sameerasw.essentials.services.handlers +import com.sameerasw.essentials.utils.NetworkUtil import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -206,9 +207,7 @@ class StatusBarIconHandler( private fun isWifiConnected(): Boolean { return try { - val network = connectivityManager.activeNetwork ?: return false - val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false - capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) + NetworkUtil.isWifiConnected(connectivityManager) } catch (e: Exception) { false } 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 a8594623e..ea0d907be 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 @@ -236,7 +236,8 @@ class ScreenOffAccessibilityService : } else if (key == "circle_to_search_gesture_enabled" || key == "circle_to_search_gesture_height" || key == "circle_to_search_gesture_width" || - key == "circle_to_search_preview_enabled" + key == "circle_to_search_preview_enabled" || + key == SettingsRepository.KEY_CIRCLE_TO_SEARCH_HIDE_ON_SHADE ) { updateOmniOverlay() } else if (key == "smart_wifi_enabled" || @@ -396,6 +397,7 @@ class ScreenOffAccessibilityService : statusGlanceHandler.setShadeExpanded(false) islandOverlayHandler.setShadeExpanded(false) duoOverlayHandler.setShadeExpanded(false) + shadeExpandedNow = false appFlowHandler.clearAuthenticated() appFlowHandler.clearConsciousGate() scheduleFreeze() @@ -545,7 +547,8 @@ class ScreenOffAccessibilityService : 240f } val isPreview = prefs.getBoolean("circle_to_search_preview_enabled", false) - val shouldShow = isGestureEnabled && isScreenOn && !keyguardManager.isKeyguardLocked + val hiddenByShade = shadeExpandedNow && prefs.getBoolean(SettingsRepository.KEY_CIRCLE_TO_SEARCH_HIDE_ON_SHADE, false) + val shouldShow = isGestureEnabled && isScreenOn && !keyguardManager.isKeyguardLocked && !hiddenByShade omniGestureOverlayHandler.updateOverlay(shouldShow, height, width, isPreview) } @@ -664,6 +667,7 @@ class ScreenOffAccessibilityService : @Volatile private var lastUnlockAt = 0L + private var shadeExpandedNow = false // Window queries are binder calls, so they run on their own thread, once per burst of events, and only the results hop to main private fun requestWindowScan() { @@ -701,6 +705,10 @@ class ScreenOffAccessibilityService : statusGlanceHandler.setShadeExpanded(shadeExpanded) islandOverlayHandler.setShadeExpanded(shadeExpanded) duoOverlayHandler.setShadeExpanded(shadeExpanded) + if (shadeExpandedNow != shadeExpanded) { + shadeExpandedNow = shadeExpanded + updateOmniOverlay() + } buttonRemapHandler.isVolumeDialogVisible = volumeDialogVisible appVolumeOverlayHandler.onWindowsChanged() } 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 c726619a7..2ec0696a6 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 @@ -549,6 +549,18 @@ fun IslandVisualsSettingsUI( }, ) + var themedAppIcons by remember { mutableStateOf(iconSettings.getBoolean(SettingsRepository.KEY_ISLAND_THEMED_APP_ICONS, false)) } + IconToggleItem( + iconRes = R.drawable.rounded_apps_24, + title = stringResource(R.string.island_themed_app_icons_title), + isChecked = themedAppIcons, + onCheckedChange = { checked -> + HapticUtil.performVirtualKeyHaptic(view) + themedAppIcons = checked + iconSettings.putBoolean(SettingsRepository.KEY_ISLAND_THEMED_APP_ICONS, checked) + }, + ) + var chips by remember { mutableStateOf(iconSettings.getBoolean(SettingsRepository.KEY_ISLAND_CHIPS, false)) } IconToggleItem( iconRes = R.drawable.rounded_palette_24, diff --git a/app/src/main/java/com/sameerasw/essentials/ui/features/display/sheets/IslandTimeOptionsBottomSheet.kt b/app/src/main/java/com/sameerasw/essentials/ui/features/display/sheets/IslandTimeOptionsBottomSheet.kt index 42a0c3f41..58363c912 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/features/display/sheets/IslandTimeOptionsBottomSheet.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/features/display/sheets/IslandTimeOptionsBottomSheet.kt @@ -9,6 +9,7 @@ package com.sameerasw.essentials.ui.features.display.sheets +import com.sameerasw.essentials.island.IslandTimeFormat import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn @@ -59,7 +60,7 @@ fun IslandTimeOptionsBottomSheet( var period by remember { mutableStateOf(settings.getString(SettingsRepository.KEY_ISLAND_TIME_PERIOD, null) ?: SettingsRepository.ISLAND_TIME_PERIOD_NONE) } - var leadingZero by remember { mutableStateOf(settings.getBoolean(SettingsRepository.KEY_ISLAND_TIME_LEADING_ZERO, false)) } + var leadingZero by remember { mutableStateOf(IslandTimeFormat.leadingZero(context, settings)) } val is12h = when (timeFormat) { SettingsRepository.ISLAND_TIME_FORMAT_12H -> true SettingsRepository.ISLAND_TIME_FORMAT_24H -> false @@ -115,7 +116,7 @@ fun IslandTimeOptionsBottomSheet( ) } AnimatedVisibility( - visible = is12h, + visible = true, enter = expandVertically() + fadeIn(), exit = shrinkVertically() + fadeOut(), ) { @@ -142,6 +143,18 @@ fun IslandTimeOptionsBottomSheet( settings.putBoolean(SettingsRepository.KEY_ISLAND_TIME_SHOW_SECONDS, it) }, ) + IslandPrefToggle( + settingKey = SettingsRepository.KEY_ISLAND_TIME_DAY_SUFFIX, + iconRes = R.drawable.rounded_schedule_24, + title = stringResource(R.string.island_time_day_suffix_title), + ) + if (settings.getBoolean(SettingsRepository.KEY_ISLAND_CHIPS, false)) { + IslandPrefToggle( + settingKey = SettingsRepository.KEY_ISLAND_TIME_CHIP, + iconRes = R.drawable.rounded_palette_24, + title = stringResource(R.string.island_time_chip_title), + ) + } } IslandLauncherOnlyToggle(SettingsRepository.KEY_ISLAND_TIME_BATTERY_LAUNCHER_ONLY) if (rememberIslandShowsWhileLocked()) { diff --git a/app/src/main/java/com/sameerasw/essentials/ui/features/hardware/ActionSequenceEditor.kt b/app/src/main/java/com/sameerasw/essentials/ui/features/hardware/ActionSequenceEditor.kt index fd53d7edf..01a4a9164 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/features/hardware/ActionSequenceEditor.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/features/hardware/ActionSequenceEditor.kt @@ -45,6 +45,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.sameerasw.essentials.R import com.sameerasw.essentials.domain.diy.Action +import com.sameerasw.essentials.ui.core.pickers.SegmentedPicker import com.sameerasw.essentials.domain.diy.ActionRegistry import com.sameerasw.essentials.domain.model.AppSelection import com.sameerasw.essentials.ui.components.CategoryExpandableSection @@ -261,6 +262,9 @@ fun ActionSequenceEditor( updateActions(emptyList()) }, ) + if (action is Action.CircleToSearch) { + CircleToSearchMethodCard(action) { updateActions(listOf(it)) } + } } else { ReorderableColumn( list = actions, @@ -275,19 +279,26 @@ fun ActionSequenceEditor( ) { index, action, isDragging -> key(rowIds.getOrNull(index) ?: index) { ReorderableItem { - RemapSequenceItem( - position = index + 1, - action = action, - isDragging = isDragging, - hasSettings = hasActionSettings(action), - dragHandleModifier = Modifier.draggableHandle(), - showOrder = true, - onSettingsClick = { openActionSettings(index, action) }, - onRemove = { - if (index in rowIds.indices) rowIds.removeAt(index) - updateActions(actions.toMutableList().apply { removeAt(index) }) - }, - ) + Column(verticalArrangement = Arrangement.spacedBy(2.dp)) { + RemapSequenceItem( + position = index + 1, + action = action, + isDragging = isDragging, + hasSettings = hasActionSettings(action), + dragHandleModifier = Modifier.draggableHandle(), + showOrder = true, + onSettingsClick = { openActionSettings(index, action) }, + onRemove = { + if (index in rowIds.indices) rowIds.removeAt(index) + updateActions(actions.toMutableList().apply { removeAt(index) }) + }, + ) + if (action is Action.CircleToSearch) { + CircleToSearchMethodCard(action) { updated -> + updateActions(actions.toMutableList().apply { this[index] = updated }) + } + } + } } } } @@ -869,5 +880,25 @@ private fun RemapAddActionSheet( } } +@Composable +private fun CircleToSearchMethodCard( + action: Action.CircleToSearch, + onChange: (Action.CircleToSearch) -> Unit, +) { + val labels = + mapOf( + Action.CircleToSearchMethod.ACCESSIBILITY to stringResource(R.string.diy_cts_method_accessibility), + Action.CircleToSearchMethod.SHIZUKU to stringResource(R.string.diy_cts_method_shizuku), + ) + SegmentedPicker( + items = labels.keys.toList(), + selectedItem = action.method, + onItemSelected = { onChange(action.copy(method = it)) }, + labelProvider = { labels[it].orEmpty() }, + title = R.string.diy_cts_method_title, + modifier = Modifier.fillMaxWidth(), + ) +} + private fun hasActionSettings(action: Action): Boolean = action.isConfigurable || action is Action.ToggleFlashlight || action is Action.LikeCurrentSong diff --git a/app/src/main/java/com/sameerasw/essentials/ui/features/system/NavigationSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/features/system/NavigationSettingsUI.kt index 671cc9b3d..7a4a0bff9 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/features/system/NavigationSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/features/system/NavigationSettingsUI.kt @@ -43,6 +43,7 @@ import com.sameerasw.essentials.ui.core.containers.RoundedCardContainer import com.sameerasw.essentials.ui.core.sheets.PermissionItem import com.sameerasw.essentials.ui.core.sheets.PermissionsBottomSheet import com.sameerasw.essentials.ui.modifiers.highlight +import com.sameerasw.essentials.data.repository.SettingsRepository import com.sameerasw.essentials.utils.HapticUtil import com.sameerasw.essentials.utils.PermissionUtils import com.sameerasw.essentials.viewmodels.MainViewModel @@ -334,6 +335,25 @@ fun NavigationSettingsUI( valueFormatter = { "${it.toInt()} dp" }, ) } + + AnimatedVisibility( + visible = viewModel.isCircleToSearchGestureEnabled.value, + enter = expandVertically(), + exit = shrinkVertically(), + ) { + val shadeSettings = remember { SettingsRepository(context) } + var hideOnShade by remember { mutableStateOf(shadeSettings.getBoolean(SettingsRepository.KEY_CIRCLE_TO_SEARCH_HIDE_ON_SHADE, false)) } + IconToggleItem( + title = stringResource(R.string.feat_circle_to_search_gesture_hide_on_shade), + isChecked = hideOnShade, + onCheckedChange = { checked -> + HapticUtil.performUIHaptic(view) + hideOnShade = checked + shadeSettings.putBoolean(SettingsRepository.KEY_CIRCLE_TO_SEARCH_HIDE_ON_SHADE, checked) + }, + iconRes = R.drawable.rounded_visibility_off_24, + ) + } } Spacer(modifier = Modifier.height(12.dp)) diff --git a/app/src/main/java/com/sameerasw/essentials/utils/AppIconUtil.kt b/app/src/main/java/com/sameerasw/essentials/utils/AppIconUtil.kt index 97eb284ff..820bce568 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/AppIconUtil.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/AppIconUtil.kt @@ -12,6 +12,15 @@ package com.sameerasw.essentials.utils import android.content.ComponentName import android.content.Context import android.content.pm.PackageManager +import android.graphics.drawable.AdaptiveIconDrawable +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.ColorMatrix +import android.graphics.ColorMatrixColorFilter +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import android.os.Build +import com.sameerasw.essentials.data.repository.SettingsRepository import com.sameerasw.essentials.domain.model.AppIcon object AppIconUtil { @@ -40,4 +49,57 @@ object AppIconUtil { } } } + + fun islandAppIcon(context: Context, packageName: String): Drawable { + val icon = context.packageManager.getApplicationIcon(packageName) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) return icon + if (!SettingsRepository(context).getBoolean(SettingsRepository.KEY_ISLAND_THEMED_APP_ICONS, false)) return icon + return themed(context, icon) ?: icon + } + + private fun themed(context: Context, icon: Drawable): Drawable? { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) return null + val monochrome = (icon as? AdaptiveIconDrawable)?.monochrome?.mutate() ?: return duotone(context, icon) + monochrome.setTint(context.getColor(android.R.color.system_accent1_200)) + val canvasSize = 432 + val full = Bitmap.createBitmap(canvasSize, canvasSize, Bitmap.Config.ARGB_8888) + monochrome.setBounds(0, 0, canvasSize, canvasSize) + monochrome.draw(Canvas(full)) + val start = canvasSize * SAFE_ZONE_START / ADAPTIVE_SIZE + val side = canvasSize * (SAFE_ZONE_END - SAFE_ZONE_START) / ADAPTIVE_SIZE + return BitmapDrawable(context.resources, Bitmap.createBitmap(full, start, start, side, side)) + } + + private fun duotone(context: Context, icon: Drawable): Drawable { + val dark = context.getColor(android.R.color.system_accent1_700) + val light = context.getColor(android.R.color.system_accent1_100) + fun channel(shift: Int) = (dark shr shift and 0xFF).toFloat() to (light shr shift and 0xFF).toFloat() + val (rd, rl) = channel(16) + val (gd, gl) = channel(8) + val (bd, bl) = channel(0) + fun row(low: Float, high: Float) = + floatArrayOf( + (high - low) / 255f * 0.213f, (high - low) / 255f * 0.715f, (high - low) / 255f * 0.072f, 0f, low, + ) + val matrix = + ColorMatrix( + floatArrayOf( + *row(rd, rl), + *row(gd, gl), + *row(bd, bl), + 0f, 0f, 0f, 1f, 0f, + ), + ) + val size = 216 + val bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888) + val drawable = icon.constantState?.newDrawable()?.mutate() ?: icon.mutate() + drawable.colorFilter = ColorMatrixColorFilter(matrix) + drawable.setBounds(0, 0, size, size) + drawable.draw(Canvas(bitmap)) + return BitmapDrawable(context.resources, bitmap) + } + + private const val ADAPTIVE_SIZE = 108 + private const val SAFE_ZONE_START = 21 + private const val SAFE_ZONE_END = 87 } diff --git a/app/src/main/java/com/sameerasw/essentials/utils/NetworkUtil.kt b/app/src/main/java/com/sameerasw/essentials/utils/NetworkUtil.kt new file mode 100644 index 000000000..1610a74f9 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/utils/NetworkUtil.kt @@ -0,0 +1,35 @@ +package com.sameerasw.essentials.utils + +import android.net.ConnectivityManager +import android.net.NetworkCapabilities + +object NetworkUtil { + private val nonVpnTransports = + intArrayOf( + NetworkCapabilities.TRANSPORT_WIFI, + NetworkCapabilities.TRANSPORT_CELLULAR, + NetworkCapabilities.TRANSPORT_ETHERNET, + NetworkCapabilities.TRANSPORT_BLUETOOTH, + ) + + fun underlyingWifi(manager: ConnectivityManager?): NetworkCapabilities? { + manager ?: return null + val active = manager.activeNetwork ?: return null + val activeCaps = manager.getNetworkCapabilities(active) ?: return null + if (!activeCaps.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { + return activeCaps.takeIf { it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) } + } + val declaresOtherTransport = nonVpnTransports.any { it != NetworkCapabilities.TRANSPORT_WIFI && activeCaps.hasTransport(it) } + if (declaresOtherTransport && !activeCaps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) return null + return manager.allNetworks + .mapNotNull { manager.getNetworkCapabilities(it) } + .firstOrNull { it.isPlainWifi() } + } + + fun isWifiConnected(manager: ConnectivityManager?): Boolean = underlyingWifi(manager) != null + + private fun NetworkCapabilities.isPlainWifi() = + hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && + !hasTransport(NetworkCapabilities.TRANSPORT_VPN) && + hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) +} diff --git a/app/src/main/java/com/sameerasw/essentials/utils/OmniTriggerUtil.kt b/app/src/main/java/com/sameerasw/essentials/utils/OmniTriggerUtil.kt index c8ab366b0..2c27a3e5f 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/OmniTriggerUtil.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/OmniTriggerUtil.kt @@ -42,7 +42,7 @@ object OmniTriggerUtil { } } - fun trigger(context: Context): Boolean { + fun trigger(context: Context, useShizuku: Boolean = true): Boolean { ensureReflection() val bundle = @@ -54,7 +54,7 @@ object OmniTriggerUtil { // 1. Try Shizuku logic val shizukuHelper = ShizukuPermissionHelper(context) - if (shizukuHelper.isReady() && shizukuHelper.hasPermission()) { + if (useShizuku && shizukuHelper.isReady() && shizukuHelper.hasPermission()) { val result = runCatching { val vis = ShizukuUtils.getSystemBinder("voiceinteraction") diff --git a/app/src/main/java/com/sameerasw/essentials/utils/chronometer/ChronometerRepository.kt b/app/src/main/java/com/sameerasw/essentials/utils/chronometer/ChronometerRepository.kt index 4a9c175b4..68d609372 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/chronometer/ChronometerRepository.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/chronometer/ChronometerRepository.kt @@ -1,5 +1,6 @@ package com.sameerasw.essentials.utils.chronometer +import com.sameerasw.essentials.utils.AppIconUtil import android.os.SystemClock import android.os.Build import android.app.Notification @@ -143,7 +144,7 @@ object ChronometerRepository { null } val appIcon = previous?.appIcon ?: try { - AppUtil.drawableToBitmap(context.packageManager.getApplicationIcon(sbn.packageName)) + AppUtil.drawableToBitmap(AppIconUtil.islandAppIcon(context, sbn.packageName)) } catch (_: Exception) { null } diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/DIYViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/DIYViewModel.kt index c23f5c78c..1936ef01c 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/DIYViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/DIYViewModel.kt @@ -241,7 +241,7 @@ class DIYViewModel( "ToggleMediaVolume" -> Action.ToggleMediaVolume "LikeCurrentSong" -> Action.LikeCurrentSong "OpenNowPlayingApp" -> Action.OpenNowPlayingApp - "CircleToSearch" -> Action.CircleToSearch + "CircleToSearch" -> Action.CircleToSearch() "EssentialSearch" -> Action.EssentialSearch "PinApp" -> Action.PinApp "SplitScreen" -> Action.SplitScreen diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/StatusBarIconViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/StatusBarIconViewModel.kt index 69bafaed3..84bd5ae9a 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/StatusBarIconViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/StatusBarIconViewModel.kt @@ -10,6 +10,7 @@ package com.sameerasw.essentials.viewmodels +import com.sameerasw.essentials.utils.NetworkUtil import android.content.Context import android.content.Intent import android.content.IntentFilter @@ -427,9 +428,7 @@ class StatusBarIconViewModel : ViewModel() { return try { val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - val network = connectivityManager.activeNetwork ?: return false - val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false - capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) + NetworkUtil.isWifiConnected(connectivityManager) } catch ( @Suppress("UNUSED_PARAMETER") e: Exception, ) { diff --git a/app/src/main/res/values-ach-rUG/strings.xml b/app/src/main/res/values-ach-rUG/strings.xml index 4515075e9..832fc10ad 100644 --- a/app/src/main/res/values-ach-rUG/strings.xml +++ b/app/src/main/res/values-ach-rUG/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ach/strings.xml b/app/src/main/res/values-ach/strings.xml index ed41f6e8f..b4be6790c 100644 --- a/app/src/main/res/values-ach/strings.xml +++ b/app/src/main/res/values-ach/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index a2f868555..2e0cd63fa 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 89da30c0c..eee6d987d 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 1942849ec..b5abd6b34 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 06c936367..39e3bbb21 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -2210,4 +2210,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root \ 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 cdc4b15ea..801cc7202 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index c9e49044f..5d33d9c8f 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 157e771af..f03a51d49 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -1641,4 +1641,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 82c1b4c65..67b0689e9 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index f95803e0d..f7ea7cda8 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index d8387e611..cb0e389f4 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index d178c4cd6..5715c0005 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index ea547640d..72bfaa6b2 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1293edd6a..e63c21785 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -2006,4 +2006,10 @@ Die Stufen können nur von der normalen Lautstärke abwärts, niemals darüber h 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 4ff6d099b..d8fee0bad 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 3a5c229ba..b1adb5092 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1520,4 +1520,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index af72d99b3..804fd16f8 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index f82f994ab..cd4ae4f8d 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1491,4 +1491,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 9efc6acd1..a43b71aa6 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1737,4 +1737,10 @@ Cuando llegue un mensaje o alerta de una aplicación seleccionada, la Pantalla s 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b4227e90b..50c845939 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1893,4 +1893,10 @@ Requiere permiso de administrador del dispositivo si se utiliza el bloqueo.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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index ba7adcbcf..c9c301cbe 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index d331cdbfc..ecb9d2576 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index b419758a4..eab5e3c88 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 11b8420d7..7c5040174 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6b0f21490..23adaa02a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1759,4 +1759,10 @@ Les effets de la LED HiLight peuvent être aussi utilisés comme une action dans 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index a3856bf44..cca3402a6 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 2a584e8da..0f3a8b9c3 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index bbc52f14d..f29243892 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index f5f6604a7..fbdff8021 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1569,4 +1569,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index d2b303b91..bc8c3ad9d 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -162,4 +162,10 @@ Anda dapat menyesuaikan gaya animasi, warna, dan perilakunya. Fitur ini berfungs 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root \ 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 bbcdf71cf..b8c9bc8ec 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -1754,4 +1754,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index fcdfc416c..9d4dd95db 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d186c76f3..bab0c836b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1626,4 +1626,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 1800f4741..e985b1990 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 4247404e0..f4f1eb620 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 99d2b44ae..f94d36c72 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1923,4 +1923,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-kk-rKZ/strings.xml b/app/src/main/res/values-kk-rKZ/strings.xml index 47e775b2f..1d8ac98ff 100644 --- a/app/src/main/res/values-kk-rKZ/strings.xml +++ b/app/src/main/res/values-kk-rKZ/strings.xml @@ -2123,4 +2123,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 47e775b2f..1d8ac98ff 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -2123,4 +2123,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 51c7b8d8f..ae0b5f456 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 535cda735..9bf771c70 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1639,4 +1639,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index b419758a4..eab5e3c88 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index b419758a4..eab5e3c88 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index f5b17582e..469e71194 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 92caed4ec..a6076b883 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1720,4 +1720,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 69d7cfdf5..51d52c4f7 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 22f828cfe..88f8c9e73 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -1601,4 +1601,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 3f8cd30e7..8664d036b 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 2bdf57f0d..0a5146289 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1610,4 +1610,10 @@ Aby ustawienie zadziałało, może być konieczne wielokrotne zastosowanie.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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index ce9dbd8f3..26a6eb296 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 88ebd738c..c882f0773 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 7fc40238b..e3329355e 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1789,4 +1789,10 @@ adicionar algum app 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 46e98f392..22bbdd44c 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index c9cb3c037..1fd70eb7c 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index fea65033a..91e335e26 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6b28efaa2..258ea945a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1896,4 +1896,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 7cea2de59..a247194ff 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index c10d938db..d694eb392 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -1486,4 +1486,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index b419758a4..eab5e3c88 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 2458192ab..425eb49e2 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index cb0477bfe..851226c18 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 32f43019b..144a4ec89 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 758f4a418..3c391c95a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1480,4 +1480,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index b419758a4..eab5e3c88 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 854f2f955..f818c4fbe 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -1736,4 +1736,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ecb44cfca..cf29db072 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1881,4 +1881,10 @@ Düğme yeniden eşleme bir ses seviyesi tuşu için uzun basma eylemi varsa, o 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 6dfb1883b..0b0b237e0 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 0b5879de0..1ef33f177 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1535,4 +1535,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index bb3e187d3..6406d986c 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -1735,4 +1735,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index c12517f97..b69ee92f9 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -2026,4 +2026,10 @@ Các tiện ích trong chồng (stack) sẽ tự động chuyển đổi theo b 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 3b9b438cb..f8a817f62 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -2122,4 +2122,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4d7f9f882..456ba89a6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1518,4 +1518,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 8f7b5aaf7..0db312a61 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1768,4 +1768,10 @@ 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f3e19ad8..f97275599 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3589,8 +3589,15 @@ Reset this feature Resets every Essentials setting for this feature to its default. System settings and permissions are not changed. Island chips + Show in chip 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. + Disable on statusbar expansion + Use themed app icons + Show date suffix + Trigger method + Accessibility + Shizuku / Root diff --git a/app/src/test/java/com/sameerasw/essentials/island/CompactLayoutEngineTest.kt b/app/src/test/java/com/sameerasw/essentials/island/CompactLayoutEngineTest.kt index 0f51f2151..40e2702ba 100644 --- a/app/src/test/java/com/sameerasw/essentials/island/CompactLayoutEngineTest.kt +++ b/app/src/test/java/com/sameerasw/essentials/island/CompactLayoutEngineTest.kt @@ -71,8 +71,8 @@ class CompactLayoutEngineTest { assertEquals("flash.icon notif.icon | media.eq media.art", withBubble(listOf(catchUp, flash, media), balance = false)) @Test fun bubbleBalanceMovesLowestPriorityRight() = - assertEquals("notif.icon | media.eq media.art flash.icon", withBubble(listOf(catchUp, flash, media), balance = true)) + assertEquals("notif.icon | flash.icon media.eq media.art", withBubble(listOf(catchUp, flash, media), balance = true)) @Test fun balanceLeavesPinnedOnLeft() = - assertEquals("time | media.eq media.art flash.icon", withBubble(listOf(time, flash, media), balance = true)) + assertEquals("time | flash.icon media.eq media.art", withBubble(listOf(time, flash, media), balance = true)) }