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

Commit b1ab696d authored by Ben Lin's avatar Ben Lin
Browse files

Allow ItemDragListener to have a custom timeout.

This to allow some operations to appear faster, specifically Drawer
auto-open on hover.

Bug: 36099518
Change-Id: I976b7760ff9e9b32516a3b5542d6ca99622a3fb7
parent 3808de5d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ public abstract class DrawerController implements DrawerListener {
     */
    private static final class RuntimeDrawerController extends DrawerController
            implements ItemDragListener.DragHost {
        private static final int SPRING_TIMEOUT = 750;
        private final ActionBarDrawerToggle mToggle;
        private DrawerLayout mLayout;
        private View mDrawer;
@@ -147,7 +148,7 @@ public abstract class DrawerController implements DrawerListener {

            if (activityConfig.dragAndDropEnabled()) {
                View edge = layout.findViewById(R.id.drawer_edge);
                edge.setOnDragListener(new ItemDragListener<>(this));
                edge.setOnDragListener(new ItemDragListener<>(this, SPRING_TIMEOUT));
            }
        }

+10 −8
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.documentsui;

import static com.android.documentsui.base.Shared.DEBUG;

import android.content.ClipData;
import android.graphics.drawable.Drawable;
import android.util.Log;
@@ -26,10 +24,8 @@ import android.view.View;
import android.view.View.OnDragListener;

import com.android.documentsui.ItemDragListener.DragHost;
import com.android.documentsui.base.DocumentInfo;
import com.android.internal.annotations.VisibleForTesting;

import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

@@ -44,19 +40,25 @@ public class ItemDragListener<H extends DragHost> implements OnDragListener {
    private static final String TAG = "ItemDragListener";

    @VisibleForTesting
    static final int SPRING_TIMEOUT = 1500;
    static final int DEFAULT_SPRING_TIMEOUT = 1500;

    protected final H mDragHost;
    private final Timer mHoverTimer;
    private final int mSpringTimeout;

    public ItemDragListener(H dragHost) {
        this(dragHost, new Timer());
        this(dragHost, new Timer(), DEFAULT_SPRING_TIMEOUT);
    }

    public ItemDragListener(H dragHost, int springTimeout) {
        this(dragHost, new Timer(), springTimeout);
    }

    @VisibleForTesting
    protected ItemDragListener(H dragHost, Timer timer) {
    protected ItemDragListener(H dragHost, Timer timer, int springTimeout) {
        mDragHost = dragHost;
        mHoverTimer = timer;
        mSpringTimeout = springTimeout;
    }

    @Override
@@ -91,7 +93,7 @@ public class ItemDragListener<H extends DragHost> implements OnDragListener {
            return;
        }
        v.setTag(R.id.drag_hovering_tag, task);
        mHoverTimer.schedule(task, SPRING_TIMEOUT);
        mHoverTimer.schedule(task, mSpringTimeout);
    }

    private void handleLocationEvent(View v, float x, float y) {
+18 −4
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ import java.util.TimerTask;
@SmallTest
public class ItemDragListenerTest {

    private static final long DELAY_AFTER_HOVERING = ItemDragListener.SPRING_TIMEOUT + 1;
    private static final long DELAY_AFTER_HOVERING = ItemDragListener.DEFAULT_SPRING_TIMEOUT + 1;

    private View mTestView;
    private TestDrawable mTestBackground;
@@ -61,7 +61,8 @@ public class ItemDragListenerTest {
        mTestTimer = new TestTimer();
        mTestDragHost = new TestDragHost();

        mListener = new TestDragListener(mTestDragHost, mTestTimer);
        mListener = new TestDragListener(
                mTestDragHost, mTestTimer, ItemDragListener.DEFAULT_SPRING_TIMEOUT);
    }

    @Test
@@ -120,6 +121,19 @@ public class ItemDragListenerTest {
        assertSame(mTestView, mTestDragHost.mLastHoveredView);
    }

    @Test
    public void testHover_usesCustomTimeout() {
        int customTimeout = 200;
        mListener = new TestDragListener(
                mTestDragHost, mTestTimer, customTimeout);
        triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);

        mTestTimer.fastForwardTo(customTimeout + 1);

        assertSame(mTestView, mTestDragHost.mLastEnteredView);
        assertSame(mTestView, mTestDragHost.mLastHoveredView);
    }

    @Test
    public void testDragExited_CancelsHoverTask() {
        triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
@@ -176,8 +190,8 @@ public class ItemDragListenerTest {
        private View mLastDropOnView;
        private DragEvent mLastDropEvent;

        protected TestDragListener(TestDragHost dragHost, Timer timer) {
            super(dragHost, timer);
        protected TestDragListener(TestDragHost dragHost, Timer timer, int timeout) {
            super(dragHost, timer, timeout);
        }

        @Override
+3 −5
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ public class DragScrollListenerTest {

    private View mTestView;
    private TestDragHost mTestDragHost;
    private TestTimer mTestTimer;
    private TestDragHandler mDragHandler;
    private TestScrollActionDelegate mActionDelegate = new TestScrollActionDelegate();
    private DragHoverListener mListener;
@@ -55,9 +54,8 @@ public class DragScrollListenerTest {
    @Before
    public void setUp() {
        mTestView = Views.createTestView(0, 0);
        mTestTimer = new TestTimer();
        mTestDragHost = new TestDragHost();
        mDragHandler = new TestDragHandler(mTestDragHost, mTestTimer);
        mDragHandler = new TestDragHandler(mTestDragHost);
        mListener = new DragHoverListener(
                mDragHandler,
                () -> VIEW_HEIGHT,
@@ -174,8 +172,8 @@ public class DragScrollListenerTest {

        private DragEvent mLastDropEvent;

        protected TestDragHandler(TestDragHost dragHost, Timer timer) {
            super(dragHost, timer);
        protected TestDragHandler(TestDragHost dragHost) {
            super(dragHost);
        }

        @Override