From 47f935dbbea621d9ae149fc469ec693155f32498 Mon Sep 17 00:00:00 2001 From: Stevie Kideckel Date: Wed, 26 May 2021 16:54:45 +0000 Subject: [PATCH] Add the DefaultItemAnimator, without change animations Change animations cause the addition of another view to be able to crossfade/interpolate the two. Disabling change animations prevents us losing the focus when a header row changes due to expanding or collapsing. Test: verified locally Bug: 183378651 Change-Id: I07837b41748b5206936321c08d376069fa81b363 --- .../launcher3/widget/picker/WidgetsFullSheet.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index c09beb6e16..fb6ac0e090 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -41,6 +41,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.RecyclerView; import com.android.launcher3.DeviceProfile; @@ -677,6 +678,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet private final int mAdapterType; private final WidgetsListAdapter mWidgetsListAdapter; + private final DefaultItemAnimator mWidgetsListItemAnimator; private WidgetsRecyclerView mWidgetsRecyclerView; @@ -703,13 +705,16 @@ public class WidgetsFullSheet extends BaseWidgetSheet default: break; } + mWidgetsListItemAnimator = new DefaultItemAnimator(); + // Disable change animations because it disrupts the item focus upon adapter item + // change. + mWidgetsListItemAnimator.setSupportsChangeAnimations(false); } 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.setItemAnimator(mWidgetsListItemAnimator); mWidgetsRecyclerView.setHeaderViewDimensionsProvider(WidgetsFullSheet.this); mWidgetsRecyclerView.setEdgeEffectFactory( ((TopRoundedCornerView) mContent).createEdgeEffectFactory());