From fe6fe5367a5d212d117eeb350c3e56900a3e3706 Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Wed, 19 Feb 2025 23:18:45 -0800 Subject: [PATCH] feat: disallow enabling keep patched APKs when external cache directory doesn't exist --- .../com/aliucord/manager/manager/PathManager.kt | 7 +++---- .../manager/manager/PreferencesManager.kt | 2 ++ .../manager/ui/screens/settings/SettingsModel.kt | 15 +++++++++++++++ .../manager/ui/screens/settings/SettingsScreen.kt | 2 +- app/src/main/res/values/strings.xml | 1 + 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt b/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt index 19a3a62..d71049c 100644 --- a/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt +++ b/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt @@ -34,14 +34,13 @@ class PathManager( val keystoreFile = aliucordDir.resolve("ks.keystore") /** - * Use the external cache directory (`/storage/emulated/0/Android/data/com.aliucord.manager/cache`) + * Uses the external cache directory (`/storage/emulated/0/Android/data/com.aliucord.manager/cache`) * when dev mode or preserving APKs is enabled. Otherwise, default to internal app cache. */ - private val cacheDir + val cacheDir: File get() = when (prefs.devMode || prefs.keepPatchedApks) { false -> context.cacheDir - true -> context.externalCacheDir - ?: throw Error("External cache directory isn't supported") + true -> context.externalCacheDir ?: context.cacheDir } /** diff --git a/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt b/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt index ba70699..994e74e 100644 --- a/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt +++ b/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt @@ -1,9 +1,11 @@ package com.aliucord.manager.manager import android.content.SharedPreferences +import androidx.compose.runtime.Stable import com.aliucord.manager.manager.base.BasePreferenceManager import com.aliucord.manager.ui.components.Theme +@Stable class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager(preferences) { var theme by enumPreference("theme", Theme.DARK) var dynamicColor by booleanPreference("dynamic_color", false) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt index 2e95a88..c8fb1f1 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt @@ -9,6 +9,8 @@ import com.aliucord.manager.manager.PreferencesManager import com.aliucord.manager.ui.components.Theme import com.aliucord.manager.util.launchBlock import com.aliucord.manager.util.showToast +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch class SettingsModel( private val application: Application, @@ -29,6 +31,19 @@ class SettingsModel( preferences.theme = theme } + fun setKeepPatchedApks(value: Boolean) { + // Disallow setting keep APKs if externalCacheDir doesn't exist (some ROMs) + if (value && application.externalCacheDir == null) { + screenModelScope.launch { + delay(300) + preferences.keepPatchedApks = false + application.showToast(R.string.setting_keep_patched_apks_error) + } + } + + preferences.keepPatchedApks = value + } + fun clearCacheDir() = screenModelScope.launchBlock { application.externalCacheDir?.deleteRecursively() application.showToast(R.string.action_cleared_cache) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt index 9ba153c..50bede3 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsScreen.kt @@ -98,7 +98,7 @@ class SettingsScreen : Screen, Parcelable { secondaryLabel = stringResource(R.string.setting_keep_patched_apks_desc), icon = { Icon(painterResource(R.drawable.ic_delete_forever), null) }, pref = preferences.keepPatchedApks, - onPrefChange = { preferences.keepPatchedApks = it }, + onPrefChange = model::setKeepPatchedApks, ) var clearedCache by rememberSaveable { mutableStateOf(false) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 68d0973..166f960 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,7 @@ Enables Material You theming on Android 12+ Keep patched APKs Keep all patched files and APKs after installing for debugging. + This device does not support external cache directories! System Dark