From 1b81fa292375e46a530ea729b955004418aa222c Mon Sep 17 00:00:00 2001 From: Rahul Sharma Date: Mon, 4 May 2026 01:12:14 +0530 Subject: [PATCH 01/15] 1. Added Marquee in required locations. --- .../essentials/ui/components/EssentialsFloatingToolbar.kt | 4 ++-- .../essentials/ui/components/pickers/SegmentedPicker.kt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt index 5331d4e6b..b8884c930 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt @@ -4,6 +4,7 @@ import androidx.compose.animation.core.Spring import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.spring import androidx.compose.foundation.Canvas +import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* @@ -140,11 +141,10 @@ fun EssentialsFloatingToolbar( style = MaterialTheme.typography.titleMedium, color = MaterialTheme.colorScheme.background, maxLines = 1, - overflow = TextOverflow.Ellipsis, modifier = Modifier .widthIn(min = 100.dp, max = 250.dp) .padding(horizontal = 8.dp) - .align(Alignment.CenterVertically) + .align(Alignment.CenterVertically).basicMarquee() ) } } else { diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/pickers/SegmentedPicker.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/pickers/SegmentedPicker.kt index 80d029ef7..bb2800268 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/pickers/SegmentedPicker.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/pickers/SegmentedPicker.kt @@ -1,6 +1,7 @@ package com.sameerasw.essentials.ui.components.pickers import androidx.compose.foundation.background +import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding @@ -66,7 +67,7 @@ fun SegmentedPicker( iconProvider(item) androidx.compose.foundation.layout.Spacer(Modifier.padding(end = 8.dp)) } - Text(labelProvider(item), fontSize = dimensionResource(R.dimen.font_small).value.sp) + Text(labelProvider(item), fontSize = dimensionResource(R.dimen.font_small).value.sp, modifier= Modifier.basicMarquee(), maxLines = 1) } } } From dfe552308cc61fb0b4edda0f2596f379b0cf0a16 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 11:02:51 +0530 Subject: [PATCH 02/15] feat: add Beta label to FloatingToolbar and update FeatureCard styling and string resources --- .../essentials/FeatureSettingsActivity.kt | 1 + .../domain/registry/FeatureRegistry.kt | 1 + .../components/EssentialsFloatingToolbar.kt | 36 +++++++++++++++---- .../ui/components/cards/FeatureCard.kt | 10 ++++-- .../sheets/ShutUpPerAppSettingsSheet.kt | 27 +++++++++++--- app/src/main/res/values-en/strings.xml | 2 +- 6 files changed, 62 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt index de548187e..2cb4756ec 100644 --- a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt @@ -700,6 +700,7 @@ class FeatureSettingsActivity : AppCompatActivity() { EssentialsFloatingToolbar( title = pageTitle, + isBeta = featureObj?.isBeta ?: false, onBackClick = { finish() }, modifier = Modifier .align(Alignment.BottomCenter) diff --git a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt index 6e6cea7fd..2780db0c3 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt @@ -115,6 +115,7 @@ object FeatureRegistry { permissionKeys = listOf("WRITE_SECURE_SETTINGS", "USAGE_STATS"), showToggle = false, hasMoreSettings = true, + isBeta = true, parentFeatureId = "Security" ) { override fun isEnabled(viewModel: MainViewModel) = true diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt index b8884c930..290507e07 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/EssentialsFloatingToolbar.kt @@ -39,6 +39,7 @@ fun EssentialsFloatingToolbar( selectedIndex: Int = -1, // Standard Mode title: String? = null, + isBeta: Boolean = false, onBackClick: (() -> Unit)? = null, onHelpClick: (() -> Unit)? = null, // FAB / Action @@ -136,16 +137,37 @@ fun EssentialsFloatingToolbar( if (title != null) { Spacer(modifier = Modifier.width(8.dp)) - Text( - text = title, - style = MaterialTheme.typography.titleMedium, - color = MaterialTheme.colorScheme.background, - maxLines = 1, + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier .widthIn(min = 100.dp, max = 250.dp) .padding(horizontal = 8.dp) - .align(Alignment.CenterVertically).basicMarquee() - ) + .align(Alignment.CenterVertically) + ) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.background, + maxLines = 1, + modifier = Modifier.basicMarquee().weight(1f, fill = false) + ) + if (isBeta) { + Card( + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.background + ), + shape = MaterialTheme.shapes.extraSmall + ) { + Text( + text = stringResource(R.string.label_beta), + modifier = Modifier.padding(horizontal = 4.dp, vertical = 2.dp), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.primary + ) + } + } + } } } else { // TABBED MODE - Expanding labels diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/cards/FeatureCard.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/cards/FeatureCard.kt index b3e87d16f..649be25e3 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/cards/FeatureCard.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/cards/FeatureCard.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.draw.blur import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.sameerasw.essentials.R import com.sameerasw.essentials.ui.components.menus.SegmentedDropdownMenu @@ -218,12 +219,15 @@ fun FeatureCard( ) { Text( text = resolvedTitle, - color = MaterialTheme.colorScheme.onSurface + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.weight(1f, fill = false), + maxLines = 1, + overflow = TextOverflow.Ellipsis ) if (isBeta) { Card( colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.background + containerColor = MaterialTheme.colorScheme.primary ), shape = MaterialTheme.shapes.extraSmall ) { @@ -231,7 +235,7 @@ fun FeatureCard( text = stringResource(R.string.label_beta), modifier = Modifier.padding(horizontal = 4.dp, vertical = 2.dp), style = MaterialTheme.typography.labelSmall, - color = MaterialTheme.colorScheme.primary + color = MaterialTheme.colorScheme.onPrimary ) } } diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt index f5c61c9a7..d85f64d97 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt @@ -50,7 +50,7 @@ fun ShutUpPerAppSettingsSheet( iconRes = R.drawable.rounded_settings_24, title = stringResource(R.string.shut_up_disable_dev_options), isChecked = currentConfig.disableDevOptions, - onCheckedChange = { + onCheckedChange = { val newConfig = currentConfig.copy(disableDevOptions = it) currentConfig = newConfig onConfigChanged(newConfig) @@ -60,7 +60,7 @@ fun ShutUpPerAppSettingsSheet( iconRes = R.drawable.rounded_adb_24, title = stringResource(R.string.shut_up_disable_usb_debugging), isChecked = currentConfig.disableUsbDebugging, - onCheckedChange = { + onCheckedChange = { val newConfig = currentConfig.copy(disableUsbDebugging = it) currentConfig = newConfig onConfigChanged(newConfig) @@ -70,22 +70,41 @@ fun ShutUpPerAppSettingsSheet( iconRes = R.drawable.rounded_android_wifi_4_bar_plus_24, title = stringResource(R.string.shut_up_disable_wireless_debugging), isChecked = currentConfig.disableWirelessDebugging, - onCheckedChange = { + onCheckedChange = { val newConfig = currentConfig.copy(disableWirelessDebugging = it) currentConfig = newConfig onConfigChanged(newConfig) } ) +// if (currentConfig.disableWirelessDebugging){ +// IconToggleItem( +// iconRes = R.drawable.rounded_adb_24, +// title = stringResource(R.string.shut_up_auto_archive_notif_title), +// isChecked = restartShizuku, +// onCheckedChange = { +// val newConfig = currentConfig.copy(autoArchive = it) +// currentConfig = newConfig +// onConfigChanged(newConfig) +// } +// ) +// } IconToggleItem( iconRes = R.drawable.rounded_settings_accessibility_24, title = stringResource(R.string.shut_up_disable_accessibility), isChecked = currentConfig.disableAccessibility, - onCheckedChange = { + onCheckedChange = { val newConfig = currentConfig.copy(disableAccessibility = it) currentConfig = newConfig onConfigChanged(newConfig) } ) + } + + RoundedCardContainer( + modifier = Modifier, + spacing = 2.dp, + cornerRadius = 24.dp + ) { IconToggleItem( iconRes = R.drawable.rounded_snowflake_24, title = stringResource(R.string.shut_up_auto_archive_notif_title), diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index c567cf212..dc323bf47 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1,6 +1,6 @@ - + BETA Essentials Accessibility Service\n\nThis service is required for the following advanced features:\n\n• Physical Button Remapping:\nDetects volume button presses even when the screen is off to trigger actions like the Flashlight.\n\n• Per-App Settings:\nMonitors the currently active app to apply specific profiles for Dynamic Night Light, Notification Lighting Colors, and App Lock.\n\n• Screen Control:\nAllows the app to lock the screen (e.g. via Double Tap or Widgets) and detect screen state changes.\n\n• Security:\nPrevents unauthorized changes by detecting window content when the device is locked.\n\nNo input text or sensitive user data is collected or transmitted. App Freezing Disable apps that are rarely used From 08084ed7a52347dcb49c19c4aa9ec2cf9f61e15f Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 11:09:47 +0530 Subject: [PATCH 03/15] feat: add Shizuku restart configuration to Shut Up settings to prevent freezing failures --- .../data/repository/SettingsRepository.kt | 4 + .../domain/registry/FeatureRegistry.kt | 36 ++++----- .../sheets/ShutUpPerAppSettingsSheet.kt | 74 ++++++++++++++----- .../composables/configs/ShutUpSettingsUI.kt | 3 +- .../essentials/viewmodels/MainViewModel.kt | 11 +++ app/src/main/res/values-en/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 7 files changed, 95 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt index 36bc75def..1a60ae54a 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 @@ -225,6 +225,7 @@ class SettingsRepository(private val context: Context) { const val KEY_SHUT_UP_SELECTED_APPS = "shut_up_selected_apps" const val KEY_SHUT_UP_ORIGINAL_SETTINGS = "shut_up_original_settings" + const val KEY_SHUT_UP_ATTEMPT_SHIZUKU_RESTART = "shut_up_attempt_shizuku_restart" } // Observe changes @@ -800,6 +801,9 @@ class SettingsRepository(private val context: Context) { saveTrackedRepos(current) } + fun isShutUpAttemptShizukuRestartEnabled(): Boolean = getBoolean(KEY_SHUT_UP_ATTEMPT_SHIZUKU_RESTART, true) + fun setShutUpAttemptShizukuRestartEnabled(enabled: Boolean) = putBoolean(KEY_SHUT_UP_ATTEMPT_SHIZUKU_RESTART, enabled) + fun removeTrackedRepo(fullName: String) { val current = getTrackedRepos().toMutableList() current.removeAll { it.fullName == fullName } diff --git a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt index 2780db0c3..5e063a2a8 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt @@ -105,22 +105,6 @@ object FeatureRegistry { override fun isEnabled(viewModel: MainViewModel) = true override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) {} }, - object : Feature( - id = "Shut-Up!", - title = R.string.feat_shut_up_title, - iconRes = R.drawable.rounded_domino_mask_24, - category = R.string.cat_system, - description = R.string.feat_shut_up_desc, - aboutDescription = R.string.shut_up_description, - permissionKeys = listOf("WRITE_SECURE_SETTINGS", "USAGE_STATS"), - showToggle = false, - hasMoreSettings = true, - isBeta = true, - parentFeatureId = "Security" - ) { - override fun isEnabled(viewModel: MainViewModel) = true - override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) {} - }, object : Feature( id = "Notifications", title = R.string.feat_notifications_alerts_title, @@ -827,14 +811,30 @@ object FeatureRegistry { override fun isEnabled(viewModel: MainViewModel) = viewModel.isAppLockEnabled.value override fun isToggleEnabled(viewModel: MainViewModel, context: Context) = - if (viewModel.isUseUsageAccess.value) + (if (viewModel.isUseUsageAccess.value) viewModel.isUsageStatsPermissionGranted.value else - viewModel.isAccessibilityEnabled.value + viewModel.isAccessibilityEnabled.value) override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) = viewModel.setAppLockEnabled(enabled, context) }, + object : Feature( + id = "Shut-Up!", + title = R.string.feat_shut_up_title, + iconRes = R.drawable.rounded_domino_mask_24, + category = R.string.cat_system, + description = R.string.feat_shut_up_desc, + aboutDescription = R.string.shut_up_description, + permissionKeys = listOf("WRITE_SECURE_SETTINGS", "USAGE_STATS"), + showToggle = false, + hasMoreSettings = true, + isBeta = true, + parentFeatureId = "Security" + ) { + override fun isEnabled(viewModel: MainViewModel) = true + override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) {} + }, object : Feature( id = "Location reached", diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt index d85f64d97..bbdc449f8 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/ShutUpPerAppSettingsSheet.kt @@ -1,16 +1,20 @@ package com.sameerasw.essentials.ui.components.sheets import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel import com.sameerasw.essentials.R import com.sameerasw.essentials.domain.model.ShutUpAppConfig import com.sameerasw.essentials.ui.components.cards.IconToggleItem import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer +import com.sameerasw.essentials.viewmodels.MainViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -19,11 +23,38 @@ fun ShutUpPerAppSettingsSheet( config: ShutUpAppConfig, onConfigChanged: (ShutUpAppConfig) -> Unit, onCreateShortcut: (ShutUpAppConfig) -> Unit, - isFrozen: Boolean + isFrozen: Boolean, + viewModel: MainViewModel = viewModel() ) { val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) var currentConfig by remember(config) { mutableStateOf(config) } - + var showShizukuRestartWarning by remember { mutableStateOf(false) } + + val isAttemptShizukuRestart by viewModel.isShutUpAttemptShizukuRestart + + if (showShizukuRestartWarning) { + AlertDialog( + onDismissRequest = { showShizukuRestartWarning = false }, + title = { Text(stringResource(R.string.shut_up_shizuku_restart_warning_title)) }, + text = { Text(stringResource(R.string.shut_up_shizuku_restart_warning_message)) }, + confirmButton = { + TextButton(onClick = { + showShizukuRestartWarning = false + val newConfig = currentConfig.copy(autoArchive = true) + currentConfig = newConfig + onConfigChanged(newConfig) + }) { + Text(stringResource(R.string.action_enable)) + } + }, + dismissButton = { + TextButton(onClick = { showShizukuRestartWarning = false }) { + Text(stringResource(R.string.action_cancel)) + } + } + ) + } + ModalBottomSheet( onDismissRequest = onDismissRequest, sheetState = sheetState, @@ -32,7 +63,8 @@ fun ShutUpPerAppSettingsSheet( Column( modifier = Modifier .fillMaxWidth() - .padding(16.dp), + .padding(16.dp) + .verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.spacedBy(16.dp) ) { Text( @@ -76,18 +108,16 @@ fun ShutUpPerAppSettingsSheet( onConfigChanged(newConfig) } ) -// if (currentConfig.disableWirelessDebugging){ -// IconToggleItem( -// iconRes = R.drawable.rounded_adb_24, -// title = stringResource(R.string.shut_up_auto_archive_notif_title), -// isChecked = restartShizuku, -// onCheckedChange = { -// val newConfig = currentConfig.copy(autoArchive = it) -// currentConfig = newConfig -// onConfigChanged(newConfig) -// } -// ) -// } + if (currentConfig.disableWirelessDebugging) { + IconToggleItem( + iconRes = R.drawable.rounded_adb_24, + title = stringResource(R.string.shut_up_attempt_shizuku_restart), + isChecked = isAttemptShizukuRestart, + onCheckedChange = { + viewModel.setShutUpAttemptShizukuRestartEnabled(it) + } + ) + } IconToggleItem( iconRes = R.drawable.rounded_settings_accessibility_24, title = stringResource(R.string.shut_up_disable_accessibility), @@ -109,10 +139,14 @@ fun ShutUpPerAppSettingsSheet( iconRes = R.drawable.rounded_snowflake_24, title = stringResource(R.string.shut_up_auto_archive_notif_title), isChecked = currentConfig.autoArchive, - onCheckedChange = { - val newConfig = currentConfig.copy(autoArchive = it) - currentConfig = newConfig - onConfigChanged(newConfig) + onCheckedChange = { + if (it && !isAttemptShizukuRestart && currentConfig.disableWirelessDebugging) { + showShizukuRestartWarning = true + } else { + val newConfig = currentConfig.copy(autoArchive = it) + currentConfig = newConfig + onConfigChanged(newConfig) + } } ) } diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ShutUpSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ShutUpSettingsUI.kt index 2d02a6f6b..6aceba2a0 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ShutUpSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ShutUpSettingsUI.kt @@ -152,7 +152,8 @@ fun ShutUpSettingsUI( config = configs.find { it.packageName == selectedConfigForEditing?.packageName } ?: selectedConfigForEditing!!, onConfigChanged = { viewModel.updateShutUpConfig(it) }, onCreateShortcut = { viewModel.createShutUpShortcut(context, it) }, - isFrozen = isFrozen + isFrozen = isFrozen, + viewModel = viewModel ) } } diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index 2a549799a..a0d994293 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -147,6 +147,7 @@ class MainViewModel : ViewModel() { val shutUpConfigs = mutableStateOf>(emptyList()) val isShutUpLoading = mutableStateOf(false) + val isShutUpAttemptShizukuRestart = mutableStateOf(true) @@ -545,6 +546,10 @@ class MainViewModel : ViewModel() { liveWallpaperCustomVideos.clear() liveWallpaperCustomVideos.addAll(settingsRepository.getLiveWallpaperCustomVideos()) } + + SettingsRepository.KEY_SHUT_UP_ATTEMPT_SHIZUKU_RESTART -> { + isShutUpAttemptShizukuRestart.value = settingsRepository.isShutUpAttemptShizukuRestartEnabled() + } } } } @@ -576,6 +581,11 @@ class MainViewModel : ViewModel() { loadShutUpConfigs() } + fun setShutUpAttemptShizukuRestartEnabled(enabled: Boolean) { + isShutUpAttemptShizukuRestart.value = enabled + settingsRepository.setShutUpAttemptShizukuRestartEnabled(enabled) + } + fun saveShutUpSelectedApps(context: Context, apps: List) { val currentConfigs = settingsRepository.loadShutUpConfigs().associateBy { it.packageName } val newConfigs = apps.filter { it.isEnabled }.map { @@ -643,6 +653,7 @@ class MainViewModel : ViewModel() { isHideGestureBarOnLauncherEnabled.value = settingsRepository.getBoolean(SettingsRepository.KEY_HIDE_GESTURE_BAR_ON_LAUNCHER_ENABLED, false) notificationLightingSystemMode.intValue = settingsRepository.getNotificationLightingSystemMode() + isShutUpAttemptShizukuRestart.value = settingsRepository.isShutUpAttemptShizukuRestartEnabled() loadShutUpConfigs() if (isHideGestureBarEnabled.value) { diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index dc323bf47..dd6097c5d 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1,6 +1,9 @@ BETA + Attempt Shizuku restart + Shizuku Restart Warning + Since wireless debugging was toggled, Shizuku services might not have started automatically causing freezing to not function. Consider turning on attempt shizuku restart as well Essentials Accessibility Service\n\nThis service is required for the following advanced features:\n\n• Physical Button Remapping:\nDetects volume button presses even when the screen is off to trigger actions like the Flashlight.\n\n• Per-App Settings:\nMonitors the currently active app to apply specific profiles for Dynamic Night Light, Notification Lighting Colors, and App Lock.\n\n• Screen Control:\nAllows the app to lock the screen (e.g. via Double Tap or Widgets) and detect screen state changes.\n\n• Security:\nPrevents unauthorized changes by detecting window content when the device is locked.\n\nNo input text or sensitive user data is collected or transmitted. App Freezing Disable apps that are rarely used diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 36d9e984e..71c8df7e4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,8 @@ BETA + Attempt Shizuku restart + Shizuku Restart Warning + Since wireless debugging was toggled, Shizuku services might not have started automatically causing freezing to not function. Consider turning on attempt shizuku restart as well Essentials Accessibility Service\n\nThis service is required for the following advanced features:\n\n• Physical Button Remapping:\nDetects volume button presses even when the screen is off to trigger actions like the Flashlight.\n\n• Per-App Settings:\nMonitors the currently active app to apply specific profiles for Dynamic Night Light, Notification Lighting Colors, and App Lock.\n\n• Screen Control:\nAllows the app to lock the screen (e.g. via Double Tap or Widgets) and detect screen state changes.\n\n• Security:\nPrevents unauthorized changes by detecting window content when the device is locked.\n\nNo input text or sensitive user data is collected or transmitted. App Freezing Disable apps that are rarely used From 1e811a702ded32bbd2149259ff1eca66bf80d118 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 11:13:03 +0530 Subject: [PATCH 04/15] feat: replace text ellipsis with basicMarquee in QuickSettingsTilesSettingsUI --- .../ui/composables/configs/QuickSettingsTilesSettingsUI.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/QuickSettingsTilesSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/QuickSettingsTilesSettingsUI.kt index e8e9a11c9..352be8299 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/QuickSettingsTilesSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/QuickSettingsTilesSettingsUI.kt @@ -10,6 +10,7 @@ import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.foundation.background +import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -626,7 +627,7 @@ fun QSTileCard( style = MaterialTheme.typography.titleMedium, color = contentColor, maxLines = 1, - overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis + modifier = Modifier.basicMarquee() ) Text( text = if (isMissingPermissions) "Grant permission" From f4437de1f719f5407a09e5bce463c7176deb03c5 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 11:14:40 +0530 Subject: [PATCH 05/15] feat: enable marquee animation for truncated favorite titles in FavoriteCarousel --- .../sameerasw/essentials/ui/components/FavoriteCarousel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/FavoriteCarousel.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/FavoriteCarousel.kt index b61f16dae..4e75d6125 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/FavoriteCarousel.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/FavoriteCarousel.kt @@ -4,6 +4,7 @@ import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.foundation.background +import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -184,8 +185,7 @@ fun FavoriteCarousel( style = MaterialTheme.typography.labelSmall, textAlign = TextAlign.Center, maxLines = 1, - overflow = TextOverflow.Ellipsis, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth().basicMarquee() ) } From d4b1a1e01768bae7f76264f333686336f65154ed Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 11:46:46 +0530 Subject: [PATCH 06/15] feat: add WatchInstallHelpBottomSheet to guide users through installing the companion app via RemoteIntent --- app/build.gradle.kts | 7 ++ .../essentials/FeatureSettingsActivity.kt | 11 +- .../sheets/WatchInstallHelpBottomSheet.kt | 113 ++++++++++++++++++ .../ui/composables/configs/WatchSettingsUI.kt | 3 +- .../essentials/viewmodels/WatchViewModel.kt | 9 ++ app/src/main/res/values-en/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + gradle/libs.versions.toml | 2 + 8 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/components/sheets/WatchInstallHelpBottomSheet.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 16ad43dd5..198adeff5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -128,6 +128,7 @@ dependencies { // Google Maps & Location implementation(libs.play.services.location) implementation(libs.play.services.wearable) + implementation(libs.androidx.wear.remote.interactions) implementation(libs.androidx.work.runtime.ktx) implementation(libs.gson) @@ -153,4 +154,10 @@ dependencies { implementation(libs.androidx.media3.exoplayer) implementation(libs.androidx.media3.common) + // RemoteIntent support + implementation("androidx.wear:wear-remote-interactions:1.1.0-alpha02") + + // tandard wearable library + implementation("com.google.android.gms:play-services-wearable:19.0.0") + } \ No newline at end of file diff --git a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt index 2cb4756ec..88dcf55f3 100644 --- a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt @@ -225,6 +225,7 @@ class FeatureSettingsActivity : AppCompatActivity() { // Help Sheet State var showHelpSheet by remember { mutableStateOf(false) } var showInstructionsSheet by remember { mutableStateOf(false) } + var showWatchInstallHelpSheet by remember { mutableStateOf(false) } var selectedHelpFeature by remember { mutableStateOf( null @@ -326,6 +327,12 @@ class FeatureSettingsActivity : AppCompatActivity() { ) } + if (showWatchInstallHelpSheet) { + com.sameerasw.essentials.ui.components.sheets.WatchInstallHelpBottomSheet( + onDismissRequest = { showWatchInstallHelpSheet = false } + ) + } + val pageTitle = if (featureObj != null) stringResource(featureObj.title) else featureId val hasMenu = featureObj != null && featureObj.aboutDescription != null @@ -706,7 +713,9 @@ class FeatureSettingsActivity : AppCompatActivity() { .align(Alignment.BottomCenter) .zIndex(1f), onHelpClick = { - if (hasMenu) { + if (featureId == "Watch") { + showWatchInstallHelpSheet = true + } else if (hasMenu) { selectedHelpFeature = featureObj showHelpSheet = true } else { diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/WatchInstallHelpBottomSheet.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/WatchInstallHelpBottomSheet.kt new file mode 100644 index 000000000..6769f62e3 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/sheets/WatchInstallHelpBottomSheet.kt @@ -0,0 +1,113 @@ +package com.sameerasw.essentials.ui.components.sheets + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.sameerasw.essentials.R +import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer + +import androidx.lifecycle.viewmodel.compose.viewModel +import com.sameerasw.essentials.viewmodels.WatchViewModel + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun WatchInstallHelpBottomSheet( + onDismissRequest: () -> Unit, + viewModel: WatchViewModel = viewModel() +) { + val context = LocalContext.current + val uriHandler = LocalUriHandler.current + + ModalBottomSheet( + onDismissRequest = onDismissRequest, + containerColor = MaterialTheme.colorScheme.surfaceContainerHigh + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) + .padding(bottom = 32.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + // Header + Row( + modifier = Modifier + .fillMaxWidth() + .padding(start = 8.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + Box( + modifier = Modifier + .size(40.dp) + .background( + color = MaterialTheme.colorScheme.primaryContainer, + shape = CircleShape + ), + contentAlignment = Alignment.Center + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_watch_24), + contentDescription = null, + modifier = Modifier.size(24.dp), + tint = MaterialTheme.colorScheme.primary + ) + } + + Text( + text = stringResource(R.string.watch_help_title), + style = MaterialTheme.typography.titleMedium + ) + } + + // Description + RoundedCardContainer( + containerColor = MaterialTheme.colorScheme.surfaceBright + ) { + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = stringResource(R.string.watch_help_description), + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + + // Action Button + Button( + onClick = { + viewModel.openPlayStoreOnWatch(context) + }, + modifier = Modifier + .fillMaxWidth() + .height(56.dp), + shape = MaterialTheme.shapes.extraLarge, + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary + ) + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_watch_24), + contentDescription = null, + modifier = Modifier.size(20.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = stringResource(R.string.watch_help_open_play_store), + style = MaterialTheme.typography.labelLarge + ) + } + } + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/WatchSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/WatchSettingsUI.kt index 3f8204972..779c17caa 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/WatchSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/WatchSettingsUI.kt @@ -100,8 +100,9 @@ fun WatchSettingsUI( color = MaterialTheme.colorScheme.onPrimary.copy(alpha = 0.8f), modifier = Modifier.padding(top = 4.dp, bottom = 12.dp) ) + val context = LocalContext.current Button( - onClick = { uriHandler.openUri("https://github.com/sameerasw/essentials-wear") }, + onClick = { viewModel.openPlayStoreOnWatch(context) }, modifier = Modifier.fillMaxWidth(), colors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.onPrimary, diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/WatchViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/WatchViewModel.kt index 1878d448e..944e89e2a 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/WatchViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/WatchViewModel.kt @@ -31,4 +31,13 @@ class WatchViewModel : ViewModel() { connectedWatchName.value = null } } + + fun openPlayStoreOnWatch(context: Context) { + val intent = android.content.Intent(android.content.Intent.ACTION_VIEW) + .setData(android.net.Uri.parse("market://details?id=com.sameerasw.essentials")) + .addCategory(android.content.Intent.CATEGORY_BROWSABLE) + + val remoteActivityHelper = androidx.wear.remote.interactions.RemoteActivityHelper(context) + remoteActivityHelper.startRemoteActivity(intent) + } } diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index dd6097c5d..8128b2714 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1224,6 +1224,9 @@ No Watch detected It looks like you do not have the Essentials Wear companion app installed on your watch. Install Companion + Install on Watch + To use Watch features, you need to install the Essentials companion app on your Wear OS watch. Click the button below to open the Play Store directly on your watch. + Open on Watch Interaction Interface Display diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 71c8df7e4..c84ecf7a3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1305,6 +1305,9 @@ No Watch detected It looks like you do not have the Essentials Wear companion app installed on your watch. Install Companion + Install on Watch + To use Watch features, you need to install the Essentials companion app on your Wear OS watch. Click the button below to open the Play Store directly on your watch. + Open on Watch Interaction diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 184cf0853..94ec054b7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,6 +24,7 @@ work = "2.9.1" sentry = "8.14.0" graphicsShapes = "1.0.1" media3 = "1.5.1" +wearRemoteInteractions = "1.1.0" [libraries] @@ -60,6 +61,7 @@ sentry-android = { group = "io.sentry", name = "sentry-android", version.ref = " androidx-graphics-shapes = { group = "androidx.graphics", name = "graphics-shapes", version.ref = "graphicsShapes" } androidx-media3-exoplayer = { group = "androidx.media3", name = "media3-exoplayer", version.ref = "media3" } androidx-media3-common = { group = "androidx.media3", name = "media3-common", version.ref = "media3" } +androidx-wear-remote-interactions = { group = "androidx.wear", name = "wear-remote-interactions", version.ref = "wearRemoteInteractions" } [plugins] From 72aef222f2befe8c53ee72c055b80c88e8755076 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 12:28:38 +0530 Subject: [PATCH 07/15] feat: add high-resolution shortcut icon generation to AppUtil and integrate into shortcut creation flows --- .../com/sameerasw/essentials/utils/AppUtil.kt | 26 +++++++++++++++---- .../essentials/utils/ShortcutUtil.kt | 2 +- .../essentials/viewmodels/MainViewModel.kt | 9 ++----- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/utils/AppUtil.kt b/app/src/main/java/com/sameerasw/essentials/utils/AppUtil.kt index 5d0b62928..175a0debe 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/AppUtil.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/AppUtil.kt @@ -26,6 +26,7 @@ object AppUtil { // Target size for app icons to balance quality and performance private const val ICON_SIZE = 64 + private const val SHORTCUT_ICON_SIZE = 192 /** * Get all installed apps (not just launcher apps) @@ -197,22 +198,37 @@ object AppUtil { return bitmap } - fun drawableToBitmap(drawable: android.graphics.drawable.Drawable): Bitmap { - if (drawable is BitmapDrawable) { + fun drawableToBitmap(drawable: android.graphics.drawable.Drawable, size: Int? = null): Bitmap { + if (drawable is BitmapDrawable && size == null) { return drawable.bitmap } + val width = size ?: drawable.intrinsicWidth.coerceAtLeast(1) + val height = size ?: drawable.intrinsicHeight.coerceAtLeast(1) + val bitmap = Bitmap.createBitmap( - drawable.intrinsicWidth.coerceAtLeast(1), - drawable.intrinsicHeight.coerceAtLeast(1), + width, + height, Bitmap.Config.ARGB_8888 ) val canvas = Canvas(bitmap) - drawable.setBounds(0, 0, canvas.width, canvas.height) + drawable.setBounds(0, 0, width, height) drawable.draw(canvas) return bitmap } + /** + * Get a properly sized icon for shortcuts + */ + fun getShortcutIcon(context: Context, packageName: String): Bitmap { + val drawable = try { + context.packageManager.getApplicationIcon(packageName) + } catch (e: Exception) { + context.packageManager.defaultActivityIcon + } + return drawableToBitmap(drawable, SHORTCUT_ICON_SIZE) + } + fun getAppVersion(context: Context, packageName: String): String? { return try { val pInfo = context.packageManager.getPackageInfo(packageName, 0) diff --git a/app/src/main/java/com/sameerasw/essentials/utils/ShortcutUtil.kt b/app/src/main/java/com/sameerasw/essentials/utils/ShortcutUtil.kt index ea8ebb3db..3509448a9 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/ShortcutUtil.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/ShortcutUtil.kt @@ -27,7 +27,7 @@ object ShortcutUtil { val shortcut = ShortcutInfo.Builder(context, app.packageName) .setShortLabel(app.appName) .setLongLabel(app.appName) - .setIcon(Icon.createWithBitmap(app.icon.asAndroidBitmap())) + .setIcon(Icon.createWithBitmap(AppUtil.getShortcutIcon(context, app.packageName))) .setIntent(intent) .build() diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index a0d994293..0d09e922e 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -610,16 +610,11 @@ class MainViewModel : ViewModel() { } if (androidx.core.content.pm.ShortcutManagerCompat.isRequestPinShortcutSupported(context)) { - val appIcon = try { - val drawable = context.packageManager.getApplicationIcon(config.packageName) - AppUtil.drawableToBitmap(drawable) - } catch (e: Exception) { - null - } + val appIcon = AppUtil.getShortcutIcon(context, config.packageName) val pinShortcutInfo = androidx.core.content.pm.ShortcutInfoCompat.Builder(context, config.packageName) .setShortLabel(appName) - .setIcon(if (appIcon != null) androidx.core.graphics.drawable.IconCompat.createWithBitmap(appIcon) else androidx.core.graphics.drawable.IconCompat.createWithResource(context, R.drawable.rounded_volume_off_24)) + .setIcon(androidx.core.graphics.drawable.IconCompat.createWithBitmap(appIcon)) .setIntent(intent) .build() From 23157319c40507454ac1a3339ce6af4e79a0b027 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 12:35:07 +0530 Subject: [PATCH 08/15] refactor: #372 move status bar icon logic to StatusBarIconHandler and clean up StatusBarIconViewModel --- .../services/handlers/StatusBarIconHandler.kt | 213 ++++++++++++++++++ .../tiles/ScreenOffAccessibilityService.kt | 6 + .../configs/StatusBarIconSettingsUI.kt | 3 +- .../viewmodels/StatusBarIconViewModel.kt | 181 +-------------- 4 files changed, 226 insertions(+), 177 deletions(-) create mode 100644 app/src/main/java/com/sameerasw/essentials/services/handlers/StatusBarIconHandler.kt 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 new file mode 100644 index 000000000..8206ca534 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/StatusBarIconHandler.kt @@ -0,0 +1,213 @@ +package com.sameerasw.essentials.services.handlers + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.os.BatteryManager +import android.provider.Settings +import android.telephony.TelephonyManager +import com.sameerasw.essentials.domain.StatusBarIconRegistry +import com.sameerasw.essentials.ui.components.pickers.NetworkType +import com.sameerasw.essentials.utils.updateIconBlacklistSetting +import com.sameerasw.essentials.viewmodels.StatusBarIconViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch + +/** + * Handler for dynamic status bar icon management in the background. + */ +class StatusBarIconHandler(private val context: Context) { + private val scope = CoroutineScope(Dispatchers.Main + Job()) + private var smartDataJob: Job? = null + + private val connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + updateAll() + } + + override fun onLost(network: Network) { + updateAll() + } + + override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { + updateAll() + } + } + + private val batteryReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + updateBatteryPercentage() + } + } + + fun register() { + try { + connectivityManager.registerDefaultNetworkCallback(networkCallback) + } catch (e: Exception) { + // Fallback for older versions or issues + startPollingFallback() + } + + val filter = IntentFilter().apply { + addAction(Intent.ACTION_POWER_CONNECTED) + addAction(Intent.ACTION_POWER_DISCONNECTED) + addAction(Intent.ACTION_BATTERY_CHANGED) + } + context.registerReceiver(batteryReceiver, filter) + + updateAll() + } + + fun unregister() { + try { + connectivityManager.unregisterNetworkCallback(networkCallback) + } catch (e: Exception) {} + + try { + context.unregisterReceiver(batteryReceiver) + } catch (e: Exception) {} + + smartDataJob?.cancel() + } + + fun updateAll() { + scope.launch { + val prefs = context.getSharedPreferences("essentials_prefs", Context.MODE_PRIVATE) + val isSmartWiFiEnabled = prefs.getBoolean(StatusBarIconViewModel.PREF_SMART_WIFI_ENABLED, false) + val isSmartDataEnabled = prefs.getBoolean(StatusBarIconViewModel.PREF_SMART_DATA_ENABLED, false) + + if (isSmartWiFiEnabled || isSmartDataEnabled) { + updateNetworkIcons(isSmartWiFiEnabled, isSmartDataEnabled) + } + + updateBatteryPercentage() + } + } + + private fun updateNetworkIcons(isSmartWiFiEnabled: Boolean, isSmartDataEnabled: Boolean) { + val prefs = context.getSharedPreferences("essentials_prefs", Context.MODE_PRIVATE) + + // 1. Get current states + val isWifiConnected = isWifiConnected() + val networkType = getCurrentNetworkType() + + // 2. Load user preferences for all icons + val visibilities = StatusBarIconRegistry.ALL_ICONS.associate { icon -> + icon.id to prefs.getBoolean(icon.preferencesKey, icon.defaultVisible) + }.toMutableMap() + + // 3. Apply Smart WiFi logic + if (isSmartWiFiEnabled) { + val mobileDataVisible = visibilities["mobile_data"] ?: true + visibilities["mobile_data"] = mobileDataVisible && !isWifiConnected + } + + // 4. Apply Smart Data logic + if (isSmartDataEnabled && !(isSmartWiFiEnabled && isWifiConnected)) { + val selectedNetworkTypes = prefs.getStringSet( + StatusBarIconViewModel.PREF_SELECTED_NETWORK_TYPES, + setOf(NetworkType.NETWORK_4G.name, NetworkType.NETWORK_5G.name) + )?.map { NetworkType.valueOf(it) }?.toSet() ?: emptySet() + + val shouldHideMobileData = selectedNetworkTypes.contains(networkType) || + (selectedNetworkTypes.contains(NetworkType.NETWORK_OTHER) && + !setOf( + NetworkType.NETWORK_5G, + NetworkType.NETWORK_4G, + NetworkType.NETWORK_3G + ).contains(networkType)) + + visibilities["mobile_data"] = visibilities["mobile_data"] == true && !shouldHideMobileData + } + + // 5. Update system settings + val blacklistNames = StatusBarIconRegistry.getBlacklistNames(visibilities) + updateIconBlacklistSetting(context, blacklistNames) + } + + private fun updateBatteryPercentage() { + val prefs = context.getSharedPreferences("essentials_prefs", Context.MODE_PRIVATE) + val mode = prefs.getInt(StatusBarIconViewModel.PREF_BATTERY_PERCENT_MODE, 0) + + if (mode != 2) return // Only handle "Charging Only" mode here + + val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> + context.registerReceiver(null, ifilter) + } + val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1 + val isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || + status == BatteryManager.BATTERY_STATUS_FULL + + updateSettingsValue("status_bar_show_battery_percent", if (isCharging) 1 else 0) + } + + private fun updateSettingsValue(key: String, value: Int) { + try { + Settings.System.putInt(context.contentResolver, key, value) + } catch (e: Exception) { + try { + Settings.Secure.putInt(context.contentResolver, key, value) + } catch (e2: Exception) { + // Fallback to Shizuku/Root if available (omitted for brevity in service, assuming permissions handled) + } + } + } + + private fun isWifiConnected(): Boolean { + return try { + val network = connectivityManager.activeNetwork ?: return false + val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) + } catch (e: Exception) { + false + } + } + + private fun getCurrentNetworkType(): NetworkType { + return try { + val network = connectivityManager.activeNetwork ?: return NetworkType.NETWORK_OTHER + val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return NetworkType.NETWORK_OTHER + + if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { + return NetworkType.NETWORK_OTHER + } + + val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager + val networkType = telephonyManager.networkType + + when (networkType) { + TelephonyManager.NETWORK_TYPE_NR -> NetworkType.NETWORK_5G + TelephonyManager.NETWORK_TYPE_LTE, + TelephonyManager.NETWORK_TYPE_HSPAP -> NetworkType.NETWORK_4G + TelephonyManager.NETWORK_TYPE_HSDPA, + TelephonyManager.NETWORK_TYPE_HSUPA, + TelephonyManager.NETWORK_TYPE_HSPA, + TelephonyManager.NETWORK_TYPE_UMTS, + TelephonyManager.NETWORK_TYPE_TD_SCDMA -> NetworkType.NETWORK_3G + else -> NetworkType.NETWORK_OTHER + } + } catch (e: Exception) { + NetworkType.NETWORK_OTHER + } + } + + private fun startPollingFallback() { + smartDataJob?.cancel() + smartDataJob = scope.launch { + while (true) { + updateAll() + delay(10000) + } + } + } +} 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 3e699069b..b5ff6b367 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 @@ -39,6 +39,7 @@ class ScreenOffAccessibilityService : AccessibilityService(), SensorEventListene private lateinit var ambientGlanceHandler: AmbientGlanceHandler private lateinit var aodForceTurnOffHandler: AodForceTurnOffHandler private lateinit var omniGestureOverlayHandler: OmniGestureOverlayHandler + private lateinit var statusBarIconHandler: StatusBarIconHandler private var screenReceiver: BroadcastReceiver? = null @@ -58,6 +59,8 @@ class ScreenOffAccessibilityService : AccessibilityService(), SensorEventListene key == "circle_to_search_gesture_height" || key == "circle_to_search_preview_enabled") { updateOmniOverlay() + } else if (key == "smart_wifi_enabled" || key == "smart_data_enabled" || key == "battery_percent_mode" || key?.startsWith("icon_") == true) { + statusBarIconHandler.updateAll() } } @@ -72,8 +75,10 @@ class ScreenOffAccessibilityService : AccessibilityService(), SensorEventListene ambientGlanceHandler = AmbientGlanceHandler(this) aodForceTurnOffHandler = AodForceTurnOffHandler(this) omniGestureOverlayHandler = OmniGestureOverlayHandler(this) + statusBarIconHandler = StatusBarIconHandler(this) flashlightHandler.register() + statusBarIconHandler.register() // Screen Receiver screenReceiver = object : BroadcastReceiver() { @@ -194,6 +199,7 @@ class ScreenOffAccessibilityService : AccessibilityService(), SensorEventListene ambientGlanceHandler.removeOverlay() aodForceTurnOffHandler.removeOverlay() omniGestureOverlayHandler.removeOverlay() + statusBarIconHandler.unregister() stopInputEventListener() serviceScope.cancel() getSharedPreferences("essentials_prefs", MODE_PRIVATE) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/StatusBarIconSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/StatusBarIconSettingsUI.kt index f4a6547de..0698357ec 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/StatusBarIconSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/StatusBarIconSettingsUI.kt @@ -328,13 +328,12 @@ fun StatusBarIconSettingsUI( color = MaterialTheme.colorScheme.surfaceBright, shape = androidx.compose.foundation.shape.RoundedCornerShape(MaterialTheme.shapes.extraSmall.bottomEnd) ) - .padding(16.dp) .highlight(highlightSetting == "battery_percentage") ) { Row( modifier = Modifier .fillMaxWidth() - .padding(bottom = 8.dp), + .padding(top = 16.dp, start = 20.dp, end = 16.dp, bottom = 2.dp), verticalAlignment = androidx.compose.ui.Alignment.CenterVertically ) { Text( 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 81c011d26..077226507 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/StatusBarIconViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/StatusBarIconViewModel.kt @@ -116,50 +116,11 @@ class StatusBarIconViewModel : ViewModel() { loadStatusBarSettings(context) loadAdvancedFlags(context) - if (isSmartWiFiEnabled.value && isWriteSecureSettingsEnabled.value) { - startSmartWiFiUpdates(context) - } - - if (isSmartDataEnabled.value && isWriteSecureSettingsEnabled.value) { - startSmartDataUpdates(context) - } - - if (batteryPercentageMode.value == 2) { - startBatteryStatusListener(context) - } - } - - private fun startBatteryStatusListener(context: Context) { - if (batteryReceiver != null) return - - batteryReceiver = object : android.content.BroadcastReceiver() { - override fun onReceive(context: Context, intent: Intent) { - if (batteryPercentageMode.value == 2) { - val isCharging = intent.action == Intent.ACTION_POWER_CONNECTED - updateSettingsValue( - context, - "status_bar_show_battery_percent", - if (isCharging) 1 else 0 - ) - } - } - } - - val filter = IntentFilter().apply { - addAction(Intent.ACTION_POWER_CONNECTED) - addAction(Intent.ACTION_POWER_DISCONNECTED) - } - context.registerReceiver(batteryReceiver, filter) - } + loadStatusBarSettings(context) + loadAdvancedFlags(context) - private fun stopBatteryStatusListener(context: Context) { - batteryReceiver?.let { - try { - context.unregisterReceiver(it) - } catch (e: Exception) { - } - batteryReceiver = null - } + // Initial update for UI consistency + updateIconBlacklist(context) } /** @@ -239,13 +200,7 @@ class StatusBarIconViewModel : ViewModel() { context.getSharedPreferences("essentials_prefs", Context.MODE_PRIVATE).edit { putBoolean(PREF_SMART_WIFI_ENABLED, enabled) } - - if (enabled && isWriteSecureSettingsEnabled.value) { - startSmartWiFiUpdates(context) - } else { - smartWifiJob?.cancel() - updateIconBlacklist(context) - } + updateIconBlacklist(context) } fun setSmartDataEnabled(enabled: Boolean, context: Context) { @@ -253,14 +208,7 @@ class StatusBarIconViewModel : ViewModel() { context.getSharedPreferences("essentials_prefs", Context.MODE_PRIVATE).edit { putBoolean(PREF_SMART_DATA_ENABLED, enabled) } - - if (enabled && isWriteSecureSettingsEnabled.value) { - startSmartDataUpdates(context) - } else { - smartDataJob?.cancel() - updateIconBlacklist(context) - } - + updateIconBlacklist(context) updateSelectedNetworkTypes(context, enabled) } @@ -297,117 +245,6 @@ class StatusBarIconViewModel : ViewModel() { updateIconBlacklistSetting(context, blacklistNames) } - private fun startSmartWiFiUpdates(context: Context) { - smartWifiJob?.cancel() - smartWifiJob = scope.launch { - while (true) { - val isWifiConnected = isWifiConnected(context) - updateSmartWiFiBlacklist(context, isWifiConnected) - delay(1000) - } - } - } - - /** - * Update blacklist for Smart WiFi feature - * Uses registry-based approach for clean code - */ - private fun updateSmartWiFiBlacklist(context: Context, wifiConnected: Boolean) { - if (!isSmartWiFiEnabled.value || !isWriteSecureSettingsEnabled.value) return - - val visibilities = getIconVisibilities().toMutableMap() - - // Smart WiFi logic: hide mobile data when WiFi is connected - val mobileDataVisible = visibilities["mobile_data"] ?: true - visibilities["mobile_data"] = mobileDataVisible && !wifiConnected - - val blacklistNames = StatusBarIconRegistry.getBlacklistNames(visibilities) - updateIconBlacklistSetting(context, blacklistNames) - } - - private fun startSmartDataUpdates(context: Context) { - smartDataJob?.cancel() - smartDataJob = scope.launch { - while (true) { - val currentNetworkType = getCurrentNetworkType(context) - updateSmartDataBlacklist(context, currentNetworkType) - delay(10000) - } - } - } - - /** - * Update blacklist for Smart Data feature - */ - private fun updateSmartDataBlacklist(context: Context, networkType: NetworkType) { - if (!isSmartDataEnabled.value || !isWriteSecureSettingsEnabled.value) { - return - } - - if (isSmartWiFiEnabled.value && isWifiConnected(context)) { - return - } - - val visibilities = getIconVisibilities().toMutableMap() - - val shouldHideMobileData = selectedNetworkTypes.value.contains(networkType) || - (selectedNetworkTypes.value.contains(NetworkType.NETWORK_OTHER) && - !setOf( - NetworkType.NETWORK_5G, - NetworkType.NETWORK_4G, - NetworkType.NETWORK_3G - ).contains(networkType)) - - visibilities["mobile_data"] = !shouldHideMobileData - - val blacklistNames = StatusBarIconRegistry.getBlacklistNames(visibilities) - updateIconBlacklistSetting(context, blacklistNames) - } - - private fun getCurrentNetworkType(context: Context): NetworkType { - return try { - if (ContextCompat.checkSelfPermission( - context, - Manifest.permission.READ_PHONE_STATE - ) != PackageManager.PERMISSION_GRANTED - ) { - return NetworkType.NETWORK_OTHER - } - - val connectivityManager = - context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - val network = connectivityManager.activeNetwork ?: return NetworkType.NETWORK_OTHER - val capabilities = connectivityManager.getNetworkCapabilities(network) - ?: return NetworkType.NETWORK_OTHER - - if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { - return NetworkType.NETWORK_OTHER - } - - val telephonyManager = - context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager - - @Suppress("DEPRECATION") - val networkType = telephonyManager.networkType - - when (networkType) { - TelephonyManager.NETWORK_TYPE_NR -> NetworkType.NETWORK_5G - TelephonyManager.NETWORK_TYPE_LTE, - TelephonyManager.NETWORK_TYPE_HSPAP -> NetworkType.NETWORK_4G - - TelephonyManager.NETWORK_TYPE_HSDPA, - TelephonyManager.NETWORK_TYPE_HSUPA, - TelephonyManager.NETWORK_TYPE_HSPA, - TelephonyManager.NETWORK_TYPE_UMTS, - TelephonyManager.NETWORK_TYPE_TD_SCDMA -> NetworkType.NETWORK_3G - - else -> NetworkType.NETWORK_OTHER - } - } catch (@Suppress("UNUSED_PARAMETER") e: Exception) { - NetworkType.NETWORK_OTHER - } - } - private fun isWifiConnected(context: Context): Boolean { return try { val connectivityManager = @@ -535,12 +372,6 @@ class StatusBarIconViewModel : ViewModel() { putInt(PREF_BATTERY_PERCENT_MODE, mode) } - if (mode == 2) { - startBatteryStatusListener(context) - } else { - stopBatteryStatusListener(context) - } - val systemValue = when (mode) { 1 -> 1 // Always 2 -> { // Charging From 70d8466a6a7920579cec3226f522be6e294c314a Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 13:14:47 +0530 Subject: [PATCH 09/15] feat: add toggle to disable rotation suggestion in other customizations settings --- .../data/repository/SettingsRepository.kt | 1 + .../configs/OtherCustomizationsSettingsUI.kt | 23 ++++++++++++ .../essentials/viewmodels/MainViewModel.kt | 35 +++++++++++++++++++ app/src/main/res/values-en/strings.xml | 4 ++- app/src/main/res/values-si/strings.xml | 5 +++ app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 69 insertions(+), 1 deletion(-) 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 1a60ae54a..6ff1910c5 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 @@ -226,6 +226,7 @@ class SettingsRepository(private val context: Context) { const val KEY_SHUT_UP_SELECTED_APPS = "shut_up_selected_apps" const val KEY_SHUT_UP_ORIGINAL_SETTINGS = "shut_up_original_settings" const val KEY_SHUT_UP_ATTEMPT_SHIZUKU_RESTART = "shut_up_attempt_shizuku_restart" + const val KEY_DISABLE_ROTATION_SUGGESTION = "disable_rotation_suggestion" } // Observe changes diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/OtherCustomizationsSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/OtherCustomizationsSettingsUI.kt index ac1391140..625e490b4 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/OtherCustomizationsSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/OtherCustomizationsSettingsUI.kt @@ -37,6 +37,7 @@ enum class PermissionModule { HIDE_GESTURE_BAR, SHOW_ON_LAUNCHER, CIRCLE_TO_SEARCH, + DISABLE_ROTATION_SUGGESTION, NONE } @@ -111,6 +112,7 @@ fun OtherCustomizationsSettingsUI( listOf(shizukuPermission, appDetectionPermission) } PermissionModule.CIRCLE_TO_SEARCH -> listOf(shizukuPermission, accessibilityPermission) + PermissionModule.DISABLE_ROTATION_SUGGESTION -> listOf(shizukuPermission) else -> emptyList() } @@ -219,6 +221,27 @@ fun OtherCustomizationsSettingsUI( modifier = Modifier.highlight(highlightSetting == "circle_to_search_gesture_toggle") ) + IconToggleItem( + title = stringResource(R.string.feat_disable_rotation_suggestion_title), + description = stringResource(R.string.feat_disable_rotation_suggestion_desc), + isChecked = viewModel.isDisableRotationSuggestionEnabled.value, + onCheckedChange = { enabled -> + if (viewModel.isWriteSecureSettingsEnabled.value || viewModel.isShizukuPermissionGranted.value || viewModel.isRootPermissionGranted.value) { + viewModel.setDisableRotationSuggestionEnabled(enabled, context) + } else { + requestingPermissionFor = PermissionModule.DISABLE_ROTATION_SUGGESTION + } + }, + enabled = true, + onDisabledClick = { + if (!viewModel.isWriteSecureSettingsEnabled.value && !viewModel.isShizukuPermissionGranted.value && !viewModel.isRootPermissionGranted.value) { + requestingPermissionFor = PermissionModule.DISABLE_ROTATION_SUGGESTION + } + }, + iconRes = R.drawable.rounded_mobile_rotate_24, + modifier = Modifier.highlight(highlightSetting == "disable_rotation_suggestion_toggle") + ) + AnimatedVisibility( visible = viewModel.isCircleToSearchGestureEnabled.value, enter = expandVertically(), diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index 0d09e922e..ba5c56258 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -139,6 +139,7 @@ class MainViewModel : ViewModel() { val isCircleToSearchGestureEnabled = mutableStateOf(false) val circleToSearchGestureHeight = mutableFloatStateOf(48f) val isCircleToSearchPreviewEnabled = mutableStateOf(false) + val isDisableRotationSuggestionEnabled = mutableStateOf(false) // Live Wallpaper val liveWallpaperSelectedVideo = mutableStateOf(SettingsRepository.LIVE_WALLPAPER_DEFAULT_VIDEO) @@ -550,6 +551,10 @@ class MainViewModel : ViewModel() { SettingsRepository.KEY_SHUT_UP_ATTEMPT_SHIZUKU_RESTART -> { isShutUpAttemptShizukuRestart.value = settingsRepository.isShutUpAttemptShizukuRestartEnabled() } + SettingsRepository.KEY_DISABLE_ROTATION_SUGGESTION -> { + isDisableRotationSuggestionEnabled.value = settingsRepository.getBoolean(key) + appContext?.let { applyDisableRotationSuggestion(it, isDisableRotationSuggestionEnabled.value) } + } } } } @@ -649,6 +654,7 @@ class MainViewModel : ViewModel() { notificationLightingSystemMode.intValue = settingsRepository.getNotificationLightingSystemMode() isShutUpAttemptShizukuRestart.value = settingsRepository.isShutUpAttemptShizukuRestartEnabled() + isDisableRotationSuggestionEnabled.value = settingsRepository.getBoolean(SettingsRepository.KEY_DISABLE_ROTATION_SUGGESTION, false) loadShutUpConfigs() if (isHideGestureBarEnabled.value) { @@ -1435,6 +1441,35 @@ class MainViewModel : ViewModel() { updateAppDetectionService(context) } + fun setDisableRotationSuggestionEnabled(enabled: Boolean, context: Context) { + isDisableRotationSuggestionEnabled.value = enabled + settingsRepository.putBoolean(SettingsRepository.KEY_DISABLE_ROTATION_SUGGESTION, enabled) + applyDisableRotationSuggestion(context, enabled) + } + + private fun applyDisableRotationSuggestion(context: Context, enabled: Boolean) { + val value = if (enabled) 0 else 1 + val key = "show_rotation_suggestions" + + var success = false + if (PermissionUtils.canWriteSecureSettings(context)) { + try { + success = Settings.Secure.putInt(context.contentResolver, key, value) + } catch (e: Exception) { + e.printStackTrace() + } + } + + if (!success) { + val command = "settings put secure $key $value" + if (ShizukuUtils.hasPermission()) { + ShizukuUtils.runCommand(command) + } else if (RootUtils.isRootPermissionGranted()) { + RootUtils.runCommand(command) + } + } + } + private fun applyHideGestureBar(context: Context, enabled: Boolean) { if (enabled) { com.sameerasw.essentials.utils.StatusBarManager.requestDisable( diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 8128b2714..3319dff39 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1389,7 +1389,9 @@ Disable USB Debugging Disable Wireless Debugging Disable Accessibility Services - Shortcut created for %s + Shortcut for %1$s created on home screen + Disable rotation suggestion + Do not show the rotation button when auto-rotate is off App got shut up Shut up features returned Auto Freeze diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 9acaad479..3408b673d 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -1,6 +1,9 @@ බීටා + Shizuku නැවත ආරම්භ කිරීමට උත්සාහ කරන්න + Shizuku නැවත ආරම්භ කිරීමේ අනතුරු ඇඟවීම + Wireless debugging ටොගල් කර ඇති බැවින්, Shizuku සේවාවන් ස්වයංක්‍රීයව ආරම්භ නොවී තිබිය හැකි අතර එමඟින් යෙදුම් කැටි කිරීම ක්‍රියාත්මක නොවේ. Shizuku නැවත ආරම්භ කිරීමට උත්සාහ කරන්න විකල්පයද ක්‍රියාත්මක කිරීම සලකා බලන්න Essentials Accessibility Service\n\nThis service is required for the following advanced features:\n\n• Physical Button Remapping:\nDetects volume button presses even when the screen is off to trigger actions like the Flashlight.\n\n• Per-App Settings:\nMonitors the currently active app to apply specific profiles for Dynamic Night Light, Notification Lighting Colors, and App Lock.\n\n• Screen Control:\nAllows the app to lock the screen (e.g. via Double Tap or Widgets) and detect screen state changes.\n\n• Security:\nPrevents unauthorized changes by detecting window content when the device is locked.\n\nNo input text or sensitive user data is collected or transmitted. යෙදුම් කැටි කිරීම කලාතුරකින් භාවිතා කරන යෙදුම් අක්රිය කරන්න @@ -1390,4 +1393,6 @@ %1$s will be archived in %2$d seconds Freeze now Abort + භ්‍රමණ යෝජනා අබල කරන්න + ස්වයංක්‍රීය භ්‍රමණය අක්‍රිය වූ විට භ්‍රමණ බොත්තම පෙන්වන්න එපා diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c84ecf7a3..94fa6103f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1478,6 +1478,8 @@ Disable Wireless Debugging Disable Accessibility Services Shortcut created for %s + Disable rotation suggestion + Do not show the rotation button when auto-rotate is off App got shut up Shut up features returned Auto Freeze From 1467510c712bb35186761c5a6cd896bfbaa3b822 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 15:27:03 +0530 Subject: [PATCH 10/15] feat: add support for customizing lock screen clock styles --- .../essentials/FeatureSettingsActivity.kt | 12 +- .../domain/registry/FeatureRegistry.kt | 14 ++ .../domain/registry/PermissionRegistry.kt | 1 + .../configs/LockScreenClockSettingsUI.kt | 149 ++++++++++++++++++ .../essentials/viewmodels/MainViewModel.kt | 48 ++++++ app/src/main/res/drawable/clock_bignum.jpg | Bin 0 -> 43499 bytes .../main/res/drawable/clock_calligraphy.jpg | Bin 0 -> 39802 bytes app/src/main/res/drawable/clock_flex.jpg | Bin 0 -> 22489 bytes app/src/main/res/drawable/clock_growth.jpg | Bin 0 -> 29453 bytes .../main/res/drawable/clock_handwritten.jpg | Bin 0 -> 37741 bytes app/src/main/res/drawable/clock_inflate.jpg | Bin 0 -> 47831 bytes app/src/main/res/drawable/clock_metro.jpg | Bin 0 -> 59982 bytes app/src/main/res/drawable/clock_overlap.jpg | Bin 0 -> 36729 bytes app/src/main/res/drawable/clock_weather.jpg | Bin 0 -> 27004 bytes app/src/main/res/values-en/strings.xml | 18 +++ app/src/main/res/values/strings.xml | 18 +++ 16 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt create mode 100644 app/src/main/res/drawable/clock_bignum.jpg create mode 100644 app/src/main/res/drawable/clock_calligraphy.jpg create mode 100644 app/src/main/res/drawable/clock_flex.jpg create mode 100644 app/src/main/res/drawable/clock_growth.jpg create mode 100644 app/src/main/res/drawable/clock_handwritten.jpg create mode 100644 app/src/main/res/drawable/clock_inflate.jpg create mode 100644 app/src/main/res/drawable/clock_metro.jpg create mode 100644 app/src/main/res/drawable/clock_overlap.jpg create mode 100644 app/src/main/res/drawable/clock_weather.jpg diff --git a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt index 88dcf55f3..aacd3054b 100644 --- a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt @@ -271,6 +271,7 @@ class FeatureSettingsActivity : AppCompatActivity() { "Battery notification" -> !viewModel.isPostNotificationsEnabled.value || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !viewModel.isBluetoothPermissionGranted.value) "Text and animations" -> !viewModel.isWriteSettingsEnabled.value || !isWriteSecureSettingsEnabled "Always on Display" -> !isWriteSecureSettingsEnabled + "Lock screen clock" -> !isWriteSecureSettingsEnabled "Other customizations" -> !com.sameerasw.essentials.utils.ShellUtils.hasPermission(context) "Shut-Up!" -> !isWriteSecureSettingsEnabled || !viewModel.isUsageStatsPermissionGranted.value else -> false @@ -351,7 +352,7 @@ class FeatureSettingsActivity : AppCompatActivity() { direction = BlurDirection.TOP ) ) { - val hasScroll = featureId != "Sound mode tile" && featureId != "Quick settings tiles" && featureId != "Location reached" + val hasScroll = featureId != "Sound mode tile" && featureId != "Quick settings tiles" && featureId != "Location reached" && featureId != "Lock screen clock" Column( modifier = Modifier .fillMaxSize() @@ -420,6 +421,7 @@ class FeatureSettingsActivity : AppCompatActivity() { "Caffeinate" -> !viewModel.isPostNotificationsEnabled.value "Battery notification" -> !viewModel.isPostNotificationsEnabled.value || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !viewModel.isBluetoothPermissionGranted.value) "Text and animations" -> !viewModel.isWriteSettingsEnabled.value || !isWriteSecureSettingsEnabled + "Lock screen clock" -> !isWriteSecureSettingsEnabled "Screen refresh rate" -> !viewModel.isShizukuPermissionGranted.value "Shut-Up!" -> !isWriteSecureSettingsEnabled || !viewModel.isUsageStatsPermissionGranted.value else -> false @@ -689,6 +691,14 @@ class FeatureSettingsActivity : AppCompatActivity() { ) } + "Lock screen clock" -> { + com.sameerasw.essentials.ui.composables.configs.LockScreenClockSettingsUI( + viewModel = viewModel, + modifier = Modifier.padding(top = 16.dp), + highlightSetting = highlightSetting + ) + } + "Shut-Up!" -> { ShutUpSettingsUI( viewModel = viewModel, diff --git a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt index 5e063a2a8..0532e5e02 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt @@ -219,6 +219,20 @@ object FeatureRegistry { override fun isEnabled(viewModel: MainViewModel) = true override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) {} }, + object : Feature( + id = "Lock screen clock", + title = R.string.feat_lock_screen_clock_title, + iconRes = R.drawable.rounded_nest_clock_farsight_analog_24, + category = R.string.cat_interface, + description = R.string.feat_lock_screen_clock_desc, + aboutDescription = R.string.about_desc_lock_screen_clock, + permissionKeys = listOf("WRITE_SECURE_SETTINGS"), + showToggle = false, + parentFeatureId = "Display" + ) { + override fun isEnabled(viewModel: MainViewModel) = true + override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) {} + }, object : Feature( id = "Watch", title = R.string.feat_watch_title, diff --git a/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt b/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt index 0feac26fb..a1f982d43 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt @@ -29,6 +29,7 @@ fun initPermissionRegistry() { PermissionRegistry.register("WRITE_SECURE_SETTINGS", R.string.feat_dynamic_night_light_title) PermissionRegistry.register("WRITE_SECURE_SETTINGS", R.string.tile_developer_options) PermissionRegistry.register("WRITE_SECURE_SETTINGS", R.string.tile_charge_optimization) + PermissionRegistry.register("WRITE_SECURE_SETTINGS", R.string.feat_lock_screen_clock_title) // Shizuku permission PermissionRegistry.register("SHIZUKU", R.string.feat_freeze_title) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt new file mode 100644 index 000000000..c1f6443c7 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt @@ -0,0 +1,149 @@ +package com.sameerasw.essentials.ui.composables.configs + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.* +import androidx.compose.material3.carousel.HorizontalMultiBrowseCarousel +import androidx.compose.material3.carousel.rememberCarouselState +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.ColorMatrix +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.sameerasw.essentials.R +import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer +import com.sameerasw.essentials.utils.HapticUtil +import com.sameerasw.essentials.viewmodels.MainViewModel + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LockScreenClockSettingsUI( + viewModel: MainViewModel, + modifier: Modifier = Modifier, + highlightSetting: String? = null +) { + val context = LocalContext.current + val view = LocalView.current + val currentClockId by viewModel.lockScreenClockId + val isDark = isSystemInDarkTheme() + + val inversionMatrix = remember { + ColorMatrix( + floatArrayOf( + -1f, 0f, 0f, 0f, 255f, + 0f, -1f, 0f, 0f, 255f, + 0f, 0f, -1f, 0f, 255f, + 0f, 0f, 0f, 1f, 0f + ) + ) + } + + val clockOptions = remember { + listOf( + ClockOption("ANALOG_CLOCK_BIGNUM", R.string.lock_screen_clock_bignum, R.drawable.clock_bignum), + ClockOption("DIGITAL_CLOCK_CALLIGRAPHY", R.string.lock_screen_clock_calligraphy, R.drawable.clock_calligraphy), + ClockOption("DIGITAL_CLOCK_FLEX", R.string.lock_screen_clock_flex, R.drawable.clock_flex), + ClockOption("DIGITAL_CLOCK_GROWTH", R.string.lock_screen_clock_growth, R.drawable.clock_growth), + ClockOption("DIGITAL_CLOCK_HANDWRITTEN", R.string.lock_screen_clock_handwritten, R.drawable.clock_handwritten), + ClockOption("DIGITAL_CLOCK_INFLATE", R.string.lock_screen_clock_inflate, R.drawable.clock_inflate), + ClockOption("DIGITAL_CLOCK_METRO", R.string.lock_screen_clock_metro, R.drawable.clock_metro), + ClockOption("DIGITAL_CLOCK_NUMBEROVERLAP", R.string.lock_screen_clock_numoverlap, R.drawable.clock_overlap), + ClockOption("DIGITAL_CLOCK_WEATHER", R.string.lock_screen_clock_weather, R.drawable.clock_weather) + ) + } + + val carouselState = rememberCarouselState { clockOptions.size } + + Column( + modifier = modifier + .fillMaxWidth() + .padding(vertical = 16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + text = stringResource(R.string.lock_screen_clock_select_label), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(horizontal = 16.dp), + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + + HorizontalMultiBrowseCarousel( + state = carouselState, + preferredItemWidth = 180.dp, + itemSpacing = 2.dp, + modifier = Modifier + .padding(horizontal = 16.dp) + .fillMaxWidth() + .height(200.dp) + ) { index -> + val option = clockOptions[index] + val isSelected = currentClockId == option.id + + Box( + modifier = Modifier + .fillMaxSize() + .padding(vertical = 4.dp) + .maskClip(MaterialTheme.shapes.large) + .background(if (isDark) Color.White else MaterialTheme.colorScheme.surfaceBright) + .pointerInput(option) { + detectTapGestures { + HapticUtil.performUIHaptic(view) + viewModel.setLockScreenClockId(option.id, context) + } + } + ) { + androidx.compose.foundation.Image( + painter = painterResource(id = option.imageRes), + contentDescription = stringResource(option.nameRes), + modifier = Modifier.fillMaxSize(), + contentScale = androidx.compose.ui.layout.ContentScale.Crop, + colorFilter = if (isDark) ColorFilter.colorMatrix(inversionMatrix) else null + ) + + if (isSelected) { + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.primary.copy(alpha = 0.5f)) + ) + } + } + } + + RoundedCardContainer(modifier = Modifier.padding(horizontal = 8.dp)) { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = stringResource(R.string.about_desc_lock_screen_clock), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + Spacer(modifier = Modifier.height(80.dp)) + } +} + +data class ClockOption( + val id: String, + val nameRes: Int, + val imageRes: Int +) diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index ba5c56258..e1d6c786c 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -140,6 +140,7 @@ class MainViewModel : ViewModel() { val circleToSearchGestureHeight = mutableFloatStateOf(48f) val isCircleToSearchPreviewEnabled = mutableStateOf(false) val isDisableRotationSuggestionEnabled = mutableStateOf(false) + val lockScreenClockId = mutableStateOf(null) // Live Wallpaper val liveWallpaperSelectedVideo = mutableStateOf(SettingsRepository.LIVE_WALLPAPER_DEFAULT_VIDEO) @@ -655,6 +656,7 @@ class MainViewModel : ViewModel() { isShutUpAttemptShizukuRestart.value = settingsRepository.isShutUpAttemptShizukuRestartEnabled() isDisableRotationSuggestionEnabled.value = settingsRepository.getBoolean(SettingsRepository.KEY_DISABLE_ROTATION_SUGGESTION, false) + lockScreenClockId.value = readCurrentLockScreenClockId(context) loadShutUpConfigs() if (isHideGestureBarEnabled.value) { @@ -1470,6 +1472,52 @@ class MainViewModel : ViewModel() { } } + fun setLockScreenClockId(clockId: String, context: Context) { + val json = "{\"clockId\":\"$clockId\"}" + val command = "settings put secure lock_screen_custom_clock_face '$json'" + var success = false + + if (PermissionUtils.canWriteSecureSettings(context)) { + try { + success = Settings.Secure.putString( + context.contentResolver, + "lock_screen_custom_clock_face", + json + ) + } catch (e: Exception) { + e.printStackTrace() + } + } + + if (!success) { + if (ShizukuUtils.hasPermission()) { + ShizukuUtils.runCommand(command) + success = true + } else if (RootUtils.isRootPermissionGranted()) { + RootUtils.runCommand(command) + success = true + } + } + + if (success) { + lockScreenClockId.value = clockId + } + } + + private fun readCurrentLockScreenClockId(context: Context): String? { + return try { + val raw = Settings.Secure.getString( + context.contentResolver, + "lock_screen_custom_clock_face" + ) ?: return null + // Extract clockId from JSON string like {"clockId":"DIGITAL_CLOCK_WEATHER"} + val match = Regex(""""clockId":\s*"([^"]+)"""").find(raw) + match?.groupValues?.getOrNull(1) + } catch (e: Exception) { + null + } + } + private fun applyHideGestureBar(context: Context, enabled: Boolean) { if (enabled) { com.sameerasw.essentials.utils.StatusBarManager.requestDisable( diff --git a/app/src/main/res/drawable/clock_bignum.jpg b/app/src/main/res/drawable/clock_bignum.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6096439be05239d5205b631c53f0dd7238464a6 GIT binary patch literal 43499 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

Mp(z>~o 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 Iu)n|l2hx#2!vFvP literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/clock_calligraphy.jpg b/app/src/main/res/drawable/clock_calligraphy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a854385fc72957e282df85aabe229684725a69c GIT binary patch literal 39802 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 Z{-~P%3Ge;iuqglkJN!R__o(@y{{e1k#Wnx{ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/clock_flex.jpg b/app/src/main/res/drawable/clock_flex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d28646cb196dc14a78950468db3d7f3f811b853 GIT binary patch literal 22489 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 Y|AUJ9YZ%opN=-kH^8IJsAb0G40n^iaBLDyZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/clock_growth.jpg b/app/src/main/res/drawable/clock_growth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7cbb1c5c869d83a03258531da364a35e099fbbf GIT binary patch literal 29453 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≥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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/clock_inflate.jpg b/app/src/main/res/drawable/clock_inflate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e556407e3d538b329e9902f4c78597ae051dea78 GIT binary patch literal 47831 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/clock_metro.jpg b/app/src/main/res/drawable/clock_metro.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4beec0c5b523b1f863273e36c24b159fceaef6f0 GIT binary patch literal 59982 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

    3*J8^IgbujG0u6 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/clock_weather.jpg b/app/src/main/res/drawable/clock_weather.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7dbc2ed9aeee32761969d85c3b50b03f67019284 GIT binary patch literal 27004 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 Wwf)z$uRo#j|3Cfz{^H<14E-IeSh3*% literal 0 HcmV?d00001 diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 3319dff39..2a417b3dd 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1398,4 +1398,22 @@ %1$s will be archived in %2$d seconds Freeze now Abort + + Lock screen clock + Customize lock screen clock on Pixels + Change the lock screen clock style on Pixels. Select from the available clock faces provided by the System UI. Some old styles might not be available. + Big Number + Calligraphy + Flex + Growth + Handwritten + Inflate + Metro + Number Overlap + Weather + Select Clock Style + Current + Apply + Clock style applied + WRITE_SECURE_SETTINGS permission required diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94fa6103f..f6359fae8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1486,4 +1486,22 @@ %1$s will be archived in %2$d seconds Freeze now Abort + + Lock screen clock + Customize lock screen clock on Pixels + Change the lock screen clock style on Pixels. Select from the available clock faces provided by the System UI. Some old styles might not be available. + Big Number + Calligraphy + Flex + Growth + Handwritten + Inflate + Metro + Number Overlap + Weather + Select Clock Style + Current + Apply + Clock style applied + WRITE_SECURE_SETTINGS permission required From b2e86dd160670bceba2af7e40ee0a66e0382108b Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 15:32:21 +0530 Subject: [PATCH 11/15] feat: add haptic feedback on carousel item change in lock screen clock settings --- .../composables/configs/LockScreenClockSettingsUI.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt index c1f6443c7..53d42e361 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt @@ -69,6 +69,18 @@ fun LockScreenClockSettingsUI( val carouselState = rememberCarouselState { clockOptions.size } + LaunchedEffect(carouselState) { + var isFirst = true + snapshotFlow { carouselState.currentItem } + .collect { + if (isFirst) { + isFirst = false + } else { + HapticUtil.performSliderHaptic(view) + } + } + } + Column( modifier = modifier .fillMaxWidth() From 7a54f886e10cda937b45b204dfbd88f8ff49cc8c Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 16:09:32 +0530 Subject: [PATCH 12/15] feat: add customization options for lock screen clock style, color, and font parameters --- .../essentials/FeatureSettingsActivity.kt | 2 +- .../data/repository/SettingsRepository.kt | 28 +++ .../configs/LockScreenClockSettingsUI.kt | 195 ++++++++++++++++-- .../essentials/viewmodels/MainViewModel.kt | 59 +++++- app/src/main/res/values/strings.xml | 12 ++ 5 files changed, 281 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt index aacd3054b..b5f463c26 100644 --- a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt @@ -352,7 +352,7 @@ class FeatureSettingsActivity : AppCompatActivity() { direction = BlurDirection.TOP ) ) { - val hasScroll = featureId != "Sound mode tile" && featureId != "Quick settings tiles" && featureId != "Location reached" && featureId != "Lock screen clock" + val hasScroll = featureId != "Sound mode tile" && featureId != "Quick settings tiles" && featureId != "Location reached" Column( modifier = Modifier .fillMaxSize() 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 6ff1910c5..afb0cdf33 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 @@ -227,6 +227,14 @@ class SettingsRepository(private val context: Context) { const val KEY_SHUT_UP_ORIGINAL_SETTINGS = "shut_up_original_settings" const val KEY_SHUT_UP_ATTEMPT_SHIZUKU_RESTART = "shut_up_attempt_shizuku_restart" const val KEY_DISABLE_ROTATION_SUGGESTION = "disable_rotation_suggestion" + + const val KEY_LOCK_SCREEN_CLOCK_WEIGHT = "lock_screen_clock_weight" + const val KEY_LOCK_SCREEN_CLOCK_WIDTH = "lock_screen_clock_width" + const val KEY_LOCK_SCREEN_CLOCK_GRADE = "lock_screen_clock_grade" + const val KEY_LOCK_SCREEN_CLOCK_ROUNDNESS = "lock_screen_clock_roundness" + const val KEY_LOCK_SCREEN_CLOCK_COLOR_TONE = "lock_screen_clock_color_tone" + const val KEY_LOCK_SCREEN_CLOCK_SELECTED_COLOR_ID = "lock_screen_clock_selected_color_id" + const val KEY_LOCK_SCREEN_CLOCK_SEED_COLOR = "lock_screen_clock_seed_color" } // Observe changes @@ -1214,5 +1222,25 @@ class SettingsRepository(private val context: Context) { } } + fun getLockScreenClockWeight(): Int = getInt(KEY_LOCK_SCREEN_CLOCK_WEIGHT, 300) + fun setLockScreenClockWeight(value: Int) = putInt(KEY_LOCK_SCREEN_CLOCK_WEIGHT, value) + + fun getLockScreenClockWidth(): Int = getInt(KEY_LOCK_SCREEN_CLOCK_WIDTH, 116) + fun setLockScreenClockWidth(value: Int) = putInt(KEY_LOCK_SCREEN_CLOCK_WIDTH, value) + + fun getLockScreenClockGrade(): Int = getInt(KEY_LOCK_SCREEN_CLOCK_GRADE, 0) + fun setLockScreenClockGrade(value: Int) = putInt(KEY_LOCK_SCREEN_CLOCK_GRADE, value) + + fun getLockScreenClockRoundness(): Int = getInt(KEY_LOCK_SCREEN_CLOCK_ROUNDNESS, 100) + fun setLockScreenClockRoundness(value: Int) = putInt(KEY_LOCK_SCREEN_CLOCK_ROUNDNESS, value) + + fun getLockScreenClockColorTone(): Int = getInt(KEY_LOCK_SCREEN_CLOCK_COLOR_TONE, 75) + fun setLockScreenClockColorTone(value: Int) = putInt(KEY_LOCK_SCREEN_CLOCK_COLOR_TONE, value) + + fun getLockScreenClockSelectedColorId(): String = getString(KEY_LOCK_SCREEN_CLOCK_SELECTED_COLOR_ID, "DEFAULT") ?: "DEFAULT" + fun setLockScreenClockSelectedColorId(value: String) = putString(KEY_LOCK_SCREEN_CLOCK_SELECTED_COLOR_ID, value) + + fun getLockScreenClockSeedColor(): Int = getInt(KEY_LOCK_SCREEN_CLOCK_SEED_COLOR, 0) + fun setLockScreenClockSeedColor(value: Int) = putInt(KEY_LOCK_SCREEN_CLOCK_SEED_COLOR, value) } diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt index 53d42e361..b117ddb34 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt @@ -27,6 +27,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.sameerasw.essentials.R import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer +import com.sameerasw.essentials.ui.components.pickers.SegmentedPicker +import com.sameerasw.essentials.ui.theme.Shapes import com.sameerasw.essentials.utils.HapticUtil import com.sameerasw.essentials.viewmodels.MainViewModel @@ -55,9 +57,9 @@ fun LockScreenClockSettingsUI( val clockOptions = remember { listOf( + ClockOption("DEFAULT", R.string.lock_screen_clock_default, R.drawable.clock_flex), ClockOption("ANALOG_CLOCK_BIGNUM", R.string.lock_screen_clock_bignum, R.drawable.clock_bignum), ClockOption("DIGITAL_CLOCK_CALLIGRAPHY", R.string.lock_screen_clock_calligraphy, R.drawable.clock_calligraphy), - ClockOption("DIGITAL_CLOCK_FLEX", R.string.lock_screen_clock_flex, R.drawable.clock_flex), ClockOption("DIGITAL_CLOCK_GROWTH", R.string.lock_screen_clock_growth, R.drawable.clock_growth), ClockOption("DIGITAL_CLOCK_HANDWRITTEN", R.string.lock_screen_clock_handwritten, R.drawable.clock_handwritten), ClockOption("DIGITAL_CLOCK_INFLATE", R.string.lock_screen_clock_inflate, R.drawable.clock_inflate), @@ -67,6 +69,18 @@ fun LockScreenClockSettingsUI( ) } + val colorOptions = remember { + listOf( + ClockColorOption("DEFAULT", Color.Transparent, 0, R.string.color_default), + ClockColorOption("RED", Color(0xFFE57373), -23641, R.string.color_red), + ClockColorOption("GREEN", Color(0xFF81C784), -14057967, R.string.color_green), + ClockColorOption("BLUE", Color(0xFF64B5F6), -14575885, R.string.color_blue), + ClockColorOption("YELLOW", Color(0xFFFFF176), -5317, R.string.color_yellow) + ) + } + + val isDefaultStyleSelected = currentClockId == "DEFAULT" || currentClockId == "DIGITAL_CLOCK_FLEX" + val carouselState = rememberCarouselState { clockOptions.size } LaunchedEffect(carouselState) { @@ -94,17 +108,17 @@ fun LockScreenClockSettingsUI( color = MaterialTheme.colorScheme.onSurfaceVariant ) - HorizontalMultiBrowseCarousel( - state = carouselState, - preferredItemWidth = 180.dp, - itemSpacing = 2.dp, - modifier = Modifier - .padding(horizontal = 16.dp) - .fillMaxWidth() - .height(200.dp) - ) { index -> - val option = clockOptions[index] - val isSelected = currentClockId == option.id + HorizontalMultiBrowseCarousel( + state = carouselState, + preferredItemWidth = 180.dp, + itemSpacing = 2.dp, + modifier = Modifier + .padding(horizontal = 16.dp) + .fillMaxWidth() + .height(200.dp) + ) { index -> + val option = clockOptions[index] + val isSelected = if (option.id == "DEFAULT") isDefaultStyleSelected else currentClockId == option.id Box( modifier = Modifier @@ -115,7 +129,14 @@ fun LockScreenClockSettingsUI( .pointerInput(option) { detectTapGestures { HapticUtil.performUIHaptic(view) - viewModel.setLockScreenClockId(option.id, context) + if (option.id == "DEFAULT") { + // Default/Flex merge. Keep current variant if already one of them + if (!isDefaultStyleSelected) { + viewModel.setLockScreenClockId("DEFAULT", context) + } + } else { + viewModel.setLockScreenClockId(option.id, context) + } } } ) { @@ -137,6 +158,107 @@ fun LockScreenClockSettingsUI( } } + RoundedCardContainer(modifier = Modifier.padding(horizontal = 8.dp)) { + Column( + modifier = Modifier.padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + // Color Picker + Text( + text = "Color", + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.onSurface + ) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + colorOptions.forEach { colorOption -> + val isColorSelected = viewModel.lockScreenClockSelectedColorId.value == colorOption.id + Box( + modifier = Modifier + .size(40.dp) + .background( + if (colorOption.id == "DEFAULT") MaterialTheme.colorScheme.surfaceVariant else colorOption.color, + CircleShape + ) + .border( + width = if (isColorSelected) 3.dp else 1.dp, + color = if (isColorSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outline.copy(alpha = 0.3f), + shape = CircleShape + ) + .pointerInput(colorOption) { + detectTapGestures { + HapticUtil.performUIHaptic(view) + viewModel.setLockScreenClockColor(colorOption.id, colorOption.seedColor, context) + } + }, + contentAlignment = Alignment.Center + ) { + if (colorOption.id == "DEFAULT") { + Icon( + painter = painterResource(id = R.drawable.rounded_palette_24), + contentDescription = null, + modifier = Modifier.size(20.dp), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } + } + + ClockAxisSlider( + label = stringResource(R.string.label_color_tone), + value = viewModel.lockScreenClockColorTone.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockColorTone(it.toInt(), context) }, + valueRange = 0f..100f, + view = view + ) + + if (isDefaultStyleSelected) { + + Text( + text = stringResource(R.string.label_variation), + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.onSurface + ) + + RoundedCardContainer { + SegmentedPicker( + items = listOf("DEFAULT", "DIGITAL_CLOCK_FLEX"), + selectedItem = currentClockId ?: "DEFAULT", + onItemSelected = { viewModel.setLockScreenClockId(it, context) }, + labelProvider = { if (it == "DEFAULT") "Default" else "Flex" }, + modifier = Modifier.fillMaxWidth() + ) + } + + ClockAxisSlider( + label = stringResource(R.string.label_weight), + value = viewModel.lockScreenClockWeight.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockWeight(it.toInt(), context) }, + valueRange = 100f..1000f, + view = view + ) + ClockAxisSlider( + label = stringResource(R.string.label_width), + value = viewModel.lockScreenClockWidth.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockWidth(it.toInt(), context) }, + valueRange = 25f..200f, + view = view + ) + + ClockAxisSlider( + label = stringResource(R.string.label_roundness), + value = viewModel.lockScreenClockRoundness.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockRoundness(it.toInt(), context) }, + valueRange = 0f..100f, + view = view + ) + } + } + } + RoundedCardContainer(modifier = Modifier.padding(horizontal = 8.dp)) { Column( modifier = Modifier.padding(16.dp), @@ -159,3 +281,50 @@ data class ClockOption( val nameRes: Int, val imageRes: Int ) + +data class ClockColorOption( + val id: String, + val color: Color, + val seedColor: Int, + val nameRes: Int +) + +@Composable +private fun ClockAxisSlider( + label: String, + value: Float, + onValueChange: (Float) -> Unit, + valueRange: ClosedFloatingPointRange, + view: android.view.View +) { + Column(modifier = Modifier.fillMaxWidth()) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = label, + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.onSurface + ) + Text( + text = value.toInt().toString(), + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary, + fontWeight = FontWeight.Bold + ) + } + Slider( + value = value, + onValueChange = { + if (it.toInt() != value.toInt()) { + HapticUtil.performSliderHaptic(view) + } + onValueChange(it) + }, + valueRange = valueRange, + modifier = Modifier.fillMaxWidth() + ) + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index e1d6c786c..225d2f0bf 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -141,6 +141,13 @@ class MainViewModel : ViewModel() { val isCircleToSearchPreviewEnabled = mutableStateOf(false) val isDisableRotationSuggestionEnabled = mutableStateOf(false) val lockScreenClockId = mutableStateOf(null) + val lockScreenClockWeight = mutableIntStateOf(300) + val lockScreenClockWidth = mutableIntStateOf(116) + val lockScreenClockGrade = mutableIntStateOf(0) + val lockScreenClockRoundness = mutableIntStateOf(100) + val lockScreenClockColorTone = mutableIntStateOf(75) + val lockScreenClockSelectedColorId = mutableStateOf("DEFAULT") + val lockScreenClockSeedColor = mutableIntStateOf(0) // Live Wallpaper val liveWallpaperSelectedVideo = mutableStateOf(SettingsRepository.LIVE_WALLPAPER_DEFAULT_VIDEO) @@ -657,6 +664,13 @@ class MainViewModel : ViewModel() { isShutUpAttemptShizukuRestart.value = settingsRepository.isShutUpAttemptShizukuRestartEnabled() isDisableRotationSuggestionEnabled.value = settingsRepository.getBoolean(SettingsRepository.KEY_DISABLE_ROTATION_SUGGESTION, false) lockScreenClockId.value = readCurrentLockScreenClockId(context) + lockScreenClockWeight.intValue = settingsRepository.getLockScreenClockWeight() + lockScreenClockWidth.intValue = settingsRepository.getLockScreenClockWidth() + lockScreenClockGrade.intValue = settingsRepository.getLockScreenClockGrade() + lockScreenClockRoundness.intValue = settingsRepository.getLockScreenClockRoundness() + lockScreenClockColorTone.intValue = settingsRepository.getLockScreenClockColorTone() + lockScreenClockSelectedColorId.value = settingsRepository.getLockScreenClockSelectedColorId() + lockScreenClockSeedColor.intValue = settingsRepository.getLockScreenClockSeedColor() loadShutUpConfigs() if (isHideGestureBarEnabled.value) { @@ -1473,7 +1487,12 @@ class MainViewModel : ViewModel() { } fun setLockScreenClockId(clockId: String, context: Context) { - val json = "{\"clockId\":\"$clockId\"}" + val timestamp = System.currentTimeMillis() + val json = if (lockScreenClockSelectedColorId.value == "DEFAULT") { + "{\"clockId\":\"$clockId\",\"metadata\":{\"metadataSelectedColorId\":\"DEFAULT\",\"metadataColorToneProgress\":${lockScreenClockColorTone.intValue},\"appliedTimestamp\":$timestamp},\"axes\":[{\"key\":\"wght\",\"value\":${lockScreenClockWeight.intValue}},{\"key\":\"wdth\",\"value\":${lockScreenClockWidth.intValue}},{\"key\":\"ROND\",\"value\":${lockScreenClockRoundness.intValue}}]}" + } else { + "{\"clockId\":\"$clockId\",\"seedColor\":${lockScreenClockSeedColor.intValue},\"metadata\":{\"metadataSelectedColorId\":\"${lockScreenClockSelectedColorId.value}\",\"metadataColorToneProgress\":${lockScreenClockColorTone.intValue},\"appliedTimestamp\":$timestamp},\"axes\":[{\"key\":\"wght\",\"value\":${lockScreenClockWeight.intValue}},{\"key\":\"wdth\",\"value\":${lockScreenClockWidth.intValue}},{\"key\":\"ROND\",\"value\":${lockScreenClockRoundness.intValue}}]}" + } val command = "settings put secure lock_screen_custom_clock_face '$json'" var success = false @@ -1504,6 +1523,44 @@ class MainViewModel : ViewModel() { } } + fun setLockScreenClockWeight(value: Int, context: Context) { + lockScreenClockWeight.intValue = value + settingsRepository.setLockScreenClockWeight(value) + lockScreenClockId.value?.let { setLockScreenClockId(it, context) } + } + + fun setLockScreenClockWidth(value: Int, context: Context) { + lockScreenClockWidth.intValue = value + settingsRepository.setLockScreenClockWidth(value) + lockScreenClockId.value?.let { setLockScreenClockId(it, context) } + } + + fun setLockScreenClockGrade(value: Int, context: Context) { + lockScreenClockGrade.intValue = value + settingsRepository.setLockScreenClockGrade(value) + lockScreenClockId.value?.let { setLockScreenClockId(it, context) } + } + + fun setLockScreenClockRoundness(value: Int, context: Context) { + lockScreenClockRoundness.intValue = value + settingsRepository.setLockScreenClockRoundness(value) + lockScreenClockId.value?.let { setLockScreenClockId(it, context) } + } + + fun setLockScreenClockColorTone(value: Int, context: Context) { + lockScreenClockColorTone.intValue = value + settingsRepository.setLockScreenClockColorTone(value) + lockScreenClockId.value?.let { setLockScreenClockId(it, context) } + } + + fun setLockScreenClockColor(id: String, seed: Int, context: Context) { + lockScreenClockSelectedColorId.value = id + lockScreenClockSeedColor.intValue = seed + settingsRepository.setLockScreenClockSelectedColorId(id) + settingsRepository.setLockScreenClockSeedColor(seed) + lockScreenClockId.value?.let { setLockScreenClockId(it, context) } + } + private fun readCurrentLockScreenClockId(context: Context): String? { return try { val raw = Settings.Secure.getString( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f6359fae8..adb5740ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1504,4 +1504,16 @@ Apply Clock style applied WRITE_SECURE_SETTINGS permission required + Default + Weight + Width + Grade + Roundness + Color Tone + Variation + Default + Red + Green + Blue + Yellow From 6d90fa7b72ba8fb20b6586c3e40484ba2cf1423f Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 16:12:36 +0530 Subject: [PATCH 13/15] feat: implement dynamic seed color calculation based on selected lock screen clock color and tone --- .../essentials/viewmodels/MainViewModel.kt | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index 225d2f0bf..15e4fb8b2 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -1550,17 +1550,46 @@ class MainViewModel : ViewModel() { fun setLockScreenClockColorTone(value: Int, context: Context) { lockScreenClockColorTone.intValue = value settingsRepository.setLockScreenClockColorTone(value) + + // Update effective seed color based on new tone + if (lockScreenClockSelectedColorId.value != "DEFAULT") { + val effectiveSeed = calculateEffectiveSeedColor(lockScreenClockSelectedColorId.value, value) + lockScreenClockSeedColor.intValue = effectiveSeed + settingsRepository.setLockScreenClockSeedColor(effectiveSeed) + } + lockScreenClockId.value?.let { setLockScreenClockId(it, context) } } fun setLockScreenClockColor(id: String, seed: Int, context: Context) { lockScreenClockSelectedColorId.value = id - lockScreenClockSeedColor.intValue = seed + val effectiveSeed = if (id == "DEFAULT") 0 else calculateEffectiveSeedColor(id, lockScreenClockColorTone.intValue) + lockScreenClockSeedColor.intValue = effectiveSeed settingsRepository.setLockScreenClockSelectedColorId(id) - settingsRepository.setLockScreenClockSeedColor(seed) + settingsRepository.setLockScreenClockSeedColor(effectiveSeed) lockScreenClockId.value?.let { setLockScreenClockId(it, context) } } + private fun calculateEffectiveSeedColor(colorId: String, tone: Int): Int { + val baseColor = when (colorId) { + "RED" -> android.graphics.Color.parseColor("#E57373") + "GREEN" -> android.graphics.Color.parseColor("#81C784") + "BLUE" -> android.graphics.Color.parseColor("#64B5F6") + "YELLOW" -> android.graphics.Color.parseColor("#FFF176") + else -> return 0 + } + val hsv = FloatArray(3) + android.graphics.Color.colorToHSV(baseColor, hsv) + + // Calibrated HSV mapping to match user examples: + // Tone 0 -> Saturation ~0.8, Value ~0.35 (Dark, saturated) + // Tone 100 -> Saturation ~0.2, Value ~1.0 (Light, pastel) + hsv[1] = (0.8f - (tone / 100f) * 0.6f).coerceIn(0f, 1f) + hsv[2] = (0.35f + (tone / 100f) * 0.65f).coerceIn(0f, 1f) + + return android.graphics.Color.HSVToColor(hsv) + } + private fun readCurrentLockScreenClockId(context: Context): String? { return try { val raw = Settings.Secure.getString( From 3acee5e9d4d2a59e622882636c4c6e9d4ee55142 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 16:50:15 +0530 Subject: [PATCH 14/15] feat: expand LockScreenClockSettingsUI with additional color options, grid-based color picker, and clock styling controls including weight, width, and roundness. --- .../configs/LockScreenClockSettingsUI.kt | 292 +++++++++--------- .../essentials/viewmodels/MainViewModel.kt | 4 + .../drawable/rounded_arrows_outward_24.xml | 20 ++ .../res/drawable/rounded_line_weight_24.xml | 20 ++ app/src/main/res/values/strings.xml | 9 +- 5 files changed, 200 insertions(+), 145 deletions(-) create mode 100644 app/src/main/res/drawable/rounded_arrows_outward_24.xml create mode 100644 app/src/main/res/drawable/rounded_line_weight_24.xml diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt index b117ddb34..c4a198858 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LockScreenClockSettingsUI.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.ui.draw.clip import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter @@ -26,13 +27,13 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.sameerasw.essentials.R +import com.sameerasw.essentials.ui.components.cards.IconToggleItem import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer import com.sameerasw.essentials.ui.components.pickers.SegmentedPicker +import com.sameerasw.essentials.ui.components.sliders.ConfigSliderItem import com.sameerasw.essentials.ui.theme.Shapes import com.sameerasw.essentials.utils.HapticUtil -import com.sameerasw.essentials.viewmodels.MainViewModel - -@OptIn(ExperimentalMaterial3Api::class) +import com.sameerasw.essentials.viewmodels.MainViewModel@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @Composable fun LockScreenClockSettingsUI( viewModel: MainViewModel, @@ -75,7 +76,11 @@ fun LockScreenClockSettingsUI( ClockColorOption("RED", Color(0xFFE57373), -23641, R.string.color_red), ClockColorOption("GREEN", Color(0xFF81C784), -14057967, R.string.color_green), ClockColorOption("BLUE", Color(0xFF64B5F6), -14575885, R.string.color_blue), - ClockColorOption("YELLOW", Color(0xFFFFF176), -5317, R.string.color_yellow) + ClockColorOption("YELLOW", Color(0xFFFFF176), -5317, R.string.color_yellow), + ClockColorOption("ORANGE", Color(0xFFFFB74D), -18611, R.string.color_orange), + ClockColorOption("PURPLE", Color(0xFFBA68C8), -4560702, R.string.color_purple), + ClockColorOption("PINK", Color(0xFFF06292), -1023342, R.string.color_pink), + ClockColorOption("TEAL", Color(0xFF4DB6AC), -11684180, R.string.color_teal) ) } @@ -98,7 +103,7 @@ fun LockScreenClockSettingsUI( Column( modifier = modifier .fillMaxWidth() - .padding(vertical = 16.dp), + .padding(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp) ) { Text( @@ -113,7 +118,6 @@ fun LockScreenClockSettingsUI( preferredItemWidth = 180.dp, itemSpacing = 2.dp, modifier = Modifier - .padding(horizontal = 16.dp) .fillMaxWidth() .height(200.dp) ) { index -> @@ -130,7 +134,6 @@ fun LockScreenClockSettingsUI( detectTapGestures { HapticUtil.performUIHaptic(view) if (option.id == "DEFAULT") { - // Default/Flex merge. Keep current variant if already one of them if (!isDefaultStyleSelected) { viewModel.setLockScreenClockId("DEFAULT", context) } @@ -158,121 +161,161 @@ fun LockScreenClockSettingsUI( } } - RoundedCardContainer(modifier = Modifier.padding(horizontal = 8.dp)) { + // Color & Tone Section + Text( + text = stringResource(R.string.label_color), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(start = 16.dp, top = 8.dp, bottom = 4.dp), + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + + RoundedCardContainer { Column( - modifier = Modifier.padding(16.dp), + modifier = Modifier.fillMaxWidth() + .background( + color = MaterialTheme.colorScheme.surfaceBright, + shape = RoundedCornerShape(MaterialTheme.shapes.extraSmall.bottomEnd) + ).padding(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp) ) { - // Color Picker - Text( - text = "Color", - style = MaterialTheme.typography.labelLarge, - color = MaterialTheme.colorScheme.onSurface - ) - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(12.dp) - ) { - colorOptions.forEach { colorOption -> - val isColorSelected = viewModel.lockScreenClockSelectedColorId.value == colorOption.id - Box( - modifier = Modifier - .size(40.dp) - .background( - if (colorOption.id == "DEFAULT") MaterialTheme.colorScheme.surfaceVariant else colorOption.color, - CircleShape - ) - .border( - width = if (isColorSelected) 3.dp else 1.dp, - color = if (isColorSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outline.copy(alpha = 0.3f), - shape = CircleShape - ) - .pointerInput(colorOption) { - detectTapGestures { - HapticUtil.performUIHaptic(view) - viewModel.setLockScreenClockColor(colorOption.id, colorOption.seedColor, context) - } - }, - contentAlignment = Alignment.Center - ) { - if (colorOption.id == "DEFAULT") { - Icon( - painter = painterResource(id = R.drawable.rounded_palette_24), - contentDescription = null, - modifier = Modifier.size(20.dp), - tint = MaterialTheme.colorScheme.onSurfaceVariant - ) - } + // Multi-row Color Picker + val rows = colorOptions.chunked(5) + rows.forEach { rowOptions -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceEvenly + ) { + rowOptions.forEach { colorOption -> + ColorCircle( + colorOption = colorOption, + isSelected = viewModel.lockScreenClockSelectedColorId.value == colorOption.id, + onClick = { + HapticUtil.performUIHaptic(view) + viewModel.setLockScreenClockColor(colorOption.id, colorOption.seedColor, context) + } + ) } } } + } - ClockAxisSlider( - label = stringResource(R.string.label_color_tone), - value = viewModel.lockScreenClockColorTone.intValue.toFloat(), - onValueChange = { viewModel.setLockScreenClockColorTone(it.toInt(), context) }, - valueRange = 0f..100f, - view = view - ) + ConfigSliderItem( + title = stringResource(R.string.label_color_tone), + value = viewModel.lockScreenClockColorTone.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockColorTone(it.toInt(), context) }, + valueRange = 0f..100f, + valueFormatter = { "${it.toInt()}%" }, + iconRes = R.drawable.rounded_palette_24, + enabled = viewModel.lockScreenClockSelectedColorId.value != "DEFAULT" + ) + } - if (isDefaultStyleSelected) { + if (isDefaultStyleSelected) { + Text( + text = stringResource(R.string.label_style_font), + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(start = 16.dp, top = 8.dp, bottom = 4.dp), + color = MaterialTheme.colorScheme.onSurfaceVariant + ) - Text( - text = stringResource(R.string.label_variation), - style = MaterialTheme.typography.labelLarge, - color = MaterialTheme.colorScheme.onSurface - ) + RoundedCardContainer { + SegmentedPicker( + items = listOf("DEFAULT", "DIGITAL_CLOCK_FLEX"), + selectedItem = currentClockId ?: "DEFAULT", + onItemSelected = { viewModel.setLockScreenClockId(it, context) }, + labelProvider = { if (it == "DEFAULT") "Default" else "Flex" } + ) - RoundedCardContainer { - SegmentedPicker( - items = listOf("DEFAULT", "DIGITAL_CLOCK_FLEX"), - selectedItem = currentClockId ?: "DEFAULT", - onItemSelected = { viewModel.setLockScreenClockId(it, context) }, - labelProvider = { if (it == "DEFAULT") "Default" else "Flex" }, - modifier = Modifier.fillMaxWidth() - ) - } + ConfigSliderItem( + title = stringResource(R.string.label_weight), + value = viewModel.lockScreenClockWeight.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockWeight(it.toInt(), context) }, + valueRange = 100f..1000f, + increment = 10f, + valueFormatter = { it.toInt().toString() }, + iconRes = R.drawable.rounded_line_weight_24 + ) - ClockAxisSlider( - label = stringResource(R.string.label_weight), - value = viewModel.lockScreenClockWeight.intValue.toFloat(), - onValueChange = { viewModel.setLockScreenClockWeight(it.toInt(), context) }, - valueRange = 100f..1000f, - view = view - ) - ClockAxisSlider( - label = stringResource(R.string.label_width), - value = viewModel.lockScreenClockWidth.intValue.toFloat(), - onValueChange = { viewModel.setLockScreenClockWidth(it.toInt(), context) }, - valueRange = 25f..200f, - view = view - ) + ConfigSliderItem( + title = stringResource(R.string.label_width), + value = viewModel.lockScreenClockWidth.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockWidth(it.toInt(), context) }, + valueRange = 25f..200f, + increment = 5f, + valueFormatter = { it.toInt().toString() }, + iconRes = R.drawable.rounded_arrows_outward_24 + ) - ClockAxisSlider( - label = stringResource(R.string.label_roundness), - value = viewModel.lockScreenClockRoundness.intValue.toFloat(), - onValueChange = { viewModel.setLockScreenClockRoundness(it.toInt(), context) }, - valueRange = 0f..100f, - view = view - ) - } + ConfigSliderItem( + title = stringResource(R.string.label_roundness), + value = viewModel.lockScreenClockRoundness.intValue.toFloat(), + onValueChange = { viewModel.setLockScreenClockRoundness(it.toInt(), context) }, + valueRange = 0f..100f, + increment = 5f, + valueFormatter = { it.toInt().toString() }, + iconRes = R.drawable.rounded_rounded_corner_24 + ) } } - RoundedCardContainer(modifier = Modifier.padding(horizontal = 8.dp)) { - Column( - modifier = Modifier.padding(16.dp), - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - Text( - text = stringResource(R.string.about_desc_lock_screen_clock), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onSurfaceVariant - ) - } + // About Section + RoundedCardContainer { + IconToggleItem( + iconRes = R.drawable.rounded_info_24, + title = stringResource(R.string.about_title), + description = stringResource(R.string.about_desc_lock_screen_clock), + isChecked = false, + onCheckedChange = {}, + showToggle = false + ) } - Spacer(modifier = Modifier.height(80.dp)) + Spacer(modifier = Modifier.height(32.dp)) + } +} + +@Composable +fun ColorCircle( + colorOption: ClockColorOption, + isSelected: Boolean, + onClick: () -> Unit +) { + Box( + modifier = Modifier + .size(44.dp) + .clip(CircleShape) + .background( + if (colorOption.id == "DEFAULT") MaterialTheme.colorScheme.surfaceVariant else colorOption.color + ) + .border( + width = if (isSelected) 3.dp else 1.dp, + color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.outline.copy(alpha = 0.2f), + shape = CircleShape + ) + .pointerInput(colorOption.id) { + detectTapGestures { + onClick() + } + }, + contentAlignment = Alignment.Center + ) { + if (colorOption.id == "DEFAULT") { + Icon( + painter = painterResource(id = R.drawable.rounded_palette_24), + contentDescription = null, + modifier = Modifier.size(20.dp), + tint = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + if (isSelected) { + Box( + modifier = Modifier + .size(8.dp) + .clip(CircleShape) + .background(if (colorOption.id == "DEFAULT") MaterialTheme.colorScheme.primary else Color.White) + ) + } } } @@ -289,42 +332,3 @@ data class ClockColorOption( val nameRes: Int ) -@Composable -private fun ClockAxisSlider( - label: String, - value: Float, - onValueChange: (Float) -> Unit, - valueRange: ClosedFloatingPointRange, - view: android.view.View -) { - Column(modifier = Modifier.fillMaxWidth()) { - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = label, - style = MaterialTheme.typography.labelLarge, - color = MaterialTheme.colorScheme.onSurface - ) - Text( - text = value.toInt().toString(), - style = MaterialTheme.typography.labelLarge, - color = MaterialTheme.colorScheme.primary, - fontWeight = FontWeight.Bold - ) - } - Slider( - value = value, - onValueChange = { - if (it.toInt() != value.toInt()) { - HapticUtil.performSliderHaptic(view) - } - onValueChange(it) - }, - valueRange = valueRange, - modifier = Modifier.fillMaxWidth() - ) - } -} diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index 15e4fb8b2..dd40ac4ed 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -1576,6 +1576,10 @@ class MainViewModel : ViewModel() { "GREEN" -> android.graphics.Color.parseColor("#81C784") "BLUE" -> android.graphics.Color.parseColor("#64B5F6") "YELLOW" -> android.graphics.Color.parseColor("#FFF176") + "ORANGE" -> android.graphics.Color.parseColor("#FFB74D") + "PURPLE" -> android.graphics.Color.parseColor("#BA68C8") + "PINK" -> android.graphics.Color.parseColor("#F06292") + "TEAL" -> android.graphics.Color.parseColor("#4DB6AC") else -> return 0 } val hsv = FloatArray(3) diff --git a/app/src/main/res/drawable/rounded_arrows_outward_24.xml b/app/src/main/res/drawable/rounded_arrows_outward_24.xml new file mode 100644 index 000000000..b8aeb3703 --- /dev/null +++ b/app/src/main/res/drawable/rounded_arrows_outward_24.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/drawable/rounded_line_weight_24.xml b/app/src/main/res/drawable/rounded_line_weight_24.xml new file mode 100644 index 000000000..f3bfcf2d9 --- /dev/null +++ b/app/src/main/res/drawable/rounded_line_weight_24.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index adb5740ae..dadc39b5d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1509,11 +1509,18 @@ Width Grade Roundness - Color Tone + Lightness Variation + Color + Style & Font + About Default Red Green Blue Yellow + Orange + Purple + Pink + Teal From ec43919a53fff15aa97d5e452cf70927cdc8c0ea Mon Sep 17 00:00:00 2001 From: sameerasw Date: Tue, 12 May 2026 18:10:49 +0530 Subject: [PATCH 15/15] feat: add pause and resume functionality to location alarms and update notification titles --- .../repository/LocationReachedRepository.kt | 15 ++ .../essentials/domain/model/LocationAlarm.kt | 1 + .../services/LocationReachedService.kt | 133 ++++++++++++++---- .../ui/components/cards/LocationAlarmCard.kt | 48 +++++-- .../configs/LocationReachedSettingsUI.kt | 65 +++++++-- .../viewmodels/LocationReachedViewModel.kt | 22 +++ app/src/main/res/values-ach/strings.xml | 2 +- app/src/main/res/values-af/strings.xml | 2 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-da/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-en/strings.xml | 4 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-he/strings.xml | 4 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-no/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 4 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-si/strings.xml | 2 +- app/src/main/res/values-sr/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- app/src/main/res/values/strings.xml | 6 +- 37 files changed, 268 insertions(+), 88 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/data/repository/LocationReachedRepository.kt b/app/src/main/java/com/sameerasw/essentials/data/repository/LocationReachedRepository.kt index 69368108f..8cce39280 100644 --- a/app/src/main/java/com/sameerasw/essentials/data/repository/LocationReachedRepository.kt +++ b/app/src/main/java/com/sameerasw/essentials/data/repository/LocationReachedRepository.kt @@ -150,4 +150,19 @@ class LocationReachedRepository(context: Context) { saveAlarms(alarms) } } + + fun updatePausedState(alarmId: String, isPaused: Boolean) { + val alarms = getAlarms().toMutableList() + val index = alarms.indexOfFirst { it.id == alarmId } + if (index != -1) { + alarms[index] = alarms[index].copy(isPaused = isPaused) + saveAlarms(alarms) + } + + // Also update temp alarm if it matches + val currentTemp = _tempAlarm.value + if (currentTemp?.id == alarmId) { + _tempAlarm.value = currentTemp.copy(isPaused = isPaused) + } + } } diff --git a/app/src/main/java/com/sameerasw/essentials/domain/model/LocationAlarm.kt b/app/src/main/java/com/sameerasw/essentials/domain/model/LocationAlarm.kt index bfe149fc1..a0e52e0f3 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/model/LocationAlarm.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/model/LocationAlarm.kt @@ -12,6 +12,7 @@ data class LocationAlarm( @SerializedName("radius") val radius: Int = 1000, // in meters @SerializedName("isEnabled") val isEnabled: Boolean = false, @SerializedName("lastTravelled") val lastTravelled: Long? = null, + @SerializedName("isPaused") val isPaused: Boolean = false, @SerializedName("iconResName") val iconResName: String = "round_navigation_24", @SerializedName("createdAt") val createdAt: Long = System.currentTimeMillis() ) diff --git a/app/src/main/java/com/sameerasw/essentials/services/LocationReachedService.kt b/app/src/main/java/com/sameerasw/essentials/services/LocationReachedService.kt index e0df7a315..1e2c4d2f9 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/LocationReachedService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/LocationReachedService.kt @@ -43,7 +43,9 @@ class LocationReachedService : Service() { private const val NOTIFICATION_ID = 2001 private const val ALARM_NOTIFICATION_ID = 1001 private const val CHANNEL_ID = "location_reached_live" - private const val ACTION_STOP = "com.sameerasw.essentials.STOP_LOCATION_REACHED" + const val ACTION_STOP = "com.sameerasw.essentials.STOP_LOCATION_REACHED" + const val ACTION_PAUSE = "com.sameerasw.essentials.PAUSE_LOCATION_REACHED" + const val ACTION_RESUME = "com.sameerasw.essentials.RESUME_LOCATION_REACHED" fun start(context: Context) { val intent = Intent(context, LocationReachedService::class.java) @@ -67,6 +69,14 @@ class LocationReachedService : Service() { stopTracking() return START_NOT_STICKY } + if (intent?.action == ACTION_PAUSE) { + pauseTracking() + return START_STICKY + } + if (intent?.action == ACTION_RESUME) { + resumeTracking() + return START_STICKY + } isAlarmTriggered = false createNotificationChannel() @@ -102,14 +112,45 @@ class LocationReachedService : Service() { if (alarm != null) { repository.saveLastTrip(alarm) + repository.updatePausedState(alarm.id, false) } repository.saveActiveAlarmId(null) stopSelf() } + private fun pauseTracking() { + val activeId = repository.getActiveAlarmId() ?: return + repository.updatePausedState(activeId, true) + // Force an update to show paused state in notification + val alarms = repository.getAlarms() + val alarm = alarms.find { it.id == activeId } + if (alarm != null) { + updateNotification(null) + } + } + + private fun resumeTracking() { + val activeId = repository.getActiveAlarmId() ?: return + repository.updatePausedState(activeId, false) + // Force an update to refresh notification buttons immediately + updateNotification(null) + + // Then try to get location + val alarms = repository.getAlarms() + val alarm = alarms.find { it.id == activeId } + if (alarm != null) { + updateProgress(alarm) + } + } + @android.annotation.SuppressLint("MissingPermission") private fun updateProgress(alarm: LocationAlarm) { + if (alarm.isPaused) { + updateNotification(null) + return + } + fusedLocationClient.getCurrentLocation(Priority.PRIORITY_BALANCED_POWER_ACCURACY, null) .addOnSuccessListener { location -> location?.let { @@ -172,15 +213,15 @@ class LocationReachedService : Service() { notificationManager.notify(ALARM_NOTIFICATION_ID, notification) } - private fun updateNotification(distanceKm: Float) { + private fun updateNotification(distanceKm: Float?) { val startDist = repository.getStartDistance() val startTime = repository.getStartTime() - val progressPercent = if (startDist > 0) { + val progressPercent = if (startDist > 0 && distanceKm != null) { ((1.0f - (distanceKm * 1000f / startDist)) * 100).toInt().coerceIn(0, 100) } else 0 var etaText: String? = null - if (startDist > 0 && startTime > 0) { + if (startDist > 0 && startTime > 0 && distanceKm != null) { val elapsed = System.currentTimeMillis() - startTime val currentDistMeters = distanceKm * 1000f val distanceTravelled = startDist - currentDistMeters @@ -238,21 +279,50 @@ class LocationReachedService : Service() { getString(R.string.location_reached_service_remaining, distanceText, progress) } - if (Build.VERSION.SDK_INT >= 35) { - val activeId = repository.getActiveAlarmId() - val alarm = repository.getAlarms().find { it.id == activeId } - val iconResName = alarm?.iconResName ?: "round_navigation_24" - val iconResId = resources.getIdentifier(iconResName, "drawable", packageName) - val finalIconId = if (iconResId != 0) iconResId else R.drawable.round_navigation_24 + val pauseIntent = Intent(this, LocationReachedService::class.java).apply { + action = ACTION_PAUSE + } + val pausePendingIntent = PendingIntent.getService( + this, 1, pauseIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) + + val resumeIntent = Intent(this, LocationReachedService::class.java).apply { + action = ACTION_RESUME + } + val resumePendingIntent = PendingIntent.getService( + this, 2, resumeIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) + val activeId = repository.getActiveAlarmId() + val alarm = repository.getAlarms().find { it.id == activeId } + val isPaused = alarm?.isPaused == true + val iconResName = alarm?.iconResName ?: "round_navigation_24" + val iconResId = resources.getIdentifier(iconResName, "drawable", packageName) + val finalIconId = if (iconResId != 0) iconResId else R.drawable.round_navigation_24 + + if (Build.VERSION.SDK_INT >= 35) { + val destinationName = alarm?.name?.ifEmpty { "Destination" } ?: "Destination" val builder = Notification.Builder(this, CHANNEL_ID) .setSmallIcon(finalIconId) - .setContentTitle(getString(R.string.location_reached_service_title)) - .setContentText(contentText) + .setContentTitle(getString(R.string.location_reached_service_title, destinationName)) + .setContentText(if (isPaused) getString(R.string.location_reached_pause) else contentText) .setOngoing(true) .setOnlyAlertOnce(true) .setCategory(Notification.CATEGORY_SERVICE) .setContentIntent(mainPendingIntent) + .addAction( + if (isPaused) { + Notification.Action.Builder( + Icon.createWithResource(this, R.drawable.round_play_arrow_24), + getString(R.string.location_reached_resume), resumePendingIntent + ).build() + } else { + Notification.Action.Builder( + Icon.createWithResource(this, R.drawable.rounded_pause_24), + getString(R.string.location_reached_pause), pausePendingIntent + ).build() + } + ) .addAction( Notification.Action.Builder( Icon.createWithResource(this, R.drawable.rounded_power_settings_new_24), @@ -268,7 +338,7 @@ class LocationReachedService : Service() { .setProgressTrackerIcon( Icon.createWithResource( this, - R.drawable.round_play_arrow_24 + if (isPaused) R.drawable.rounded_pause_24 else R.drawable.round_play_arrow_24 ).setTint(getColor(android.R.color.system_accent1_300)) ) builder.style = progressStyle @@ -283,7 +353,11 @@ class LocationReachedService : Service() { val extras = android.os.Bundle() extras.putBoolean("android.requestPromotedOngoing", true) extras.putBoolean("android.substituteContextualActions", true) - distanceKm?.let { extras.putString("android.shortCriticalText", distanceText) } + if (isPaused) { + extras.putString("android.shortCriticalText", "Paused") + } else { + distanceKm?.let { extras.putString("android.shortCriticalText", distanceText) } + } builder.addExtras(extras) builder.javaClass.getMethod( @@ -292,9 +366,14 @@ class LocationReachedService : Service() { ) .invoke(builder, true) - distanceKm?.let { + if (isPaused) { builder.javaClass.getMethod("setShortCriticalText", CharSequence::class.java) - .invoke(builder, distanceText) + .invoke(builder, "Paused") + } else { + distanceKm?.let { + builder.javaClass.getMethod("setShortCriticalText", CharSequence::class.java) + .invoke(builder, distanceText) + } } } catch (_: Throwable) { } @@ -302,16 +381,11 @@ class LocationReachedService : Service() { return builder.build() } - val activeId = repository.getActiveAlarmId() - val alarm = repository.getAlarms().find { it.id == activeId } - val iconResName = alarm?.iconResName ?: "round_navigation_24" - val iconResId = resources.getIdentifier(iconResName, "drawable", packageName) - val finalIconId = if (iconResId != 0) iconResId else R.drawable.round_navigation_24 - + val destinationName = alarm?.name?.ifEmpty { "Destination" } ?: "Destination" val builder = NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(finalIconId) - .setContentTitle(getString(R.string.location_reached_service_title)) - .setContentText(contentText) + .setContentTitle(getString(R.string.location_reached_service_title, destinationName)) + .setContentText(if (isPaused) getString(R.string.location_reached_pause) else contentText) .setOngoing(true) .setOnlyAlertOnce(true) .setPriority(NotificationCompat.PRIORITY_MAX) @@ -319,6 +393,11 @@ class LocationReachedService : Service() { .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentIntent(mainPendingIntent) .setProgress(100, progress, false) + .addAction( + if (isPaused) R.drawable.round_play_arrow_24 else R.drawable.rounded_pause_24, + if (isPaused) getString(R.string.location_reached_resume) else getString(R.string.location_reached_pause), + if (isPaused) resumePendingIntent else pausePendingIntent + ) .addAction( R.drawable.rounded_power_settings_new_24, getString(R.string.location_reached_stop_tracking), @@ -327,7 +406,11 @@ class LocationReachedService : Service() { val extras = android.os.Bundle() extras.putBoolean("android.requestPromotedOngoing", true) - distanceKm?.let { extras.putString("android.shortCriticalText", distanceText) } + if (isPaused) { + extras.putString("android.shortCriticalText", "Paused") + } else { + distanceKm?.let { extras.putString("android.shortCriticalText", distanceText) } + } builder.addExtras(extras) return builder.build() diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/cards/LocationAlarmCard.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/cards/LocationAlarmCard.kt index 1094169ff..c0cfef4b6 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/cards/LocationAlarmCard.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/cards/LocationAlarmCard.kt @@ -22,6 +22,8 @@ fun LocationAlarmCard( isAnyTracking: Boolean, onStart: () -> Unit, onStop: () -> Unit, + onPause: () -> Unit, + onResume: () -> Unit, onClick: () -> Unit, modifier: Modifier = Modifier ) { @@ -67,20 +69,38 @@ fun LocationAlarmCard( }, trailingContent = { if (isActive) { - IconButton( - onClick = { - com.sameerasw.essentials.utils.HapticUtil.performVirtualKeyHaptic(view) - onStop() - }, - colors = IconButtonDefaults.iconButtonColors( - containerColor = MaterialTheme.colorScheme.errorContainer, - contentColor = MaterialTheme.colorScheme.error - ) - ) { - Icon( - painter = painterResource(R.drawable.rounded_close_24), - contentDescription = "Stop" - ) + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + IconButton( + onClick = { + com.sameerasw.essentials.utils.HapticUtil.performVirtualKeyHaptic(view) + if (alarm.isPaused) onResume() else onPause() + }, + colors = IconButtonDefaults.iconButtonColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer + ) + ) { + Icon( + painter = painterResource(if (alarm.isPaused) R.drawable.round_play_arrow_24 else R.drawable.rounded_pause_24), + contentDescription = if (alarm.isPaused) "Resume" else "Pause" + ) + } + + IconButton( + onClick = { + com.sameerasw.essentials.utils.HapticUtil.performVirtualKeyHaptic(view) + onStop() + }, + colors = IconButtonDefaults.iconButtonColors( + containerColor = MaterialTheme.colorScheme.errorContainer, + contentColor = MaterialTheme.colorScheme.error + ) + ) { + Icon( + painter = painterResource(R.drawable.rounded_close_24), + contentDescription = "Stop" + ) + } } } else if (!isAnyTracking) { IconButton( diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LocationReachedSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LocationReachedSettingsUI.kt index fc5d83680..7e00444fd 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LocationReachedSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/LocationReachedSettingsUI.kt @@ -82,6 +82,8 @@ fun LocationReachedSettingsUI( remainingTimeMinutes = remainingTimeMinutes, startDistance = startDistance, onStop = { locationViewModel.stopTracking() }, + onPause = { locationViewModel.pauseTracking() }, + onResume = { locationViewModel.resumeTracking() }, onStart = { HapticUtil.performVirtualKeyHaptic(view) locationViewModel.startTracking(it) @@ -121,6 +123,14 @@ fun LocationReachedSettingsUI( HapticUtil.performVirtualKeyHaptic(view) locationViewModel.stopTracking() }, + onPause = { + HapticUtil.performVirtualKeyHaptic(view) + locationViewModel.pauseTracking() + }, + onResume = { + HapticUtil.performVirtualKeyHaptic(view) + locationViewModel.resumeTracking() + }, onClick = { HapticUtil.performVirtualKeyHaptic(view) locationViewModel.setTempAlarm(alarm) @@ -206,9 +216,12 @@ fun TopStatusCard( remainingTimeMinutes: Int?, startDistance: Float, onStop: () -> Unit, + onPause: () -> Unit, + onResume: () -> Unit, onStart: (String) -> Unit ) { val isTracking = activeAlarm != null + val isPaused = activeAlarm?.isPaused == true val displayAlarm = activeAlarm ?: lastTrip RoundedCardContainer( @@ -298,26 +311,50 @@ fun TopStatusCard( color = MaterialTheme.colorScheme.primary, trackColor = MaterialTheme.colorScheme.primaryContainer, wavelength = 20.dp, - amplitude = { 1.0f } + amplitude = { if (isPaused) 0f else 1.0f } ) } Spacer(modifier = Modifier.height(32.dp)) - Button( - onClick = onStop, - modifier = Modifier - .fillMaxWidth() - .height(56.dp), - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.errorContainer, - contentColor = MaterialTheme.colorScheme.error - ), - shape = androidx.compose.foundation.shape.CircleShape + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(12.dp) ) { - Icon(painterResource(R.drawable.rounded_close_24), contentDescription = null) - Spacer(modifier = Modifier.width(8.dp)) - Text(stringResource(R.string.action_stop)) + Button( + onClick = { if (isPaused) onResume() else onPause() }, + modifier = Modifier + .weight(1f) + .height(56.dp), + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer + ), + shape = androidx.compose.foundation.shape.CircleShape + ) { + Icon( + painterResource(if (isPaused) R.drawable.round_play_arrow_24 else R.drawable.rounded_pause_24), + contentDescription = null + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(if (isPaused) stringResource(R.string.location_reached_resume) else stringResource(R.string.location_reached_pause)) + } + + Button( + onClick = onStop, + modifier = Modifier + .weight(1f) + .height(56.dp), + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.errorContainer, + contentColor = MaterialTheme.colorScheme.error + ), + shape = androidx.compose.foundation.shape.CircleShape + ) { + Icon(painterResource(R.drawable.rounded_close_24), contentDescription = null) + Spacer(modifier = Modifier.width(8.dp)) + Text(stringResource(R.string.action_stop)) + } } } else if (lastTrip != null) { val context = LocalContext.current diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/LocationReachedViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/LocationReachedViewModel.kt index c261fc2b2..997bbf44a 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/LocationReachedViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/LocationReachedViewModel.kt @@ -169,6 +169,7 @@ class LocationReachedViewModel(application: Application) : AndroidViewModel(appl // Save as last trip lastTrip.value = alarm repository.saveLastTrip(alarm) + repository.updatePausedState(id, false) } repository.saveActiveAlarmId(null) @@ -181,6 +182,25 @@ class LocationReachedViewModel(application: Application) : AndroidViewModel(appl startTime.value = 0L } + fun pauseTracking() { + val id = activeAlarmId.value ?: return + val intent = Intent(getApplication(), LocationReachedService::class.java).apply { + action = LocationReachedService.ACTION_PAUSE + } + getApplication().startService(intent) + repository.updatePausedState(id, true) + } + + fun resumeTracking() { + val id = activeAlarmId.value ?: return + val intent = Intent(getApplication(), LocationReachedService::class.java).apply { + action = LocationReachedService.ACTION_RESUME + } + getApplication().startService(intent) + repository.updatePausedState(id, false) + updateCurrentDistance() + } + private var distanceTrackingJob: kotlinx.coroutines.Job? = null fun startUiTracking() { @@ -213,6 +233,8 @@ class LocationReachedViewModel(application: Application) : AndroidViewModel(appl val id = activeAlarmId.value val activeAlarm = savedAlarms.value.find { it.id == id } ?: tempAlarm.value ?: return + if (activeAlarm.isPaused) return + fusedLocationClient.getCurrentLocation(Priority.PRIORITY_BALANCED_POWER_ACCURACY, null) .addOnSuccessListener { location -> location?.let { diff --git a/app/src/main/res/values-ach/strings.xml b/app/src/main/res/values-ach/strings.xml index 6dcf5eb30..a6a5eadef 100644 --- a/app/src/main/res/values-ach/strings.xml +++ b/app/src/main/res/values-ach/strings.xml @@ -1114,7 +1114,7 @@ Mitte me juku cim ni ka oo. Dii me miini. %1$d m %1$.1f km - Alarm me wot tye ka tic + Travelling to %1$s %1$s ma odong (%2$d%%) Wot tye ka mede anyim Nyutu bor ma tye i kare kikome me oo kama omyera icit iye diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index f2587a674..9071fe95e 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -1114,7 +1114,7 @@ Vereis om jou toestel wakker te maak met aankoms. Tik om toe te staan. %1$d m %1$.1f km - Reisalarm aktief + Travelling to %1$s %1$s oorblywende (%2$d%%) Reisvordering Toon intydse afstand na bestemming diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b2aadf5b6..10d0498a1 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1114,7 +1114,7 @@ مطلوب لتنبيه جهازك عند الوصول. انقر للمنح. %1$d م %1$.1f كم - إنذار السفر نشط + Travelling to %1$s %1$s المتبقي (%2$d%%) تقدم السفر يظهر المسافة في الوقت الحقيقي إلى الوجهة diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index e21d727dd..7a83e89f1 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -1114,7 +1114,7 @@ Necessari per activar el dispositiu en arribar. Toca per concedir. %1$d m %1$,1f km - Alarma de viatge activa + Travelling to %1$s %1$s restant (%2$d%%) Progrés de viatge Mostra la distància en temps real fins a la destinació diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 465872c35..5a65e334e 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1114,7 +1114,7 @@ Vyžadováno k probuzení zařízení při příjezdu. Klepnutím udělíte. %1$d m %1$.1f km - Aktivní cestovní alarm + Travelling to %1$s %1$s zbývající (%2$d%%) Cestovní pokrok Zobrazuje vzdálenost do cíle v reálném čase diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index e69f496d6..17d3dd852 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -1114,7 +1114,7 @@ Påkrævet for at vække din enhed ved ankomst. Tryk for at give. %1$d m %1$.1f km - Rejsealarm aktiv + Travelling to %1$s %1$s resterende (%2$d%%) Rejsefremskridt Viser afstand til destination i realtid diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ddc6e162c..6978f5ae3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1114,7 +1114,7 @@ Benötigt, um dein Gerät bei der Ankunft zu wecken. Tippe zum Gewähren. %1$d m %1$.1f km - Reisealarm aktiv + Travelling to %1$s %1$s verbleibend (%2$d%%) Reisefortschritt Zeigt die Entfernung zum Zielort in Echtzeit an diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index ce0f8a5f8..45c087c3d 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1114,7 +1114,7 @@ Απαιτείται η αφύπνιση της συσκευής σας κατά την άφιξη. Πατήστε για παραχώρηση. %1$d m %1$.1f χλμ - Ενεργός συναγερμός ταξιδιού + Travelling to %1$s %1$s υπόλοιπο (%2$d%%) Ταξιδιωτική Πρόοδος Εμφανίζει την απόσταση από τον προορισμό σε πραγματικό χρόνο diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 2a417b3dd..09d7e1582 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1106,7 +1106,7 @@ Processing location… DISTANCE REMAINING Calculating… - Stop Tracking + Stop Destination Ready Start Tracking View Map @@ -1117,7 +1117,7 @@ Required to wake your device upon arrival. Tap to grant. %1$d m %1$.1f km - Travel Alarm active + Travelling to %1$s %1$s remaining (%2$d%%) Travel Progress Shows real-time distance to destination diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2fcf8ce36..2d118884d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1116,7 +1116,7 @@ Cuando llegue un mensaje o alerta de una aplicación seleccionada, la Pantalla s Necesario para activar tu dispositivo al llegar. Toca para concederlo. %1$d m %1$.1f km - Alarma de viaje activa + Travelling to %1$s %1$s restante (%2$d%%) Progreso del viaje Muestra la distancia al destino en tiempo real diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 0bc1132d9..2f47f305e 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -1114,7 +1114,7 @@ Pakollinen herättämään laitteesi saavuttaessa. Myönnä napauttamalla. %1$d m %1$.1f km - Matkahälytys aktiivinen + Travelling to %1$s %1$s jäljellä (%2$d%%) Matkan edistyminen Näyttää reaaliaikaisen etäisyyden määränpäähän diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5594e1e5f..eaa4a8433 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1114,7 +1114,7 @@ Requise pour réveiller votre appareil à l\'arrivée. Appuyez pour autoriser. %1$d m %1$.1f km - Alarme de trajet active + Travelling to %1$s %1$s restant (%2$d%) Progrès du trajet Affiche la distance de la destination en temps réel diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index a58b1cb1e..f934e695b 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -1103,7 +1103,7 @@ Processing location… DISTANCE REMAINING Calculating… - Stop Tracking + Stop Destination Ready Start Tracking View Map @@ -1114,7 +1114,7 @@ Required to wake your device upon arrival. Tap to grant. %1$d m %1$.1f km - Travel Alarm active + Travelling to %1$s %1$s remaining (%2$d%%) Travel Progress Shows real-time distance to destination diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index ffa17225e..674b3d35a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -1114,7 +1114,7 @@ Az eszköz felébresztéséhez érkezéskor szükséges. Koppintson az engedélyezéshez. %1$d m %1$.1f km - Utazási riasztó aktív + Travelling to %1$s %1$s fennmaradó (%2$d%%) Az utazás előrehaladása Valós idejű távolságot mutat a céltól diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1f6c8e48b..e5bc606c8 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1114,7 +1114,7 @@ Necessario per riattivare il dispositivo all\'arrivo. Tocca per concedere. %1$d M %1$.1f km - Allarme di viaggio attivo + Travelling to %1$s %1$s rimanente (%2$d%%) Progresso del viaggio Mostra la distanza in tempo reale dalla destinazione diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 89e33788e..9ddf1d9d3 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1114,7 +1114,7 @@ 到着時にデバイスを起動するのに必要です。許可するにはタップしてください。 %1$dm %1$.1fkm - Travel Alarm active + Travelling to %1$s 残り%1$s (%2$d%%) お出かけの進行状況 目的地までの距離をリアルタイムで表示 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index fad9750ca..87d320763 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1114,7 +1114,7 @@ 도착 시 기기를 깨워야 합니다. 부여하려면 탭하세요. %1$d 중 %1$.1fkm - 여행 알람 활성화 + Travelling to %1$s %1$s 남음 (%2$d%%) 여행 진행 목적지까지의 거리를 실시간으로 표시 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e364458ee..b1f12bed2 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1114,7 +1114,7 @@ Vereist voor het wekken van je apparaat bij aankomst. Klikken om toestemmingen te geven. %1$d m %1$.1f km - Travel Alarm active + Travelling to %1$s %1$s resterend (%2$d%%) Reisvoortgang Laat de realtime afstand tot de bestemming zien diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index b1e533bab..0828b4111 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -1114,7 +1114,7 @@ Nødvendig for å vekke enheten ved ankomst. Trykk for å gi. %1$d m %1$.1f km - Reisealarm aktiv + Travelling to %1$s %1$s gjenværende (%2$d%%) Reisefremgang Viser avstand til destinasjon i sanntid diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 13b4fbed5..f290460d2 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1114,7 +1114,7 @@ Wymagane, aby obudzić urządzenie po przyjeździe. Kliknij, aby przyznać. %1$d M %1$.1f km - Aktywny alarm podróżny + Travelling to %1$s %1$s pozostałe (%2$d%%) Postęp podróży Pokazuje w czasie rzeczywistym odległość do celu diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index d27f25106..fc3f43066 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1103,7 +1103,7 @@ Processing location… DISTANCE REMAINING Calculating… - Stop Tracking + Stop Destination Ready Start Tracking View Map @@ -1114,7 +1114,7 @@ Required to wake your device upon arrival. Tap to grant. %1$d m %1$.1f km - Travel alarm active + Travelling to %1$s %1$s remaining (%2$d%%) Travel Progress Shows real-time distance to destination diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 05e35d608..58b3b81a3 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1114,7 +1114,7 @@ Este necesar să vă treziți dispozitivul la sosire. Atingeți pentru a acorda. %1$d m %1$.1f km - Alarma de călătorie activă + Travelling to %1$s %1$s rămas (%2$d%%) Progresul călătoriei Afișează distanța în timp real până la destinație diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d1ad6a0bc..fbcdeabb1 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1114,7 +1114,7 @@ Требуется разрешение на пробуждение устройства по прибытии. Нажмите, чтобы разрешить. %1$d м %1$.1f км - Сигнализация движения активна + Travelling to %1$s %1$s осталось (%2$d%%) Прогресс путешествия Показывает расстояние до пункта назначения в режиме реального времени diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 3408b673d..ce72041fb 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -1117,7 +1117,7 @@ පැමිණීමෙන් පසු ඔබගේ උපාංගය අවදි කිරීමට අවශ්‍ය වේ. ප්‍රදානය කිරීමට තට්ටු කරන්න. %1$d මීටර් කිලෝමීටර් %1$.1f - සංචාරක අනතුරු ඇඟවීම සක්‍රීයයි + Travelling to %1$s %1$s ඉතිරි (%2$d%%) ගමන් ප්‍රගතිය ගමනාන්තයට තත්‍ය කාලීන දුර පෙන්වයි diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index eae1822f2..b3ac02ce5 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -1114,7 +1114,7 @@ Неопходно је да пробудите уређај по доласку. Додирните да бисте одобрили. %1$d м %1$.1ф км - Путни аларм активан + Travelling to %1$s %1$s преостали (%2$d%%) Травел Прогресс Приказује удаљеност до одредишта у реалном времену diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 44408ec00..b9866376b 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -1114,7 +1114,7 @@ Krävs för att väcka din enhet vid ankomst. Tryck för att bevilja. %1$d m %1$.1f km - Resalarm aktivt + Travelling to %1$s %1$s återstående (%2$d%%) Resans framsteg Visar avstånd till destination i realtid diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 35ec7f7d4..33769d568 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1115,7 +1115,7 @@ Varışta cihazınızı uyandırmak için gereklidir. Vermek için dokunun. %1$d M %1$.1f km - Seyahat alarmı etkin + Travelling to %1$s %1$s kalan (%2$d%%) Seyahat İlerlemesi Hedefe olan gerçek zamanlı mesafeyi gösterir diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 270a52649..67b28be58 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1114,7 +1114,7 @@ Потрібно, щоб вивести пристрій із режиму сну після прибуття. Торкніться, щоб надати. %1$d м %1$.1f км - Будильник подорожі активний + Travelling to %1$s %1$s залишилося (%2$d%%) Прогрес подорожі Показує відстань до місця призначення в реальному часі diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 03cc46eeb..84c7f8ccd 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1114,7 +1114,7 @@ Cần thiết để đánh thức thiết bị của bạn khi đến nơi. Nhấn để cấp. %1$d tôi %1$.1f km - Cảnh báo hành trình đang hoạt động + Travelling to %1$s %1$s còn lại (%2$d%%) Tiến độ du lịch Shows real-time distance to destination diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index d18998cb2..b8d3b0f2f 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1114,7 +1114,7 @@ 需要在到达时唤醒您的设备。点击授予。 %1$d 米 %1$.1f 公里 - 旅行闹钟活跃 + Travelling to %1$s 剩余 %1$s 行程进度 显示到目的地的实时距离 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dadc39b5d..20c4c5789 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -764,6 +764,8 @@ Re-Start Share coordinates (Dropped pin) from Google Maps to Essentials to save as a destination.\n\nThe distance shown is the direct distance to the destination, not the distance along the roads.\n\nTake all calculations of time and distance with a grain of salt as they are not always accurate. Are we there yet? + Pause + Resume Radius: %1$d m Distance to target: %1$s Last: %1$s @@ -1171,7 +1173,7 @@ Processing location… DISTANCE REMAINING Calculating… - Stop Tracking + Stop Destination Ready Start Tracking View Map @@ -1182,7 +1184,7 @@ Required to wake your device upon arrival. Tap to grant. %1$d m %1$.1f km - Travel alarm active + Travelling to %1$s %1$s remaining (%2$d%%) Travel Progress Shows real-time distance to destination