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