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

Commit 943ce93b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Enabling quick-switch gesture in landscape mode (2 button UI)" into ub-launcher3-qt-dev

parents 2e6f3c73 2acea9f8
Loading
Loading
Loading
Loading
+19 −31
Original line number Diff line number Diff line
@@ -35,19 +35,15 @@ import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.view.Display;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.VelocityTracker;
import android.view.ViewConfiguration;
import android.view.WindowManager;

import androidx.annotation.UiThread;

import com.android.launcher3.R;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.RaceConditionTracker;
@@ -62,10 +58,11 @@ import com.android.systemui.shared.system.BackgroundExecutor;
import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.shared.system.InputMonitorCompat;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.WindowManagerWrapper;

import java.util.function.Consumer;

import androidx.annotation.UiThread;

/**
 * Input consumer for handling events originating from an activity other than Launcher
 */
@@ -81,14 +78,12 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
    private final Intent mHomeIntent;
    private final ActivityControlHelper mActivityControlHelper;
    private final OverviewCallbacks mOverviewCallbacks;
    private final TaskOverlayFactory mTaskOverlayFactory;
    private final InputConsumerController mInputConsumer;
    private final SwipeSharedState mSwipeSharedState;
    private final InputMonitorCompat mInputMonitorCompat;
    private final SysUINavigationMode.Mode mMode;

    private final int mDisplayRotation;
    private final Rect mStableInsets = new Rect();

    private final Consumer<OtherActivityInputConsumer> mOnCompleteCallback;
    private final MotionPauseDetector mMotionPauseDetector;
@@ -123,7 +118,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
    public OtherActivityInputConsumer(Context base, RunningTaskInfo runningTaskInfo,
            RecentsModel recentsModel, Intent homeIntent, ActivityControlHelper activityControl,
            boolean isDeferredDownTarget, OverviewCallbacks overviewCallbacks,
            TaskOverlayFactory taskOverlayFactory, InputConsumerController inputConsumer,
            InputConsumerController inputConsumer,
            Consumer<OtherActivityInputConsumer> onCompleteCallback,
            SwipeSharedState swipeSharedState, InputMonitorCompat inputMonitorCompat) {
        super(base);
@@ -145,14 +140,10 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
        boolean continuingPreviousGesture = swipeSharedState.getActiveListener() != null;
        mIsDeferredDownTarget = !continuingPreviousGesture && isDeferredDownTarget;
        mOverviewCallbacks = overviewCallbacks;
        mTaskOverlayFactory = taskOverlayFactory;
        mInputConsumer = inputConsumer;
        mSwipeSharedState = swipeSharedState;

        Display display = getSystemService(WindowManager.class).getDefaultDisplay();
        mDisplayRotation = display.getRotation();
        WindowManagerWrapper.getInstance().getStableInsets(mStableInsets);

        mDisplayRotation = getSystemService(WindowManager.class).getDefaultDisplay().getRotation();
        mDragSlop = QuickStepContract.getQuickStepDragSlopPx();
        mTouchSlop = QuickStepContract.getQuickStepTouchSlopPx();

@@ -171,16 +162,15 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
        }

        // Proxy events to recents view
        if (!isNavBarOnLeft() && !isNavBarOnRight()) {
        if (mPassedDragSlop && mInteractionHandler != null
                && !mRecentsViewDispatcher.hasConsumer()) {
                mRecentsViewDispatcher.setConsumer(mInteractionHandler.getRecentsViewDispatcher());
            mRecentsViewDispatcher.setConsumer(mInteractionHandler
                    .getRecentsViewDispatcher(isNavBarOnLeft() || isNavBarOnRight()));
        }
        int edgeFlags = ev.getEdgeFlags();
        ev.setEdgeFlags(edgeFlags | EDGE_NAV_BAR);
        mRecentsViewDispatcher.dispatchEvent(ev);
        ev.setEdgeFlags(edgeFlags);
        }

        mVelocityTracker.addMovement(ev);
        if (ev.getActionMasked() == ACTION_POINTER_UP) {
@@ -302,13 +292,11 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
    }

    private boolean isNavBarOnRight() {
        return SysUINavigationMode.INSTANCE.get(getBaseContext()).getMode() != NO_BUTTON
                && mDisplayRotation == Surface.ROTATION_90 && mStableInsets.right > 0;
        return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_90;
    }

    private boolean isNavBarOnLeft() {
        return SysUINavigationMode.INSTANCE.get(getBaseContext()).getMode() != NO_BUTTON
                && mDisplayRotation == Surface.ROTATION_270 && mStableInsets.left > 0;
        return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_270;
    }

    private void startTouchTrackingForWindowAnimation(long touchTimeMs) {
@@ -414,13 +402,13 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
    }

    private float getDisplacement(MotionEvent ev) {
        float eventX = ev.getX();
        float eventY = ev.getY();
        float displacement = eventY - mDownPos.y;
        final float displacement;
        if (isNavBarOnRight()) {
            displacement = eventX - mDownPos.x;
            displacement = ev.getX() - mDownPos.x;
        } else if (isNavBarOnLeft()) {
            displacement = mDownPos.x - eventX;
            displacement = mDownPos.x - ev.getX();
        } else {
            displacement = ev.getY() - mDownPos.y;
        }
        return displacement;
    }
+2 −2
Original line number Diff line number Diff line
@@ -492,8 +492,8 @@ public class TouchInteractionService extends Service implements
        boolean shouldDefer = activityControl.deferStartingActivity(mActiveNavBarRegion, event);
        return new OtherActivityInputConsumer(this, runningTaskInfo, mRecentsModel,
                mOverviewComponentObserver.getOverviewIntent(), activityControl,
                shouldDefer, mOverviewCallbacks, mTaskOverlayFactory, mInputConsumer,
                this::onConsumerInactive, mSwipeSharedState, mInputMonitorCompat);
                shouldDefer, mOverviewCallbacks, mInputConsumer, this::onConsumerInactive,
                mSwipeSharedState, mInputMonitorCompat);
    }

    /**
+2 −2
Original line number Diff line number Diff line
@@ -531,8 +531,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
        return TaskView.getCurveScaleForInterpolation(interpolation);
    }

    public Consumer<MotionEvent> getRecentsViewDispatcher() {
        return mRecentsView != null ? mRecentsView::dispatchTouchEvent : null;
    public Consumer<MotionEvent> getRecentsViewDispatcher(boolean isTransposed) {
        return mRecentsView != null ? mRecentsView.getEventDispatcher(isTransposed) : null;
    }

    @UiThread
+26 −3
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
@@ -70,9 +71,6 @@ import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.ListView;

import androidx.annotation.Nullable;
import androidx.dynamicanimation.animation.SpringForce;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
@@ -111,6 +109,9 @@ import com.android.systemui.shared.system.TaskStackChangeListener;
import java.util.ArrayList;
import java.util.function.Consumer;

import androidx.annotation.Nullable;
import androidx.dynamicanimation.animation.SpringForce;

/**
 * A list of recent tasks.
 */
@@ -1639,4 +1640,26 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
    public ClearAllButton getClearAllButton() {
        return mClearAllButton;
    }

    public Consumer<MotionEvent> getEventDispatcher(boolean isTransposed) {
        if (isTransposed) {
            Matrix transform = new Matrix();
            transform.setRotate(90);

            if (getWidth() > 0 && getHeight() > 0) {
                float scale = ((float) getWidth()) / getHeight();
                transform.postScale(scale, 1 / scale);
            }

            Matrix inverse = new Matrix();
            transform.invert(inverse);
            return e -> {
                e.transform(transform);
                super.onTouchEvent(e);
                e.transform(inverse);
            };
        } else {
            return super::onTouchEvent;
        }
    }
}
+1 −3
Original line number Diff line number Diff line
@@ -1088,10 +1088,8 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);

        // Skip touch handling if there are no pages to swipe
        if (getChildCount() <= 0) return super.onTouchEvent(ev);
        if (getChildCount() <= 0) return false;

        acquireVelocityTrackerAndAddMovement(ev);