From 128f3d8937498b48aa4c8221110a5830d8eaf728 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Tue, 23 Feb 2021 22:28:13 +0800 Subject: [PATCH] [core] [app] Filter out apps without any process for the scope list (#181) * Filter out apps without any process for the scope list * Bump ver Co-authored-by: LoveSy --- .../github/lsposed/manager/ConfigManager.java | 4 +- .../manager/adapters/ScopeAdapter.java | 5 +- .../LSPosedManagerServiceClient.java | 4 +- .../lsposed/manager/util/ModuleUtil.java | 2 +- .../main/res/layout/preference_material.xml | 72 +++++++++++++++ .../main/res/layout/preference_simplemenu.xml | 88 +++++++++++++++++++ .../lspd/nativebridge/ModuleLogger.java | 3 + .../lspd/service/LSPManagerService.java | 9 +- .../lsposed/lspd/service/PackageService.java | 11 ++- gradle.properties | 2 +- .../lsposed/lspd/ILSPManagerService.aidl | 2 +- 11 files changed, 186 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/layout/preference_material.xml create mode 100644 app/src/main/res/layout/preference_simplemenu.xml 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 ba458c3c..536b9f7b 100644 --- a/app/src/main/java/io/github/lsposed/manager/ConfigManager.java +++ b/app/src/main/java/io/github/lsposed/manager/ConfigManager.java @@ -63,10 +63,10 @@ public class ConfigManager { } } - public static List getInstalledPackagesFromAllUsers(int flags) { + public static List getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) { List list = new ArrayList<>(); try { - list.addAll(LSPosedManagerServiceClient.getInstalledPackagesFromAllUsers(flags)); + list.addAll(LSPosedManagerServiceClient.getInstalledPackagesFromAllUsers(flags, filterNoProcess)); } 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 8d096b3d..3dcf5411 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 @@ -127,7 +127,7 @@ public class ScopeAdapter extends RecyclerView.Adapter enabled = ModuleUtil.getInstance().isModuleEnabled(modulePackageName); activity.runOnUiThread(() -> masterSwitch.setChecked(enabled)); - List appList = ConfigManager.getInstalledPackagesFromAllUsers(PackageManager.GET_META_DATA); + List appList = ConfigManager.getInstalledPackagesFromAllUsers(PackageManager.GET_META_DATA, true); checkedList.clear(); recommendedList.clear(); searchList.clear(); @@ -181,6 +181,9 @@ public class ScopeAdapter extends RecyclerView.Adapter if (info.packageName.equals(BuildConfig.APPLICATION_ID)) { return true; } + if (info.packageName.equals("android")) { + return false; + } if (checkedList.contains(app)) { return false; } diff --git a/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java b/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java index af44e410..c1bb7078 100644 --- a/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java +++ b/app/src/main/java/io/github/lsposed/manager/receivers/LSPosedManagerServiceClient.java @@ -43,9 +43,9 @@ public class LSPosedManagerServiceClient { } - public static List getInstalledPackagesFromAllUsers(int flags) throws RemoteException, NullPointerException { + public static List getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) throws RemoteException, NullPointerException { ensureService(); - ParceledListSlice parceledListSlice = service.getInstalledPackagesFromAllUsers(flags); + ParceledListSlice parceledListSlice = service.getInstalledPackagesFromAllUsers(flags, false); // return parceledListSlice.getList(); } 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 daeb91dc..e54fe716 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 @@ -85,7 +85,7 @@ public final class ModuleUtil { } Map modules = new HashMap<>(); - for (PackageInfo pkg : ConfigManager.getInstalledPackagesFromAllUsers(PackageManager.GET_META_DATA)) { + for (PackageInfo pkg : ConfigManager.getInstalledPackagesFromAllUsers(PackageManager.GET_META_DATA, false)) { ApplicationInfo app = pkg.applicationInfo; if (!app.enabled || app.uid / 100000 != 0) continue; diff --git a/app/src/main/res/layout/preference_material.xml b/app/src/main/res/layout/preference_material.xml new file mode 100644 index 00000000..57d9b0a2 --- /dev/null +++ b/app/src/main/res/layout/preference_material.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/preference_simplemenu.xml b/app/src/main/res/layout/preference_simplemenu.xml new file mode 100644 index 00000000..0f772204 --- /dev/null +++ b/app/src/main/res/layout/preference_simplemenu.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/java/io/github/lsposed/lspd/nativebridge/ModuleLogger.java b/core/src/main/java/io/github/lsposed/lspd/nativebridge/ModuleLogger.java index 8f53c0f6..6afc9309 100644 --- a/core/src/main/java/io/github/lsposed/lspd/nativebridge/ModuleLogger.java +++ b/core/src/main/java/io/github/lsposed/lspd/nativebridge/ModuleLogger.java @@ -28,8 +28,11 @@ import android.app.ActivityThread; import android.os.ParcelFileDescriptor; import android.os.Process; +import androidx.annotation.Keep; + import io.github.lsposed.lspd.util.Utils; +@Keep public class ModuleLogger { static SimpleDateFormat logDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss", Locale.getDefault()); static int fd = -1; diff --git a/core/src/main/java/io/github/lsposed/lspd/service/LSPManagerService.java b/core/src/main/java/io/github/lsposed/lspd/service/LSPManagerService.java index e2d68504..4b55c119 100644 --- a/core/src/main/java/io/github/lsposed/lspd/service/LSPManagerService.java +++ b/core/src/main/java/io/github/lsposed/lspd/service/LSPManagerService.java @@ -23,18 +23,15 @@ import android.content.pm.PackageInfo; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; -import android.util.Log; import java.util.List; import de.robv.android.xposed.XposedBridge; +import io.github.lsposed.lspd.Application; import io.github.lsposed.lspd.BuildConfig; import io.github.lsposed.lspd.ILSPManagerService; -import io.github.lsposed.lspd.Application; import io.github.lsposed.lspd.utils.ParceledListSlice; -import static io.github.lsposed.lspd.service.ServiceManager.TAG; - public class LSPManagerService extends ILSPManagerService.Stub { LSPManagerService() { @@ -61,8 +58,8 @@ public class LSPManagerService extends ILSPManagerService.Stub { } @Override - public ParceledListSlice getInstalledPackagesFromAllUsers(int flags) throws RemoteException { - return PackageService.getInstalledPackagesFromAllUsers(flags); + public ParceledListSlice getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) throws RemoteException { + return PackageService.getInstalledPackagesFromAllUsers(flags, filterNoProcess); } @Override diff --git a/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java b/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java index e97693bb..0c94d00c 100644 --- a/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java +++ b/core/src/main/java/io/github/lsposed/lspd/service/PackageService.java @@ -33,7 +33,9 @@ import android.util.Pair; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import io.github.lsposed.lspd.Application; import io.github.lsposed.lspd.utils.ParceledListSlice; @@ -79,13 +81,18 @@ public class PackageService { return pm.getPackagesForUid(uid); } - public static ParceledListSlice getInstalledPackagesFromAllUsers(int flags) throws RemoteException { - ArrayList res = new ArrayList<>(); + public static ParceledListSlice getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) throws RemoteException { + List res = new ArrayList<>(); IPackageManager pm = getPackageManager(); if (pm == null) return ParceledListSlice.emptyList(); + if (filterNoProcess) flags = PackageManager.MATCH_DISABLED_COMPONENTS | + PackageManager.MATCH_UNINSTALLED_PACKAGES | PackageManager.GET_ACTIVITIES | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE | + PackageManager.GET_SERVICES | PackageManager.GET_RECEIVERS | PackageManager.GET_PROVIDERS | flags; for (int userId : UserService.getUsers()) { res.addAll(pm.getInstalledPackages(flags, userId).getList()); } + if (filterNoProcess) + res = res.stream().filter(pkgInfo -> !fetchProcesses(pkgInfo).isEmpty()).collect(Collectors.toList()); return new ParceledListSlice<>(res); } diff --git a/gradle.properties b/gradle.properties index df697787..d0b0f45e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,4 @@ androidMinSdkVersion=26 android.useAndroidX=true android.enableJetifier=true android.prefabVersion=1.1.2 -versionName=v1.0.0 +versionName=v1.0.1 diff --git a/manager-service/src/main/aidl/io/github/lsposed/lspd/ILSPManagerService.aidl b/manager-service/src/main/aidl/io/github/lsposed/lspd/ILSPManagerService.aidl index fdfcdca0..31261080 100644 --- a/manager-service/src/main/aidl/io/github/lsposed/lspd/ILSPManagerService.aidl +++ b/manager-service/src/main/aidl/io/github/lsposed/lspd/ILSPManagerService.aidl @@ -5,7 +5,7 @@ import io.github.lsposed.lspd.Application; interface ILSPManagerService { - ParceledListSlice getInstalledPackagesFromAllUsers(int flags) = 2; + ParceledListSlice getInstalledPackagesFromAllUsers(int flags, boolean filterNoProcess) = 2; String[] enabledModules() = 3;