From cccc407084ef6d0f39289ea8ee65096c9cac0897 Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Tue, 2 Feb 2021 14:17:42 +0800 Subject: [PATCH] Fix app list sort comparators (#48) * Update proguard rules * Fix app list sort comparators --- app/proguard-rules.pro | 10 ++-- .../manager/adapters/ScopeAdapter.java | 48 ++++++++++--------- .../lsposed/manager/util/ModuleUtil.java | 4 +- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 2b793c03..eac052a5 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -14,10 +14,14 @@ # Uncomment this to preserve the line number information for # debugging stack traces. -#-keepattributes SourceFile,LineNumberTable +-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile --keep class io.github.lsposed.manager.util.json.** {public *; } --keep class io.github.lsposed.manager.Constants { *; } \ No newline at end of file +-keep class io.github.lsposed.manager.Constants { *; } +-keepnames class io.github.lsposed.manager.adapters.* { *; } +-keepnames class io.github.lsposed.manager.receivers.* { *; } +-keepnames class io.github.lsposed.manager.ui.* { *; } +-keepnames class io.github.lsposed.manager.utils.* { *; } +-keepnames class io.github.lsposed.manager.* { *; } \ No newline at end of file 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 e022ba86..75c481df 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 @@ -147,40 +147,44 @@ public class ScopeAdapter extends RecyclerView.Adapter if (rmList.size() > 0) { fullList.removeAll(rmList); } - sortApps(); - showList = fullList; + showList = sortApps(fullList); activity.onDataReady(); } - private void sortApps() { - Comparator cmp = AppHelper.getAppListComparator(preferences.getInt("list_sort", 0), pm); - fullList.sort((a, b) -> { + private List sortApps(List list) { + Comparator comparator = AppHelper.getAppListComparator(preferences.getInt("list_sort", 0), pm); + Comparator frameworkComparator = (a, b) -> { + if (a.packageName.equals("android") == b.packageName.equals("android")) { + return comparator.compare(a, b); + } else if (a.packageName.equals("android")) { + return -1; + } else { + return 1; + } + }; + Comparator recommendedComparator = (a, b) -> { + boolean aRecommended = hasRecommended() && recommendedList.contains(a.packageName); + boolean bRecommended = hasRecommended() && recommendedList.contains(b.packageName); + if (aRecommended == bRecommended) { + return frameworkComparator.compare(a, b); + } else if (aRecommended) { + return -1; + } else { + return 1; + } + }; + list.sort((a, b) -> { boolean aChecked = checkedList.contains(a.packageName); boolean bChecked = checkedList.contains(b.packageName); if (aChecked == bChecked) { - if (hasRecommended()) { - boolean aRecommended = recommendedList.contains(a.packageName); - boolean bRecommended = recommendedList.contains(b.packageName); - if (aRecommended || bRecommended) { - if (aRecommended == bRecommended) { - return cmp.compare(a, b); - } else if (aRecommended) { - return -1; - } else { - return 1; - } - } - } - if (a.packageName.equals("android")) return -1; - if (b.packageName.equals("android")) return 1; - return cmp.compare(a, b); + return recommendedComparator.compare(a, b); } else if (aChecked) { return -1; } else { return 1; } - }); + return list; } private void checkRecommended() { 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 adbbdcda..f94c6389 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 @@ -272,7 +272,7 @@ public final class ModuleUtil { } public List getScopeList() { - if (this.scopeList == null) { + if (scopeList == null) { try { int scopeListResourceId = app.metaData.getInt("xposedscope"); if (scopeListResourceId != 0) { @@ -282,7 +282,7 @@ public final class ModuleUtil { e.printStackTrace(); } } - return this.scopeList; + return scopeList; } public PackageInfo getPackageInfo() {