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

Commit dff3beb6 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Use GestureDetector in WorkspaceTouchListener

Replace the current callback logic in WorkspaceTouchListener with the
use of GestureDetector.
Platform-provided api will now be used  for detecting long press.

Test: long press on empty home screen
Bug: 126596502
Change-Id: I5beb9158ee0d9ec6ac031465f15923eed2d5f066
parent f31848fe
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -20,12 +20,12 @@ import static android.view.MotionEvent.ACTION_DOWN;
import static android.view.MotionEvent.ACTION_MOVE;
import static android.view.MotionEvent.ACTION_POINTER_UP;
import static android.view.MotionEvent.ACTION_UP;
import static android.view.ViewConfiguration.getLongPressTimeout;

import static com.android.launcher3.LauncherState.NORMAL;

import android.graphics.PointF;
import android.graphics.Rect;
import android.view.GestureDetector;
import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;
import android.view.View;
@@ -45,7 +45,8 @@ import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
/**
 * Helper class to handle touch on empty space in workspace and show options popup on long press
 */
public class WorkspaceTouchListener implements OnTouchListener, Runnable {
public class WorkspaceTouchListener extends GestureDetector.SimpleOnGestureListener
        implements OnTouchListener {

    /**
     * STATE_PENDING_PARENT_INFORM is the state between longPress performed & the next motionEvent.
@@ -66,16 +67,21 @@ public class WorkspaceTouchListener implements OnTouchListener, Runnable {

    private int mLongPressState = STATE_CANCELLED;

    private final GestureDetector mGestureDetector;

    public WorkspaceTouchListener(Launcher launcher, Workspace workspace) {
        mLauncher = launcher;
        mWorkspace = workspace;
        // Use twice the touch slop as we are looking for long press which is more
        // likely to cause movement.
        mTouchSlop = 2 * ViewConfiguration.get(launcher).getScaledTouchSlop();
        mGestureDetector = new GestureDetector(workspace.getContext(), this);
    }

    @Override
    public boolean onTouch(View view, MotionEvent ev) {
        mGestureDetector.onTouchEvent(ev);

        int action = ev.getActionMasked();
        if (action == ACTION_DOWN) {
            // Check if we can handle long press.
@@ -97,7 +103,6 @@ public class WorkspaceTouchListener implements OnTouchListener, Runnable {
            if (handleLongPress) {
                mLongPressState = STATE_REQUESTED;
                mTouchDownPoint.set(ev.getX(), ev.getY());
                mWorkspace.postDelayed(this, getLongPressTimeout());
            }

            mWorkspace.onTouchEvent(ev);
@@ -143,9 +148,6 @@ public class WorkspaceTouchListener implements OnTouchListener, Runnable {
            }
        }

        if (action == ACTION_UP || action == ACTION_CANCEL) {
            cancelLongPress();
        }
        return result;
    }

@@ -155,12 +157,11 @@ public class WorkspaceTouchListener implements OnTouchListener, Runnable {
    }

    private void cancelLongPress() {
        mWorkspace.removeCallbacks(this);
        mLongPressState = STATE_CANCELLED;
    }

    @Override
    public void run() {
    public void onLongPress(MotionEvent event) {
        if (mLongPressState == STATE_REQUESTED) {
            if (canHandleLongPress()) {
                mLongPressState = STATE_PENDING_PARENT_INFORM;