From 8cf96f7debe926dafc5d81224e0a19100395e829 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sun, 1 Mar 2026 05:54:53 +0530 Subject: [PATCH 01/14] fix: Bottom toolbar spacing --- app/src/main/java/com/sameerasw/essentials/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt index 0ddab28a8..0c9c94297 100644 --- a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt @@ -619,7 +619,7 @@ class MainActivity : FragmentActivity() { DIYFloatingToolbar( modifier = Modifier .align(Alignment.BottomCenter) - .offset(y = -ScreenOffset) + // .offset(y = -ScreenOffset) .zIndex(1f), currentPage = currentPage, tabs = tabs, From 857084d875fb2b5da8aed69600a5d21d2a060347 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sun, 1 Mar 2026 05:55:04 +0530 Subject: [PATCH 02/14] fix: Typo in toast --- 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 | 2 +- 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 | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ko/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 | 2 +- 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 | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/app/src/main/res/values-ach/strings.xml b/app/src/main/res/values-ach/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-ach/strings.xml +++ b/app/src/main/res/values-ach/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 11c2dc5ae..c14076023 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index beb28e9eb..080cbe1dd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -199,7 +199,7 @@ Aus USB-Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper An Aus diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 20a740c8b..d5dbbf691 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 442427241..c880c837e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -199,7 +199,7 @@ Désactivé Débogage USB Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper Activer Désactiver diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0b0d37362..aad164a8d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -200,7 +200,7 @@ Le app bloccate richiederanno l\'autenticazione all\'apertura. L\'app rimarrà s Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 7b9f6b7df..ffdee113f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index d38855366..47c318658 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper Pornit Oprit diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d83dd0395..55ef60fd9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -199,7 +199,7 @@ Off Отладка по USB Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 3018f8ba7..8fbd23932 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 2442bb315..b7da15605 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index f4ff39184..586593b4c 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -199,7 +199,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 652f546e8..70848e769 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -205,7 +205,7 @@ Off USB Debugging Color Picker - Are you sure you\'re on Androdi 17? (╯°_°)╯ + Are you sure you\'re on Android 17? (╯°_°)╯ Eye Dropper On Off From de2f76c02b1d23683b82ca9c9ea7110a298d8ea9 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sun, 1 Mar 2026 17:21:15 +0530 Subject: [PATCH 03/14] fix: Use shizuku for charging optimization qs --- .../services/tiles/BaseTileService.kt | 30 +++++++++++++++++++ .../services/tiles/ChargeQuickTileService.kt | 28 ++++++++--------- .../configs/QuickSettingsTilesSettingsUI.kt | 3 +- .../sameerasw/essentials/utils/ShellUtils.kt | 10 +++++++ 4 files changed, 56 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt b/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt index 74af11225..f35ba93f8 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt @@ -2,11 +2,14 @@ package com.sameerasw.essentials.services.tiles import android.graphics.drawable.Icon import android.os.Build +import android.provider.Settings import android.service.quicksettings.Tile import android.service.quicksettings.TileService import androidx.annotation.RequiresApi import androidx.core.content.edit import com.sameerasw.essentials.utils.HapticUtil +import com.sameerasw.essentials.utils.ShellUtils +import com.sameerasw.essentials.utils.PermissionUtils @RequiresApi(Build.VERSION_CODES.N) abstract class BaseTileService : TileService() { @@ -75,6 +78,33 @@ abstract class BaseTileService : TileService() { } protected abstract fun getTileState(): Int + + protected fun getSecureInt(key: String, def: Int): Int { + try { + val value = Settings.Secure.getInt(contentResolver, key, -1) + if (value != -1) return value + } catch (_: SecurityException) { + // Only fallback to shell on SecurityException + return try { + val output = ShellUtils.runCommandWithOutput(this, "settings get secure $key") + output?.toIntOrNull() ?: def + } catch (_: Exception) { + def + } + } catch (_: Exception) { + return def + } + return def + } + + protected fun putSecureInt(key: String, value: Int) { + try { + Settings.Secure.putInt(contentResolver, key, value) + } catch (_: Exception) { + // Fallback to shell if standard API fails + ShellUtils.runCommand(this, "settings put secure $key $value") + } + } } diff --git a/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt b/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt index f9615e937..cb27318ad 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt @@ -43,23 +43,23 @@ class ChargeQuickTileService : BaseTileService() { } override fun onTileClick() { - val adaptiveChargingEnabled = Settings.Secure.getInt(contentResolver, ADAPTIVE_CHARGING_SETTING, 0) == 1 - val chargeOptimizationEnabled = Settings.Secure.getInt(contentResolver, CHARGE_OPTIMIZATION_MODE, 0) == 1 + val adaptiveChargingEnabled = getSecureInt(ADAPTIVE_CHARGING_SETTING, 0) == 1 + val chargeOptimizationEnabled = getSecureInt(CHARGE_OPTIMIZATION_MODE, 0) == 1 when { adaptiveChargingEnabled -> { - Settings.Secure.putInt(contentResolver, CHARGE_OPTIMIZATION_MODE, 1) - Settings.Secure.putInt(contentResolver, ADAPTIVE_CHARGING_SETTING, 0) + putSecureInt(CHARGE_OPTIMIZATION_MODE, 1) + putSecureInt(ADAPTIVE_CHARGING_SETTING, 0) } chargeOptimizationEnabled -> { - Settings.Secure.putInt(contentResolver, CHARGE_OPTIMIZATION_MODE, 0) - Settings.Secure.putInt(contentResolver, ADAPTIVE_CHARGING_SETTING, 0) + putSecureInt(CHARGE_OPTIMIZATION_MODE, 0) + putSecureInt(ADAPTIVE_CHARGING_SETTING, 0) } else -> { - Settings.Secure.putInt(contentResolver, CHARGE_OPTIMIZATION_MODE, 0) - Settings.Secure.putInt(contentResolver, ADAPTIVE_CHARGING_SETTING, 1) + putSecureInt(CHARGE_OPTIMIZATION_MODE, 0) + putSecureInt(ADAPTIVE_CHARGING_SETTING, 1) } } } @@ -67,8 +67,8 @@ class ChargeQuickTileService : BaseTileService() { override fun getTileLabel(): String = getString(R.string.tile_charge_optimization) override fun getTileSubtitle(): String { - val adaptiveChargingEnabled = Settings.Secure.getInt(contentResolver, ADAPTIVE_CHARGING_SETTING, 0) == 1 - val chargeOptimizationEnabled = Settings.Secure.getInt(contentResolver, CHARGE_OPTIMIZATION_MODE, 0) == 1 + val adaptiveChargingEnabled = getSecureInt(ADAPTIVE_CHARGING_SETTING, 0) == 1 + val chargeOptimizationEnabled = getSecureInt(CHARGE_OPTIMIZATION_MODE, 0) == 1 return when { chargeOptimizationEnabled -> getString(R.string.limit_to_80) adaptiveChargingEnabled -> getString(R.string.adaptive_charging) @@ -81,8 +81,8 @@ class ChargeQuickTileService : BaseTileService() { } override fun getTileIcon(): Icon { - val adaptiveChargingEnabled = Settings.Secure.getInt(contentResolver, ADAPTIVE_CHARGING_SETTING, 0) == 1 - val chargeOptimizationEnabled = Settings.Secure.getInt(contentResolver, CHARGE_OPTIMIZATION_MODE, 0) == 1 + val adaptiveChargingEnabled = getSecureInt(ADAPTIVE_CHARGING_SETTING, 0) == 1 + val chargeOptimizationEnabled = getSecureInt(CHARGE_OPTIMIZATION_MODE, 0) == 1 val resId = when { chargeOptimizationEnabled -> R.drawable.rounded_battery_android_frame_shield_24 adaptiveChargingEnabled -> R.drawable.rounded_battery_android_frame_plus_24 @@ -92,8 +92,8 @@ class ChargeQuickTileService : BaseTileService() { } override fun getTileState(): Int { - val adaptiveChargingEnabled = Settings.Secure.getInt(contentResolver, ADAPTIVE_CHARGING_SETTING, 0) == 1 - val chargeOptimizationEnabled = Settings.Secure.getInt(contentResolver, CHARGE_OPTIMIZATION_MODE, 0) == 1 + val adaptiveChargingEnabled = getSecureInt(ADAPTIVE_CHARGING_SETTING, 0) == 1 + val chargeOptimizationEnabled = getSecureInt(CHARGE_OPTIMIZATION_MODE, 0) == 1 return if (chargeOptimizationEnabled || adaptiveChargingEnabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE } } 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 6e6237398..91c925e06 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 @@ -275,9 +275,10 @@ fun QuickSettingsTilesSettingsUI( R.string.tile_charge_optimization, R.drawable.rounded_battery_android_frame_shield_24, ChargeQuickTileService::class.java, - listOf("WRITE_SECURE_SETTINGS"), + if (ShellUtils.isRootEnabled(context)) listOf("ROOT") else listOf("SHIZUKU", "WRITE_SECURE_SETTINGS"), R.string.about_desc_charge_optimization ) + ) if (showPermissionSheet && selectedTileForPermissions != null) { diff --git a/app/src/main/java/com/sameerasw/essentials/utils/ShellUtils.kt b/app/src/main/java/com/sameerasw/essentials/utils/ShellUtils.kt index df114341c..8e3b35268 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/ShellUtils.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/ShellUtils.kt @@ -35,6 +35,16 @@ object ShellUtils { } } + fun runCommandWithOutput(context: Context, command: String): String? { + return try { + val process = newProcess(context, arrayOf("sh", "-c", command)) + process?.inputStream?.bufferedReader()?.use { it.readText() }?.trim() + } catch (e: Exception) { + null + } + } + + fun newProcess(context: Context, command: Array): Process? { return if (isRootEnabled(context)) { RootUtils.newProcess(command) From 85ea0807c5106619f3a5653ea8e7c0371d640c26 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sun, 1 Mar 2026 17:21:36 +0530 Subject: [PATCH 04/14] version: upgrade to 12.1 --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 02e27361c..7ccdc8d42 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,8 +21,8 @@ android { applicationId = "com.sameerasw.essentials" minSdk = 26 targetSdk = 36 - versionCode = 31 - versionName = "12.0" + versionCode = 32 + versionName = "12.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } From 47b6bc44563ea6ae3aea9cfb9cbfa3f07ab3512e Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sun, 1 Mar 2026 17:27:21 +0530 Subject: [PATCH 05/14] feat: Shizuku is required for charging opt qs tile --- .../sameerasw/essentials/services/tiles/BaseTileService.kt | 4 +++- .../essentials/services/tiles/ChargeQuickTileService.kt | 5 ++++- app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt b/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt index f35ba93f8..1caacbfba 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/tiles/BaseTileService.kt @@ -7,6 +7,7 @@ import android.service.quicksettings.Tile import android.service.quicksettings.TileService import androidx.annotation.RequiresApi import androidx.core.content.edit +import com.sameerasw.essentials.R import com.sameerasw.essentials.utils.HapticUtil import com.sameerasw.essentials.utils.ShellUtils import com.sameerasw.essentials.utils.PermissionUtils @@ -68,8 +69,9 @@ abstract class BaseTileService : TileService() { } tile.label = getTileLabel() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - tile.subtitle = if (!hasPerm) "Missing permissions" else getTileSubtitle() + tile.subtitle = if (!hasPerm) getString(R.string.permission_missing) else getTileSubtitle() } + val icon = getTileIcon() if (icon != null) { tile.icon = icon diff --git a/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt b/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt index cb27318ad..f89889309 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/tiles/ChargeQuickTileService.kt @@ -77,9 +77,12 @@ class ChargeQuickTileService : BaseTileService() { } override fun hasFeaturePermission(): Boolean { - return PermissionUtils.canWriteSecureSettings(this) + return PermissionUtils.canWriteSecureSettings(this) && + com.sameerasw.essentials.utils.ShellUtils.hasPermission(this) && + com.sameerasw.essentials.utils.ShellUtils.isAvailable(this) } + override fun getTileIcon(): Icon { val adaptiveChargingEnabled = getSecureInt(ADAPTIVE_CHARGING_SETTING, 0) == 1 val chargeOptimizationEnabled = getSecureInt(CHARGE_OPTIMIZATION_MODE, 0) == 1 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70848e769..5fca50cfd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -226,6 +226,8 @@ Limit to 80% Adaptive Not optimized + Permission missing + Screen locked security From e2e51a96a7e7c76a60a8aabb0385dcf66389eac6 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sun, 1 Mar 2026 22:54:20 +0530 Subject: [PATCH 06/14] feat: FAB in bottom toolbar --- .../com/sameerasw/essentials/MainActivity.kt | 129 +++++++++++++++++- .../ui/components/DIYFloatingToolbar.kt | 4 +- 2 files changed, 128 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt index 0c9c94297..b9419b220 100644 --- a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt @@ -79,6 +79,10 @@ import androidx.fragment.app.FragmentActivity import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import android.widget.Toast +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.ui.draw.clip +import androidx.compose.ui.layout.ContentScale +import coil.compose.AsyncImage import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -257,6 +261,7 @@ class MainActivity : FragmentActivity() { var showGitHubAuthSheet by remember { mutableStateOf(false) } var showNewAutomationSheet by remember { mutableStateOf(false) } + var showFabProfileMenu by remember { mutableStateOf(false) } val gitHubToken by viewModel.gitHubToken val gitHubUser by gitHubAuthViewModel.currentUser @@ -610,12 +615,16 @@ class MainActivity : FragmentActivity() { } }, hasUpdateAvailable = isUpdateAvailable, - hasHelpBadge = false, - scrollBehavior = scrollBehavior - ) + hasHelpBadge = false, + scrollBehavior = scrollBehavior + ) } ) { innerPadding -> Box(modifier = Modifier.fillMaxSize()) { + val currentTab = remember(tabs, currentPage) { + tabs.getOrNull(currentPage) ?: tabs.firstOrNull() ?: DIYTabs.ESSENTIALS + } + DIYFloatingToolbar( modifier = Modifier .align(Alignment.BottomCenter) @@ -628,7 +637,119 @@ class MainActivity : FragmentActivity() { currentPage = index }, scrollBehavior = exitAlwaysScrollBehavior, - badges = mapOf(DIYTabs.APPS to viewModel.hasPendingUpdates.value) + badges = mapOf(DIYTabs.APPS to viewModel.hasPendingUpdates.value), + floatingActionButton = { + Box { // Menu anchor + FloatingActionButton( + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + when (currentTab) { + DIYTabs.ESSENTIALS -> { + startActivity(Intent(context, SettingsActivity::class.java)) + } + DIYTabs.FREEZE -> { + startActivity( + Intent( + context, + FeatureSettingsActivity::class.java + ).apply { + putExtra("feature", "Freeze") + }) + } + DIYTabs.DIY -> { + showNewAutomationSheet = true + } + DIYTabs.APPS -> { + val user = gitHubUser + if (user != null) { + showFabProfileMenu = true + } else { + showGitHubAuthSheet = true + } + } + } + }, + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + shape = MaterialTheme.shapes.large + ) { + when (currentTab) { + DIYTabs.ESSENTIALS -> { + Icon( + painter = painterResource(id = R.drawable.rounded_settings_heart_24), + contentDescription = stringResource(R.string.content_desc_settings) + ) + } + DIYTabs.FREEZE -> { + Icon( + painter = painterResource(id = R.drawable.rounded_settings_heart_24), + contentDescription = stringResource(R.string.content_desc_settings) + ) + } + DIYTabs.DIY -> { + Icon( + painter = painterResource(id = R.drawable.rounded_add_24), + contentDescription = stringResource(R.string.diy_editor_new_title) + ) + } + DIYTabs.APPS -> { + val user = gitHubUser + if (user != null) { + AsyncImage( + model = user.avatarUrl, + contentDescription = stringResource(R.string.action_profile), + contentScale = ContentScale.Crop, + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + placeholder = painterResource(id = R.drawable.brand_github), + error = painterResource(id = R.drawable.brand_github) + ) + } else { + Icon( + painter = painterResource(id = R.drawable.brand_github), + contentDescription = stringResource(R.string.action_sign_in_github) + ) + } + } + } + } + + if (currentTab == DIYTabs.APPS) { + val user = gitHubUser + if (user != null) { + SegmentedDropdownMenu( + expanded = showFabProfileMenu, + onDismissRequest = { showFabProfileMenu = false } + ) { + SegmentedDropdownMenuItem( + text = { Text(user.name ?: user.login) }, + onClick = { showFabProfileMenu = false }, + leadingIcon = { + Icon( + painter = painterResource(id = R.drawable.brand_github), + contentDescription = null + ) + } + ) + SegmentedDropdownMenuItem( + text = { Text(stringResource(R.string.action_sign_out)) }, + onClick = { + gitHubAuthViewModel.signOut(context) + showFabProfileMenu = false + }, + leadingIcon = { + Icon( + painter = painterResource(id = R.drawable.rounded_logout_24), + contentDescription = null + ) + } + ) + } + } + } + } + } ) AnimatedContent( diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt index 419cc3f4a..62ff771da 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt @@ -45,7 +45,8 @@ fun DIYFloatingToolbar( tabs: List, onTabSelected: (Int) -> Unit, scrollBehavior: FloatingToolbarScrollBehavior, - badges: Map = emptyMap() + badges: Map = emptyMap(), + floatingActionButton: @Composable () -> Unit = {} ) { // Persistent visibility var expanded by remember { mutableStateOf(true) } @@ -56,6 +57,7 @@ fun DIYFloatingToolbar( androidx.compose.foundation.layout.WindowInsets.navigationBars ), expanded = expanded, + floatingActionButton = floatingActionButton, scrollBehavior = scrollBehavior, colors = FloatingToolbarDefaults.vibrantFloatingToolbarColors( toolbarContentColor = MaterialTheme.colorScheme.onSurface, From 9223f711965ca05e7c04b9718933fe47c6b7c9e2 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Sun, 1 Mar 2026 23:34:00 +0530 Subject: [PATCH 07/14] feat: Move freeze buttons to top of freeze tab --- .../essentials/ui/composables/FreezeGridUI.kt | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt index 6dcba1fa5..9ace00d2e 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt @@ -2,6 +2,8 @@ package com.sameerasw.essentials.ui.composables import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement @@ -17,13 +19,20 @@ import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ButtonGroupDefaults +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.LoadingIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface @@ -33,7 +42,9 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateMapOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -43,6 +54,7 @@ import androidx.compose.ui.layout.ContentScale 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.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -129,6 +141,38 @@ fun FreezeGridUI( ) } } else { + val isShizukuAvailable by viewModel.isShizukuAvailable + val isShizukuPermissionGranted by viewModel.isShizukuPermissionGranted + var isMenuExpanded by remember { mutableStateOf(false) } + + val exportLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.CreateDocument("application/json") + ) { uri -> + uri?.let { + try { + context.contentResolver.openOutputStream(it)?.use { stream -> + viewModel.exportFreezeApps(stream) + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } + + val importLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.OpenDocument() + ) { uri -> + uri?.let { + try { + context.contentResolver.openInputStream(it)?.use { stream -> + viewModel.importFreezeApps(context, stream) + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } + RoundedCardContainer( modifier = Modifier .padding(horizontal = 16.dp) @@ -145,6 +189,138 @@ fun FreezeGridUI( horizontalArrangement = Arrangement.spacedBy(2.dp), verticalArrangement = Arrangement.spacedBy(2.dp) ) { + item(span = { GridItemSpan(maxLineSpan) }) { + Row( + modifier = Modifier + .fillMaxWidth() + .background( + color = MaterialTheme.colorScheme.surfaceBright, + shape = RoundedCornerShape(MaterialTheme.shapes.extraSmall.bottomEnd) + ) + .padding(12.dp), + horizontalArrangement = Arrangement.spacedBy(ButtonGroupDefaults.ConnectedSpaceBetween), + verticalAlignment = Alignment.CenterVertically + ) { + // Freeze Button + Button( + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + viewModel.freezeAllAuto(context) + }, + modifier = Modifier.weight(1f), + enabled = isShizukuAvailable && isShizukuPermissionGranted, + shape = ButtonDefaults.shape + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_mode_cool_24), + contentDescription = null, + modifier = Modifier.size(20.dp) + ) + Spacer(Modifier.size(8.dp)) + Text(stringResource(R.string.action_freeze)) + } + + // Unfreeze Button + Button( + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + viewModel.unfreezeAllAuto(context) + }, + modifier = Modifier.weight(1f), + enabled = isShizukuAvailable && isShizukuPermissionGranted, + shape = ButtonDefaults.shape + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_mode_cool_off_24), + contentDescription = null, + modifier = Modifier.size(20.dp) + ) + Spacer(Modifier.size(8.dp)) + Text(stringResource(R.string.action_unfreeze)) + } + + // More Menu Button + IconButton( + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + isMenuExpanded = true + }, + enabled = isShizukuAvailable && isShizukuPermissionGranted + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_more_vert_24), + contentDescription = stringResource(R.string.content_desc_more_options) + ) + + DropdownMenu( + expanded = isMenuExpanded, + onDismissRequest = { isMenuExpanded = false } + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.action_freeze_all)) }, + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + viewModel.freezeAllManual(context) + isMenuExpanded = false + }, + leadingIcon = { + Icon( + painter = painterResource(id = R.drawable.rounded_mode_cool_24), + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.action_unfreeze_all)) }, + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + viewModel.unfreezeAllManual(context) + isMenuExpanded = false + }, + leadingIcon = { + Icon( + painter = painterResource(id = R.drawable.rounded_mode_cool_off_24), + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.action_export_freeze)) }, + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + exportLauncher.launch("freeze_apps_backup.json") + isMenuExpanded = false + }, + leadingIcon = { + Icon( + painter = painterResource(id = R.drawable.rounded_arrow_warm_up_24), + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + } + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.action_import_freeze)) }, + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + importLauncher.launch(arrayOf("application/json")) + isMenuExpanded = false + }, + leadingIcon = { + Icon( + painter = painterResource(id = R.drawable.rounded_arrow_cool_down_24), + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + } + ) + } + } + } + } + items(pickedApps, key = { it.packageName }) { app -> AppGridItem( app = app, From 58c283f3bab9778e829d7e11dc9f4739ebb53c4d Mon Sep 17 00:00:00 2001 From: sameerasw Date: Mon, 2 Mar 2026 00:23:23 +0530 Subject: [PATCH 08/14] feat: Reload and add app update repos in scrollable area --- .../com/sameerasw/essentials/MainActivity.kt | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt index b9419b220..e1fda4ec0 100644 --- a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt @@ -79,6 +79,7 @@ import androidx.fragment.app.FragmentActivity import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import android.widget.Toast +import androidx.compose.foundation.background import androidx.compose.foundation.shape.CircleShape import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale @@ -863,6 +864,22 @@ class MainActivity : FragmentActivity() { ), verticalArrangement = Arrangement.spacedBy(16.dp) ) { + item { + RoundedCardContainer { + AppsActionButtons( + view = view, + onAddClick = { + HapticUtil.performUIHaptic(view) + showAddRepoSheet = true + }, + onRefreshAllClick = { + HapticUtil.performUIHaptic(view) + updatesViewModel.checkForUpdates(context) + } + ) + } + } + // Pending Section if (pending.isNotEmpty()) { item { @@ -1107,6 +1124,47 @@ class MainActivity : FragmentActivity() { } } +@Composable +private fun AppsActionButtons( + view: android.view.View, + onAddClick: () -> Unit, + onRefreshAllClick: () -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.surfaceBright) + .padding(12.dp), + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + Button( + onClick = onAddClick, + modifier = Modifier.weight(1f), + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_add_24), + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(stringResource(R.string.action_add)) + } + + Button( + onClick = onRefreshAllClick, + modifier = Modifier.weight(1f), + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_refresh_24), + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(stringResource(R.string.action_refresh)) + } + } +} + @Composable private fun ImportExportButtons( view: android.view.View, From 7b3131dabf24f02391c5e09779f0b32b1975664f Mon Sep 17 00:00:00 2001 From: sameerasw Date: Mon, 2 Mar 2026 00:23:44 +0530 Subject: [PATCH 09/14] feat: Loading indicator in app updates refresh button --- .../com/sameerasw/essentials/MainActivity.kt | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt index e1fda4ec0..75c78ea34 100644 --- a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt @@ -875,7 +875,9 @@ class MainActivity : FragmentActivity() { onRefreshAllClick = { HapticUtil.performUIHaptic(view) updatesViewModel.checkForUpdates(context) - } + }, + isRefreshing = refreshingRepoIds.isNotEmpty(), + progress = { animatedProgress } ) } } @@ -1124,11 +1126,14 @@ class MainActivity : FragmentActivity() { } } +@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable private fun AppsActionButtons( view: android.view.View, onAddClick: () -> Unit, - onRefreshAllClick: () -> Unit + onRefreshAllClick: () -> Unit, + isRefreshing: Boolean, + progress: () -> Float ) { Row( modifier = Modifier @@ -1153,12 +1158,20 @@ private fun AppsActionButtons( Button( onClick = onRefreshAllClick, modifier = Modifier.weight(1f), + enabled = !isRefreshing ) { - Icon( - painter = painterResource(id = R.drawable.rounded_refresh_24), - contentDescription = null, - modifier = Modifier.size(18.dp) - ) + if (isRefreshing) { + CircularWavyProgressIndicator( + progress = progress, + modifier = Modifier.size(18.dp) + ) + } else { + Icon( + painter = painterResource(id = R.drawable.rounded_refresh_24), + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + } Spacer(modifier = Modifier.width(8.dp)) Text(stringResource(R.string.action_refresh)) } From a254c753f0fa2dcd2f69b5351e983715d309ac58 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Mon, 2 Mar 2026 00:31:02 +0530 Subject: [PATCH 10/14] feat: Settings help and guides section --- .../com/sameerasw/essentials/SettingsActivity.kt | 16 ++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 2 files changed, 17 insertions(+) diff --git a/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt index c44307609..afb5fe1c4 100644 --- a/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt @@ -279,6 +279,22 @@ fun SettingsContent(viewModel: MainViewModel, modifier: Modifier = Modifier) { verticalArrangement = Arrangement.spacedBy(4.dp), horizontalAlignment = Alignment.Start ) { + // Help Section + RoundedCardContainer { + IconToggleItem( + iconRes = R.drawable.rounded_help_24, + title = stringResource(R.string.label_help_guide), + isChecked = false, + onCheckedChange = { + showInstructionsSheet = true + }, + showToggle = false, + modifier = Modifier.fillMaxWidth().height(72.dp) + ) + } + + Spacer(modifier = Modifier.height(8.dp)) + // App Settings Section Text( text = "App Settings", diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5fca50cfd..0b7497728 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1168,4 +1168,5 @@ Force turn off the AOD when no notifications. Requires accessibility permission. Auto accessibility Automatically grants the accessibility permission on app launch if missing using WRITE_SECURE_SETTINGS. + Help and Guides \ No newline at end of file From bccf87616b2ce1fdab620e72d9bc7af5dcec9c3c Mon Sep 17 00:00:00 2001 From: sameerasw Date: Mon, 2 Mar 2026 02:18:03 +0530 Subject: [PATCH 11/14] feat: no top app bar --- .../com/sameerasw/essentials/MainActivity.kt | 291 ++++-------------- .../essentials/ui/composables/DIYScreen.kt | 15 +- .../essentials/ui/composables/FreezeGridUI.kt | 92 +++--- .../ui/composables/SetupFeatures.kt | 13 +- 4 files changed, 140 insertions(+), 271 deletions(-) diff --git a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt index 75c78ea34..0a2f3a37a 100644 --- a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt @@ -12,7 +12,6 @@ import androidx.activity.viewModels import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.AnimatedContent import androidx.compose.animation.core.Animatable -import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -43,14 +42,10 @@ import androidx.compose.material3.FloatingToolbarDefaults import androidx.compose.material3.FloatingToolbarDefaults.ScreenOffset import androidx.compose.material3.FloatingToolbarExitDirection.Companion.Bottom import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProgressIndicatorDefaults import androidx.compose.material3.Scaffold import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -80,6 +75,10 @@ import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import android.widget.Toast import androidx.compose.foundation.background +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.shape.CircleShape import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale @@ -90,8 +89,8 @@ import java.util.Locale import com.sameerasw.essentials.domain.DIYTabs import com.sameerasw.essentials.domain.registry.initPermissionRegistry import com.sameerasw.essentials.ui.components.DIYFloatingToolbar -import com.sameerasw.essentials.ui.components.ReusableTopAppBar import com.sameerasw.essentials.ui.components.cards.TrackedRepoCard +import androidx.compose.foundation.layout.statusBarsPadding import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer import com.sameerasw.essentials.ui.components.sheets.AddRepoBottomSheet import com.sameerasw.essentials.ui.components.sheets.GitHubAuthSheet @@ -252,9 +251,6 @@ class MainActivity : FragmentActivity() { stringResource(R.string.label_unknown) } - var searchRequested by remember { mutableStateOf(false) } - val scrollBehavior = - TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState()) var showUpdateSheet by remember { mutableStateOf(false) } var showInstructionsSheet by remember { mutableStateOf(false) } val isUpdateAvailable by viewModel.isUpdateAvailable @@ -443,185 +439,14 @@ class MainActivity : FragmentActivity() { 0 ), modifier = Modifier - .nestedScroll(scrollBehavior.nestedScrollConnection) .nestedScroll(exitAlwaysScrollBehavior), containerColor = MaterialTheme.colorScheme.surfaceContainer, - topBar = { - val currentTab = remember(tabs, currentPage) { - tabs.getOrNull(currentPage) ?: tabs.firstOrNull() - ?: DIYTabs.ESSENTIALS - } - ReusableTopAppBar( - title = currentTab.title, - subtitle = currentTab.subtitle, - hasBack = false, - hasSearch = true, - hasSettings = currentTab == DIYTabs.ESSENTIALS || currentTab == DIYTabs.FREEZE, - hasHelp = currentTab == DIYTabs.ESSENTIALS, - helpIconRes = R.drawable.rounded_help_24, - helpContentDescription = R.string.action_help_guide, - onSearchClick = { searchRequested = true }, - onSettingsClick = { - if (currentTab == DIYTabs.FREEZE) { - startActivity( - Intent( - this, - FeatureSettingsActivity::class.java - ).apply { - putExtra("feature", "Freeze") - }) - } else { - startActivity(Intent(this, SettingsActivity::class.java)) - } - }, - onUpdateClick = { showUpdateSheet = true }, - onGitHubClick = { showGitHubAuthSheet = true }, - hasGitHub = currentTab == DIYTabs.APPS, - gitHubUser = gitHubUser, - onSignOutClick = { gitHubAuthViewModel.signOut(context) }, - onHelpClick = { - showInstructionsSheet = true - }, - actions = { - when (currentTab) { - DIYTabs.FREEZE -> { - var showFreezeMenu by remember { mutableStateOf(false) } - Box { - IconButton( - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - showFreezeMenu = true - }, - colors = IconButtonDefaults.iconButtonColors( - containerColor = MaterialTheme.colorScheme.surfaceBright - ) - ) { - Icon( - painter = painterResource(id = R.drawable.rounded_mode_cool_24), - contentDescription = stringResource(R.string.tab_freeze) - ) - } - - SegmentedDropdownMenu( - expanded = showFreezeMenu, - onDismissRequest = { showFreezeMenu = false } - ) { - SegmentedDropdownMenuItem( - text = { Text(stringResource(R.string.action_freeze_all)) }, - onClick = { - showFreezeMenu = false - viewModel.freezeAllApps(context) - }, - leadingIcon = { - Icon( - painter = painterResource(id = R.drawable.rounded_mode_cool_24), - contentDescription = null - ) - } - ) - SegmentedDropdownMenuItem( - text = { Text(stringResource(R.string.action_unfreeze_all)) }, - onClick = { - showFreezeMenu = false - viewModel.unfreezeAllApps(context) - }, - leadingIcon = { - Icon( - painter = painterResource(id = R.drawable.rounded_mode_cool_off_24), - contentDescription = null - ) - } - ) - SegmentedDropdownMenuItem( - text = { Text("Freeze Automatic") }, - onClick = { - showFreezeMenu = false - viewModel.freezeAutomaticApps(context) - }, - leadingIcon = { - Icon( - painter = painterResource(id = R.drawable.rounded_nest_farsight_cool_24), - contentDescription = null - ) - } - ) - } - } - Spacer(modifier = Modifier.width(8.dp)) - } - - DIYTabs.DIY -> { - IconButton( - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - showNewAutomationSheet = true - }, - colors = IconButtonDefaults.iconButtonColors( - containerColor = MaterialTheme.colorScheme.surfaceBright - ) - ) { - Icon( - painter = painterResource(id = R.drawable.rounded_add_24), - contentDescription = stringResource(R.string.diy_editor_new_title) - ) - } - Spacer(modifier = Modifier.width(8.dp)) - } - - DIYTabs.APPS -> { - IconButton( - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - showAddRepoSheet = true - }, - colors = IconButtonDefaults.iconButtonColors( - containerColor = MaterialTheme.colorScheme.surfaceBright - ) - ) { - Icon( - painter = painterResource(id = R.drawable.rounded_add_24), - contentDescription = stringResource(R.string.action_add_repo) - ) - } - Spacer(modifier = Modifier.width(8.dp)) - - IconButton( - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - updatesViewModel.checkForUpdates(context) - }, - enabled = refreshingRepoIds.isEmpty(), - colors = IconButtonDefaults.iconButtonColors( - containerColor = MaterialTheme.colorScheme.surfaceBright - ), - modifier = Modifier.size(40.dp) - ) { - if (refreshingRepoIds.isNotEmpty()) { - CircularWavyProgressIndicator( - progress = { animatedProgress }, - modifier = Modifier.size(24.dp) - ) - } else { - Icon( - painter = painterResource(id = R.drawable.rounded_refresh_24), - contentDescription = stringResource(R.string.action_refresh), - modifier = Modifier.size(24.dp) - ) - } - } - Spacer(modifier = Modifier.width(8.dp)) - } - - else -> {} - } - }, - hasUpdateAvailable = isUpdateAvailable, - hasHelpBadge = false, - scrollBehavior = scrollBehavior - ) - } + topBar = {} ) { innerPadding -> - Box(modifier = Modifier.fillMaxSize()) { + Box( + modifier = Modifier + .fillMaxSize() + ) { val currentTab = remember(tabs, currentPage) { tabs.getOrNull(currentPage) ?: tabs.firstOrNull() ?: DIYTabs.ESSENTIALS } @@ -774,55 +599,65 @@ class MainActivity : FragmentActivity() { .alpha(1f - (backProgress.value * 0.3f)), label = "Tab Transition" ) { targetPage -> - when (tabs[targetPage]) { + val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() + val topContentPadding = statusBarHeight + val bottomToolbarPadding = 150.dp + val contentPadding = PaddingValues( + top = topContentPadding, + bottom = bottomToolbarPadding, + start = 16.dp, + end = 16.dp + ) + + when (tabs[targetPage]) { DIYTabs.ESSENTIALS -> { SetupFeatures( viewModel = viewModel, - modifier = Modifier.padding(innerPadding), - searchRequested = searchRequested, - onSearchHandled = { searchRequested = false }, + modifier = Modifier.fillMaxSize(), + contentPadding = contentPadding, onHelpClick = { showInstructionsSheet = true } ) } DIYTabs.FREEZE -> { - FreezeGridUI( - viewModel = viewModel, - modifier = Modifier.padding(innerPadding), - contentPadding = innerPadding - ) - } - - DIYTabs.DIY -> { - DIYScreen( - modifier = Modifier.padding(innerPadding), - showNewAutomationSheet = showNewAutomationSheet, - onDismissNewAutomationSheet = { showNewAutomationSheet = false } - ) - } + FreezeGridUI( + viewModel = viewModel, + modifier = Modifier.fillMaxSize(), + contentPadding = contentPadding + ) + } - DIYTabs.APPS -> { - Box(modifier = Modifier.fillMaxSize()) { - val isLoading by updatesViewModel.isLoading + DIYTabs.DIY -> { + DIYScreen( + modifier = Modifier.fillMaxSize(), + contentPadding = contentPadding, + showNewAutomationSheet = showNewAutomationSheet, + onDismissNewAutomationSheet = { showNewAutomationSheet = false } + ) + } - if (isLoading && trackedRepos.isEmpty()) { - Column( - modifier = Modifier - .padding(innerPadding) - .fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - androidx.compose.material3.LoadingIndicator() - } - } else if (trackedRepos.isEmpty()) { - Column( - modifier = Modifier - .padding(innerPadding) - .fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { + DIYTabs.APPS -> { + Box(modifier = Modifier.fillMaxSize()) { + val isLoading by updatesViewModel.isLoading + + if (isLoading && trackedRepos.isEmpty()) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(bottom = bottomToolbarPadding, start = 16.dp, end = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + androidx.compose.material3.LoadingIndicator() + } + } else if (trackedRepos.isEmpty()) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(bottom = bottomToolbarPadding, start = 16.dp, end = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { Text( text = stringResource(R.string.msg_no_repos_tracked), style = MaterialTheme.typography.bodyLarge, @@ -856,14 +691,16 @@ class MainActivity : FragmentActivity() { LazyColumn( modifier = Modifier.fillMaxSize(), - contentPadding = androidx.compose.foundation.layout.PaddingValues( - top = innerPadding.calculateTopPadding() + 16.dp, - bottom = 150.dp, + contentPadding = PaddingValues( + bottom = bottomToolbarPadding, start = 16.dp, end = 16.dp ), verticalArrangement = Arrangement.spacedBy(16.dp) ) { + item { + Spacer(modifier = Modifier.height(topContentPadding)) + } item { RoundedCardContainer { AppsActionButtons( diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/DIYScreen.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/DIYScreen.kt index 6f8b43cc6..6d01bbf19 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/DIYScreen.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/DIYScreen.kt @@ -5,7 +5,9 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.MaterialTheme @@ -33,6 +35,7 @@ import com.sameerasw.essentials.viewmodels.DIYViewModel fun DIYScreen( modifier: Modifier = Modifier, viewModel: DIYViewModel = viewModel(), + contentPadding: PaddingValues = PaddingValues(0.dp), showNewAutomationSheet: Boolean = false, onDismissNewAutomationSheet: () -> Unit = {} ) { @@ -46,8 +49,7 @@ fun DIYScreen( .fillMaxSize() .pointerInput(Unit) { detectTapGestures(onTap = { focusManager.clearFocus() }) - } - .padding(16.dp), + }, verticalArrangement = Arrangement.Top, horizontalAlignment = Alignment.Start ) { @@ -68,8 +70,15 @@ fun DIYScreen( LazyColumn( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.spacedBy(16.dp), - contentPadding = PaddingValues(bottom = 150.dp) + contentPadding = PaddingValues( + bottom = contentPadding.calculateBottomPadding(), + start = 16.dp, + end = 16.dp + ) ) { + item { + Spacer(modifier = Modifier.height(contentPadding.calculateTopPadding())) + } if (enabledAutomations.isNotEmpty()) { item { Text( diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt index 9ace00d2e..4adc9aaeb 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt @@ -18,13 +18,9 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.GridItemSpan -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items -import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonGroupDefaults @@ -83,7 +79,6 @@ fun FreezeGridUI( val pickedApps by viewModel.freezePickedApps val isPickedAppsLoading by viewModel.isFreezePickedAppsLoading - val gridState = rememberLazyGridState() val frozenStates = remember { mutableStateMapOf() } val lifecycleOwner = LocalLifecycleOwner.current @@ -144,6 +139,7 @@ fun FreezeGridUI( val isShizukuAvailable by viewModel.isShizukuAvailable val isShizukuPermissionGranted by viewModel.isShizukuPermissionGranted var isMenuExpanded by remember { mutableStateOf(false) } + val scrollState = androidx.compose.foundation.rememberScrollState() val exportLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.CreateDocument("application/json") @@ -173,29 +169,28 @@ fun FreezeGridUI( } } - RoundedCardContainer( + Column( modifier = Modifier - .padding(horizontal = 16.dp) - .padding(top = 16.dp), + .fillMaxSize() + .verticalScroll(scrollState) ) { - LazyVerticalGrid( - columns = GridCells.Adaptive(minSize = 88.dp), - state = gridState, - modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues( - bottom = 150.dp, - top = 0.dp - ), - horizontalArrangement = Arrangement.spacedBy(2.dp), - verticalArrangement = Arrangement.spacedBy(2.dp) + Spacer(modifier = Modifier.height(contentPadding.calculateTopPadding())) + Spacer(modifier = Modifier.height(16.dp)) + + RoundedCardContainer( + modifier = Modifier + .padding(horizontal = 16.dp), ) { - item(span = { GridItemSpan(maxLineSpan) }) { + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(2.dp) + ) { Row( modifier = Modifier .fillMaxWidth() .background( color = MaterialTheme.colorScheme.surfaceBright, - shape = RoundedCornerShape(MaterialTheme.shapes.extraSmall.bottomEnd) + shape = MaterialTheme.shapes.extraSmall ) .padding(12.dp), horizontalArrangement = Arrangement.spacedBy(ButtonGroupDefaults.ConnectedSpaceBetween), @@ -319,27 +314,48 @@ fun FreezeGridUI( } } } - } - items(pickedApps, key = { it.packageName }) { app -> - AppGridItem( - app = app, - isFrozen = frozenStates[app.packageName] ?: false, - isAutoFreezeEnabled = app.isEnabled, - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - viewModel.launchAndUnfreezeApp( - context, - app.packageName - ) - // We don't finish() here since this is a tab - }, - onLongClick = { - ShortcutUtil.pinAppShortcut(context, app) + // App Grid Items + val chunkedApps = pickedApps.chunked(4) + Column( + modifier = Modifier + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(2.dp) + ) { + chunkedApps.forEach { rowApps -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(2.dp) + ) { + rowApps.forEach { app -> + Box(modifier = Modifier.weight(1f)) { + AppGridItem( + app = app, + isFrozen = frozenStates[app.packageName] ?: false, + isAutoFreezeEnabled = app.isEnabled, + onClick = { + HapticUtil.performVirtualKeyHaptic(view) + viewModel.launchAndUnfreezeApp( + context, + app.packageName + ) + }, + onLongClick = { + ShortcutUtil.pinAppShortcut(context, app) + } + ) + } + } + repeat(4 - rowApps.size) { + Spacer(modifier = Modifier.weight(1f)) + } + } } - ) + } } } + + Spacer(modifier = Modifier.height(contentPadding.calculateBottomPadding())) } } } diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt index d88bfb4e0..62d408239 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt @@ -9,8 +9,11 @@ import android.provider.Settings import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState @@ -57,11 +60,12 @@ import kotlinx.coroutines.delay private const val FEATURE_MAPS_POWER_SAVING = R.string.feat_maps_power_saving_title -@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) +@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun SetupFeatures( viewModel: MainViewModel, modifier: Modifier = Modifier, + contentPadding: PaddingValues = PaddingValues(0.dp), searchRequested: Boolean = false, onSearchHandled: () -> Unit = {}, onHelpClick: () -> Unit = {} @@ -779,11 +783,12 @@ fun SetupFeatures( .verticalScroll(scrollState) .pointerInput(Unit) { detectTapGestures(onTap = { focusManager.clearFocus() }) - } - .padding(top = 16.dp, bottom = 150.dp), + }, verticalArrangement = Arrangement.Top, horizontalAlignment = Alignment.Start ) { + Spacer(modifier = Modifier.height(contentPadding.calculateTopPadding())) + OutlinedTextField( value = viewModel.searchQuery.value, onValueChange = { new -> @@ -1001,5 +1006,7 @@ fun SetupFeatures( } } } + + Spacer(modifier = Modifier.height(contentPadding.calculateBottomPadding())) } } From 150a7d1f34d29611b00366dc6596fb1085fa26f1 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Mon, 2 Mar 2026 03:00:58 +0530 Subject: [PATCH 12/14] feat: progressive blur --- .../com/sameerasw/essentials/MainActivity.kt | 22 ++++- .../ui/modifiers/ProgressiveBlurModifier.kt | 91 +++++++++++++++++++ 2 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt diff --git a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt index 0a2f3a37a..776bc4e1b 100644 --- a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt @@ -101,6 +101,8 @@ import com.sameerasw.essentials.ui.components.menus.SegmentedDropdownMenuItem import com.sameerasw.essentials.ui.composables.DIYScreen import com.sameerasw.essentials.ui.composables.FreezeGridUI import com.sameerasw.essentials.ui.composables.SetupFeatures +import com.sameerasw.essentials.ui.modifiers.BlurDirection +import com.sameerasw.essentials.ui.modifiers.progressiveBlur import com.sameerasw.essentials.ui.theme.EssentialsTheme import com.sameerasw.essentials.utils.HapticUtil import com.sameerasw.essentials.viewmodels.AppUpdatesViewModel @@ -438,19 +440,28 @@ class MainActivity : FragmentActivity() { 0, 0 ), - modifier = Modifier - .nestedScroll(exitAlwaysScrollBehavior), + modifier = Modifier, containerColor = MaterialTheme.colorScheme.surfaceContainer, topBar = {} ) { innerPadding -> + val statusBarHeightPx = with(androidx.compose.ui.platform.LocalDensity.current) { + WindowInsets.statusBars.asPaddingValues().calculateTopPadding().toPx() + } + Box( modifier = Modifier .fillMaxSize() + .progressiveBlur( + blurRadius = 40f, + height = statusBarHeightPx * 1.15f, + direction = BlurDirection.TOP + ) ) { val currentTab = remember(tabs, currentPage) { tabs.getOrNull(currentPage) ?: tabs.firstOrNull() ?: DIYTabs.ESSENTIALS } + DIYFloatingToolbar( modifier = Modifier .align(Alignment.BottomCenter) @@ -596,7 +607,12 @@ class MainActivity : FragmentActivity() { }, modifier = Modifier .scale(1f - (backProgress.value * 0.05f)) - .alpha(1f - (backProgress.value * 0.3f)), + .alpha(1f - (backProgress.value * 0.3f)) + .progressiveBlur( + blurRadius = 40f, + height = with(androidx.compose.ui.platform.LocalDensity.current) { 130.dp.toPx() }, + direction = BlurDirection.BOTTOM + ), label = "Tab Transition" ) { targetPage -> val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() diff --git a/app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt b/app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt new file mode 100644 index 000000000..9e6838edb --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt @@ -0,0 +1,91 @@ +package com.sameerasw.essentials.ui.modifiers + +import android.graphics.RenderEffect +import android.graphics.RuntimeShader +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.asComposeRenderEffect +import androidx.compose.ui.graphics.graphicsLayer +import org.intellij.lang.annotations.Language + +enum class BlurDirection { + TOP, BOTTOM +} + +@Language("AGSL") +private val PROGRESSIVE_BLUR_SKSL = """ + uniform shader content; + uniform float blurRadius; + uniform float height; + uniform float contentHeight; + uniform int isTop; + + half4 main(float2 fragCoord) { + float progress; + if (isTop == 1) { + progress = 1.0 - clamp(fragCoord.y / height, 0.0, 1.0); + } else { + progress = 1.0 - clamp((contentHeight - fragCoord.y) / height, 0.0, 1.0); + } + + // Easing curve for smoother transition (power curve) + progress = pow(progress, 1.5); + + float radius = progress * blurRadius; + + if (radius <= 0.0) { + return content.eval(fragCoord); + } + + half4 accum = half4(0.0); + float weightSum = 0.0; + + const int SAMPLES = 8; + float offsetScale = radius / float(SAMPLES); + + for (int x = -SAMPLES; x <= SAMPLES; x++) { + for (int y = -SAMPLES; y <= SAMPLES; y++) { + float2 offset = float2(float(x), float(y)) * offsetScale; + + float distSq = dot(offset, offset); + float radiusSq = radius * radius; + + if (distSq <= radiusSq) { + float weight = exp(-3.0 * distSq / radiusSq); + accum += content.eval(fragCoord + offset) * weight; + weightSum += weight; + } + } + } + + return accum / weightSum; + } +""".trimIndent() + +/** + * Applies a progressive blur to the specified edge of the element. + * Only works on Android 13+ (API 33). + */ +fun Modifier.progressiveBlur( + blurRadius: Float, + height: Float, + direction: BlurDirection = BlurDirection.TOP +): Modifier = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + this.then( + Modifier.graphicsLayer { + if (blurRadius <= 0f) return@graphicsLayer + + val shader = RuntimeShader(PROGRESSIVE_BLUR_SKSL) + shader.setFloatUniform("blurRadius", blurRadius) + shader.setFloatUniform("height", height) + shader.setFloatUniform("contentHeight", size.height) + shader.setIntUniform("isTop", if (direction == BlurDirection.TOP) 1 else 0) + + renderEffect = RenderEffect.createRuntimeShaderEffect(shader, "content") + .asComposeRenderEffect() + } + ) +} else { + this +} From 7af0d60f875d6452b5065c3bab2cde76e06c154e Mon Sep 17 00:00:00 2001 From: sameerasw Date: Mon, 2 Mar 2026 04:23:46 +0530 Subject: [PATCH 13/14] feat: global bottom toolbar design with no top app bars --- .../essentials/AppUpdatesActivity.kt | 4 +- .../essentials/FeatureSettingsActivity.kt | 164 ++++++++---------- .../com/sameerasw/essentials/MainActivity.kt | 6 +- .../sameerasw/essentials/SettingsActivity.kt | 110 +++++++----- .../ui/activities/AppFreezingActivity.kt | 3 + .../ui/components/DIYFloatingToolbar.kt | 3 +- .../ui/components/SettingsFloatingToolbar.kt | 151 ++++++++++++++++ .../essentials/ui/composables/FreezeGridUI.kt | 2 +- .../composables/watermark/WatermarkScreen.kt | 4 +- .../ui/modifiers/ProgressiveBlurModifier.kt | 2 +- app/src/main/res/values-night/themes.xml | 1 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/themes.xml | 1 + 13 files changed, 309 insertions(+), 145 deletions(-) create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/components/SettingsFloatingToolbar.kt diff --git a/app/src/main/java/com/sameerasw/essentials/AppUpdatesActivity.kt b/app/src/main/java/com/sameerasw/essentials/AppUpdatesActivity.kt index 782b495e7..40c2727be 100644 --- a/app/src/main/java/com/sameerasw/essentials/AppUpdatesActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/AppUpdatesActivity.kt @@ -257,8 +257,10 @@ class AppUpdatesActivity : FragmentActivity() { HapticUtil.performMediumHaptic(view) showAddRepoSheet = true }, + modifier = Modifier.padding(bottom = 16.dp, end = 16.dp), containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer + contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + elevation = androidx.compose.material3.FloatingActionButtonDefaults.elevation(0.dp, 0.dp, 0.dp, 0.dp) ) { androidx.compose.material3.Icon( painter = painterResource(id = R.drawable.rounded_add_24), diff --git a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt index 93ccf7fbe..9dd183d19 100644 --- a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt @@ -7,11 +7,16 @@ import android.os.VibratorManager import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api @@ -20,21 +25,21 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex import androidx.core.net.toUri import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle @@ -42,7 +47,7 @@ import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.viewmodel.compose.viewModel import com.sameerasw.essentials.domain.HapticFeedbackType import com.sameerasw.essentials.domain.registry.FeatureRegistry -import com.sameerasw.essentials.ui.components.ReusableTopAppBar +import com.sameerasw.essentials.ui.components.SettingsFloatingToolbar import com.sameerasw.essentials.ui.components.cards.FeatureCard import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer import com.sameerasw.essentials.ui.components.linkActions.LinkPickerScreen @@ -68,6 +73,8 @@ import com.sameerasw.essentials.ui.composables.configs.SoundModeTileSettingsUI import com.sameerasw.essentials.ui.composables.configs.StatusBarIconSettingsUI import com.sameerasw.essentials.ui.composables.configs.TextAnimationsSettingsUI import com.sameerasw.essentials.ui.composables.configs.WatchSettingsUI +import com.sameerasw.essentials.ui.modifiers.BlurDirection +import com.sameerasw.essentials.ui.modifiers.progressiveBlur import com.sameerasw.essentials.ui.theme.EssentialsTheme import com.sameerasw.essentials.utils.BiometricSecurityHelper import com.sameerasw.essentials.utils.HapticUtil @@ -95,6 +102,10 @@ class FeatureSettingsActivity : FragmentActivity() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { window.isNavigationBarContrastEnforced = false } + + val isDarkMode = (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK) == + android.content.res.Configuration.UI_MODE_NIGHT_YES + window.setBackgroundDrawableResource(if (isDarkMode) android.R.color.black else R.color.app_window_background) val featureId = intent.getStringExtra("feature") ?: "" val featureObj = FeatureRegistry.ALL_FEATURES.find { it.id == featureId } val highlightSetting = intent.getStringExtra("highlight_setting") @@ -149,9 +160,8 @@ class FeatureSettingsActivity : FragmentActivity() { } } - LaunchedEffect(Unit) { - viewModel.check(context) - } + // Initialize synchronously so settingsRepository is ready before first composition + remember(context) { viewModel.check(context) } val isPitchBlackThemeEnabled by viewModel.isPitchBlackThemeEnabled val pinnedFeatureKeys by viewModel.pinnedFeatureKeys @@ -296,99 +306,38 @@ class FeatureSettingsActivity : FragmentActivity() { ) } - val scrollBehavior = - TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState()) - Scaffold( - contentWindowInsets = androidx.compose.foundation.layout.WindowInsets( - 0, - 0, - 0, - 0 - ), - modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), - containerColor = MaterialTheme.colorScheme.surfaceContainer, - topBar = { - ReusableTopAppBar( - title = if (featureObj != null) stringResource(featureObj.title) else featureId, - hasBack = true, - hasSearch = false, - onBackClick = { finish() }, - scrollBehavior = scrollBehavior, - subtitle = if (featureObj != null) stringResource(featureObj.description) else "", - isBeta = featureObj?.isBeta ?: false, - actions = { - if (featureObj != null && featureObj.aboutDescription != null) { - var showMenu by remember { mutableStateOf(false) } - androidx.compose.material3.IconButton( - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - showMenu = true - }, - colors = androidx.compose.material3.IconButtonDefaults.iconButtonColors( - containerColor = MaterialTheme.colorScheme.surfaceBright - ), - modifier = Modifier.size(40.dp) - ) { - Icon( - painter = painterResource(id = R.drawable.rounded_more_vert_24), - contentDescription = stringResource(R.string.content_desc_more_options), - modifier = Modifier.size(24.dp) - ) + val pageTitle = if (featureObj != null) stringResource(featureObj.title) else featureId + val hasMenu = featureObj != null && featureObj.aboutDescription != null - com.sameerasw.essentials.ui.components.menus.SegmentedDropdownMenu( - expanded = showMenu, - onDismissRequest = { showMenu = false } - ) { - com.sameerasw.essentials.ui.components.menus.SegmentedDropdownMenuItem( - text = { - Text(stringResource(R.string.action_what_is_this)) - }, - onClick = { - showMenu = false - selectedHelpFeature = featureObj - showHelpSheet = true - }, - leadingIcon = { - Icon( - painter = painterResource(id = R.drawable.rounded_help_24), - contentDescription = null - ) - } - ) - } - } - } - } + val statusBarHeightPx = with(LocalDensity.current) { + WindowInsets.statusBars.asPaddingValues().calculateTopPadding().toPx() + } + val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() + + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.surfaceContainer) + .progressiveBlur( + blurRadius = 40f, + height = statusBarHeightPx * 1.15f, + direction = BlurDirection.TOP ) - }, - floatingActionButton = { - if (featureId == "Notification lighting") { - ExtendedFloatingActionButton( - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - viewModel.triggerNotificationLighting(context) - }, - expanded = fabExpanded, - icon = { - Icon( - painter = painterResource(id = R.drawable.rounded_play_arrow_24), - contentDescription = null - ) - }, - text = { Text(stringResource(R.string.action_preview)) }, - modifier = Modifier.height(64.dp) - ) - } - } - ) { innerPadding -> - val hasScroll = - featureId != "Sound mode tile" && featureId != "Quick settings tiles" + ) { + val hasScroll = featureId != "Sound mode tile" && featureId != "Quick settings tiles" Column( modifier = Modifier - .padding(innerPadding) .fillMaxSize() + .progressiveBlur( + blurRadius = 40f, + height = with(LocalDensity.current) { 150.dp.toPx() }, + direction = BlurDirection.BOTTOM + ) .then(if (hasScroll) Modifier.verticalScroll(rememberScrollState()) else Modifier) ) { + // Top padding for status bar + androidx.compose.foundation.layout.Spacer(modifier = Modifier.height(statusBarHeight)) + if (featureId == "Watch") { WatchSettingsUI( viewModel = watchViewModel, @@ -670,7 +619,34 @@ class FeatureSettingsActivity : FragmentActivity() { } } + // Bottom padding for toolbar + androidx.compose.foundation.layout.Spacer(modifier = Modifier.height(150.dp)) } + + SettingsFloatingToolbar( + title = pageTitle, + onBackClick = { finish() }, + modifier = Modifier + .align(Alignment.BottomCenter) + .zIndex(1f), + menuContent = if (hasMenu) { + { + MenuItem( + text = { Text(stringResource(R.string.action_what_is_this)) }, + onClick = { + selectedHelpFeature = featureObj + showHelpSheet = true + }, + leadingIcon = { + Icon( + painter = painterResource(id = R.drawable.rounded_help_24), + contentDescription = null + ) + } + ) + } + } else null + ) } } } diff --git a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt index 776bc4e1b..0f4139a01 100644 --- a/app/src/main/java/com/sameerasw/essentials/MainActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/MainActivity.kt @@ -508,7 +508,8 @@ class MainActivity : FragmentActivity() { }, containerColor = MaterialTheme.colorScheme.primaryContainer, contentColor = MaterialTheme.colorScheme.onPrimaryContainer, - shape = MaterialTheme.shapes.large + shape = MaterialTheme.shapes.large, + elevation = androidx.compose.material3.FloatingActionButtonDefaults.elevation(0.dp, 0.dp, 0.dp, 0.dp) ) { when (currentTab) { DIYTabs.ESSENTIALS -> { @@ -946,8 +947,9 @@ class MainActivity : FragmentActivity() { } } - // Mark app as ready after composing (happens very quickly) + // Mark app as ready after a short delay to ensure first frame is painted LaunchedEffect(Unit) { + kotlinx.coroutines.delay(100) isAppReady = true } } diff --git a/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt index afb5fe1c4..280f6fac0 100644 --- a/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt @@ -23,14 +23,18 @@ import androidx.compose.animation.shrinkVertically import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape @@ -41,8 +45,6 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -51,16 +53,17 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex import androidx.core.app.ActivityCompat import com.sameerasw.essentials.domain.DIYTabs import com.sameerasw.essentials.domain.registry.PermissionRegistry -import com.sameerasw.essentials.ui.components.ReusableTopAppBar +import com.sameerasw.essentials.ui.components.SettingsFloatingToolbar import com.sameerasw.essentials.ui.components.cards.IconToggleItem import com.sameerasw.essentials.ui.components.cards.PermissionCard import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer @@ -68,6 +71,8 @@ import com.sameerasw.essentials.ui.components.dialogs.AboutSection import com.sameerasw.essentials.ui.components.pickers.DefaultTabPicker import com.sameerasw.essentials.ui.components.sheets.InstructionsBottomSheet import com.sameerasw.essentials.ui.components.sheets.UpdateBottomSheet +import com.sameerasw.essentials.ui.modifiers.BlurDirection +import com.sameerasw.essentials.ui.modifiers.progressiveBlur import com.sameerasw.essentials.ui.theme.EssentialsTheme import com.sameerasw.essentials.utils.HapticUtil import com.sameerasw.essentials.utils.PermissionUtils @@ -93,6 +98,10 @@ class SettingsActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() + + val isDarkMode = (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK) == + android.content.res.Configuration.UI_MODE_NIGHT_YES + window.setBackgroundDrawableResource(if (isDarkMode) android.R.color.black else R.color.app_window_background) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { window.isNavigationBarContrastEnforced = false } @@ -103,8 +112,6 @@ class SettingsActivity : ComponentActivity() { EssentialsTheme(pitchBlackTheme = isPitchBlackThemeEnabled) { val context = LocalContext.current val view = LocalView.current - val scrollBehavior = - TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState()) var showBugReportSheet by remember { mutableStateOf(false) } @@ -119,46 +126,57 @@ class SettingsActivity : ComponentActivity() { ) } - Scaffold( - contentWindowInsets = androidx.compose.foundation.layout.WindowInsets( - 0, - 0, - 0, - 0 - ), - modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), - containerColor = MaterialTheme.colorScheme.surfaceContainer, - topBar = { - ReusableTopAppBar( - title = "Settings", - hasBack = true, - hasSearch = false, - onBackClick = { finish() }, - scrollBehavior = scrollBehavior, - actions = { - androidx.compose.material3.IconButton( - onClick = { - HapticUtil.performVirtualKeyHaptic(view) - showBugReportSheet = true - }, - colors = androidx.compose.material3.IconButtonDefaults.iconButtonColors( - containerColor = MaterialTheme.colorScheme.surfaceBright - ), - modifier = Modifier.size(40.dp) - ) { + val statusBarHeightPx = with(LocalDensity.current) { + WindowInsets.statusBars.asPaddingValues().calculateTopPadding().toPx() + } + val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() + + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.surfaceContainer) + .progressiveBlur( + blurRadius = 40f, + height = statusBarHeightPx * 1.15f, + direction = BlurDirection.TOP + ) + ) { + val contentPadding = androidx.compose.foundation.layout.PaddingValues( + top = statusBarHeight, + bottom = 150.dp, + start = 16.dp, + end = 16.dp + ) + + SettingsContent( + viewModel = viewModel, + contentPadding = contentPadding, + modifier = Modifier + .progressiveBlur( + blurRadius = 40f, + height = with(LocalDensity.current) { 150.dp.toPx() }, + direction = BlurDirection.BOTTOM + ) + ) + + SettingsFloatingToolbar( + title = stringResource(R.string.label_settings), + onBackClick = { finish() }, + modifier = Modifier + .align(Alignment.BottomCenter) + .zIndex(1f), + menuContent = { + MenuItem( + text = { Text(stringResource(R.string.action_report_bug)) }, + onClick = { showBugReportSheet = true }, + leadingIcon = { Icon( painter = painterResource(id = R.drawable.rounded_bug_report_24), - contentDescription = "Report Bug", - modifier = Modifier.size(24.dp) + contentDescription = null ) } - } - ) - } - ) { innerPadding -> - SettingsContent( - viewModel = viewModel, - modifier = Modifier.padding(innerPadding) + ) + } ) } } @@ -189,7 +207,11 @@ class SettingsActivity : ComponentActivity() { } @Composable -fun SettingsContent(viewModel: MainViewModel, modifier: Modifier = Modifier) { +fun SettingsContent( + viewModel: MainViewModel, + contentPadding: androidx.compose.foundation.layout.PaddingValues, + modifier: Modifier = Modifier +) { val isAccessibilityEnabled by viewModel.isAccessibilityEnabled val isWriteSecureSettingsEnabled by viewModel.isWriteSecureSettingsEnabled val isPostNotificationsEnabled by viewModel.isPostNotificationsEnabled @@ -275,7 +297,7 @@ fun SettingsContent(viewModel: MainViewModel, modifier: Modifier = Modifier) { modifier = modifier .fillMaxSize() .verticalScroll(rememberScrollState()) - .padding(16.dp), + .padding(contentPadding), verticalArrangement = Arrangement.spacedBy(4.dp), horizontalAlignment = Alignment.Start ) { diff --git a/app/src/main/java/com/sameerasw/essentials/ui/activities/AppFreezingActivity.kt b/app/src/main/java/com/sameerasw/essentials/ui/activities/AppFreezingActivity.kt index 58ac2a406..bc90c7e32 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/activities/AppFreezingActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/activities/AppFreezingActivity.kt @@ -173,6 +173,7 @@ class AppFreezingActivity : ComponentActivity() { }, floatingActionButton = { ExpandableFreezeFab( + modifier = Modifier.padding(bottom = 16.dp, end = 16.dp), onUnfreezeAll = { viewModel.unfreezeAllApps(context) }, onFreezeAll = { viewModel.freezeAllApps(context) }, onFreezeAutomatic = { viewModel.freezeAutomaticApps(context) } @@ -346,6 +347,7 @@ fun AppGridItem( @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun ExpandableFreezeFab( + modifier: Modifier = Modifier, onUnfreezeAll: () -> Unit, onFreezeAll: () -> Unit, onFreezeAutomatic: () -> Unit @@ -355,6 +357,7 @@ fun ExpandableFreezeFab( BackHandler(fabMenuExpanded) { fabMenuExpanded = false } FloatingActionButtonMenu( + modifier = modifier, expanded = fabMenuExpanded, button = { ToggleFloatingActionButton( diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt index 62ff771da..810794397 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/DIYFloatingToolbar.kt @@ -55,7 +55,8 @@ fun DIYFloatingToolbar( modifier = modifier .windowInsetsPadding( androidx.compose.foundation.layout.WindowInsets.navigationBars - ), + ) + .padding(start = 16.dp, end = 16.dp, bottom = 0.dp), expanded = expanded, floatingActionButton = floatingActionButton, scrollBehavior = scrollBehavior, diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/SettingsFloatingToolbar.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/SettingsFloatingToolbar.kt new file mode 100644 index 000000000..037998417 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/SettingsFloatingToolbar.kt @@ -0,0 +1,151 @@ +package com.sameerasw.essentials.ui.components + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.FloatingToolbarDefaults +import androidx.compose.material3.HorizontalFloatingToolbar +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +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 +import com.sameerasw.essentials.ui.components.menus.SegmentedDropdownMenuItem +import androidx.compose.foundation.layout.RowScope +import androidx.compose.ui.Alignment + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) +@Composable +fun SettingsFloatingToolbar( + title: String, + onBackClick: () -> Unit, + modifier: Modifier = Modifier, + menuContent: (@Composable SettingsMenuScope.() -> Unit)? = null +) { + var menuExpanded by remember { mutableStateOf(false) } + + if (menuContent != null) { + HorizontalFloatingToolbar( + modifier = modifier + .windowInsetsPadding(WindowInsets.navigationBars) + .padding(start = 16.dp, end = 16.dp, bottom = 0.dp), + expanded = true, + floatingActionButton = { + Box { + FloatingActionButton( + onClick = { menuExpanded = true }, + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + shape = MaterialTheme.shapes.large, + elevation = androidx.compose.material3.FloatingActionButtonDefaults.elevation(0.dp, 0.dp, 0.dp, 0.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_more_vert_24), + contentDescription = stringResource(R.string.content_desc_more_options) + ) + } + + SegmentedDropdownMenu( + expanded = menuExpanded, + onDismissRequest = { menuExpanded = false } + ) { + val scope = SettingsMenuScope(dismissMenu = { menuExpanded = false }) + scope.menuContent() + } + } + }, + colors = FloatingToolbarDefaults.vibrantFloatingToolbarColors( + toolbarContentColor = MaterialTheme.colorScheme.onSurface, + toolbarContainerColor = MaterialTheme.colorScheme.primary, + ), + content = { + ToolbarContent(title, onBackClick) + } + ) + } else { + // Use the variant without the FAB to avoid reserving space + HorizontalFloatingToolbar( + modifier = modifier + .windowInsetsPadding(WindowInsets.navigationBars) + .padding(start = 16.dp, end = 16.dp, bottom = 8.dp), + expanded = true, + colors = FloatingToolbarDefaults.vibrantFloatingToolbarColors( + toolbarContentColor = MaterialTheme.colorScheme.onSurface, + toolbarContainerColor = MaterialTheme.colorScheme.primary, + ), + content = { + ToolbarContent(title, onBackClick) + } + ) + } +} + +@Composable +private fun RowScope.ToolbarContent( + title: String, + onBackClick: () -> Unit +) { + IconButton( + onClick = onBackClick, + modifier = Modifier.align(Alignment.CenterVertically), + colors = IconButtonDefaults.filledIconButtonColors( + contentColor = MaterialTheme.colorScheme.primary, + containerColor = MaterialTheme.colorScheme.background + ) + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_arrow_back_24), + contentDescription = stringResource(R.string.content_desc_back), + modifier = Modifier.size(24.dp) + ) + } + + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.background, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier + .widthIn(min = 100.dp, max = 300.dp) + .padding(horizontal = 8.dp) + .align(Alignment.CenterVertically) + ) +} + +class SettingsMenuScope(val dismissMenu: () -> Unit) { + @Composable + fun MenuItem( + text: @Composable () -> Unit, + onClick: () -> Unit, + leadingIcon: (@Composable () -> Unit)? = null + ) { + SegmentedDropdownMenuItem( + text = text, + onClick = { + onClick() + dismissMenu() + }, + leadingIcon = leadingIcon + ) + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt index 4adc9aaeb..9452c0b7a 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/FreezeGridUI.kt @@ -375,7 +375,7 @@ fun AppGridItem( Surface( shape = RoundedCornerShape(4.dp), - color = MaterialTheme.colorScheme.surfaceContainerHigh, + color = MaterialTheme.colorScheme.surfaceBright, modifier = Modifier .fillMaxWidth() .combinedClickable( diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/watermark/WatermarkScreen.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/watermark/WatermarkScreen.kt index 44cdcef5b..2257ed43e 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/watermark/WatermarkScreen.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/watermark/WatermarkScreen.kt @@ -130,8 +130,10 @@ fun WatermarkScreen( performUIHaptic(view) showEditSheet = true }, + modifier = Modifier.padding(bottom = 16.dp, end = 16.dp), containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer + contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + elevation = androidx.compose.material3.FloatingActionButtonDefaults.elevation(0.dp, 0.dp, 0.dp, 0.dp) ) { Icon( painter = painterResource(R.drawable.rounded_edit_24), diff --git a/app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt b/app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt index 9e6838edb..88e58a7e0 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/modifiers/ProgressiveBlurModifier.kt @@ -41,7 +41,7 @@ private val PROGRESSIVE_BLUR_SKSL = """ half4 accum = half4(0.0); float weightSum = 0.0; - const int SAMPLES = 8; + const int SAMPLES = 5; float offsetScale = radius / float(SAMPLES); for (int x = -SAMPLES; x <= SAMPLES; x++) { diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 61a53e2d8..4b2300ad9 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -3,6 +3,7 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0b7497728..cacda1d86 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -600,6 +600,9 @@ Back + Back + Settings + Report a Bug Done Preview Help Guide diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 14855b486..dabe4d6fc 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -3,6 +3,7 @@ From 2cde7937fafcb74b31b99b103ad3933774df6128 Mon Sep 17 00:00:00 2001 From: sameerasw Date: Mon, 2 Mar 2026 05:57:48 +0530 Subject: [PATCH 14/14] feat: Your Android --- app/build.gradle.kts | 3 + app/src/main/AndroidManifest.xml | 7 + .../essentials/data/model/DeviceSpecs.kt | 17 + .../ui/activities/YourAndroidActivity.kt | 254 ++++++++++++++ .../ui/components/DeviceHeroCard.kt | 323 ++++++++++++++++++ .../ui/components/DeviceSpecsCard.kt | 222 ++++++++++++ .../ui/components/cards/FeatureCard.kt | 8 +- .../ui/components/cards/IconToggleItem.kt | 6 +- .../containers/RoundedCardContainer.kt | 6 +- .../components/modifiers/ShimmerModifier.kt | 55 +++ .../ui/composables/SetupFeatures.kt | 220 +++++++++++- .../essentials/utils/DeviceImageMapper.kt | 59 ++++ .../sameerasw/essentials/utils/DeviceUtils.kt | 215 ++++++++++++ .../essentials/utils/GSMArenaService.kt | 106 ++++++ app/src/main/res/drawable/android12.png | Bin 0 -> 34431 bytes app/src/main/res/drawable/android13.png | Bin 0 -> 43953 bytes app/src/main/res/drawable/android14.png | Bin 0 -> 60611 bytes app/src/main/res/drawable/android15.png | Bin 0 -> 51901 bytes app/src/main/res/drawable/android16.png | Bin 0 -> 50956 bytes app/src/main/res/drawable/android17.png | Bin 0 -> 34220 bytes app/src/main/res/drawable/pixel_6.xml | 32 ++ app/src/main/res/drawable/pixel_6a.xml | 32 ++ app/src/main/res/drawable/pixel_6pro.xml | 32 ++ app/src/main/res/drawable/pixel_7.xml | 32 ++ app/src/main/res/drawable/pixel_7a.xml | 32 ++ app/src/main/res/drawable/pixel_7pro.xml | 32 ++ app/src/main/res/drawable/pixel_8a.xml | 32 ++ app/src/main/res/drawable/pixel_8pro.xml | 32 ++ app/src/main/res/drawable/pixel_9.xml | 32 ++ app/src/main/res/drawable/pixel_9a_10a.xml | 39 +++ .../pixel_9pro_9proxl_10_10pro_10proxl.xml | 32 ++ .../main/res/drawable/rounded_android_24.xml | 5 + .../res/drawable/rounded_memory_alt_24.xml | 5 + app/src/main/res/values/strings.xml | 3 + 34 files changed, 1850 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/sameerasw/essentials/data/model/DeviceSpecs.kt create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/activities/YourAndroidActivity.kt create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/components/DeviceHeroCard.kt create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/components/DeviceSpecsCard.kt create mode 100644 app/src/main/java/com/sameerasw/essentials/ui/components/modifiers/ShimmerModifier.kt create mode 100644 app/src/main/java/com/sameerasw/essentials/utils/DeviceImageMapper.kt create mode 100644 app/src/main/java/com/sameerasw/essentials/utils/DeviceUtils.kt create mode 100644 app/src/main/java/com/sameerasw/essentials/utils/GSMArenaService.kt create mode 100644 app/src/main/res/drawable/android12.png create mode 100644 app/src/main/res/drawable/android13.png create mode 100644 app/src/main/res/drawable/android14.png create mode 100644 app/src/main/res/drawable/android15.png create mode 100644 app/src/main/res/drawable/android16.png create mode 100644 app/src/main/res/drawable/android17.png create mode 100644 app/src/main/res/drawable/pixel_6.xml create mode 100644 app/src/main/res/drawable/pixel_6a.xml create mode 100644 app/src/main/res/drawable/pixel_6pro.xml create mode 100644 app/src/main/res/drawable/pixel_7.xml create mode 100644 app/src/main/res/drawable/pixel_7a.xml create mode 100644 app/src/main/res/drawable/pixel_7pro.xml create mode 100644 app/src/main/res/drawable/pixel_8a.xml create mode 100644 app/src/main/res/drawable/pixel_8pro.xml create mode 100644 app/src/main/res/drawable/pixel_9.xml create mode 100644 app/src/main/res/drawable/pixel_9a_10a.xml create mode 100644 app/src/main/res/drawable/pixel_9pro_9proxl_10_10pro_10proxl.xml create mode 100644 app/src/main/res/drawable/rounded_android_24.xml create mode 100644 app/src/main/res/drawable/rounded_memory_alt_24.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7ccdc8d42..088f73e6d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -139,4 +139,7 @@ dependencies { // Watermark dependencies implementation("androidx.exifinterface:exifinterface:1.3.7") implementation("androidx.compose.material:material-icons-extended:1.7.0") // Compatible with Compose BOM + + // GSMArena Parsing + implementation("org.jsoup:jsoup:1.15.3") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 859eff45a..0aa6aacbc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,6 +86,13 @@ android:theme="@style/Theme.Essentials"> + + + +) + +data class DeviceSpecs( + val deviceName: String, + val detailSpec: List, + val imageUrls: List = emptyList() +) diff --git a/app/src/main/java/com/sameerasw/essentials/ui/activities/YourAndroidActivity.kt b/app/src/main/java/com/sameerasw/essentials/ui/activities/YourAndroidActivity.kt new file mode 100644 index 000000000..924ae7a84 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/activities/YourAndroidActivity.kt @@ -0,0 +1,254 @@ +package com.sameerasw.essentials.ui.activities + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.animateDpAsState +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBars +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.foundation.background +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.rounded.ArrowBack +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.sameerasw.essentials.R +import com.sameerasw.essentials.data.model.DeviceSpecs +import com.sameerasw.essentials.ui.components.DeviceHeroCard +import com.sameerasw.essentials.ui.components.DeviceSpecsCard +import com.sameerasw.essentials.ui.components.SettingsFloatingToolbar +import com.sameerasw.essentials.ui.modifiers.BlurDirection +import com.sameerasw.essentials.ui.modifiers.progressiveBlur +import com.sameerasw.essentials.ui.theme.EssentialsTheme +import com.sameerasw.essentials.utils.DeviceInfo +import com.sameerasw.essentials.utils.DeviceUtils +import com.sameerasw.essentials.utils.GSMArenaService +import com.sameerasw.essentials.utils.HapticUtil +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +class YourAndroidViewModel : ViewModel() { + private val _deviceSpecs = MutableStateFlow(null) + val deviceSpecs = _deviceSpecs.asStateFlow() + + private val _isSpecsLoading = MutableStateFlow(true) + val isSpecsLoading = _isSpecsLoading.asStateFlow() + + var hasRunStartupAnimation = false + + fun loadDeviceSpecs(deviceInfo: DeviceInfo) { + if (_deviceSpecs.value != null) { + _isSpecsLoading.value = false + return + } + + viewModelScope.launch { + _isSpecsLoading.value = true + val specs = withContext(Dispatchers.IO) { + // Remove generic terms from the hardware name + val brand = deviceInfo.manufacturer.replace("Google", "") + .replace("samsung", "Samsung") + .trim() + val model = deviceInfo.model + .replace("Pixel", "") + .replace("Galaxy", "") + .trim() + + // Fallback to simpler search + val searchBrand = if(brand.isEmpty()) deviceInfo.manufacturer else brand + + GSMArenaService.fetchSpecs(brand = searchBrand, model = model) + } + _deviceSpecs.value = specs + _isSpecsLoading.value = false + } + } +} + +class YourAndroidActivity : ComponentActivity() { + @OptIn(ExperimentalMaterial3Api::class) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + + val isDarkMode = (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK) == android.content.res.Configuration.UI_MODE_NIGHT_YES + window.setBackgroundDrawableResource(if (isDarkMode) android.R.color.black else R.color.app_window_background) + + setContent { + val mainViewModel: com.sameerasw.essentials.viewmodels.MainViewModel = androidx.lifecycle.viewmodel.compose.viewModel() + val isPitchBlackThemeEnabled by mainViewModel.isPitchBlackThemeEnabled + + val viewModel: YourAndroidViewModel = androidx.lifecycle.viewmodel.compose.viewModel() + val deviceSpecs by viewModel.deviceSpecs.collectAsState() + val isSpecsLoading by viewModel.isSpecsLoading.collectAsState() + val context = androidx.compose.ui.platform.LocalContext.current + val deviceInfo = remember { DeviceUtils.getDeviceInfo(context) } + + LaunchedEffect(Unit) { + mainViewModel.check(context) + viewModel.loadDeviceSpecs(deviceInfo) + } + + EssentialsTheme(pitchBlackTheme = isPitchBlackThemeEnabled) { + val statusBarHeightPx = with(LocalDensity.current) { + WindowInsets.statusBars.asPaddingValues().calculateTopPadding().toPx() + } + + Box( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.surfaceContainer) + .progressiveBlur( + blurRadius = 40f, + height = statusBarHeightPx * 1.15f, + direction = BlurDirection.TOP + ) + ) { + YourAndroidContent( + deviceInfo = deviceInfo, + deviceSpecs = deviceSpecs, + isSpecsLoading = isSpecsLoading, + hasRunStartupAnimation = viewModel.hasRunStartupAnimation, + onAnimationRun = { viewModel.hasRunStartupAnimation = true }, + modifier = Modifier.fillMaxSize() + ) + + SettingsFloatingToolbar( + title = stringResource(R.string.tab_your_android), + onBackClick = { finish() }, + modifier = Modifier + .align(Alignment.BottomCenter) + .zIndex(1f) + ) + } + } + } + } +} + +@Composable +fun YourAndroidContent( + deviceInfo: DeviceInfo, + deviceSpecs: DeviceSpecs?, + isSpecsLoading: Boolean, + hasRunStartupAnimation: Boolean, + onAnimationRun: () -> Unit, + modifier: Modifier = Modifier, + contentPadding: PaddingValues = PaddingValues(0.dp) +) { + var isStartupAnimationRunning by remember { mutableStateOf(hasRunStartupAnimation) } + + LaunchedEffect(hasRunStartupAnimation) { + if (!hasRunStartupAnimation) { + delay(100) + isStartupAnimationRunning = true + onAnimationRun() + } + } + + val configuration = LocalConfiguration.current + val screenHeight = configuration.screenHeightDp.dp + val initialImageOffset = (screenHeight / 2) - 240.dp - 64.dp + + val imageOffsetState = animateDpAsState( + targetValue = if (isStartupAnimationRunning) 0.dp else initialImageOffset, + animationSpec = tween(durationMillis = 850, easing = FastOutSlowInEasing), + label = "imageOffset" + ) + + val contentAlphaState = animateFloatAsState( + targetValue = if (isStartupAnimationRunning) 1f else 0f, + animationSpec = tween(durationMillis = 750, delayMillis = 350, easing = LinearEasing), + label = "contentAlpha" + ) + + val contentOffsetState = animateDpAsState( + targetValue = if (isStartupAnimationRunning) 0.dp else 40.dp, + animationSpec = tween( + durationMillis = 750, + delayMillis = 350, + easing = FastOutSlowInEasing + ), + label = "contentOffset" + ) + + Column( + modifier = modifier + .fillMaxSize() + .progressiveBlur( + blurRadius = 40f, + height = with(LocalDensity.current) { 150.dp.toPx() }, + direction = BlurDirection.BOTTOM + ) + .verticalScroll(rememberScrollState()) + .padding( + top = contentPadding.calculateTopPadding() + WindowInsets.statusBars.asPaddingValues().calculateTopPadding(), + bottom = 150.dp, + start = 16.dp, + end = 16.dp + ), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + DeviceHeroCard( + deviceInfo = deviceInfo, + deviceSpecs = deviceSpecs, + imageOffset = { imageOffsetState.value }, + contentAlpha = { contentAlphaState.value }, + contentOffset = { contentOffsetState.value } + ) + + DeviceSpecsCard( + deviceSpecs = deviceSpecs, + isLoading = isSpecsLoading, + modifier = Modifier.graphicsLayer { + alpha = contentAlphaState.value + translationY = contentOffsetState.value.toPx() + } + ) + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/DeviceHeroCard.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/DeviceHeroCard.kt new file mode 100644 index 000000000..587b1f50c --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/DeviceHeroCard.kt @@ -0,0 +1,323 @@ +package com.sameerasw.essentials.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.pager.HorizontalPager +import androidx.compose.foundation.pager.rememberPagerState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import coil.compose.AsyncImage +import com.sameerasw.essentials.R +import com.sameerasw.essentials.data.model.DeviceSpecs +import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer +import com.sameerasw.essentials.ui.theme.Shapes +import com.sameerasw.essentials.ui.components.modifiers.shimmer +import com.sameerasw.essentials.utils.DeviceInfo +import com.sameerasw.essentials.utils.DeviceUtils +import com.sameerasw.essentials.utils.DeviceImageMapper + +@Composable +fun DeviceHeroCard( + deviceInfo: DeviceInfo, + deviceSpecs: DeviceSpecs? = null, + imageOffset: () -> Dp = { 0.dp }, + contentAlpha: () -> Float = { 1f }, + contentOffset: () -> Dp = { 0.dp }, + modifier: Modifier = Modifier +) { + val imageUrls = deviceSpecs?.imageUrls ?: emptyList() + val pageCount = 1 + imageUrls.size + val pagerState = rememberPagerState(pageCount = { pageCount }) + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Box( + modifier = Modifier + .graphicsLayer { + translationY = imageOffset().toPx() + } + .fillMaxWidth() + .height(480.dp) + .clip(MaterialTheme.shapes.medium), + contentAlignment = Alignment.Center + ) { + HorizontalPager( + state = pagerState, + modifier = Modifier.fillMaxSize(), + verticalAlignment = Alignment.CenterVertically + ) { page -> + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + if (page == 0) { + // stylized vector + Icon( + painter = painterResource( + id = DeviceImageMapper.getDeviceDrawable( + deviceInfo.model + ) + ), + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier + .fillMaxHeight(0.85f) + .fillMaxWidth(0.85f) + ) + } else { + // real image from gsmarena + AsyncImage( + model = imageUrls[page - 1], + contentDescription = "Device Image", + contentScale = ContentScale.Fit, + modifier = Modifier + .fillMaxHeight(0.85f) + .fillMaxWidth(0.85f) + .clip(RoundedCornerShape(24.dp)) + .shimmer() + ) + } + } + } + + // Page Indicator dots + if (pageCount > 1) { + Row( + Modifier + .align(Alignment.BottomCenter) + .padding(bottom = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + repeat(pageCount) { iteration -> + val color = if (pagerState.currentPage == iteration) + MaterialTheme.colorScheme.primary + else + MaterialTheme.colorScheme.primary.copy(alpha = 0.2f) + Box( + modifier = Modifier + .size(8.dp) + .clip(MaterialTheme.shapes.small) + .background(color) + ) + } + } + } + } + + Spacer(modifier = Modifier.height(24.dp)) + + // User-set Device Name + Text( + text = deviceInfo.deviceName, + modifier = Modifier.graphicsLayer { + alpha = contentAlpha() + translationY = contentOffset().toPx() + }, + style = MaterialTheme.typography.headlineMedium.copy( + fontFamily = null + ), + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onSurface + ) + + // Manufacturer Model + Text( + text = "${deviceInfo.manufacturer.replaceFirstChar { it.uppercase() }} ${deviceInfo.model} (${deviceInfo.hardware})", + modifier = Modifier.graphicsLayer { + alpha = contentAlpha() + translationY = contentOffset().toPx() + }, + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + +// Spacer(modifier = Modifier.height(24.dp)) + + } + + RoundedCardContainer( + modifier = modifier + .fillMaxWidth() + .graphicsLayer { + alpha = contentAlpha() + translationY = contentOffset().toPx() + }, + ) { + + + Row( + modifier = Modifier + .background( + MaterialTheme.colorScheme.surfaceContainerHighest, + shape = Shapes.extraSmall + ) + .fillMaxWidth() + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Icon( + painter = painterResource(id = DeviceImageMapper.getAndroidLogo(deviceInfo)), + contentDescription = null, + tint = Color.Unspecified, + modifier = Modifier.size(56.dp) + ) + Column(horizontalAlignment = Alignment.Start) { + Row(verticalAlignment = Alignment.CenterVertically) { + Text( + text = "Android ${deviceInfo.androidVersion} (${ + DeviceUtils.getOSName( + deviceInfo.sdkInt, + deviceInfo.osCodename + ) + })", + style = MaterialTheme.typography.bodyLarge, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + val isBeta = deviceInfo.buildTag.lowercase().contains("beta") + val isCanary = deviceInfo.buildTag.lowercase().contains("canary") + + if (isBeta || isCanary) { + Spacer(modifier = Modifier.size(8.dp)) + Box( + modifier = Modifier + .background( + MaterialTheme.colorScheme.primary, + shape = MaterialTheme.shapes.large + ) + .padding(horizontal = 6.dp, vertical = 2.dp) + ) { + Text( + text = if (isCanary) "CANARY" else "BETA", + style = MaterialTheme.typography.labelSmall, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onPrimary + ) + } + } + } + Text( + text = "API ${deviceInfo.sdkInt} • Patch: ${ + DeviceUtils.formatSecurityPatch( + deviceInfo.securityPatch + ) + }", + style = MaterialTheme.typography.labelMedium, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = "Build: ${deviceInfo.display}", + style = MaterialTheme.typography.labelSmall, + fontWeight = FontWeight.Normal, + color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.8f) + ) + } + } + } + + Column( + modifier = Modifier + .background( + MaterialTheme.colorScheme.surfaceContainerHighest, + shape = Shapes.extraSmall + ) + .fillMaxWidth() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + // Storage and Memory Info + Row( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 8.dp), + horizontalArrangement = Arrangement.SpaceEvenly + ) { + // Storage Section + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_dns_24), + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(24.dp) + ) + Column(horizontalAlignment = Alignment.Start) { + Text( + text = stringResource(R.string.label_device_storage), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = DeviceUtils.formatHardwareSize(deviceInfo.totalStorage), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + + // Memory Section + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(12.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.rounded_memory_alt_24), + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + modifier = Modifier.size(24.dp) + ) + Column(horizontalAlignment = Alignment.Start) { + Text( + text = stringResource(R.string.label_device_ram), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + Text( + text = DeviceUtils.formatHardwareSize(deviceInfo.totalRam), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + } + } + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/DeviceSpecsCard.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/DeviceSpecsCard.kt new file mode 100644 index 000000000..914b50760 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/DeviceSpecsCard.kt @@ -0,0 +1,222 @@ +package com.sameerasw.essentials.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.sameerasw.essentials.data.model.DeviceSpecs +import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer +import com.sameerasw.essentials.ui.components.modifiers.shimmer +import com.sameerasw.essentials.ui.theme.Shapes + +@Composable +fun DeviceSpecsCard( + deviceSpecs: DeviceSpecs?, + isLoading: Boolean, + modifier: Modifier = Modifier +) { + RoundedCardContainer( + modifier = modifier.fillMaxWidth(), + ) { + // Section Header + SpecHeader("Device Specifications") + + if (isLoading) { + repeat(5) { + LoadingSpecSection() + } + } else if (deviceSpecs != null) { + deviceSpecs.detailSpec.forEach { category -> + SpecSection( + title = category.category, + specs = category.specifications.map { it.name to it.value } + ) + } + + if (deviceSpecs.imageUrls.isNotEmpty()) { + SpecFooter(deviceSpecs) + } + + } else { + // Fallback or empty state + Box( + modifier = Modifier + .fillMaxWidth() + .background( + MaterialTheme.colorScheme.surfaceContainerHighest, + shape = Shapes.extraSmall + ) + .padding(32.dp), + contentAlignment = androidx.compose.ui.Alignment.Center + ) { + Text( + text = "Specifications unavailable", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + } +} + +@Composable +private fun LoadingSpecSection() { + Column( + modifier = Modifier + .background( + MaterialTheme.colorScheme.surfaceContainerHighest, + shape = Shapes.extraSmall + ) + .fillMaxWidth() + .padding(16.dp) + ) { + Box( + modifier = Modifier + .width(100.dp) + .height(16.dp) + .clip(Shapes.extraSmall) + .shimmer() + ) + + Spacer(modifier = Modifier.height(12.dp)) + + repeat(3) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp) + ) { + Box( + modifier = Modifier + .width(80.dp) + .height(12.dp) + .clip(Shapes.extraSmall) + .shimmer() + ) + Spacer(modifier = Modifier.width(16.dp)) + Box( + modifier = Modifier + .weight(1f) + .height(12.dp) + .clip(Shapes.extraSmall) + .shimmer() + ) + } + } + } +} + +@Composable +private fun SpecHeader(title: String) { + Column( + modifier = Modifier + .background( + MaterialTheme.colorScheme.surfaceContainerHighest, + shape = Shapes.extraSmall + ) + .fillMaxWidth() + .padding(16.dp) + ) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + } +} + + +@Composable +private fun SpecFooter(deviceSpecs: DeviceSpecs?) { + Row( + modifier = Modifier + .background( + MaterialTheme.colorScheme.surfaceContainerHighest, + shape = Shapes.extraSmall + ) + .fillMaxWidth() + .padding(16.dp), + ) { + Text( + text = "Powered by", + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.primary + ) + + val uriHandler = androidx.compose.ui.platform.LocalUriHandler.current + Text( + text = "GSMArena.com", + style = MaterialTheme.typography.titleMedium.copy( + color = MaterialTheme.colorScheme.primary, + textDecoration = androidx.compose.ui.text.style.TextDecoration.Underline + ), + modifier = Modifier + .clickable { + uriHandler.openUri("https://www.gsmarena.com") + } + .padding(start = 8.dp) + ) + } +} + +@Composable +private fun SpecSection( + title: String, + specs: List> +) { + Column( + modifier = Modifier + .background( + MaterialTheme.colorScheme.surfaceContainerHighest, + shape = Shapes.extraSmall + ) + .fillMaxWidth() + .padding(16.dp) + ) { + Text( + text = title, + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.secondary + ) + + Spacer(modifier = Modifier.height(8.dp)) + + specs.forEach { (label, value) -> + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp) + ) { + Text( + text = label, + modifier = Modifier.width(100.dp), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + fontWeight = FontWeight.Medium + ) + Text( + text = value, + modifier = Modifier.weight(1f), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurface + ) + } + } + } +} 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 d09b3d118..d8d54672e 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 @@ -146,7 +146,10 @@ fun FeatureCard( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp) ) { - Text(text = resolvedTitle) + Text( + text = resolvedTitle, + color = MaterialTheme.colorScheme.onSurface + ) if (isBeta) { Card( colors = CardDefaults.cardColors( @@ -195,7 +198,8 @@ fun FeatureCard( .padding(end = 12.dp) .size(24.dp), painter = painterResource(id = R.drawable.rounded_chevron_right_24), - contentDescription = "More settings" + contentDescription = "More settings", + tint = MaterialTheme.colorScheme.onSurfaceVariant ) } diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/cards/IconToggleItem.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/cards/IconToggleItem.kt index 67aa29049..2e80a78b5 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/cards/IconToggleItem.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/cards/IconToggleItem.kt @@ -70,7 +70,8 @@ fun IconToggleItem( Column(modifier = Modifier.weight(1f)) { Text( text = title, - style = MaterialTheme.typography.bodyMedium + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurface ) Text( text = description, @@ -82,7 +83,8 @@ fun IconToggleItem( Text( text = title, style = MaterialTheme.typography.bodyMedium, - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), + color = MaterialTheme.colorScheme.onSurface ) } diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/containers/RoundedCardContainer.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/containers/RoundedCardContainer.kt index 2de3c94e2..6f294df16 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/components/containers/RoundedCardContainer.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/containers/RoundedCardContainer.kt @@ -9,13 +9,14 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @Composable fun RoundedCardContainer( modifier: Modifier = Modifier, - spacing: androidx.compose.ui.unit.Dp = 2.dp, - cornerRadius: androidx.compose.ui.unit.Dp = 24.dp, + spacing: Dp = 2.dp, + cornerRadius: Dp = 24.dp, containerColor: Color = Color.Transparent, content: @Composable ColumnScope.() -> Unit ) { @@ -27,4 +28,3 @@ fun RoundedCardContainer( content = content ) } - diff --git a/app/src/main/java/com/sameerasw/essentials/ui/components/modifiers/ShimmerModifier.kt b/app/src/main/java/com/sameerasw/essentials/ui/components/modifiers/ShimmerModifier.kt new file mode 100644 index 000000000..d47c76f69 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/ui/components/modifiers/ShimmerModifier.kt @@ -0,0 +1,55 @@ +package com.sameerasw.essentials.ui.components.modifiers + +import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.RepeatMode +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color + +fun Modifier.shimmer(): Modifier = composed { + val transition = rememberInfiniteTransition(label = "shimmer") + val translateAnim = transition.animateFloat( + initialValue = 0f, + targetValue = 1000f, + animationSpec = infiniteRepeatable( + animation = tween( + durationMillis = 1000, + easing = FastOutSlowInEasing + ), + repeatMode = RepeatMode.Restart + ), + label = "shimmer_translate" + ) + + val shimmerColors = remember { + listOf( + Color.Unspecified, + Color.Unspecified, + Color.Unspecified, + ) + }.let { + listOf( + MaterialTheme.colorScheme.surfaceContainerHighest, + MaterialTheme.colorScheme.surfaceContainerHigh, + MaterialTheme.colorScheme.surfaceContainerHighest, + ) + } + + this.drawBehind { + val brush = Brush.linearGradient( + colors = shimmerColors, + start = Offset(translateAnim.value - 500f, translateAnim.value - 500f), + end = Offset(translateAnim.value, translateAnim.value) + ) + drawRect(brush) + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt index 62d408239..6750f9777 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt @@ -26,6 +26,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Text +import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -37,16 +39,27 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.rounded.KeyboardArrowDown +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.OutlinedCard +import androidx.compose.ui.graphics.Color import androidx.core.net.toUri import androidx.fragment.app.FragmentActivity import com.sameerasw.essentials.FeatureSettingsActivity import com.sameerasw.essentials.R +import com.sameerasw.essentials.ui.activities.YourAndroidActivity import com.sameerasw.essentials.domain.registry.FeatureRegistry import com.sameerasw.essentials.domain.registry.PermissionRegistry import com.sameerasw.essentials.ui.components.FavoriteCarousel @@ -54,7 +67,9 @@ import com.sameerasw.essentials.ui.components.cards.FeatureCard import com.sameerasw.essentials.ui.components.containers.RoundedCardContainer import com.sameerasw.essentials.ui.components.sheets.PermissionItem import com.sameerasw.essentials.ui.components.sheets.PermissionsBottomSheet +import com.sameerasw.essentials.utils.DeviceUtils import com.sameerasw.essentials.utils.BiometricSecurityHelper +import com.sameerasw.essentials.utils.HapticUtil import com.sameerasw.essentials.viewmodels.MainViewModel import kotlinx.coroutines.delay @@ -762,9 +777,13 @@ fun SetupFeatures( } val scrollState = rememberScrollState() + val view = LocalView.current val focusRequester = remember { FocusRequester() } val focusManager = LocalFocusManager.current var isFocused by remember { mutableStateOf(false) } + + val pullRefreshState = rememberPullToRefreshState() + var isRefreshing by remember { mutableStateOf(false) } val allFeatures = FeatureRegistry.ALL_FEATURES @@ -776,21 +795,132 @@ fun SetupFeatures( onSearchHandled() } } + + LaunchedEffect(isRefreshing) { + if (isRefreshing) { + HapticUtil.performUIHaptic(view) + context.startActivity(Intent(context, YourAndroidActivity::class.java)) + delay(500) + isRefreshing = false + } + } - Column( - modifier = modifier - .fillMaxSize() - .verticalScroll(scrollState) - .pointerInput(Unit) { - detectTapGestures(onTap = { focusManager.clearFocus() }) - }, - verticalArrangement = Arrangement.Top, - horizontalAlignment = Alignment.Start - ) { - Spacer(modifier = Modifier.height(contentPadding.calculateTopPadding())) + var lastHapticBucket by remember { mutableStateOf(0) } + LaunchedEffect(pullRefreshState.distanceFraction) { + val fraction = pullRefreshState.distanceFraction + val currentBucket = (fraction * 10).toInt() - OutlinedTextField( - value = viewModel.searchQuery.value, + if (fraction >= 1f && lastHapticBucket < 10) { + HapticUtil.performUIHaptic(view) + lastHapticBucket = 10 + } else if (fraction < 1f && currentBucket != lastHapticBucket) { + if (currentBucket > lastHapticBucket) { + HapticUtil.performSliderHaptic(view) + } + lastHapticBucket = currentBucket + } + + if (fraction == 0f) { + lastHapticBucket = 0 + } + } + + PullToRefreshBox( + isRefreshing = isRefreshing, + onRefresh = { isRefreshing = true }, + state = pullRefreshState, + indicator = { }, + modifier = modifier.fillMaxSize() + ) { + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollState) + .pointerInput(Unit) { + detectTapGestures(onTap = { focusManager.clearFocus() }) + }, + verticalArrangement = Arrangement.Top, + horizontalAlignment = Alignment.Start + ) { + Spacer(modifier = Modifier.height(contentPadding.calculateTopPadding())) + + val deviceInfo = remember { DeviceUtils.getDeviceInfo(context) } + val fraction = pullRefreshState.distanceFraction + val thresholdPassed = fraction >= 1f + + val cardExpansion by androidx.compose.animation.core.animateDpAsState( + targetValue = 120.dp * fraction.coerceIn(0f, 1f), + animationSpec = androidx.compose.animation.core.spring(stiffness = androidx.compose.animation.core.Spring.StiffnessMediumLow), + label = "cardExpansion" + ) + + val containerColor by androidx.compose.animation.animateColorAsState( + targetValue = if (thresholdPassed) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surfaceContainerLow, + animationSpec = androidx.compose.animation.core.tween(durationMillis = 300), + label = "containerColor" + ) + + val contentColor by androidx.compose.animation.animateColorAsState( + targetValue = if (thresholdPassed) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.primary, + animationSpec = androidx.compose.animation.core.tween(durationMillis = 300), + label = "contentColor" + ) + + val arrowColor by androidx.compose.animation.animateColorAsState( + targetValue = if (thresholdPassed) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, + animationSpec = androidx.compose.animation.core.tween(durationMillis = 300), + label = "arrowColor" + ) + + val borderColor by androidx.compose.animation.animateColorAsState( + targetValue = if (thresholdPassed) Color.Transparent else MaterialTheme.colorScheme.outlineVariant, + animationSpec = androidx.compose.animation.core.tween(durationMillis = 300), + label = "borderColor" + ) + + // My Android + OutlinedCard( + onClick = { + HapticUtil.performUIHaptic(view) + context.startActivity(Intent(context, YourAndroidActivity::class.java)) + }, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) + .padding(top = 16.dp, bottom = 0.dp) + .height(64.dp + cardExpansion), + shape = MaterialTheme.shapes.extraLarge, + colors = CardDefaults.outlinedCardColors( + containerColor = containerColor, + contentColor = if (thresholdPassed) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurface + ), + border = BorderStroke(1.dp, borderColor) + ) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + imageVector = androidx.compose.material.icons.Icons.Rounded.KeyboardArrowDown, + contentDescription = null, + modifier = Modifier.size(24.dp).graphicsLayer { + rotationZ = (fraction * 180f).coerceIn(0f, 180f) + }, + tint = contentColor + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = deviceInfo.deviceName, + style = MaterialTheme.typography.titleMedium, + fontWeight = androidx.compose.ui.text.font.FontWeight.Medium, + color = if (thresholdPassed) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurface + ) + } + } + } + } + + OutlinedTextField( + value = viewModel.searchQuery.value, onValueChange = { new -> viewModel.onSearchQueryChanged(new, context) }, @@ -1002,11 +1132,69 @@ fun SetupFeatures( } } else null ) + } + } + + } else { + val topLevelFeatures = + allFeatures.filter { it.parentFeatureId == null && it.isVisibleInMain } + + if (topLevelFeatures.isNotEmpty()) { + RoundedCardContainer( + modifier = Modifier.padding(horizontal = 16.dp), + ) { + topLevelFeatures.forEachIndexed { index, feature -> + FeatureCard( + title = feature.title, + isEnabled = feature.isEnabled(viewModel), + onToggle = { enabled -> + BiometricSecurityHelper.runWithAuth( + activity = context as FragmentActivity, + feature = feature, + isToggle = true, + action = { + feature.onToggle(viewModel, context, enabled) + } + ) + }, + onClick = { + BiometricSecurityHelper.runWithAuth( + activity = context as FragmentActivity, + feature = feature, + action = { + feature.onClick(context, viewModel) + } + ) + }, + iconRes = feature.iconRes, + modifier = Modifier.padding(horizontal = 0.dp, vertical = 0.dp), + isToggleEnabled = feature.isToggleEnabled(viewModel, context), + showToggle = feature.showToggle, + hasMoreSettings = feature.hasMoreSettings, + onDisabledToggleClick = { + currentFeature = feature.title + showSheet = true + }, + description = feature.description, + isBeta = feature.isBeta, + isPinned = pinnedFeatureKeys.contains(feature.id), + onPinToggle = { + viewModel.togglePinFeature(feature.id) + }, + onHelpClick = if (feature.aboutDescription != null) { + { + selectedHelpFeature = feature + showHelpSheet = true + } + } else null + ) + } + } } } + + Spacer(modifier = Modifier.height(contentPadding.calculateBottomPadding())) } } - - Spacer(modifier = Modifier.height(contentPadding.calculateBottomPadding())) } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/sameerasw/essentials/utils/DeviceImageMapper.kt b/app/src/main/java/com/sameerasw/essentials/utils/DeviceImageMapper.kt new file mode 100644 index 000000000..72edce3b6 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/utils/DeviceImageMapper.kt @@ -0,0 +1,59 @@ +package com.sameerasw.essentials.utils + +import com.sameerasw.essentials.R + +object DeviceImageMapper { + /** + * Maps a device model string to a corresponding drawable resource. + * + * @param model The device model (e.g., from Build.MODEL) + * @return The resource ID of the matching drawable vector illustration. + */ + fun getDeviceDrawable(model: String): Int { + val m = model.lowercase() + return when { + // Pixel 6 series + m.contains("pixel 6a") -> R.drawable.pixel_6a + m.contains("pixel 6 pro") -> R.drawable.pixel_6pro + m.contains("pixel 6") -> R.drawable.pixel_6 + + // Pixel 7 series + m.contains("pixel 7a") -> R.drawable.pixel_7a + m.contains("pixel 7 pro") -> R.drawable.pixel_7pro + m.contains("pixel 7") -> R.drawable.pixel_7 + + // Pixel 8 series + m.contains("pixel 8a") -> R.drawable.pixel_8a + m.contains("pixel 8 pro") -> R.drawable.pixel_8pro + + // Pixel 9 & 10 series + m.contains("pixel 9a") || m.contains("pixel 10a") -> R.drawable.pixel_9a_10a + m.contains("pixel 9 pro") || m.contains("pixel 9 pro xl") || + m.contains("pixel 10") || m.contains("pixel 10 pro") || m.contains("pixel 10 pro xl") -> + R.drawable.pixel_9pro_9proxl_10_10pro_10proxl + + m.contains("pixel 9") -> R.drawable.pixel_9 + + // Default fallback + else -> R.drawable.rounded_android_24 + } + } + + /** + * Maps the Android version to a specific logo. + */ + fun getAndroidLogo(deviceInfo: DeviceInfo): Int { + val osName = deviceInfo.osCodename.lowercase() + val sdk = deviceInfo.sdkInt + + return when { + osName.contains("android 17") || osName.contains("cinnamonbun") || sdk >= 37 -> R.drawable.android17 + osName.contains("android 16") || osName.contains("baklava") || sdk >= 36 -> R.drawable.android16 + osName.contains("android 15") || osName.contains("vanilla") || sdk >= 35 -> R.drawable.android15 + osName.contains("android 14") || osName.contains("upside") || sdk >= 34 -> R.drawable.android14 + osName.contains("android 13") || osName.contains("tiramisu") || sdk >= 33 -> R.drawable.android13 + osName.contains("android 12") || osName.contains("snow cone") || sdk >= 31 -> R.drawable.android12 + else -> R.drawable.rounded_android_24 + } + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/utils/DeviceUtils.kt b/app/src/main/java/com/sameerasw/essentials/utils/DeviceUtils.kt new file mode 100644 index 000000000..fcdef2629 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/utils/DeviceUtils.kt @@ -0,0 +1,215 @@ +package com.sameerasw.essentials.utils + +import android.app.ActivityManager +import android.content.Context +import android.os.Build +import android.os.Environment +import android.os.StatFs +import android.provider.Settings +import org.json.JSONArray + +data class DeviceInfo( + val deviceName: String, + val brand: String = Build.BRAND, + val model: String = Build.MODEL, + val device: String = Build.DEVICE, + val hardware: String = Build.HARDWARE, + val product: String = Build.PRODUCT, + val androidVersion: String = Build.VERSION.RELEASE, + val sdkInt: Int = Build.VERSION.SDK_INT, + val manufacturer: String = Build.MANUFACTURER, + val board: String = Build.BOARD, + val display: String = Build.DISPLAY, + val fingerprint: String = Build.FINGERPRINT, + val totalStorage: Long, + val availableStorage: Long, + val totalRam: Long, + val availableRam: Long, + val securityPatch: String = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) Build.VERSION.SECURITY_PATCH else "Unknown", + val osCodename: String = Build.VERSION.CODENAME, + val buildTag: String = "", + val supportedDevices: String = "" +) + +object DeviceUtils { + fun getDeviceInfo(context: Context): DeviceInfo { + val deviceName = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + Settings.Global.getString(context.contentResolver, Settings.Global.DEVICE_NAME) + ?: Settings.Secure.getString(context.contentResolver, "bluetooth_name") + ?: Build.MODEL + } else { + Settings.Secure.getString(context.contentResolver, "bluetooth_name") ?: Build.MODEL + } + + val stat = StatFs(Environment.getDataDirectory().path) + val blockSize = stat.blockSizeLong + val totalStorage = stat.blockCountLong * blockSize + val availableStorage = stat.availableBlocksLong * blockSize + + val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + val memoryInfo = ActivityManager.MemoryInfo() + activityManager.getMemoryInfo(memoryInfo) + + val buildId = Build.DISPLAY + val buildInfo = findBuildInfo(context, buildId) ?: getBetaDetailsFromPrefix(buildId) + + val deviceSecurityPatch = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) Build.VERSION.SECURITY_PATCH else "Unknown" + val deviceOsCodename = Build.VERSION.CODENAME + val matchedVersion = buildInfo?.optString("version") + + val androidVersion = matchedVersion?.let { + if (it.startsWith("Android ")) { + val v = it.removePrefix("Android ").substringBefore(" ") + if (v.firstOrNull()?.isDigit() == true) v else null + } else null + } ?: Build.VERSION.RELEASE + + return DeviceInfo( + deviceName = deviceName, + totalStorage = totalStorage, + availableStorage = availableStorage, + totalRam = memoryInfo.totalMem, + availableRam = memoryInfo.availMem, + androidVersion = androidVersion, + securityPatch = buildInfo?.optString("patch")?.takeIf { it.isNotBlank() } + ?: deviceSecurityPatch, + osCodename = matchedVersion?.takeIf { it.isNotBlank() } ?: deviceOsCodename, + buildTag = buildInfo?.optString("tag") ?: "", + supportedDevices = buildInfo?.optString("devices") ?: "" + ) + } + + private fun getBetaDetailsFromPrefix(buildId: String): org.json.JSONObject? { + val build = buildId.uppercase() + val details = org.json.JSONObject() + return when { + build.startsWith("UPB") || build.startsWith("U1B") -> { + details.put("version", "Android 15 Beta") + details.put("tag", "Beta Prefix") + details + } + + build.startsWith("AP11") || build.startsWith("AP21") || build.startsWith("AP31") -> { + details.put("version", "Android 16 Beta") + details.put("tag", "Beta Prefix") + details + } + + build.startsWith("BP") -> { + // Check if it's likely a QPR beta based on the request (BPxx) + details.put("version", "Android 16 QPR Beta") + details.put("tag", "Platform/QPR Beta") + details + } + + build.startsWith("CP") -> { + details.put("version", "Android 17 Beta") + details.put("tag", "Developer Beta") + details + } + + build.startsWith("ZP") -> { + details.put("version", "Android Canary") + details.put("tag", "Canary Build") + details + } + + else -> null + } + } + + private fun findBuildInfo(context: Context, buildId: String): org.json.JSONObject? { + return try { + val jsonString = + context.assets.open("android_builds.json").bufferedReader().use { it.readText() } + val jsonArray = JSONArray(jsonString) + for (i in 0 until jsonArray.length()) { + val obj = jsonArray.getJSONObject(i) + if (obj.getString("build_id").equals(buildId, ignoreCase = true)) { + return obj + } + } + null + } catch (e: Exception) { + null + } + } + + fun formatSize(size: Long): String { + if (size <= 0) return "0 B" + val units = arrayOf("B", "KB", "MB", "GB", "TB") + val digitGroups = (Math.log10(size.toDouble()) / Math.log10(1024.0)).toInt() + return java.lang.String.format( + "%.1f %s", + size / Math.pow(1024.0, digitGroups.toDouble()), + units[digitGroups] + ) + } + + fun getOSName(sdkInt: Int, defaultCodename: String): String { + // Try to determine by version string first (most accurate for betas) + val name = defaultCodename.lowercase() + if (name.contains("17") || name.contains("cinnamon")) return "CinnamonBun" + if (name.contains("16") || name.contains("baklava")) return "Baklava" + + val dessert = when (sdkInt) { + 37 -> "CinnamonBun" + 36 -> "Baklava" + 35 -> "Vanilla Ice Cream" + 34 -> "Upside Down Cake" + 33 -> "Tiramisu" + 32 -> "Snow Cone v2" + 31 -> "Snow Cone" + 30 -> "R" + 29 -> "Q" + 28 -> "Pie" + 27 -> "Oreo" + 26 -> "Oreo" + else -> null + } + + if (dessert != null) return dessert + + // If SDK mapping fails, try to use the provided codename + if (defaultCodename.contains("Beta") || defaultCodename.contains("Canary") || defaultCodename.contains( + "QPR" + ) + ) { + return defaultCodename + } + + return defaultCodename.takeIf { it != "REL" } ?: "Android" + } + + fun formatHardwareSize(sizeBytes: Long): String { + if (sizeBytes <= 0) return "Unknown" + val rawGb = sizeBytes / (1024.0 * 1024.0 * 1024.0) + + // Known standard hardware sizes in GB + val standardSizes = + listOf(1, 2, 3, 4, 6, 8, 10, 12, 16, 18, 24, 32, 64, 128, 256, 512, 1024, 2048) + + // Find the closest standard size that is greater than or equal to our raw GB (allowing a 10% delta for OS reservations) + val roundedGb = standardSizes.firstOrNull { it >= rawGb * 0.9 } ?: Math.ceil(rawGb).toInt() + + return if (roundedGb >= 1024 && roundedGb % 1024 == 0) { + "${roundedGb / 1024} TB" + } else { + "$roundedGb GB" + } + } + + fun formatSecurityPatch(patchString: String): String { + if (patchString == "Unknown" || patchString.isBlank()) return patchString + return try { + val parser = java.text.SimpleDateFormat("yyyy-MM-dd", java.util.Locale.getDefault()) + val formatter = + java.text.SimpleDateFormat("d MMMM, yyyy", java.util.Locale.getDefault()) + val date = parser.parse(patchString) + if (date != null) formatter.format(date) else patchString + } catch (e: Exception) { + patchString + } + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/utils/GSMArenaService.kt b/app/src/main/java/com/sameerasw/essentials/utils/GSMArenaService.kt new file mode 100644 index 000000000..bc32610f9 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/utils/GSMArenaService.kt @@ -0,0 +1,106 @@ +package com.sameerasw.essentials.utils + +import com.sameerasw.essentials.data.model.DeviceSpecCategory +import com.sameerasw.essentials.data.model.DeviceSpecItem +import com.sameerasw.essentials.data.model.DeviceSpecs +import org.jsoup.Jsoup +import org.jsoup.nodes.Document + +object GSMArenaService { + private const val BASE_URL = "https://www.gsmarena.com" + + fun fetchSpecs(brand: String, model: String): DeviceSpecs? { + return try { + val query = "$brand $model".replace(" ", "+") + val searchUrl = "$BASE_URL/results.php3?sQuickSearch=yes&sName=$query" + + val searchDoc: Document = Jsoup.connect(searchUrl) + .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") + .timeout(30000) + .get() + + val firstDeviceElement = searchDoc.select(".makers li").firstOrNull() ?: return null + val firstDevicePath = firstDeviceElement.select("a").attr("href") + val searchThumbnail = firstDeviceElement.select("img").attr("src") + + val deviceUrl = + if (firstDevicePath.startsWith("/")) "$BASE_URL$firstDevicePath" else "$BASE_URL/$firstDevicePath" + + val deviceDoc: Document = Jsoup.connect(deviceUrl) + .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") + .timeout(30000) + .get() + + val name = deviceDoc.select(".specs-phone-name-title").text() + val tables = deviceDoc.select("table") + val detailSpecs = mutableListOf() + + // Scrape images + val imageUrls = mutableListOf() + + // Fix protocol helper + fun String.fixUrl(): String { + return when { + startsWith("//") -> "https:$this" + startsWith("/") -> "$BASE_URL$this" + else -> this + } + } + + // Fallback to search thumbnail + if (searchThumbnail.isNotBlank()) { + imageUrls.add(searchThumbnail.fixUrl()) + } + + // Get main image on device page (often higher quality) + deviceDoc.select(".specs-photo-main a img").firstOrNull()?.attr("src")?.let { + val url = it.fixUrl() + if (!imageUrls.contains(url)) imageUrls.add(0, url) + } + + // Get more images from gallery if available + val picturesLink = + deviceDoc.select(".specs-links a:contains(Pictures)").firstOrNull()?.attr("href") + if (picturesLink != null) { + val picturesUrl = picturesLink.fixUrl() + val picturesDoc = Jsoup.connect(picturesUrl) + .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") + .timeout(30000) + .get() + + picturesDoc.select("#pictures-list img").forEach { img -> + val src = img.attr("src").ifBlank { img.attr("data-src") } + if (src.isNotBlank()) { + val url = src.fixUrl() + if (!imageUrls.contains(url)) { + imageUrls.add(url) + } + } + } + } + + tables.forEach { table -> + val categoryName = table.select("th").firstOrNull()?.text() ?: "" + val rows = table.select("tr") + val specs = mutableListOf() + + rows.forEach { row -> + val label = row.select("td.ttl").text() + val value = row.select("td.nfo").text() + if (label.isNotBlank() && value.isNotBlank()) { + specs.add(DeviceSpecItem(label, value)) + } + } + + if (categoryName.isNotBlank() && specs.isNotEmpty()) { + detailSpecs.add(DeviceSpecCategory(categoryName, specs)) + } + } + + DeviceSpecs(name, detailSpecs, imageUrls) + } catch (e: Exception) { + e.printStackTrace() + null + } + } +} diff --git a/app/src/main/res/drawable/android12.png b/app/src/main/res/drawable/android12.png new file mode 100644 index 0000000000000000000000000000000000000000..ad1b6cfb7cc54b64c0ab84cf7671afc720a4583a GIT binary patch literal 34431 zcmYJb1ymc)_dcA2P_($aOK~gi4n;~^+$mOEixa#!#i3Zy;_mM5E$;5_mN$I9zyEp9 z*__=Zvv+3heV!{bn}n(=%f3Y>LIwZ;Z{_8r)Bpew>=Fb(d;>dOx&3{BoxtYeO5y-O zWi-l@5j^ZYg^8S+5&+;q2LM0<0f5&gkUapvg&hDmFa!Vuk^umG`?RKyLa;BSOf}`r zl#~GPVAqHMV2C9E47&otUPQ1L005T-1i-=0z}L^RK>zPs5FiWg|G$21h;mmO1OSKu zfo?UNDOC1yOXr#unAna6x2-g1N-*4`@cAZ5+s?j5qE*9_z z3YL{fv~84Bt>wdS?xd z=c4-6VvX{ZI1oHoj6w+fIiS)o=f|Q<_Rzj_k<#!V2huM#L{%~jUzl=BVy8+!Dttkq z#J-y6GaX=53;pHWkZsl=c7 z_^R{+YwV#l6KztBTCMy=v-zsloP`q%WBdMUY_$A9Yx{i?91MUT21X2}1$8PS=qJ7X zeyR$cz!GLaU?z#{x90Lbi2C&QyQYg3n2pa~tLi;vj17?u?>Y%b zG3jbFI)6=7{xF%83m8!M@Q!H{rbt+zMm4F&v5muWq;Fl3SCEf8Bp6ly;$`<`F+VZn z;56$}RSWhrFa+=}r`0o$J-|0MV5;crDwaL6ScDMve_|A`v9<|X;?E!7ea$&vSs(4DM)Qe5~ zmUVMnc{&|20z0LMvn9l!S~7WDdkBc}u^mfF2Bc<rlgD zaMMLQWUk@s1^!J?ezXMxBKQXY2LgEeCKXE;gfhDE1K1kIXf&-ggsLQgzYZ|k`tv2W9~8wYAn z@@VR)tUJqBYt(LsFDp%f@e!m7pc1IqQ(p&{HJ!e5x+N@_Y7#>7{5_VN$u*!L9B!7r z84+mut)CC?;;CEN!H%^D-{)gmil`rJIFJdf&6wq2|A~+jdEmIl>x_ueXn2tGvL*gt zdonJ1*{i)Jb%yX2K}|?vz&$#@Rb0h2?(4X@tVqxNY1bw$OBr9*&?_!PnO01$H|N@| zcvtTOy%}sVJhJ5ja6rY1FyT(qu1x$oWte4der@_i@s-wg0h zUQXLCC1|Ac5r8G+U=k4#-YStLclgs2Gk=feP?UE9BHe`VMQ{zKi4GaYiQGpuCay7EA;H`3ZtBtY z5Fl+vvkF|fu8b1#So(4yUcmJ{Qe91a^WaGO83Zz=0KjLVPB_Thfp^-T{u#-XrphYo zo_;QCh?#MuC#uQtl-u(xCNmEZ%LLb)0vO@68*7$JhcKdlUJj5C2viUNLmzsA*+2>~ zWr-oY85Kwqn`y~Rll)Y{wCCr^f%GJw_9T;MnLmDb&p@GS4Du+XQ06DzdvUUzO;eC?e}=6sFoamvtV4OR8V`svgo4$e2f4Ulgd zWPHF)3BZK)R@Ndo;K*lVUBYBMBy;skqsQ?7>92tssjL@FGPzNtac1Ws)}WmfU^McxT35g=F`X3O4}_-W{;=8Q>IbHjdU5EnX=E;XMW%T z7t{vkDVytZ%f6^Bv+3=w^iJEk(`u7S+jU97rjjhfL}epv<0$I;ZzY=MI`D0Bz5vALsS+E_|2M7pR)m7e=XzLCX->Ul3b@X9*k+0au zB+xUm4E}%aP3H42&hOne=9ASYtGQUGbXd>gBvK{20CIBYXf;QYV^X@ z7~5-X{{58!M~1;b2V?;B=IV61jO)*1kblH&5A?tGikP`&%iZ%**Py9I&i5}15QBpG zp4fHZ_w0Jr)kNq>cIiDojT!uGYVftat7Cr!#%6H!14V`X^0DMpz9;ScwWv(!yvi;@ zs$!>y;m#=>fyf)b6~wa(06bxK9`HqrHU7y#V(^jt*ULRzD{0iYSQf^sl;6QlQB)oK zu1eI;K*mV)PZb#+`m=xip?|2)frt<>5wIqvp)VmaXN?T9i$;OkErp(g2-v~e0A|Q5 z={K3XQid-~;dDjX=ahvJRuO^xoq2K=X}0*VM5V(36hD^w1a=+^FP-}GJ}0w_}CQ}t@ugLq{oDs^3KyQFj_1N46dOP z>kL}@ke^azyke8jDcXbAg$0S8pv?kES+IxCC)8VOaj#Tv`>LvCpidstf z+)~b3q*`+|OJ!U-(+f_25jXMfo>{W$_?hrZ>AWbfsOOCOojL)dqG)+WXgV0GiTFa& zxz3Kkz~LtuCN{Jpzt82f#kWr`%9ZoGuxGSmTjCY8Ki(9_E9p)ARV^0Sn2oVK=fY_* z4@3JG&hw&%1}uXI!DH^}6WLGQ&^h8g)x}l5eBU2A)IlynrI${Hxi&d;yO(sGv#$Z$ z%1SLE?@xR)vg1h08H~w|uXe{V%^_lqNcLmED0aC;2aR{zKBEg?R~OxU;CfeNfPTy{ zur*+#VJ5flFySK&H~g$49-RfsVU*os5VrvQDzFS`A#jdAsh~BgW7)mawmvi^-r~*A zv;g=HgN)xLHk}JP(chKau}g{dZ8U?oTzpYNn^Q8SYs4kjWwo z)kOS2s*KdjIhh{mzG_DXL5y}Z2{?QwUZhg|!`ggg_JGD}2tnrf8r5Sz$`+T{C2s zrw^yH8`BI}Fi+O|@i|{}lZh3BtSsq*@ z4ghC=pdeOH&PFmz%i}aLxc&UhGA`5Do-o790Kg>pW=trBF1W%7~ZvPk;65b5X`*~mp@A?Kt3xwx1bCFND#KIRI3$sxE zh2d~5-yi*0N(g=x7<&txbA`IMhpsITH|F#{b=1r@vV!RJ0Qfa~vfu8!-;a}2;?$1> z%|_A=^Dze5xZy&A{l&nDUrT`=!)t1@b)v0b`&fplCrZN(K{$|@x9$Po*vSm+ycLN0 zk}OJn*=HUk-$N`|5v6{JCE0a|!+K*kyH{Loh8{eoBf79%==p&#vMDp5eH!^;f%l{f z3%6*}g&ynct~LQ@N|C%Dg##rA;hA7Bg2utFPxa;^wbX{HLtz0h2QkK9~yxn=?m!8*JgV75+%K z6>aIc%8!uBYqz z7bgCP=X&;SM7{@j=a>m**j*w>&isfcxOIier!gJh)_aVH+Zd56M$8WOkrOM2+lL(qNQu1b{HI&iTy0bbnyNYajlg z?UWY9jpgvh!g}J>gMg4?;yH>px{hm-Vp-3A_Z9NCd^A+z8#RZ)*Xxb8h0EoP&$gpu z);;BOg!E0D1mlL#>x8f-=Ha48u(*wq!vYroOr->gL+)kyJ$2(<+3<9?iETTFz5nv2!3oAKZob{J)@!%n*joaQ z!_TcN2KlaQRWL$QsG@-u*eGn;llN;x&yGrT^ciJ|-#w?oZm~xg(W~A&4mN#?H@=VV z!)xb61+XH4C@>H~dOGmm8_OQoX{T*H*fAoDvScR6-o~q8WyQ2XEqfwXkr^qU6p_eg zK|l;d62Bv`T-1Bi&H5*6R9!gg6$(v&0(VDJ*}Z=DKcPD%&U;@8`io8v-_U_gPS}XV z={xp=s*!@0PGJ?(tjK3*;pd4(lAs%LAVVhutL8uUsmR`!SvhUH?|eVey`B}sNRwc2 zL&OEf$_ND77d&SR`F5YE)`|v327y$!#D6uP)S2W``bg`S7c`PAA^fK;u`CtP z8~C?agr1Gd`%lADDZJ$emttP)DF7V6IO1cO;j4>&H+_d&dashtpy^Hi!w#ln*nx&g zVO5w#0{Rty{KB=3>9#Y0@3zha6`q^HOwCVGfck#&?H?}X1c;#E|Z20RO`j@oZud3eMB=shz!Q9{1>;+#~~4Kkd2QBg*5IfMC|#1vFd3bW2*92^bXNpzV{&Wk*H9fW&v;{ zO8fa=9e}`>%I49pM+ya`i%%X|or)MRi=3rHv`F!l&3Ed}WOo80tBJL}+r{9&Ai{Ta z8;*P57k5Vx-6rKG=!XT0kcn-4e!XQNKu@^gIH z-O9EYJF#K>gC+|5<#-556g*6|z*BGyErlsBvW{-#AHSgUK$v3d-OHB+)YU^*hZ;W7B*B)#*U6S%&LPUi*x3Ohf_EEeF?hrPdh{2tF&CW1T{@ zi^Mq-Guo)wfIQ-i<8{#Bp8!EiVx&V7qoT)M+iY`wh4NQ3`3H4B4r%Xd2n?tobUohq zBa;7z&@3drTyS#eocol6Pw)7Z7;oK&$N-Q%*iHFplcqE?W$=y`@zfIxE5=^Qf`Pea z-r$os&6S>cO!>`2J{1{03t^}Dqqxvo_(5HQLvK1jYkIhwoFy#$A2- zLTZSmE#Kon$TYuaIBxI`1Y8ARya;FgU&Azj==A-3+ht8$8`(wK-GUbbK<_`ND3kN< zg|L452ABOE+$*9m7({_Sb;J&b)lVgCzE=K|pdMhBLvr)OFgXWSB{@@nLf4m00>T>5 zE2v)Ug~VmWKe4iU zd=~NSyz^gz&7%dfBt-sb!W+IcmH%bx_8MW|rr|yQJYb*m>$N=q^r7R&uP&FrX8Qst z_$ux0O0;T)a`YW2bt~^BkTz#!Mgq^udz#6--vBZGxPgSuO$a-xAf^(uph7-)NPu|m zr<3uBT$gvTkDoVKqD2B;eM}-?7?23hjQx&7RkfE9z_QU%&%n^L$fwSY{AvY=m?^fQ zRtKk_sbt>IKMdpm?OSL~M1R|6zGb*JS&)~FZ%*Jh_+IV`mZ!0)LPD2*@V^u|Z^ zN~Dwk-tgq0yd^SC#HT+?i`6}0qs)GZBnnJe*hZ`HmBmqpW z-Wje|8upNo<3L_~mT)xBPI;XFK5m{*|k+6=^sBfhvE~K7O4SPd7JheN9E`Qh;t=8K;TmVL#5!?N{C)0%*`O z6(7p0rQd}BhLIBqE1e&swSuJ@cYmq_T+0OS-=sw7_45DzKOZATfe&Kl`by>cZ;Xe2 zHD>tSNSLll1aLXS>`@T$t33}aikJ4%<>8sV{NH%#K=VD~@3%u6jn8X{Uq0un<6Kw$ z{0!JBYd$6zx~{AUp)q%*KuU+E~C`X?e=ON~a}dzUPE3 zv@Ypa5L0x4`E=Qb<8SJ&X0vBThO+Li(d^|_^5eS-?Pi-142}=)hfkK{p zv-n^2g+U2oHqo4MuFJQJl&F_z2eX@BYpmGNl{_*A=1}6`z2w+`%0~aMr6wpg_Kj9B z6W3UR%4oyBUq>BRNN|ugknj6*_F#U@xLh|u$ny(-#Cx>YX~Ck^2goKI!|d`2qRR=_ zwC%!HV;AQaj0IXq@n7%!{V?*0Bl52H54`BCD6a%dkb}^ty%{9?6na|CjLZ};@ea^D zQ+^-#GeU32`D@n@*)fb;FsX=)z@)F}v~N8Y%dU$>FsE35sImf?=j;y$x1t-9-#?kQa$lKf{b;3|^+fgz)y4U9ot*Y!e&p3l-n?A&;e z*ZOLc@8S_B3bU(Sju)=zzu1ex0D%-IfnxKyPaA%G{Q~5P-;SSP00dYC`(#kDr@xu@ z)jGk}#re-qW|4!Ke`(6pYP@~%5)FYrC{|?#j_B0xeMn&^W;~O?{Q&iA@|_^~Zy0{8 zpx8uEAf;d~^|zrFwCP$zgmRB3|KC82of zwCV_1AgqH45M|;$R1}r|cG`EsjRUeI+)jAfwlq<^5&mm%s%uNr>(>t!u5%G^DAWl;3%pr zIPlLSN0QrL%)?Ov6cps(I-}@vo|lvj=JtQbQYBEx5|hQ7|M|x#u%_$BuB_nJ;T4J$s+=GpKU%H#DNl2@tn<>B4XSI*04Lrh*F?&#Pc^%u zlsKHv+Z>5}|1$%H1-Qz{|C4Q>h#f3i36baSzz>1!7f{GUBxj%oR+0g8f^yfS}sk9TK4H&EYy`#&5A0~0OdInG*&I_vzBx! zEL&W4DS2sQ-u@nCsb{XV%_Du% zF}}z|w1tNzbMGr}3vvj4U-#t7A@N>yZLpk_xn+UYOhvba>~pov+BBhAVVB?}JD2@F z-Rv0g?GlQ&@Qi|GY*y;k5!kbnjI+CL+8@zTdJH;Rc%m3qf8Ye^Id^W4Bq@ZqH?Dmp z$y1E+mAt>#isKuapx=?V^erBek&n$!M6$1R(&_wi5#evKv9HGMIq2TUixmI6rAG0= zyDPEZ(YYf#`Ak@fNRs90hQ8b_c>HY4wA`;V<=Nxv(Yh$Ypq-}t^SAoBWXwP0>S5!U z(`$Pn#4QCedK9eeF9b6w;RU)-kFs6d!v=^ZAdPKMs%7R_Y$DV6E%)p&df&HHE${pj ztn-;pdQun0j4xW;-5Z(TF!8DPjD)`Y4dp7zClg3a@PC`Kys;g{vJn*Zb|dmHTIH%` z4p&}Ay36(D7X}EPjPz;&10|7G>$B$me0H5ubNMEF4K*VfnRe7E~Q9LNbbz2r;pB?RUfI5*BH?NndgYzdPUV9n$** zyHoejwV#O^y*Z`jVJuhd+ghI~>2z0#0>i?TJ5EyftL-z1%CXJWRj|!9#xeTo`u2F9 zvU#)Q@C_9^-c_Lqt+pvcOA2V&_3=zhAuL}RDAs}iL5O&^@2YFOp^2ACnLg(8A68Aj z0Cvi?uGly&pFv%#!=>D3jn+}5Du*TCRh}x|hogA~*Hfd#Bn?yNf}dVGP>e|#;VTf` zHVJF0-DyQ7xlHtVGqK1ScVC#9r)`RRV(b1Hdl$(+ zqMcp9KXzt8#3*3}m8#{g0iH_xxkgahX+OVdvnPIu^`F|!8BS{3vCo9okC!Iwk3|8b z*(;*XQFmJdD31cU44KuuHwN13KMYQNm49i>cN2?%q{a1O6`IW-TU>ozubmyvv#@&@ z2M4!m$#tjORt?<>4W;|d)a(r~$7@Rep;cBO-zhb69>j5IUyt#X|6+U`>6?FBy1iEm zCFA42=~C95RgKt6v40xIOb+RGOLX*d^ba9I7EDO5C?j*sZ^*jgJ1_Pg4_hVo5=-DhS4-L`Q zr=#ymZz^x7r{>*~KEzP*8l<#OG#Nmjl0IQr2zn@NV8(-#Wr;##@;NZ)UmgfaGut+f zHAG3EKnFF)SQQ>T_0i&Vo!;A9A-WfFW%Y_TIDHlI=B6gn1RFg?p&NPuD%4!iN)LQ_ z#zl-^tI8l7%SEDd0E>I;T%-JHU8tp%27z|;`@}fN7@kG5&W8MEd_VnCMZsSi#&F)@ z9%##1I|D`6w&o+-sC_fe$73wc*^7)rN4%9-m&vS6%k(*{a%bDg^EVYbS!vW$kF{E7 zPW(9@MR(&r@x!ChL=FDNeIiF#7w1m}2*N8u$+Z^l_ZetuAj@1F|*tEEmRQyxqek9K$2^$Mia|Q`XHddaHZlp^p zvpm!~wsutAyxll#hElyZPj%@?(jD)1=%qG{E6gN)QvO})c}nb2#+O9$sPF<|(7#pC z<~k+2>wPirL2=G>^1Jw~_Vl}nU{FH*eC~T;Jm2>IrtQ+lp}r*Dyv!?dyT-|)D1)Q? z>gotJ*E+TGUZw`5?(EvTc|Y-vW~{MdVRdUc-tfp=u%XqL`{3a2^D3uBROE?nt{0Vv z2GtLAr#^_#uKuqQ)(tmF$;v+1BnF1`_bB!R#z#a9X_jBdX;4_SfZr0Trhm2HewE(@ z#b4QZ!Iq-184+*8uaek7)zGQsv7?UOG5PPx4Z+!!k?)p+oEorn=-a9vjm`o5h>paS ziWCSIBBWiNo_r!bau)~Cg5SG8n1a*vV{NiUctpAXoe95m_-$__eZ{oM#^@p0Xvjrh znTRP`3jW3fQS*#waBz9o8%3sb| zf25*gu7Tw)t<2Qodn&b&EF96k(E^Z9DWwvg{jt~Od8~%$R~=9DPlX*SaM%^{0Uw@j zFYU5wp(q@WY`qmXK5x;6ACYZ(H~*Nm;IJ37Z_iT>Cbg5ox)dxC0+gEyI4ltX{;snM^VGT-@YZ z&+m|r1$s*GHcNgRd-$t0s72hSe68E^e#&DYCqKul?6<}B<-b#t4oYEpqvHxNMfb&f z$SiHvjQGv*R>6pJY;#2a;+F;Q0G)RBf&!z*_eGX?<0d^6Z@fD~*drO_YzFqeQOrW& zMy8NcL%chZuVD$mwvfXT@!UI9{5TV8=M|8To@^qU$a_RnG@DwX;Fr2KNd*8@_+pjZ z+CZEj<)X%qexQchFxLW`JP*&Sa;}u23Epreb@3q3+5JWouNrEMZoYoqey=$yVm!~N zBI>%&TRw=+Wp%YcOYhB}ly=jHrxj!WzHZzWiYu+YSVF!RbX(#${xwb%rN=6G6#ta` zeZi5k`4U;WBX6w|o3z8-(lN~$dW-?`ukOZ*vuV+gH1SIv%JG$cFZAi>;!~rx=;};I zwW7|gQ})Czg4zCli~g2P2GesIHRPezw+V}$Y}+FZPUCU&I6b+DS)b|rSeZJ|ss-GQ zHyf;eh0FiGL+)76DbGoU8hjUEe`MPc!)vzn`QeHXMkv16r-{_ybyj$Vk*-;z=%la? zopX)Opry*z_DOb6DTrczf3(+MJ>r<4&bivY(5O`K*SpXp?!C*UIdiOg+3=?J5Fy)Y zKPw~E`$G7qGZV#5sVcNIT^@P1P=~RIPMP~OD(Fg^zL(2wKrX>?$c9eYulIo2JW^oS zv7AA@Tc6S@vzb#^5g@HL-^gCKPe0eKe>y%g!nc=XKy79e{UaWG8r;j$froH&ni5x` zaeRUHDhBUSQ)ZwPW3Lp4hgy?>duwKW`m)f0qs>k14#5kJH0OU55F}ky8gUkcq~`M6$>7%O}f0SmrC0rk1#bU`?y__eypsr4q>p z*h~7-F~iD|&S>8%$nAPD)pV#6_HQD4Atm4U!2kART@E^f)HBn}T|%C|52Si9-rV8P zLgkWrOSZ$Rkt@!mmMbwca>MJAL?<0yp>edv=cbsz<=m~p4nfxIX=snBmjKHwkNI%A zx%V02g|%(=>BrsZ%Wkg%=XEt_$1sMF>wG$?bh^{lvfi=a#6OWbnVOi*b*rtE@x${- zn{q2(u>Q-t?I=S1d`&SzZhngi;zH7|wCk-L47k#eI&ka}3EkpxZ4K>Nukm%O#qGa5 zE0Gin%$!Uv?43bdA{cz%8e$y4l0JGZaDEKq^(P#K#Aomm^AY^ZWa;-4BfOFBapQ0tEmAF1f_GZuxaR4nzWnPccVc4kONwM~|kGA7>`Q&42`# zDc@WE{Yc4NPwQuxr0YPZ^ARJZ7(b?8(4QWLYso*DT`{{kFgv~OUr;xu%u3P;P5P>- z=^a>gtg%paAF(zsirp$F`T0TzeW*T_z3dHxR6t%d?;tvF!=<*<}7Y(|TRl(mK65evV}C zN5G%uxZ5jf# zjTWV?-9vSq9GEsr-0rx?Tm)hDf1YF-EHqeaSk-k1`u9sC~N%k00_+P$vKfGaPnTgi>F zR+WQeOA@)FxoZ9LTZPK;-Iq)Bf_u~Ofz-dO90?@q;rq;*nFNwi>5{!ubv)Yl0km0j zIV2Ge@`5T)zIBX46KcrX5P*L=45 z9lB|?jvSWqgFV-T2f$w$Uu4J2`6fkYU8wOgHi`Jz%JX>GqJ_ajaban$v(^HRe#v1_ zrM^1Itu%w{Nmv24&p(tb|C1}+l(ev5AdO_zNdEELvs>xkc0cwNCiwdKJQ6aA59v39 z;l7RMQT<*@SX<2?_WihBC_)gY7qJi&h3rHweL$f@M!VTA|E%m%9_j3%V}tLsnK4{D z&lctD`uNVSN=)^tXK;pIjpz0k1)}RbJ@g-89ILx6CXjTn zLDn1sEU1Ooy}cx;0-vdOnh#)6%u9WMs#1M`&`r^ND%Pd1{#6HNJ+Cfkdj}|Jolqq$ z=Jb)WeMil>l$d!erAJBEQB67K(YIKrd`0QFMqu^hPG^|us$tv0HsSir_ z=7o18`7z=Gmd*7hNRDL@kfa!YjuwEEf|$M=R%iO>TA4X|@dZfHzJ)&RpPYFtsfS6~ zq5nwwuJlu86@L4y<9=4$73zSMun~VI^;5c@u%xcw#Z>kY#L$UzSI;fqI}%MaTn}&M z1a+tXcU96P>NEBtRKr#W>JZt`2pD5M91LIG7@54|;lV{FVa>c~;kp(4$=O0qhut^d+xV+ETczn@9y&jWq zRl{_k*#DmVLHAxZw+3KY-JX*6@{bHhPWo6DIral8YMMrPbM%wmr@OJpP^I*b!U-UF zn~64#UQJtul3l)GI}i!M58Dj+Pa>W#r@Y>~@&+RcZCU^e{|ldmvY4JW-}Vq;?Q2@p zPX)r;kazkDJT^>1&1OxmEf;Dk6XV;*KDD{*4#wnTHmBz6TGXdZ?IzQ#wFaHF|Yz%8=uG_T`8;hDQ$VS%eVL`Ov9D&PgA*2s+Y8z z+3_wdidDfaYf|d&agUE0_J|b`rdo%e`|%$p-x=Tl3VRUNo_71~Kg*CFQT&r~0FvdG zdg&wo>NEd1fqT;srM-UaLqCC675#X0-X0V<=4;cgaoT4{&l5j|ZFrJ4?cZ-Csewh? zu6_O+6Xi8Yah70hKadgzQg@6&qAr1=+S^*d>f@B5N5BbeGuF_nmsqi?~ z8jn=DzVO&6$RCx|dg&T_bXNAXzPt=C61{e20%jJR&l{cI z7N`|%!)p6~=fJsWFs%oe;ayhDkoPI*-xS$5xS6(${5;M1QG7wy2`=4)Q79;wsc2R*aa=Ta|MNZ3AJw%FVVe$Z67@ zlv^z8<{i8}jb2Gxkwo(gqHowZR>n52dE^EO0_UhMUW}X=O0Cn`Bs(0Q-7`h$3;en> z*)rIDllMDiwTe(zhQsd-7=&&j;sz~)jp3T z!g@Llyv)RZO7Lbyv5OMvuO??Rh3VPo7H-SJw_igEL*uRRG)h?a*fUaZwr?N_3*{4f zH`W}lkg`f`8)e(-Q?i{+OPZr>T9_WN?HpB2+8W+Ip-Fdm14OJ|0h;)jo}ozhV_y@> z79*rQ4d$B|^@!H_E%V7$Y>HMwXHIN*nDVG$JE`JDaTvLi(#Plqeb(kDyYWUF+<5pZ zxm#yaaKDASU!3eYCtN|SOeh+V6q~|K`IO`@f5C)4ZV4a;p({bACwxtsF)u=?As_Ke_GT zrvLJ8JQ*C6-sWUkEx5OXCC1=w-leaSyvN=4< z;(jexW*G2bWGiK7*9ju)&*89=?bd&7q7i{{CWrou$%?#DeT}O6417Q zIwlSKv(Ey;SRnD=iPF-|M$pA4oZ+ zprw#><&EFNFibgmw@G?`!@vf=mYu%(=lA@KMBvLPK35ciA1~6GW4}F&Yb4G?zsT|K zibj<}$)}Gp%|nc80&(V!!vrJyZNs)Wvkk0KBUX2dI+j!-S-!c^uc`H16t2k~;>+EXos z+`ke&8~jj0d}q=$98^%tbPycev+=6h_}f$&qyoN+uS9|%p=wkGc;;W0f@{+Exrk%W zgO#lBScW;rre!V@)G8_v%J;64>y{h)n5QJ^=RfEon{%tW$pfm`u+alJ+z z=Ya;#_@g(FxIGy%n!_2b8Y7{T3K_G%1{w}WSJ(kKbe@2{Op-cuo5?qJTZ3@yvv*_ zKP1$UWtNzgTeTkKmq;!HsoQso`KgHZSdqyK!}I0LlDaGxlq=z_QYCrf9WwZVHYO{k z*Y0+V>a4`wkezXnI z`F=0G(A3oc;rdR99$t)SjF8hdQtGOmZ0igQd_mD+HbZzmX`C;+E9wf`mo>w(~=oZ)-soK@nDS{k_W1mRmNPR<-j(Y zabzH)B~DgRlZ`7V#gv|SqF3&Z8a&WZwRPJuGv=74&(xaqcAvMTGig!tBIxl*2h z8Rf$&faaVB@k+ddvQs$WM(+{}l63KH_x-udH-r(WK84JlZWLO>`+qe02XkA68lQ}* zdu#3(R2UnDc>wf}3Sz_G7|m^Tn!gQ+;iCTmXb$l$%JmghJlj#k-;sem=sR|x(?$6n zcuUcf3!)*Iupb@Rg5DFJlIJ~kDXvEZm`^;1ngZBx;GD~f1AqSbq7y9SnWYY!Geftg z*ksV_5A2X>I`S8)84gmDy7X7a>&mZ7q}(jw#@>EMog z!ASt_5c*8n^POUX7wEdQ*#MOsJ!nH8TK`qBsJ_0Q23MdU6qtUSVXJdoco-1*u1Tf8 z1HA*gcP*`?8V*@2b7|sl`F^DVe24l5Dz)WLPlhfju(`!#EIXzlN{9SlXh!Oi@^1s^ zWF;n@whB&;C#N7>83hU^8@4+m{THR&X54WPHdHt#)(WxErXgi4z8I@6cdgMFS-CNNziGzyfI{i`fhrw!De1Ddq1f zn&{@N5!?EQ4#9?d%WGvZj$8ux*bu4ds`z{CtJaE!@55(6Pkax!2|Y^uZnbS<-3ena z6CycZP51Gposw(@I!`nF*uwJg35JU{#53i%B*FTLWwnMgGf~_z^}$;fg*znY!4nS- znJY{Gqffwrxtma#E-IIbGvaqoh?8&_3~2z*&*O3tH#AMZj@8qzM|1OFnZjN;fDPT| z18=xlb6&aRo2RrmR0lDNBQOER7e2H#H-JO2I&BH|!#Dd(WQe#9V(!1)S?_-#Zj{zpY5=Gu?7dhq3LyLsu%k7?bs0fv)8f5~- z<#jiV>w|u4sL9aBuHbQTLqkwnefsQ|*7(^^i$<~6pbGyn(`jMB2oJ`%P3kqoJ$S>8 zF;l{mqPFj#t0Dli?)PVmFe+z~8z_P`_hi}x##-$h&9)Y~(LaxGmqk}-e(8J}80sT~ zUYRAz$5($>D=UA?p>Bm5Rw&P$19DScW>SMYTWd=+;3;g-(#;4QQB%-71Q9Y}&xCG? zbrer#RJYhDpHd=p=tDm^Spd-rX+SNc_KIfZ1FC0*62q!F+6bkNn2&j?fqnui!}gXD zN<9(#tvn^O^eC2Z=?4Q%sQ{{W180PYs2?DtMFO9-k0|NeBv1sMkMqed`Wb7G(=^1v zcOvVaW|`CK_T|M94QP6ir4V>()R|Bcj2~Yct48BItTfA!0ikX(8+i?21o248lzAMQa@nxY3lr8#wi7yt>zJno(Xg{w41i=NcfdgF1 z61Nq0%z(*{7aAdxp9;tX0scHcER^mL?IT=ohF+HaOx<~3V1X!p$0dEuxtxI_h6yMg z>uKKi3*L}Mx;$_vh3R~ayug%y@Cu%oD41-1A%_{DK9&B#wm&Bx1$*LW#Tgm+g0`a( zaI&;0H@~31?e&h0*sJ;8&Q2*N;>h`j#h!tM zmNKVsdZ-eA6_+d{psvu25GjrX5G{mr3Iile?qQYX1^nGc*=qRek#F1THo&#TxEgvb z=tGUBs)~Pe0OO7qV#V6ZCeDf5&@7Qup`TJR;G&c4$V5Jo*kPLcEyv|RFqw^kb8qNW zN5HO}sv9~e2+L4>%&JtuuNQF*;l}4;!7N1d27j%ly(RNk61u7w zg#qY@)nj6R;I^has+=b_-knnrA@FhE$U@>#CiV)S(}~JuZB|&&p$0_JV|@fY4Mi*$ z?+^smfzLcdP(0qBYkZ2yBJ!BHKx=p9rCnI6QGc_6@w8&3VgJ@Evv%^iXNJZ{Pp**D zSl}j5Nej4!s*2dTmY!qUgjF4FJ#X~sd7g=QBVNS*4NNUPfwvTE=)fB!xuIm`2FDJY z+4Dtydz6s3!DqK24yLnI(gj0^i<0dBUr$#Z7uEN)?=DM+bR(d2NQyK|mvl-iARrym zu?Qj{DcudCq#z(IodO~)-6h?z??u1AcR%~*z2}}gXU@!XW}cZ#*Gwk#4PVI(!@{yY z{X1{7RXHBjYQ5(e3*)M%0D)59qNX4JzEKa>1)7Z8*m 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/android14.png b/app/src/main/res/drawable/android14.png new file mode 100644 index 0000000000000000000000000000000000000000..5a21d7a61f6df8d04134544deb38cabe8f6e892d GIT binary patch literal 60611 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 z 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 S1TzBQe{xdFAF3ow{Qd`up~YqZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/android17.png b/app/src/main/res/drawable/android17.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d777188d03cbeba9bcd115b08a8f9506b49881 GIT binary patch literal 34220 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 KluMMXL;nwms-7SK literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/pixel_6.xml b/app/src/main/res/drawable/pixel_6.xml new file mode 100644 index 000000000..b60f86932 --- /dev/null +++ b/app/src/main/res/drawable/pixel_6.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_6a.xml b/app/src/main/res/drawable/pixel_6a.xml new file mode 100644 index 000000000..c950d9662 --- /dev/null +++ b/app/src/main/res/drawable/pixel_6a.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_6pro.xml b/app/src/main/res/drawable/pixel_6pro.xml new file mode 100644 index 000000000..3f6f1f912 --- /dev/null +++ b/app/src/main/res/drawable/pixel_6pro.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_7.xml b/app/src/main/res/drawable/pixel_7.xml new file mode 100644 index 000000000..a89a87854 --- /dev/null +++ b/app/src/main/res/drawable/pixel_7.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_7a.xml b/app/src/main/res/drawable/pixel_7a.xml new file mode 100644 index 000000000..0c926ce8e --- /dev/null +++ b/app/src/main/res/drawable/pixel_7a.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_7pro.xml b/app/src/main/res/drawable/pixel_7pro.xml new file mode 100644 index 000000000..807030cce --- /dev/null +++ b/app/src/main/res/drawable/pixel_7pro.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_8a.xml b/app/src/main/res/drawable/pixel_8a.xml new file mode 100644 index 000000000..b632c98df --- /dev/null +++ b/app/src/main/res/drawable/pixel_8a.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_8pro.xml b/app/src/main/res/drawable/pixel_8pro.xml new file mode 100644 index 000000000..53cb7823d --- /dev/null +++ b/app/src/main/res/drawable/pixel_8pro.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_9.xml b/app/src/main/res/drawable/pixel_9.xml new file mode 100644 index 000000000..f57952b71 --- /dev/null +++ b/app/src/main/res/drawable/pixel_9.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_9a_10a.xml b/app/src/main/res/drawable/pixel_9a_10a.xml new file mode 100644 index 000000000..4b3ed464d --- /dev/null +++ b/app/src/main/res/drawable/pixel_9a_10a.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/pixel_9pro_9proxl_10_10pro_10proxl.xml b/app/src/main/res/drawable/pixel_9pro_9proxl_10_10pro_10proxl.xml new file mode 100644 index 000000000..13ce16f01 --- /dev/null +++ b/app/src/main/res/drawable/pixel_9pro_9proxl_10_10pro_10proxl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/rounded_android_24.xml b/app/src/main/res/drawable/rounded_android_24.xml new file mode 100644 index 000000000..ea55a9981 --- /dev/null +++ b/app/src/main/res/drawable/rounded_android_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/rounded_memory_alt_24.xml b/app/src/main/res/drawable/rounded_memory_alt_24.xml new file mode 100644 index 000000000..c490af0b2 --- /dev/null +++ b/app/src/main/res/drawable/rounded_memory_alt_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cacda1d86..b0d22040e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1172,4 +1172,7 @@ Auto accessibility Automatically grants the accessibility permission on app launch if missing using WRITE_SECURE_SETTINGS. Help and Guides + Your Android + Storage + Memory \ No newline at end of file