Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d18ad48 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Simplifying some scrollbar binding logic in all-apps

Bug: 256684299
Test: Manual
Change-Id: I1cee6cb783f0f805d9a0f0a4b2b668a709cacf1a
parent 192e7afc
Loading
Loading
Loading
Loading
+3 −16
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityNodeInfo;

import androidx.annotation.Nullable;
@@ -53,21 +52,9 @@ public abstract class FastScrollRecyclerView extends RecyclerView {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        if (mScrollbar == null || !mScrollbar.hasRecyclerView()) {
            bindFastScrollbar();
        }
    }

    public void bindFastScrollbar() {
        ViewGroup parent = (ViewGroup) getParent().getParent();
        if (parent.findViewById(R.id.fast_scroller) == null) {
            parent = (ViewGroup) parent.getParent();
        }
        mScrollbar = parent.findViewById(R.id.fast_scroller);
        mScrollbar.setRecyclerView(this, parent.findViewById(R.id.fast_scroller_popup));
    public void bindFastScrollbar(RecyclerViewFastScroller scrollbar) {
        mScrollbar = scrollbar;
        mScrollbar.setRecyclerView(this);
        onUpdateScrollbar(0);
    }

+8 −8
Original line number Diff line number Diff line
@@ -134,6 +134,8 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
    protected AllAppsPagedView mViewPager;
    protected FloatingHeaderView mHeader;
    protected View mBottomSheetBackground;
    protected RecyclerViewFastScroller mFastScroller;

    /**
     * View that defines the search box. Result is rendered inside {@link #mSearchRecyclerView}.
     */
@@ -219,6 +221,8 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
        mBottomSheetBackground = findViewById(R.id.bottom_sheet_background);
        mBottomSheetHandleArea = findViewById(R.id.bottom_sheet_handle_area);
        mSearchRecyclerView = findViewById(R.id.search_results_list_view);
        mFastScroller = findViewById(R.id.fast_scroller);
        mFastScroller.setPopupView(findViewById(R.id.fast_scroller_popup));

        // Add the search box above everything else.
        mSearchContainer = inflateSearchBox();
@@ -302,6 +306,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
        if (!mSearchTransitionController.isRunning() && goingToSearch == isSearching()) {
            return;
        }
        mFastScroller.setVisibility(goingToSearch ? INVISIBLE : VISIBLE);
        if (goingToSearch) {
            // Fade out the button to pause work apps.
            mWorkManager.onActivePageChanged(SEARCH);
@@ -408,7 +413,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
            return;
        }
        if (mAH.get(currentActivePage).mRecyclerView != null) {
            mAH.get(currentActivePage).mRecyclerView.bindFastScrollbar();
            mAH.get(currentActivePage).mRecyclerView.bindFastScrollbar(mFastScroller);
        }
        // Header keeps track of active recycler view to properly render header protection.
        mHeader.setActiveRV(currentActivePage);
@@ -491,7 +496,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
        if (isSearchBarOnBottom()) {
            // Keep the scroller above the search bar.
            RelativeLayout.LayoutParams scrollerLayoutParams =
                    (LayoutParams) findViewById(R.id.fast_scroller).getLayoutParams();
                    (LayoutParams) mFastScroller.getLayoutParams();
            scrollerLayoutParams.addRule(RelativeLayout.ABOVE, R.id.search_container_all_apps);
            scrollerLayoutParams.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            scrollerLayoutParams.bottomMargin = getResources().getDimensionPixelSize(
@@ -1052,12 +1057,6 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
                : mViewPager == null ? AdapterHolder.MAIN : mViewPager.getNextPage();
    }

    /** The scroll bar for the active apps recycler view. */
    public RecyclerViewFastScroller getScrollBar() {
        AllAppsRecyclerView rv = getActiveAppsRecyclerView();
        return rv == null ? null : rv.getScrollbar();
    }

    /**
     * Adds an update listener to animator that adds springs to the animation.
     */
@@ -1249,6 +1248,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
        void setup(@NonNull View rv, @Nullable Predicate<ItemInfo> matcher) {
            mAppsList.updateItemFilter(matcher);
            mRecyclerView = (AllAppsRecyclerView) rv;
            mRecyclerView.bindFastScrollbar(mFastScroller);
            mRecyclerView.setEdgeEffectFactory(createEdgeEffectFactory());
            mRecyclerView.setApps(mAppsList);
            mRecyclerView.setLayoutManager(mLayoutManager);
+0 −5
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.RecyclerViewFastScroller;

import java.util.List;

@@ -274,10 +273,6 @@ public class AllAppsRecyclerView extends FastScrollRecyclerView {
                : getRootWindowInsets().getSystemWindowInsetBottom();
    }

    public RecyclerViewFastScroller getScrollbar() {
        return mScrollbar;
    }

    @Override
    public boolean hasOverlappingRendering() {
        return false;
+7 −9
Original line number Diff line number Diff line
@@ -171,12 +171,14 @@ public class RecyclerViewFastScroller extends View {
        ta.recycle();
    }

    /** @return whether there is a RecyclerView bound to this scroller. */
    public boolean hasRecyclerView() {
        return mRv != null;
    /** Sets the popup view to show while the scroller is being dragged */
    public void setPopupView(TextView popupView) {
        mPopupView = popupView;
        mPopupView.setBackground(
                new FastScrollThumbDrawable(mThumbPaint, Utilities.isRtl(getResources())));
    }

    public void setRecyclerView(FastScrollRecyclerView rv, TextView popupView) {
    public void setRecyclerView(FastScrollRecyclerView rv) {
        if (mRv != null && mOnScrollListener != null) {
            mRv.removeOnScrollListener(mOnScrollListener);
        }
@@ -194,10 +196,6 @@ public class RecyclerViewFastScroller extends View {
                mRv.onUpdateScrollbar(dy);
            }
        });

        mPopupView = popupView;
        mPopupView.setBackground(
                new FastScrollThumbDrawable(mThumbPaint, Utilities.isRtl(getResources())));
    }

    public void reattachThumbToScroll() {
@@ -331,7 +329,7 @@ public class RecyclerViewFastScroller extends View {
    }

    public void onDraw(Canvas canvas) {
        if (mThumbOffsetY < 0) {
        if (mThumbOffsetY < 0 || mRv == null) {
            return;
        }
        int saveCount = canvas.save();
+6 −3
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet
                    WidgetsRecyclerView searchRecyclerView =
                            mAdapters.get(AdapterHolder.SEARCH).mWidgetsRecyclerView;
                    if (mIsInSearchMode && searchRecyclerView != null) {
                        searchRecyclerView.bindFastScrollbar();
                        searchRecyclerView.bindFastScrollbar(mFastScroller);
                    }
                }

@@ -253,6 +253,8 @@ public class WidgetsFullSheet extends BaseWidgetSheet
        if (mIsTwoPane) {
            mFastScroller.setVisibility(GONE);
        }
        mFastScroller.setPopupView(findViewById(R.id.fast_scroller_popup));

        mAdapters.get(AdapterHolder.PRIMARY).setup(findViewById(R.id.primary_widgets_list_view));
        mAdapters.get(AdapterHolder.SEARCH).setup(findViewById(R.id.search_widgets_list_view));
        if (mHasWorkProfile) {
@@ -373,7 +375,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet
    }

    private void attachScrollbarToRecyclerView(WidgetsRecyclerView recyclerView) {
        recyclerView.bindFastScrollbar();
        recyclerView.bindFastScrollbar(mFastScroller);
        if (mCurrentWidgetsRecyclerView != recyclerView) {
            // Only reset the scroll position & expanded apps if the currently shown recycler view
            // has been updated.
@@ -583,7 +585,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet
            workUserAdapterHolder.mWidgetsListAdapter.setWidgets(allWidgets);
            onActivePageChanged(mViewPager.getCurrentPage());
        } else {
            updateRecyclerViewVisibility(primaryUserAdapterHolder);
            onActivePageChanged(0);
        }
        // Update recommended widgets section so that it occupies appropriate space on screen to
        // leave enough space for presence/absence of mNoWidgetsView.
@@ -1021,6 +1023,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet
            mWidgetsRecyclerView.setClipToOutline(true);
            mWidgetsRecyclerView.setClipChildren(false);
            mWidgetsRecyclerView.setAdapter(mWidgetsListAdapter);
            mWidgetsRecyclerView.bindFastScrollbar(mFastScroller);
            mWidgetsRecyclerView.setItemAnimator(mWidgetsListItemAnimator);
            mWidgetsRecyclerView.setHeaderViewDimensionsProvider(WidgetsFullSheet.this);
            if (!mIsTwoPane) {