From 87a9bf7c15ad33b4288db1f20fbaeec571c9bf95 Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Fri, 8 Jul 2022 20:31:22 -0700 Subject: [PATCH] Only bind fast scrollbar when attached if not already bound. This was overriding the previously bound RecyclerView if multiple were attached simultaneously. Instead, the appropriate container (All Apps / Widgets) should bind the active RecyclerView whenever it changes, with the onAttach serving as a fallback to ensure the scrollbar has an initial RV to avoid NPEs. Fix: 234591523 Bug: 235476489 Test: Manually checked All Apps from Launcher and Taskbar, as well as Widget bottom sheet. Also ran relevant Tapl tests. Change-Id: I06e27d2f66f9778087711a566817b6806ec7218b --- src/com/android/launcher3/FastScrollRecyclerView.java | 4 +++- .../android/launcher3/views/RecyclerViewFastScroller.java | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/FastScrollRecyclerView.java b/src/com/android/launcher3/FastScrollRecyclerView.java index 94903f278e..747b755263 100644 --- a/src/com/android/launcher3/FastScrollRecyclerView.java +++ b/src/com/android/launcher3/FastScrollRecyclerView.java @@ -57,7 +57,9 @@ public abstract class FastScrollRecyclerView extends RecyclerView { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); - bindFastScrollbar(); + if (mScrollbar == null || !mScrollbar.hasRecyclerView()) { + bindFastScrollbar(); + } } public void bindFastScrollbar() { diff --git a/src/com/android/launcher3/views/RecyclerViewFastScroller.java b/src/com/android/launcher3/views/RecyclerViewFastScroller.java index 11ca130179..6e6512d294 100644 --- a/src/com/android/launcher3/views/RecyclerViewFastScroller.java +++ b/src/com/android/launcher3/views/RecyclerViewFastScroller.java @@ -174,6 +174,11 @@ public class RecyclerViewFastScroller extends View { ta.recycle(); } + /** @return whether there is a RecyclerView bound to this scroller. */ + public boolean hasRecyclerView() { + return mRv != null; + } + public void setRecyclerView(FastScrollRecyclerView rv, TextView popupView) { if (mRv != null && mOnScrollListener != null) { mRv.removeOnScrollListener(mOnScrollListener);