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

Commit 4743da38 authored by Miranda Kephart's avatar Miranda Kephart
Browse files

Allow fling invocation for assistant

Bug: 132269601
Test: manual
Change-Id: Ieb8fb6ade28d947ab8ca9ef901937dc7f3ca7a1d
parent 860b9208
Loading
Loading
Loading
Loading
+63 −36
Original line number Diff line number Diff line
@@ -21,9 +21,9 @@ 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 com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction.UPLEFT;
import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction.UPRIGHT;
import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch.FLING;
import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch.SWIPE;
import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch.SWIPE_NOOP;
import static com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType.NAVBAR;
@@ -38,11 +38,11 @@ import android.os.SystemClock;
import android.util.Log;
import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;

import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.R;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.logging.UserEventDispatcher;
import com.android.launcher3.touch.SwipeDetector;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.system.InputMonitorCompat;
import com.android.systemui.shared.system.QuickStepContract;
@@ -50,12 +50,15 @@ import com.android.systemui.shared.system.QuickStepContract;
/**
 * Touch consumer for handling events to launch assistant from launcher
 */
public class AssistantTouchConsumer extends DelegateInputConsumer {
public class AssistantTouchConsumer extends DelegateInputConsumer
    implements SwipeDetector.Listener {

    private static final String TAG = "AssistantTouchConsumer";
    private static final long RETRACT_ANIMATION_DURATION_MS = 300;

    private static final String INVOCATION_TYPE_KEY = "invocation_type";
    private static final int INVOCATION_TYPE_GESTURE = 1;
    private static final int INVOCATION_TYPE_FLING = 6;

    private final PointF mDownPos = new PointF();
    private final PointF mLastPos = new PointF();
@@ -77,6 +80,7 @@ public class AssistantTouchConsumer extends DelegateInputConsumer {
    private final float mSlop;
    private final ISystemUiProxy mSysUiProxy;
    private final Context mContext;
    private final SwipeDetector mSwipeDetector;

    public AssistantTouchConsumer(Context context, ISystemUiProxy systemUiProxy,
            ActivityControlHelper activityControlHelper, InputConsumer delegate,
@@ -90,6 +94,8 @@ public class AssistantTouchConsumer extends DelegateInputConsumer {
        mAngleThreshold = res.getInteger(R.integer.assistant_gesture_corner_deg_threshold);
        mSlop = QuickStepContract.getQuickStepDragSlopPx();
        mActivityControlHelper = activityControlHelper;
        mSwipeDetector = new SwipeDetector(mContext, this, SwipeDetector.VERTICAL);
        mSwipeDetector.setDetectableScrollConditions(SwipeDetector.DIRECTION_POSITIVE, false);
    }

    @Override
@@ -100,6 +106,7 @@ public class AssistantTouchConsumer extends DelegateInputConsumer {
    @Override
    public void onMotionEvent(MotionEvent ev) {
        // TODO add logging
        mSwipeDetector.onTouchEvent(ev);

        switch (ev.getActionMasked()) {
            case ACTION_DOWN: {
@@ -200,18 +207,21 @@ public class AssistantTouchConsumer extends DelegateInputConsumer {

    private void updateAssistantProgress() {
        if (!mLaunchedAssistant) {
            float progress = Math.min(mDistance * 1f / mDistThreshold, 1) * mTimeFraction;
            mLastProgress = progress;
            mLastProgress = Math.min(mDistance * 1f / mDistThreshold, 1) * mTimeFraction;
            updateAssistant(SWIPE);
        }
    }

    private void updateAssistant(int gestureType) {
        try {
                mSysUiProxy.onAssistantProgress(progress);
                if (mDistance >= mDistThreshold && mTimeFraction >= 1) {
                    UserEventDispatcher.newInstance(mContext).logActionOnContainer(
                            SWIPE, mDirection, NAVBAR);
            mSysUiProxy.onAssistantProgress(mLastProgress);
            if (gestureType == FLING || (mDistance >= mDistThreshold && mTimeFraction >= 1)) {
                UserEventDispatcher.newInstance(mContext)
                    .logActionOnContainer(gestureType, mDirection, NAVBAR);
                Bundle args = new Bundle();
                args.putInt(INVOCATION_TYPE_KEY, INVOCATION_TYPE_GESTURE);

                    BaseDraggingActivity launcherActivity =
                            mActivityControlHelper.getCreatedActivity();
                BaseDraggingActivity launcherActivity = mActivityControlHelper.getCreatedActivity();
                if (launcherActivity != null) {
                    launcherActivity.getRootView().performHapticFeedback(
                        13, // HapticFeedbackConstants.GESTURE_END
@@ -222,8 +232,7 @@ public class AssistantTouchConsumer extends DelegateInputConsumer {
                mLaunchedAssistant = true;
            }
        } catch (RemoteException e) {
                Log.w(TAG, "Failed to send SysUI start/send assistant progress: " + progress, e);
            }
            Log.w(TAG, "Failed to send SysUI start/send assistant progress: " + mLastProgress, e);
        }
    }

@@ -234,4 +243,22 @@ public class AssistantTouchConsumer extends DelegateInputConsumer {
        final int size = res.getDimensionPixelSize(R.dimen.gestures_assistant_size);
        return (ev.getX() > width - size || ev.getX() < size) && ev.getY() > height - size;
    }

    @Override
    public void onDragStart(boolean start) {
        // do nothing
    }

    @Override
    public boolean onDrag(float displacement) {
        return false;
    }

    @Override
    public void onDragEnd(float velocity, boolean fling) {
        if (fling) {
            mLastProgress = 1;
            updateAssistant(FLING);
        }
    }
}