From e85b5565c6d5595de945059579e7b57644588c83 Mon Sep 17 00:00:00 2001 From: Steven Ng Date: Fri, 19 Mar 2021 23:52:12 +0000 Subject: [PATCH] A11y fix for all widgets tray (Part 2 / n) Fix the focus change when expanding / collapsing an app in the all widgets tray by adding stable ids and disable item animator. Item animator is also disable even accessibility isn't enabled because the default item animator also disrupts the header padding. It also makes the expansion / collapsing of widgets table very unpredicible. Test: Navigate all widgets tray with talkback on. Bug: 183120145 Change-Id: Ib1e2ea4d543757248e635a834204db688532cbfa --- .../android/launcher3/widget/picker/WidgetsFullSheet.java | 3 +++ .../android/launcher3/widget/picker/WidgetsListAdapter.java | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index dc375ca414..c1709f64f6 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -515,6 +515,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet apps.getIconCache(), /* iconClickListener= */ WidgetsFullSheet.this, /* iconLongClickListener= */ WidgetsFullSheet.this); + mWidgetsListAdapter.setHasStableIds(true); switch (mAdapterType) { case PRIMARY: mWidgetsListAdapter.setFilter(mPrimaryWidgetsFilter); @@ -530,6 +531,8 @@ public class WidgetsFullSheet extends BaseWidgetSheet void setup(WidgetsRecyclerView recyclerView) { mWidgetsRecyclerView = recyclerView; mWidgetsRecyclerView.setAdapter(mWidgetsListAdapter); + // Disables animation because it disrupts the item focus upon adapter item change. + mWidgetsRecyclerView.setItemAnimator(null); mWidgetsRecyclerView.setHeaderViewDimensionsProvider(WidgetsFullSheet.this); mWidgetsRecyclerView.setEdgeEffectFactory( ((TopRoundedCornerView) mContent).createEdgeEffectFactory()); diff --git a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java index cab1e02d9a..d841c64a3c 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java @@ -43,6 +43,7 @@ import com.android.launcher3.widget.model.WidgetsListHeaderEntry; import com.android.launcher3.widget.model.WidgetsListSearchHeaderEntry; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.function.Predicate; @@ -216,7 +217,9 @@ public class WidgetsListAdapter extends Adapter implements OnHeaderC @Override public long getItemId(int pos) { - return pos; + return Arrays.hashCode(new Object[]{ + mVisibleEntries.get(pos).mPkgItem.hashCode(), + getItemViewType(pos)}); } @Override