From 1969e052d31052cd8ca27be9e52aa7e9f3f4dc34 Mon Sep 17 00:00:00 2001 From: Fox2Code Date: Sat, 5 Feb 2022 13:53:11 +0100 Subject: [PATCH] Improve full clear button, don't require reboot for just installed modules. (Fix #51) --- .../java/com/fox2code/mmm/ActionButtonType.java | 16 ++++++++++------ .../com/fox2code/mmm/manager/ModuleInfo.java | 4 ++++ .../com/fox2code/mmm/manager/ModuleManager.java | 10 ++++++++-- .../drawable/ic_baseline_delete_forever_24.xml | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/fox2code/mmm/ActionButtonType.java b/app/src/main/java/com/fox2code/mmm/ActionButtonType.java index 383d1e3..b96e8c1 100644 --- a/app/src/main/java/com/fox2code/mmm/ActionButtonType.java +++ b/app/src/main/java/com/fox2code/mmm/ActionButtonType.java @@ -122,9 +122,8 @@ public enum ActionButtonType { public void update(ImageButton button, ModuleHolder moduleHolder) { int icon = moduleHolder.hasFlag(ModuleInfo.FLAG_MODULE_UNINSTALLING) ? R.drawable.ic_baseline_delete_outline_24 : ( - // We can't trust active flag on first boot - MainApplication.isFirstBoot() || - moduleHolder.hasFlag(ModuleInfo.FLAG_MODULE_ACTIVE)) ? + !moduleHolder.hasFlag(ModuleInfo.FLAG_MODULE_UPDATING) || + moduleHolder.hasFlag(ModuleInfo.FLAGS_MODULE_ACTIVE)) ? R.drawable.ic_baseline_delete_24 : R.drawable.ic_baseline_delete_forever_24; button.setImageResource(icon); @@ -132,8 +131,14 @@ public enum ActionButtonType { @Override public void doAction(ImageButton button, ModuleHolder moduleHolder) { + if (!moduleHolder.hasFlag(ModuleInfo.FLAGS_MODULE_ACTIVE | + ModuleInfo.FLAG_MODULE_UNINSTALLING) && + moduleHolder.hasFlag(ModuleInfo.FLAG_MODULE_UPDATING)) { + doActionLong(button, moduleHolder); + return; + } if (!ModuleManager.getINSTANCE().setUninstallState(moduleHolder.moduleInfo, - !moduleHolder.moduleInfo.hasFlag(ModuleInfo.FLAG_MODULE_UNINSTALLING))) { + !moduleHolder.hasFlag(ModuleInfo.FLAG_MODULE_UNINSTALLING))) { Log.e("ActionButtonType", "Failed to switch uninstalled state!"); } update(button, moduleHolder); @@ -142,8 +147,7 @@ public enum ActionButtonType { @Override public boolean doActionLong(ImageButton button, ModuleHolder moduleHolder) { // We can't trust active flag on first boot - if (moduleHolder.moduleInfo.hasFlag(ModuleInfo.FLAG_MODULE_ACTIVE) - || MainApplication.isFirstBoot()) return false; + if (moduleHolder.moduleInfo.hasFlag(ModuleInfo.FLAGS_MODULE_ACTIVE)) return false; new AlertDialog.Builder(button.getContext()).setTitle(R.string.master_delete) .setPositiveButton(R.string.master_delete_yes, (v, i) -> { if (!ModuleManager.getINSTANCE().masterClear(moduleHolder.moduleInfo)) { diff --git a/app/src/main/java/com/fox2code/mmm/manager/ModuleInfo.java b/app/src/main/java/com/fox2code/mmm/manager/ModuleInfo.java index c9dad2c..3c0036b 100644 --- a/app/src/main/java/com/fox2code/mmm/manager/ModuleInfo.java +++ b/app/src/main/java/com/fox2code/mmm/manager/ModuleInfo.java @@ -11,6 +11,10 @@ public class ModuleInfo { public static final int FLAG_MODULE_ACTIVE = 0x04; public static final int FLAG_MODULE_UNINSTALLING = 0x08; public static final int FLAG_MODULE_UPDATING_ONLY = 0x10; + public static final int FLAG_MODULE_MAYBE_ACTIVE = 0x20; + + public static final int FLAGS_MODULE_ACTIVE = + FLAG_MODULE_ACTIVE | FLAG_MODULE_MAYBE_ACTIVE; public static final int FLAG_METADATA_INVALID = 0x80000000; diff --git a/app/src/main/java/com/fox2code/mmm/manager/ModuleManager.java b/app/src/main/java/com/fox2code/mmm/manager/ModuleManager.java index 0c52ab7..2348e70 100644 --- a/app/src/main/java/com/fox2code/mmm/manager/ModuleManager.java +++ b/app/src/main/java/com/fox2code/mmm/manager/ModuleManager.java @@ -72,6 +72,7 @@ public final class ModuleManager { } private void scanInternal() { + boolean firstBoot = MainApplication.isFirstBoot(); boolean firstScan = this.bootPrefs.getBoolean("mm_first_scan", true); SharedPreferences.Editor editor = firstScan ? this.bootPrefs.edit() : null; for (ModuleInfo v : this.moduleInfos.values()) { @@ -102,11 +103,16 @@ public final class ModuleManager { "/data/adb/modules/" + module + "/disable").exists(); if (disabled) { moduleInfo.flags |= ModuleInfo.FLAG_MODULE_DISABLED; + if (firstBoot && firstScan) { + editor.putBoolean("module_" + moduleInfo.id + "_active", true); + moduleInfo.flags |= ModuleInfo.FLAG_MODULE_MAYBE_ACTIVE; + } } else { if (firstScan) { moduleInfo.flags |= ModuleInfo.FLAG_MODULE_ACTIVE; editor.putBoolean("module_" + moduleInfo.id + "_active", true); - } else if (bootPrefs.getBoolean("module_" + moduleInfo.id + "_active", false)) { + } else if (!moduleInfo.hasFlag(ModuleInfo.FLAG_MODULE_MAYBE_ACTIVE) && + bootPrefs.getBoolean("module_" + moduleInfo.id + "_active", false)) { moduleInfo.flags |= ModuleInfo.FLAG_MODULE_ACTIVE; } } @@ -221,7 +227,7 @@ public final class ModuleManager { } public boolean masterClear(ModuleInfo moduleInfo) { - if (moduleInfo.hasFlag(ModuleInfo.FLAG_MODULE_ACTIVE)) return false; + if (moduleInfo.hasFlag(ModuleInfo.FLAGS_MODULE_ACTIVE)) return false; String escapedId = moduleInfo.id.replace("\\", "\\\\") .replace("\"", "\\\"").replace(" ", "\\ "); try { // Check for module that declare having file outside their own folder. diff --git a/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml b/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml index b0b1d8d..57c9f64 100644 --- a/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml +++ b/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24" - android:tint="?attr/colorControlNormal"> + android:tint="?attr/colorError">