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

Commit 2f9c9b30 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make Auto-scrolling base purely on edge offset, no longer on time." into nyc-andromeda-dev

parents 0de0ad15 3dbd3b1e
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -47,8 +47,6 @@
    <dimen name="drag_shadow_width">160dp</dimen>
    <dimen name="drag_shadow_height">48dp</dimen>

    <dimen name="autoscroll_edge_height">32dp</dimen>

    <dimen name="doc_header_sort_icon_size">16dp</dimen>
    <dimen name="doc_header_height">60dp</dimen>

+0 −2
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@ import java.util.Set;
public class BandController extends OnScrollListener {

    private static final String TAG = "BandController";
    private static final int AUTOSCROLL_EDGE_HEIGHT = 1;

    private final Runnable mModelBuilder;
    private final SelectionEnvironment mEnvironment;
@@ -92,7 +91,6 @@ public class BandController extends OnScrollListener {

        mEnvironment.addOnScrollListener(this);
        mViewScroller = new ViewAutoScroller(
                AUTOSCROLL_EDGE_HEIGHT,
                new ScrollDistanceDelegate() {
                    @Override
                    public Point getCurrentPosition() {
+2 −6
Original line number Diff line number Diff line
@@ -215,9 +215,7 @@ public class DirectoryFragment extends Fragment
        mRecView.setItemAnimator(new DirectoryItemAnimator(getActivity()));
        mFileList = view.findViewById(R.id.file_list);

        final int edgeHeight = (int) getResources().getDimension(R.dimen.autoscroll_edge_height);
        mDragHoverListener = DragHoverListener.create(
                edgeHeight, new DirectoryDragListener(this), mRecView);
        mDragHoverListener = DragHoverListener.create(new DirectoryDragListener(this), mRecView);

        // Make the recycler and the empty views responsive to drop events.
        mRecView.setOnDragListener(mDragHoverListener);
@@ -300,9 +298,7 @@ public class DirectoryFragment extends Fragment
        mModel.addUpdateListener(mAdapter.getModelUpdateListener());
        mModel.addUpdateListener(mModelUpdateListener);

        final int edgeHeight = (int) getResources().getDimension(R.dimen.autoscroll_edge_height);
        GestureSelector gestureSel = GestureSelector.create(
                edgeHeight, mSelectionMgr, mRecView);
        GestureSelector gestureSel = GestureSelector.create(mSelectionMgr, mRecView);

        final BaseActivity activity = getBaseActivity();
        mTuner = activity.getFragmentTuner(mModel, mConfig.mSearchMode);
+5 −9
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ class DragHoverListener implements OnDragListener {
    private final IntSupplier mHeight;
    private final BooleanSupplier mCanScrollUp;
    private final BooleanSupplier mCanScrollDown;
    private final int mAutoScrollEdgeHeight;
    private final Runnable mDragScroller;

    /**
@@ -61,7 +60,6 @@ class DragHoverListener implements OnDragListener {

    @VisibleForTesting
    DragHoverListener(
            int autoScrollEdgeHeight,
            ItemDragListener<? extends DragHost> dragHandler,
            IntSupplier heightSupplier,
            Predicate<View> isScrollView,
@@ -69,7 +67,6 @@ class DragHoverListener implements OnDragListener {
            BooleanSupplier scrollDownSupplier,
            ViewAutoScroller.ScrollActionDelegate actionDelegate) {
        mDragHandler = dragHandler;
        mAutoScrollEdgeHeight = autoScrollEdgeHeight;
        mHeight = heightSupplier;
        mIsScrollView = isScrollView;
        mCanScrollUp = scrollUpSupplier;
@@ -92,12 +89,10 @@ class DragHoverListener implements OnDragListener {
            }
        };

        mDragScroller = new ViewAutoScroller(
                mAutoScrollEdgeHeight, distanceDelegate, actionDelegate);
        mDragScroller = new ViewAutoScroller(distanceDelegate, actionDelegate);
    }

    static DragHoverListener create(
            int autoScrollEdgeHeight,
            ItemDragListener<? extends DragHost> dragHandler,
            View scrollView) {
        ScrollActionDelegate actionDelegate = new ScrollActionDelegate() {
@@ -118,7 +113,6 @@ class DragHoverListener implements OnDragListener {
            }
        };
        DragHoverListener listener = new DragHoverListener(
                autoScrollEdgeHeight,
                dragHandler,
                scrollView::getHeight,
                (view) -> (scrollView == view),
@@ -179,9 +173,11 @@ class DragHoverListener implements OnDragListener {
            return false;
        }

        boolean shouldScrollUp = mCurrentPosition.y < mAutoScrollEdgeHeight
        float topBottomRegionHeight = mHeight.getAsInt()
                * ViewAutoScroller.TOP_BOTTOM_THRESHOLD_RATIO;
        boolean shouldScrollUp = mCurrentPosition.y < topBottomRegionHeight
                && mCanScrollUp.getAsBoolean();
        boolean shouldScrollDown = mCurrentPosition.y > mHeight.getAsInt() - mAutoScrollEdgeHeight
        boolean shouldScrollDown = mCurrentPosition.y > mHeight.getAsInt() - topBottomRegionHeight
                && mCanScrollDown.getAsBoolean();
        return shouldScrollUp || shouldScrollDown;
    }
+8 −21
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ final class GestureSelector {

    private final MultiSelectManager mSelectionMgr;
    private final Runnable mDragScroller;
    private final int mAutoScrollEdgeHeight;
    private final IntSupplier mHeight;
    private final ViewFinder mViewFinder;
    private int mLastStartedItemPos = -1;
@@ -45,12 +44,10 @@ final class GestureSelector {
    private Point mLastInterceptedPoint;

    GestureSelector(
            int autoScrollEdgeHeight,
            MultiSelectManager selectionMgr,
            IntSupplier heightSupplier,
            ViewFinder viewFinder,
            ScrollActionDelegate actionDelegate) {
        mAutoScrollEdgeHeight = autoScrollEdgeHeight;
        mSelectionMgr = selectionMgr;
        mHeight = heightSupplier;
        mViewFinder = viewFinder;
@@ -72,12 +69,10 @@ final class GestureSelector {
            }
        };

        mDragScroller = new ViewAutoScroller(
                mAutoScrollEdgeHeight, distanceDelegate, actionDelegate);
        mDragScroller = new ViewAutoScroller(distanceDelegate, actionDelegate);
    }

    static GestureSelector create(
            int autoScrollEdgeHeight,
            MultiSelectManager selectionMgr,
            RecyclerView scrollView) {
        ScrollActionDelegate actionDelegate = new ScrollActionDelegate() {
@@ -98,8 +93,10 @@ final class GestureSelector {
        };
        GestureSelector helper =
                new GestureSelector(
                        autoScrollEdgeHeight, selectionMgr, scrollView::getHeight,
                        scrollView::findChildViewUnder, actionDelegate);
                        selectionMgr,
                        scrollView::getHeight,
                        scrollView::findChildViewUnder,
                        actionDelegate);

        return helper;
    }
@@ -205,9 +202,7 @@ final class GestureSelector {
        if (lastGlidedItemPos != RecyclerView.NO_POSITION) {
            doGestureMultiSelect(lastGlidedItemPos);
        }
        if (insideDragZone(rv)) {
            mDragScroller.run();
        }
        scrollIfNecessary();
    }

    // It's possible for events to go over the top/bottom of the RecyclerView.
@@ -243,16 +238,8 @@ final class GestureSelector {
        mSelectionMgr.snapProvisionalRangeSelection(endPos);
    }

    private boolean insideDragZone(View scrollView) {
        if (mLastInterceptedPoint == null) {
            return false;
        }

        boolean shouldScrollUp = mLastInterceptedPoint.y < mAutoScrollEdgeHeight
                && scrollView.canScrollVertically(-1);
        boolean shouldScrollDown = mLastInterceptedPoint.y > scrollView.getHeight() -
                mAutoScrollEdgeHeight && scrollView.canScrollVertically(1);
        return shouldScrollUp || shouldScrollDown;
    private void scrollIfNecessary() {
        mDragScroller.run();
    }

    @FunctionalInterface
Loading