From ef2845610ed735f609cb749ad7532b7d50e8c69c Mon Sep 17 00:00:00 2001 From: tehcneko <7764726+tehcneko@users.noreply.github.com> Date: Tue, 27 Apr 2021 22:38:15 +0800 Subject: [PATCH] [app] Fix usage of filter (#520) --- .../manager/adapters/ScopeAdapter.java | 21 ++++++++------ .../manager/ui/activity/ModulesActivity.java | 28 +++++++++++-------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java b/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java index d0d54209..9bafe14e 100644 --- a/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java +++ b/app/src/main/java/org/lsposed/manager/adapters/ScopeAdapter.java @@ -77,6 +77,7 @@ import org.lsposed.manager.util.ModuleUtil; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -100,7 +101,7 @@ public class ScopeAdapter extends RecyclerView.Adapter private final HashSet recommendedList = new HashSet<>(); private final HashSet checkedList = new HashSet<>(); private final List searchList = new ArrayList<>(); - private List showList = new ArrayList<>(); + private final List showList = new ArrayList<>(); private final SwitchBar.OnCheckedChangeListener switchBarOnCheckedChangeListener = new SwitchBar.OnCheckedChangeListener() { @Override @@ -182,7 +183,7 @@ public class ScopeAdapter extends RecyclerView.Adapter return preferences.getBoolean("filter_system_apps", true) && (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; } - private List sortApps(List list) { + private void 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")) { @@ -215,7 +216,6 @@ public class ScopeAdapter extends RecyclerView.Adapter return 1; } }); - return list; } private void checkRecommended() { @@ -546,7 +546,7 @@ public class ScopeAdapter extends RecyclerView.Adapter if (emptyCheckedList) { ConfigManager.setModuleScope(modulePackageName, checkedList); } - showList = sortApps(searchList); + sortApps(searchList); synchronized (dataReadyRunnable) { synchronized (this) { refreshing = false; @@ -588,10 +588,11 @@ public class ScopeAdapter extends RecyclerView.Adapter @Override protected FilterResults performFiltering(CharSequence constraint) { + FilterResults filterResults = new FilterResults(); + List filtered = new ArrayList<>(); if (constraint.toString().isEmpty()) { - showList = searchList; + filtered.addAll(searchList); } else { - ArrayList filtered = new ArrayList<>(); String filter = constraint.toString().toLowerCase(); for (AppInfo info : searchList) { if (lowercaseContains(info.label.toString(), filter) @@ -599,13 +600,17 @@ public class ScopeAdapter extends RecyclerView.Adapter filtered.add(info); } } - showList = filtered; } - return null; + filterResults.values = filtered; + filterResults.count = filtered.size(); + return filterResults; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { + showList.clear(); + //noinspection unchecked + showList.addAll((Collection) results.values); notifyDataSetChanged(); } } diff --git a/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java b/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java index 13db2945..d78abb77 100644 --- a/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java +++ b/app/src/main/java/org/lsposed/manager/ui/activity/ModulesActivity.java @@ -22,6 +22,7 @@ package org.lsposed.manager.ui.activity; import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS; +import android.annotation.SuppressLint; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -68,7 +69,6 @@ import org.lsposed.manager.util.GlideApp; import org.lsposed.manager.util.ModuleUtil; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -198,10 +198,10 @@ public class ModulesActivity extends ListActivity implements ModuleUtil.ModuleLi } private class ModuleAdapter extends BaseAdapter { - private List fullList, showList; + private final List searchList = new ArrayList<>(); + private List showList = new ArrayList<>(); ModuleAdapter() { - fullList = showList = Collections.emptyList(); refresh(); } @@ -317,9 +317,10 @@ public class ModulesActivity extends ListActivity implements ModuleUtil.ModuleLi private final Runnable reloadModules = new Runnable() { public void run() { - fullList = new ArrayList<>(moduleUtil.getModules().values()); + searchList.clear(); + searchList.addAll(moduleUtil.getModules().values()); Comparator cmp = AppHelper.getAppListComparator(0, pm); - fullList.sort((a, b) -> { + searchList.sort((a, b) -> { boolean aChecked = moduleUtil.isModuleEnabled(a.packageName); boolean bChecked = moduleUtil.isModuleEnabled(b.packageName); if (aChecked == bChecked) { @@ -330,7 +331,6 @@ public class ModulesActivity extends ListActivity implements ModuleUtil.ModuleLi return 1; } }); - showList = fullList; String queryStr = searchView != null ? searchView.getQuery().toString() : ""; runOnUiThread(() -> getFilter().filter(queryStr)); } @@ -363,25 +363,31 @@ public class ModulesActivity extends ListActivity implements ModuleUtil.ModuleLi @Override protected FilterResults performFiltering(CharSequence constraint) { + FilterResults filterResults = new FilterResults(); + List filtered = new ArrayList<>(); if (constraint.toString().isEmpty()) { - showList = fullList; + filtered.addAll(searchList); } else { - ArrayList filtered = new ArrayList<>(); String filter = constraint.toString().toLowerCase(); - for (ModuleUtil.InstalledModule info : fullList) { + for (ModuleUtil.InstalledModule info : searchList) { if (lowercaseContains(info.getAppName(), filter) || lowercaseContains(info.packageName, filter) || lowercaseContains(info.getDescription(), filter)) { filtered.add(info); } } - showList = filtered; } - return null; + filterResults.values = filtered; + filterResults.count = filtered.size(); + return filterResults; } + @SuppressLint("NotifyDataSetChanged") @Override protected void publishResults(CharSequence constraint, FilterResults results) { + showList.clear(); + //noinspection unchecked + showList.addAll((List) results.values); notifyDataSetChanged(); } }