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

Commit a62b6208 authored by Matthew Ng's avatar Matthew Ng
Browse files

Fixed quickscrub regression

Forgot that quickscrub does not proxy motion events when refactoring.
Added a new function for actions to proxy events and made sure that the
test catches if events were proxied.

Test: atest QuickStepControllerTest
Change-Id: I8c047816aa266dfd9d220df7d47a13dadf5987f9
Fixes: 119502592
parent 26485556
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -126,6 +126,15 @@ public abstract class NavigationGestureAction {
        return true;
    }

    /**
     * Decide if the controller should not send the current motion event to launcher via
     * {@link OverviewProxyService}
     * @return if controller should not proxy
     */
    public boolean disableProxyEvents() {
        return false;
    }

    /**
     * Tell if action is enabled. Compared to {@link #canPerformAction()} this is based on settings
     * if the action is disabled for a particular gesture. For example a back action can be enabled
+5 −0
Original line number Diff line number Diff line
@@ -211,6 +211,11 @@ public class QuickScrubAction extends NavigationGestureAction {
        return mNavigationBarView.isQuickScrubEnabled();
    }

    @Override
    public boolean disableProxyEvents() {
        return true;
    }

    @Override
    protected void onGestureStart(MotionEvent event) {
        updateHighlight();
+11 −12
Original line number Diff line number Diff line
@@ -274,25 +274,21 @@ public class QuickStepController implements GestureHelper {
                        if (mDragVPositive ? (posV < touchDownV) : (posV > touchDownV)) {
                            // Swiping up gesture
                            tryToStartGesture(mGestureActions[ACTION_SWIPE_UP_INDEX],
                                    false /* alignedWithNavBar */, false /* positiveDirection */,
                                    event);
                                    false /* alignedWithNavBar */, event);
                        } else {
                            // Swiping down gesture
                            tryToStartGesture(mGestureActions[ACTION_SWIPE_DOWN_INDEX],
                                    false /* alignedWithNavBar */, true /* positiveDirection */,
                                    event);
                                    false /* alignedWithNavBar */, event);
                        }
                    } else if (exceededSwipeHorizontalTouchSlop) {
                        if (mDragHPositive ? (posH < touchDownH) : (posH > touchDownH)) {
                            // Swiping left (ltr) gesture
                            tryToStartGesture(mGestureActions[ACTION_SWIPE_LEFT_INDEX],
                                    true /* alignedWithNavBar */, false /* positiveDirection */,
                                    event);
                                    true /* alignedWithNavBar */, event);
                        } else {
                            // Swiping right (ltr) gesture
                            tryToStartGesture(mGestureActions[ACTION_SWIPE_RIGHT_INDEX],
                                    true /* alignedWithNavBar */, true /* positiveDirection */,
                                    event);
                                    true /* alignedWithNavBar */, event);
                        }
                    }
                }
@@ -305,7 +301,6 @@ public class QuickStepController implements GestureHelper {
            case MotionEvent.ACTION_UP:
                if (mCurrentAction != null) {
                    mCurrentAction.endGesture();
                    mCurrentAction = null;
                }

                // Return the hit target back to its original position
@@ -328,6 +323,11 @@ public class QuickStepController implements GestureHelper {
        if (shouldProxyEvents(action)) {
            proxyMotionEvents(event);
        }

        // Clear action when gesture and event proxy finishes
        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
            mCurrentAction = null;
        }
        return mCurrentAction != null || deadZoneConsumed;
    }

@@ -353,8 +353,7 @@ public class QuickStepController implements GestureHelper {

    private boolean shouldProxyEvents(int action) {
        final boolean actionValid = (mCurrentAction == null
                || (mGestureActions[ACTION_SWIPE_UP_INDEX] != null
                        && mGestureActions[ACTION_SWIPE_UP_INDEX].isActive()));
                || !mCurrentAction.disableProxyEvents());
        if (actionValid && !mIsInScreenPinning) {
            // Allow down, cancel and up events, move and other events are passed if notifications
            // are not showing and disabled gestures (such as long press) are not executed
@@ -451,7 +450,7 @@ public class QuickStepController implements GestureHelper {
    }

    private void tryToStartGesture(NavigationGestureAction action, boolean alignedWithNavBar,
            boolean positiveDirection, MotionEvent event) {
            MotionEvent event) {
        if (action == null) {
            return;
        }
+4 −1
Original line number Diff line number Diff line
@@ -38,12 +38,12 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.content.Context;
import com.android.systemui.R;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.SysuiTestCase;

import android.content.Context;
import android.content.res.Resources;
import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
@@ -395,6 +395,7 @@ public class QuickStepControllerTest extends SysuiTestCase {
        verify(mProxy, times(1)).onQuickScrubStart();
        verify(mProxyService, times(1)).notifyQuickScrubStarted();
        verify(mNavigationBarView, times(1)).updateSlippery();
        verify(mProxy, never()).onMotionEvent(moveEvent1);

        // Move again for scrub
        MotionEvent moveEvent2 = event(MotionEvent.ACTION_MOVE, 200, y);
@@ -402,6 +403,7 @@ public class QuickStepControllerTest extends SysuiTestCase {
        assertEquals(action, mController.getCurrentAction());
        verify(action, times(1)).onGestureMove(200, y);
        verify(mProxy, times(1)).onQuickScrubProgress(1f / 2);
        verify(mProxy, never()).onMotionEvent(moveEvent2);

        // Action up
        MotionEvent upEvent = event(MotionEvent.ACTION_UP, 1, y);
@@ -409,6 +411,7 @@ public class QuickStepControllerTest extends SysuiTestCase {
        assertNull(mController.getCurrentAction());
        verify(action, times(1)).onGestureEnd();
        verify(mProxy, times(1)).onQuickScrubEnd();
        verify(mProxy, never()).onMotionEvent(upEvent);
    }

    @Test