From 2efb7b624721c54b825aa298dc4c1447550e3af7 Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Wed, 9 Mar 2022 01:16:11 -0800 Subject: [PATCH] Fixes a list equality check and adds a refreshResults() method. Previously, the lists being compared could point to the same object (e.g. from a separate class like ZeroStateResultProvider), thus always being equal. This prevented the RecyclerView from updating in certain cases. Also added an option new method to SearchUiManager which can be used to trigger a refresh. Bug: 207651359 Test: Manual Change-Id: I9c7f02fcd9dfb91326eccf1d4eb8692904702ab0 --- .../allapps/AlphabeticalAppsList.java | 23 +++++++++++-------- .../launcher3/allapps/SearchUiManager.java | 3 +++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java index a4a58b5f3a..16264dae31 100644 --- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java +++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java @@ -81,7 +81,7 @@ public class AlphabeticalAppsList implement private final List mFastScrollerSections = new ArrayList<>(); // The of ordered component names as a result of a search query - private ArrayList mSearchResults; + private final ArrayList mSearchResults = new ArrayList<>(); private BaseAllAppsAdapter mAdapter; private AppInfoComparator mAppNameComparator; private final int mNumAppsPerRow; @@ -171,30 +171,33 @@ public class AlphabeticalAppsList implement * Returns whether there are is a filter set. */ public boolean hasFilter() { - return (mSearchResults != null); + return !mSearchResults.isEmpty(); } /** * Returns whether there are no filtered results. */ public boolean hasNoFilteredResults() { - return (mSearchResults != null) && mAccessibilityResultsCount == 0; + return hasFilter() && mAccessibilityResultsCount == 0; } /** * Sets results list for search */ public boolean setSearchResults(ArrayList results) { - if (!Objects.equals(results, mSearchResults)) { - mSearchResults = results; - updateAdapterItems(); - return true; + if (Objects.equals(results, mSearchResults)) { + return false; } - return false; + mSearchResults.clear(); + if (results != null) { + mSearchResults.addAll(results); + } + updateAdapterItems(); + return true; } public boolean appendSearchResults(ArrayList results) { - if (mSearchResults != null && results != null && results.size() > 0) { + if (hasFilter() && results != null && results.size() > 0) { updateSearchAdapterItems(results, mSearchResults.size()); refreshRecyclerView(); return true; @@ -259,7 +262,7 @@ public class AlphabeticalAppsList implement } // Recompose the set of adapter items from the current set of apps - if (mSearchResults == null) { + if (mSearchResults.isEmpty()) { updateAdapterItems(); } } diff --git a/src/com/android/launcher3/allapps/SearchUiManager.java b/src/com/android/launcher3/allapps/SearchUiManager.java index f9055ee09a..6299657a55 100644 --- a/src/com/android/launcher3/allapps/SearchUiManager.java +++ b/src/com/android/launcher3/allapps/SearchUiManager.java @@ -65,4 +65,7 @@ public interface SearchUiManager { * sets highlight result's title */ default void setFocusedResultTitle(@Nullable CharSequence title) { } + + /** Refresh the currently displayed list of results. */ + default void refreshResults() {} }