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 341e95b7..228cff71 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 @@ -45,13 +45,11 @@ import io.github.lsposed.manager.util.GlideApp; public class AppAdapter extends RecyclerView.Adapter implements Filterable { protected AppListActivity activity; - private final ApplicationInfo.DisplayNameComparator displayNameComparator; protected List fullList, showList; private final DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); public List checkedList; private final PackageManager pm; private final ApplicationFilter filter; - private Comparator cmp; private final SharedPreferences preferences; AppAdapter(AppListActivity activity) { @@ -61,7 +59,6 @@ public class AppAdapter extends RecyclerView.Adapter impl checkedList = Collections.emptyList(); filter = new ApplicationFilter(); pm = activity.getPackageManager(); - displayNameComparator = new ApplicationInfo.DisplayNameComparator(pm); refresh(); } @@ -123,33 +120,7 @@ public class AppAdapter extends RecyclerView.Adapter impl } private void sortApps() { - switch (preferences.getInt("list_sort", 0)) { - case 7: - cmp = Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime)); - break; - case 6: - cmp = (PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime); - break; - case 5: - cmp = Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime)); - break; - case 4: - cmp = (PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime); - break; - case 3: - cmp = Collections.reverseOrder((a, b) -> a.packageName.compareTo(b.packageName)); - break; - case 2: - cmp = (a, b) -> a.packageName.compareTo(b.packageName); - break; - case 1: - cmp = Collections.reverseOrder((PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo)); - break; - case 0: - default: - cmp = (PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo); - break; - } + Comparator cmp = AppHelper.getAppListComparator(preferences.getInt("list_sort", 0), pm); fullList.sort((a, b) -> { boolean aChecked = checkedList.contains(a.packageName); boolean bChecked = checkedList.contains(b.packageName); @@ -173,31 +144,7 @@ public class AppAdapter extends RecyclerView.Adapter impl } else if (itemId == R.id.item_show_modules) { item.setChecked(!item.isChecked()); preferences.edit().putBoolean("show_modules", item.isChecked()).apply(); - } else if (itemId == R.id.item_sort_by_name) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 0).apply(); - } else if (itemId == R.id.item_sort_by_name_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 1).apply(); - } else if (itemId == R.id.item_sort_by_package_name) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 2).apply(); - } else if (itemId == R.id.item_sort_by_package_name_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 3).apply(); - } else if (itemId == R.id.item_sort_by_install_time) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 4).apply(); - } else if (itemId == R.id.item_sort_by_install_time_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 5).apply(); - } else if (itemId == R.id.item_sort_by_update_time) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 6).apply(); - } else if (itemId == R.id.item_sort_by_update_time_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 7).apply(); - } else { + } else if (!AppHelper.onOptionsItemSelected(item, preferences)) { return false; } refresh(); diff --git a/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java b/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java index b14b0490..db480bf0 100644 --- a/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java +++ b/app/src/main/java/io/github/lsposed/manager/adapters/AppHelper.java @@ -3,8 +3,12 @@ package io.github.lsposed.manager.adapters; import android.app.ActivityManager; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.net.Uri; +import android.view.MenuItem; import android.view.View; import android.widget.Toast; @@ -17,6 +21,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -133,6 +139,61 @@ public class AppHelper { }); appMenu.show(); } + + public static boolean onOptionsItemSelected(MenuItem item, SharedPreferences preferences) { + int itemId = item.getItemId(); + if (itemId == R.id.item_sort_by_name) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 0).apply(); + } else if (itemId == R.id.item_sort_by_name_reverse) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 1).apply(); + } else if (itemId == R.id.item_sort_by_package_name) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 2).apply(); + } else if (itemId == R.id.item_sort_by_package_name_reverse) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 3).apply(); + } else if (itemId == R.id.item_sort_by_install_time) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 4).apply(); + } else if (itemId == R.id.item_sort_by_install_time_reverse) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 5).apply(); + } else if (itemId == R.id.item_sort_by_update_time) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 6).apply(); + } else if (itemId == R.id.item_sort_by_update_time_reverse) { + item.setChecked(true); + preferences.edit().putInt("list_sort", 7).apply(); + } else { + return false; + } + return true; + } + + public static Comparator getAppListComparator(int sort, PackageManager pm) { + ApplicationInfo.DisplayNameComparator displayNameComparator = new ApplicationInfo.DisplayNameComparator(pm); + switch (sort) { + case 7: + return Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime)); + case 6: + return (PackageInfo a, PackageInfo b) -> Long.compare(a.lastUpdateTime, b.lastUpdateTime); + case 5: + return Collections.reverseOrder((PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime)); + case 4: + return (PackageInfo a, PackageInfo b) -> Long.compare(a.firstInstallTime, b.firstInstallTime); + case 3: + return Collections.reverseOrder((a, b) -> a.packageName.compareTo(b.packageName)); + case 2: + return (a, b) -> a.packageName.compareTo(b.packageName); + case 1: + return Collections.reverseOrder((PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo)); + case 0: + default: + return (PackageInfo a, PackageInfo b) -> displayNameComparator.compare(a.applicationInfo, b.applicationInfo); + } + } public static List getEnabledModuleList() { Path path = Paths.get(Constants.getEnabledModulesListFile()); diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java index 81d8f38b..cb388dfd 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/ModulesActivity.java @@ -1,7 +1,7 @@ package io.github.lsposed.manager.ui.activity; import android.content.Intent; -import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; @@ -34,7 +34,6 @@ import java.io.PrintWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; @@ -65,10 +64,8 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi private int installedXposedVersion; private ApplicationFilter filter; private SearchView searchView; - private ApplicationInfo.DisplayNameComparator displayNameComparator; private SearchView.OnQueryTextListener mSearchListener; private PackageManager pm; - private Comparator cmp; private final DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); private ModuleUtil moduleUtil; private ModuleAdapter adapter = null; @@ -89,66 +86,12 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi } } } - switch (preferences.getInt("list_sort", 0)) { - case 7: - cmp = Collections.reverseOrder((ApplicationInfo a, ApplicationInfo b) -> { - try { - return Long.compare(pm.getPackageInfo(a.packageName, 0).lastUpdateTime, pm.getPackageInfo(b.packageName, 0).lastUpdateTime); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - return displayNameComparator.compare(a, b); - } - }); - break; - case 6: - cmp = (ApplicationInfo a, ApplicationInfo b) -> { - try { - return Long.compare(pm.getPackageInfo(a.packageName, 0).lastUpdateTime, pm.getPackageInfo(b.packageName, 0).lastUpdateTime); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - return displayNameComparator.compare(a, b); - } - }; - break; - case 5: - cmp = Collections.reverseOrder((ApplicationInfo a, ApplicationInfo b) -> { - try { - return Long.compare(pm.getPackageInfo(a.packageName, 0).firstInstallTime, pm.getPackageInfo(b.packageName, 0).firstInstallTime); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - return displayNameComparator.compare(a, b); - } - }); - break; - case 4: - cmp = (ApplicationInfo a, ApplicationInfo b) -> { - try { - return Long.compare(pm.getPackageInfo(a.packageName, 0).firstInstallTime, pm.getPackageInfo(b.packageName, 0).firstInstallTime); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - return displayNameComparator.compare(a, b); - } - }; - break; - case 3: - cmp = Collections.reverseOrder((a, b) -> a.packageName.compareTo(b.packageName)); - break; - case 2: - cmp = (a, b) -> a.packageName.compareTo(b.packageName); - break; - case 1: - cmp = Collections.reverseOrder(displayNameComparator); - break; - case 0: - default: - cmp = displayNameComparator; - break; - } + Comparator cmp = AppHelper.getAppListComparator(preferences.getInt("list_sort", 0), pm); fullList.sort((a, b) -> { boolean aChecked = moduleUtil.isModuleEnabled(a.packageName); boolean bChecked = moduleUtil.isModuleEnabled(b.packageName); if (aChecked == bChecked) { - return cmp.compare(a.app, b.app); + return cmp.compare(a.pkg, b.pkg); } else if (aChecked) { return -1; } else { @@ -181,8 +124,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi filter = new ApplicationFilter(); moduleUtil = ModuleUtil.getInstance(); pm = getPackageManager(); - displayNameComparator = new ApplicationInfo.DisplayNameComparator(pm); - cmp = displayNameComparator; installedXposedVersion = Constants.getXposedApiVersion(); if (installedXposedVersion <= 0) { Snackbar.make(binding.snackbar, R.string.xposed_not_active, Snackbar.LENGTH_LONG).setAction(R.string.Settings, v -> { @@ -291,7 +232,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi public boolean onOptionsItemSelected(@NonNull MenuItem item) { Intent intent; int itemId = item.getItemId(); - boolean reload = false; if (itemId == R.id.export_enabled_modules) { if (ModuleUtil.getInstance().getEnabledModules().isEmpty()) { Snackbar.make(binding.snackbar, R.string.no_enabled_modules, Snackbar.LENGTH_SHORT).show(); @@ -316,40 +256,8 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi intent.putExtra(Intent.EXTRA_TITLE, "installed_modules.list"); startActivityForResult(intent, 43); return true; - } else if (itemId == R.id.item_sort_by_name) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 0).apply(); - reload = true; - } else if (itemId == R.id.item_sort_by_name_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 1).apply(); - reload = true; - } else if (itemId == R.id.item_sort_by_package_name) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 2).apply(); - reload = true; - } else if (itemId == R.id.item_sort_by_package_name_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 3).apply(); - reload = true; - } else if (itemId == R.id.item_sort_by_install_time) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 4).apply(); - reload = true; - } else if (itemId == R.id.item_sort_by_install_time_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 5).apply(); - reload = true; - } else if (itemId == R.id.item_sort_by_update_time) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 6).apply(); - reload = true; - } else if (itemId == R.id.item_sort_by_update_time_reverse) { - item.setChecked(true); - preferences.edit().putInt("list_sort", 7).apply(); - reload = true; } - if (reload) { + if (AppHelper.onOptionsItemSelected(item, preferences)) { moduleUtil.updateModulesList(false, null); reloadModules.run(); }