diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java b/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java index 20c64031..b48b21e6 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/AppAdapter.java @@ -86,11 +86,9 @@ public class AppAdapter extends RecyclerView.Adapter impl rmList.add(info); continue; } - if (!preferences.getBoolean("show_modules", true)) { - if (info.applicationInfo.metaData != null && info.applicationInfo.metaData.containsKey("xposedmodule")) { - rmList.add(info); - continue; - } + if (AppHelper.forceWhiteList.contains(info.packageName)) { + rmList.add(info); + continue; } if (!preferences.getBoolean("show_system_apps", true) && (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { rmList.add(info); @@ -150,9 +148,6 @@ public class AppAdapter extends RecyclerView.Adapter impl if (itemId == R.id.item_show_system) { item.setChecked(!item.isChecked()); preferences.edit().putBoolean("show_system_apps", item.isChecked()).apply(); - } else if (itemId == R.id.item_show_modules) { - item.setChecked(!item.isChecked()); - preferences.edit().putBoolean("show_modules", item.isChecked()).apply(); } else if (!AppHelper.onOptionsItemSelected(item, preferences)) { return false; } @@ -162,7 +157,6 @@ public class AppAdapter extends RecyclerView.Adapter impl public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { inflater.inflate(R.menu.menu_app_list, menu); - menu.findItem(R.id.item_show_modules).setChecked(preferences.getBoolean("show_modules", true)); menu.findItem(R.id.item_show_system).setChecked(preferences.getBoolean("show_system_apps", true)); switch (preferences.getInt("list_sort", 0)) { case 7: diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java index b023d3ba..18b8ec19 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/SettingsActivity.java @@ -26,6 +26,7 @@ import io.github.lsposed.manager.Constants; import io.github.lsposed.manager.R; import io.github.lsposed.manager.databinding.ActivitySettingsBinding; import io.github.lsposed.manager.ui.widget.IntegerListPreference; +import io.github.lsposed.manager.util.ModuleUtil; public class SettingsActivity extends BaseActivity { private static final String KEY_PREFIX = SettingsActivity.class.getName() + '.'; @@ -110,6 +111,14 @@ public class SettingsActivity extends BaseActivity { public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.prefs); + SwitchPreferenceCompat prefHookModules = findPreference("hook_modules"); + if (prefHookModules != null) { + prefHookModules.setOnPreferenceChangeListener((preference, newValue) -> { + ModuleUtil.getInstance().reloadInstalledModules((Boolean) newValue); + return true; + }); + } + SwitchPreferenceCompat prefVerboseLogs = findPreference("disable_verbose_log"); if (prefVerboseLogs != null) { prefVerboseLogs.setChecked(Files.exists(disableVerboseLogsFlag)); diff --git a/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java b/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java index 72ea98b8..dc730b0c 100644 --- a/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java +++ b/app/src/main/java/io/github/lsposed/manager/util/ModuleUtil.java @@ -67,8 +67,12 @@ public final class ModuleUtil { return result; } - @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") public void reloadInstalledModules() { + reloadInstalledModules(prefs.getBoolean("hook_modules", true)); + } + + @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") + public void reloadInstalledModules(boolean hookModules) { synchronized (this) { if (isReloading) return; @@ -77,7 +81,6 @@ public final class ModuleUtil { Map modules = new HashMap<>(); AppHelper.forceWhiteList.clear(); - for (PackageInfo pkg : pm.getInstalledPackages(PackageManager.GET_META_DATA)) { ApplicationInfo app = pkg.applicationInfo; if (!app.enabled) @@ -86,7 +89,7 @@ public final class ModuleUtil { if (app.metaData != null && app.metaData.containsKey("xposedmodule")) { InstalledModule installed = new InstalledModule(pkg, false); modules.put(pkg.packageName, installed); - AppHelper.forceWhiteList.add(pkg.packageName); + if (hookModules) AppHelper.forceWhiteList.add(pkg.packageName); } } diff --git a/app/src/main/res/menu/menu_app_list.xml b/app/src/main/res/menu/menu_app_list.xml index 6b46732d..079695af 100644 --- a/app/src/main/res/menu/menu_app_list.xml +++ b/app/src/main/res/menu/menu_app_list.xml @@ -14,12 +14,6 @@ android:checked="true" android:title="@string/menu_show_system_apps" /> - -