From bbab64e00cad8543a9a24133fd58e3f418d03e1c Mon Sep 17 00:00:00 2001 From: fbaron Date: Tue, 30 May 2023 10:28:45 -0700 Subject: [PATCH] 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 --- .../widget/picker/WidgetsListAdapter.java | 28 ------------------- 1 file changed, 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 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 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 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 {