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

Commit 4faf38a0 authored by Winson Chung's avatar Winson Chung
Browse files

Fix small issues with event flow for quickscrub



- Ensure that we return whether we handle quickscrub fling so that we
  don't proxy the associated up event
- Ensure that if we have already started quickscrub, that we don't return
  false to continue proxying events midway

Bug: 67957962
Bug: 70180755
Test: Enable quickscrub, start scrubbing and swipe up

Change-Id: I9e3728ed3781b36c38fc16c0d047665fb0c3b904
Signed-off-by: default avatarWinson Chung <winsonc@google.com>
parent 44dbca09
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -157,6 +157,20 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture
        return (mDockWindowEnabled && interceptDockWindowEvent(event));
    }

    public boolean onTouchEvent(MotionEvent event) {
        // The same down event was just sent on intercept and therefore can be ignored here
        boolean ignoreProxyDownEvent = event.getAction() == MotionEvent.ACTION_DOWN
                && mOverviewEventSender.getProxy() != null;
        boolean result = mStatusBar.isPresenterFullyCollapsed()
                && (mQuickScrubController.onTouchEvent(event)
                || ignoreProxyDownEvent
                || proxyMotionEvents(event));
        if (mDockWindowEnabled) {
            result |= handleDockWindowEvent(event);
        }
        return result;
    }

    public void onDraw(Canvas canvas) {
        if (mOverviewEventSender.getProxy() != null) {
            mQuickScrubController.onDraw(canvas);
@@ -307,20 +321,6 @@ public class NavigationBarGestureHelper implements TunerService.Tunable, Gesture
        return DRAG_MODE_RECENTS;
    }

    public boolean onTouchEvent(MotionEvent event) {
        // The same down event was just sent on intercept and therefore can be ignored here
        boolean ignoreProxyDownEvent = event.getAction() == MotionEvent.ACTION_DOWN
                && mOverviewEventSender.getProxy() != null;
        boolean result = mStatusBar.isPresenterFullyCollapsed()
                && (mQuickScrubController.onTouchEvent(event)
                || ignoreProxyDownEvent
                || proxyMotionEvents(event));
        if (mDockWindowEnabled) {
            result |= handleDockWindowEvent(event);
        }
        return result;
    }

    @Override
    public void onTuningChanged(String key, String newValue) {
        switch (key) {
+9 −8
Original line number Diff line number Diff line
@@ -276,14 +276,6 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
        setUpSwipeUpOnboarding(isConnected);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mGestureHelper.onTouchEvent(event)) {
            return true;
        }
        return mRecentsAnimationStarted || super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        int action = event.getActionMasked();
@@ -300,9 +292,18 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
                }
            }
        }

        return mGestureHelper.onInterceptTouchEvent(event) || mRecentsAnimationStarted;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mGestureHelper.onTouchEvent(event)) {
            return true;
        }
        return mRecentsAnimationStarted || super.onTouchEvent(event);
    }

    public void abortCurrentGesture() {
        getHomeButton().abortCurrentGesture();
    }
+29 −12
Original line number Diff line number Diff line
@@ -158,9 +158,10 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene
                    } catch (RemoteException e) {
                        Log.e(TAG, "Failed to send start of quick switch.", e);
                    }
                }
                    return true;
                }
                return false;
            }
        };

    public QuickScrubController(Context context) {
@@ -189,6 +190,10 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene
        mNavigationBarView = navigationBarView;
    }

    /**
     * @return true if we want to intercept touch events for quick scrub/switch and prevent proxying
     *         the event to the overview service.
     */
    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        final IOverviewProxy overviewProxy = mOverviewEventSender.getProxy();
@@ -197,7 +202,10 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene
            homeButton.setDelayTouchFeedback(false);
            return false;
        }
        mGestureDetector.onTouchEvent(event);
        if (mGestureDetector.onTouchEvent(event)) {
            // If the fling has been handled, then skip proxying the UP
            return true;
        }
        int action = event.getAction();
        switch (action & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN: {
@@ -240,8 +248,9 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene
                        offset = pos - mTrackRect.left;
                        trackSize = mTrackRect.width();
                    }
                    // Do not start scrubbing when dragging in the perpendicular direction
                    if (!mDraggingActive && exceededPerpendicularTouchSlop) {
                    // Do not start scrubbing when dragging in the perpendicular direction if we
                    // haven't already started quickscrub
                    if (!mDraggingActive && !mQuickScrubActive && exceededPerpendicularTouchSlop) {
                        mHandler.removeCallbacksAndMessages(null);
                        return false;
                    }
@@ -295,6 +304,22 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene
        return mDraggingActive || mQuickScrubActive;
    }

    /**
     * @return true if we want to handle touch events for quick scrub/switch and prevent proxying
     *         the event to the overview service.
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mGestureDetector.onTouchEvent(event)) {
            // If the fling has been handled, then skip proxying the UP
            return true;
        }
        if (event.getAction() == MotionEvent.ACTION_UP) {
            endQuickScrub();
        }
        return mDraggingActive || mQuickScrubActive;
    }

    @Override
    public void onDraw(Canvas canvas) {
        int color = (int) mTrackColorEvaluator.evaluate(mDarkIntensity, mLightTrackColor,
@@ -340,14 +365,6 @@ public class QuickScrubController extends GestureDetector.SimpleOnGestureListene
        mNavigationBarView.invalidate();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            endQuickScrub();
        }
        return false;
    }

    @Override
    public void setBarState(boolean isVertical, boolean isRTL) {
        mIsVertical = isVertical;