From 57973c328aab6bc23c422778b26c1ad33f00d5eb Mon Sep 17 00:00:00 2001 From: Alina Zaidi Date: Tue, 29 Jun 2021 11:58:11 +0100 Subject: [PATCH] Make sure search recycler view is bound to fast scroller if user is in search mode at the time of attachment of work/personal recycler view. Bug: 191980945 Test: Tested manually. 1) Open widget picker, scroll. 2) Enable dark mode, scroll. 3) Type search query, scroll. 4) Disable dark mode, scroll. 5) Have work profile in phone and repeat the above with work tab open and search. Change-Id: I106717091a88868c4bbe3fad0dd71c8344e9c8ed --- .../widget/picker/WidgetsFullSheet.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index 33f4e50219..6c2cca6024 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -129,6 +129,22 @@ public class WidgetsFullSheet extends BaseWidgetSheet } }; + private final OnAttachStateChangeListener mBindScrollbarInSearchMode = + new OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(View view) { + WidgetsRecyclerView searchRecyclerView = + mAdapters.get(AdapterHolder.SEARCH).mWidgetsRecyclerView; + if (mIsInSearchMode && searchRecyclerView != null) { + searchRecyclerView.bindFastScrollbar(); + } + } + + @Override + public void onViewDetachedFromWindow(View view) { + } + }; + private final int mTabsHeight; private final int mViewPagerTopPadding; private final int mSearchAndRecommendationContainerBottomMargin; @@ -303,6 +319,12 @@ public class WidgetsFullSheet extends BaseWidgetSheet protected void onDetachedFromWindow() { super.onDetachedFromWindow(); mActivityContext.getAppWidgetHost().removeProviderChangeListener(this); + mAdapters.get(AdapterHolder.PRIMARY).mWidgetsRecyclerView + .removeOnAttachStateChangeListener(mBindScrollbarInSearchMode); + if (mHasWorkProfile) { + mAdapters.get(AdapterHolder.WORK).mWidgetsRecyclerView + .removeOnAttachStateChangeListener(mBindScrollbarInSearchMode); + } } @Override @@ -752,6 +774,12 @@ public class WidgetsFullSheet extends BaseWidgetSheet mWidgetsRecyclerView.setHeaderViewDimensionsProvider(WidgetsFullSheet.this); mWidgetsRecyclerView.setEdgeEffectFactory( ((TopRoundedCornerView) mContent).createEdgeEffectFactory()); + // Recycler view binds to fast scroller when it is attached to screen. Make sure + // search recycler view is bound to fast scroller if user is in search mode at the time + // of attachment. + if (mAdapterType == PRIMARY || mAdapterType == WORK) { + mWidgetsRecyclerView.addOnAttachStateChangeListener(mBindScrollbarInSearchMode); + } mWidgetsListAdapter.setApplyBitmapDeferred(false, mWidgetsRecyclerView); mWidgetsListAdapter.setMaxHorizontalSpansPerRow(mMaxSpansPerRow); }