From bb173abbe4f9faf63fb6a12ac86f495cf0f29ed3 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Sat, 20 Feb 2021 21:13:40 +0800 Subject: [PATCH] [app] Fix scope list --- .../github/lsposed/manager/ConfigManager.java | 22 +++++++++--- .../manager/adapters/ScopeAdapter.java | 34 ++++++++++++++----- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/github/lsposed/manager/ConfigManager.java b/app/src/main/java/io/github/lsposed/manager/ConfigManager.java index f8eb25b0..36d57e18 100644 --- a/app/src/main/java/io/github/lsposed/manager/ConfigManager.java +++ b/app/src/main/java/io/github/lsposed/manager/ConfigManager.java @@ -29,6 +29,7 @@ import java.util.List; import io.github.lsposed.lspd.Application; import io.github.lsposed.lspd.utils.ParceledListSlice; +import io.github.lsposed.manager.adapters.ScopeAdapter; import io.github.lsposed.manager.receivers.LSPosedManagerServiceClient; public class ConfigManager { @@ -88,19 +89,30 @@ public class ConfigManager { } } - public static boolean setModuleScope(String packageName, List applications) { + public static boolean setModuleScope(String packageName, List applications) { try { - return LSPosedManagerServiceClient.setModuleScope(packageName, new ParceledListSlice<>(applications)); + List list = new ArrayList<>(); + applications.forEach(application -> { + Application app = new Application(); + app.userId = application.userId; + app.packageName = application.packageName; + list.add(app); + }); + return LSPosedManagerServiceClient.setModuleScope(packageName, new ParceledListSlice<>(list)); } catch (RemoteException | NullPointerException e) { Log.e(App.TAG, Log.getStackTraceString(e)); return false; } } - public static List getModuleScope(String packageName) { - List list = new ArrayList<>(); + public static List getModuleScope(String packageName) { + List list = new ArrayList<>(); try { - list.addAll(LSPosedManagerServiceClient.getModuleScope(packageName).getList()); + List applications = LSPosedManagerServiceClient.getModuleScope(packageName).getList(); + if (applications == null) { + return list; + } + applications.forEach(application -> list.add(new ScopeAdapter.ApplicationWithEquals(application))); } catch (RemoteException | NullPointerException e) { Log.e(App.TAG, Log.getStackTraceString(e)); } diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java index 56069d3a..8e668dc7 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/ScopeAdapter.java @@ -89,8 +89,8 @@ public class ScopeAdapter extends RecyclerView.Adapter private final String modulePackageName; private final String moduleName; private final SwitchBar masterSwitch; - private final List recommendedList = new ArrayList<>(); - private final List checkedList = new ArrayList<>(); + private final List recommendedList = new ArrayList<>(); + private final List checkedList = new ArrayList<>(); private final List searchList = new ArrayList<>(); private List showList = new ArrayList<>(); private ApplicationInfo selectedInfo; @@ -132,14 +132,12 @@ public class ScopeAdapter extends RecyclerView.Adapter activity.runOnUiThread(() -> masterSwitch.setChecked(enabled)); checkedList.addAll(ConfigManager.getModuleScope(modulePackageName)); - ArrayList installedList = new ArrayList<>(); + ArrayList installedList = new ArrayList<>(); List scopeList = ModuleUtil.getInstance().getModule(modulePackageName).getScopeList(); boolean emptyCheckedList = checkedList.isEmpty(); for (PackageInfo info : appList) { int uid = info.applicationInfo.uid; - Application application = new Application(); - application.userId = uid / 100000; - application.packageName = info.packageName; + ApplicationWithEquals application = new ApplicationWithEquals(info.packageName, uid / 100000); if (!installedList.contains(application)) installedList.add(application); @@ -170,7 +168,7 @@ public class ScopeAdapter extends RecyclerView.Adapter activity.onDataReady(); } - private boolean shouldHideApp(PackageInfo info, Application app) { + private boolean shouldHideApp(PackageInfo info, ApplicationWithEquals app) { if (info.packageName.equals(this.modulePackageName)) { return true; } @@ -567,9 +565,29 @@ public class ScopeAdapter extends RecyclerView.Adapter public static class AppInfo { public PackageInfo packageInfo; - public Application application; + public ApplicationWithEquals application; public ApplicationInfo applicationInfo; public String packageName; public CharSequence label = null; } + + public static class ApplicationWithEquals extends Application { + public ApplicationWithEquals(String packageName, int userId) { + this.packageName = packageName; + this.userId = userId; + } + + public ApplicationWithEquals(Application application) { + packageName = application.packageName; + userId = application.userId; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (!(obj instanceof Application)) { + return false; + } + return packageName.equals(((Application) obj).packageName) && userId == ((Application) obj).userId; + } + } }