diff options
author | fbaron <fbaron@google.com> | 2023-05-30 10:28:45 -0700 |
---|---|---|
committer | Federico Baron <fbaron@google.com> | 2023-05-30 18:46:55 +0000 |
commit | bbab64e00cad8543a9a24133fd58e3f418d03e1c (patch) | |
tree | df2cfb8d27a9f0b502df321b1930128da9a59c35 /src | |
parent | 57eaf86f8ded70c9bb448459e33621c4696a8755 (diff) | |
download | Launcher3-bbab64e00cad8543a9a24133fd58e3f418d03e1c.tar.gz |
Fix widget picker crash
It looks like if shouldClearVisibleEntries() evaluates to true and we clear mVisibleEntries, we get an Inconsistency IndexOutOfBounds error, the same as the one reported in the crash.
Bug: 276766307
Test: Verify that with these changes the widgets still update correctly when changing languages
Change-Id: I9f92e61d967aab2c8297cfc2fb4b04193df67650
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher3/widget/picker/WidgetsListAdapter.java | 28 |
1 files changed, 0 insertions, 28 deletions
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java index 723ea17147..8dd1de4ac8 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java @@ -42,7 +42,6 @@ import androidx.recyclerview.widget.RecyclerView.Adapter; import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.android.launcher3.R; -import com.android.launcher3.model.data.PackageItemInfo; import com.android.launcher3.recyclerview.ViewHolderBinder; import com.android.launcher3.util.LabelComparator; import com.android.launcher3.util.PackageUserKey; @@ -58,7 +57,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.Map; import java.util.OptionalInt; import java.util.function.IntSupplier; import java.util.function.Predicate; @@ -174,9 +172,6 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC mAllEntries.clear(); mAllEntries.add(new WidgetListSpaceEntry()); tempEntries.stream().sorted(mRowComparator).forEach(mAllEntries::add); - if (shouldClearVisibleEntries()) { - mVisibleEntries.clear(); - } updateVisibleEntries(); } @@ -426,29 +421,6 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC updateVisibleEntries(); } - /** - * Returns {@code true} if there is a change in {@link #mAllEntries} that results in an - * invalidation of {@link #mVisibleEntries}. e.g. there is change in the device language. - */ - private boolean shouldClearVisibleEntries() { - Map<PackageUserKey, PackageItemInfo> packagesInfo = - mAllEntries.stream() - .filter(entry -> entry instanceof WidgetsListHeaderEntry) - .map(entry -> entry.mPkgItem) - .collect(Collectors.toMap( - entry -> PackageUserKey.fromPackageItemInfo(entry), - entry -> entry)); - for (WidgetsListBaseEntry visibleEntry: mVisibleEntries) { - PackageUserKey key = PackageUserKey.fromPackageItemInfo(visibleEntry.mPkgItem); - PackageItemInfo packageItemInfo = packagesInfo.get(key); - if (packageItemInfo != null - && !visibleEntry.mPkgItem.title.equals(packageItemInfo.title)) { - return true; - } - } - return false; - } - /** Comparator for sorting WidgetListRowEntry based on package title. */ public static class WidgetListBaseRowEntryComparator implements Comparator<WidgetsListBaseEntry> { |