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

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

Merge "Notify SysUi of NavBar region user interacts with" into ub-launcher3-rvc-dev

parents e396abf5 dcbed4b5
Loading
Loading
Loading
Loading
+44 −19
Original line number Diff line number Diff line
@@ -60,12 +60,24 @@ class OrientationTouchTransformer {
    private SparseArray<OrientationRectF> mSwipeTouchRegions = new SparseArray<>(MAX_ORIENTATIONS);
    private final RectF mAssistantLeftRegion = new RectF();
    private final RectF mAssistantRightRegion = new RectF();
    private int mCurrentRotation;
    private int mCurrentDisplayRotation;
    private boolean mEnableMultipleRegions;
    private Resources mResources;
    private OrientationRectF mLastRectTouched;
    private SysUINavigationMode.Mode mMode;
    private QuickStepContractInfo mContractInfo;

    /**
     * Represents if we're currently in a swipe "session" of sorts. If value is -1, then user
     * has not tapped on an active nav region. Otherwise it will be the rotation of the display
     * when the user first interacted with the active nav bar region.
     * The "session" ends when {@link #enableMultipleRegions(boolean, DefaultDisplay.Info)} is
     * called - usually from a timeout or if user starts interacting w/ the foreground app.
     *
     * This is different than {@link #mLastRectTouched} as it can get reset by the system whereas
     * the rect is purely used for tracking touch interactions and usually this "session" will
     * outlast the touch interaction.
     */
    private int mQuickStepStartingRotation = -1;

    /** For testability */
@@ -73,6 +85,7 @@ class OrientationTouchTransformer {
        float getWindowCornerRadius();
    }


    OrientationTouchTransformer(Resources resources, SysUINavigationMode.Mode mode,
            QuickStepContractInfo contractInfo) {
        mResources = resources;
@@ -97,20 +110,21 @@ class OrientationTouchTransformer {
     * @see #enableMultipleRegions(boolean, DefaultDisplay.Info)
     */
    void createOrAddTouchRegion(DefaultDisplay.Info info) {
        mCurrentRotation = info.rotation;
        if (mQuickStepStartingRotation > -1 && mCurrentRotation == mQuickStepStartingRotation) {
            // Ignore nav bars in other rotations except for the one we started out in
        mCurrentDisplayRotation = info.rotation;
        if (mQuickStepStartingRotation > -1
                && mCurrentDisplayRotation == mQuickStepStartingRotation) {
            // User already was swiping and the current screen is same rotation as the starting one
            // Remove active nav bars in other rotations except for the one we started out in
            resetSwipeRegions(info);
            return;
        }

        OrientationRectF region = mSwipeTouchRegions.get(mCurrentRotation);
        OrientationRectF region = mSwipeTouchRegions.get(mCurrentDisplayRotation);
        if (region != null) {
            return;
        }

        if (mEnableMultipleRegions) {
            mSwipeTouchRegions.put(mCurrentRotation, createRegionForDisplay(info));
            mSwipeTouchRegions.put(mCurrentDisplayRotation, createRegionForDisplay(info));
        } else {
            resetSwipeRegions(info);
        }
@@ -128,12 +142,6 @@ class OrientationTouchTransformer {
        if (!enableMultipleRegions) {
            mQuickStepStartingRotation = -1;
            resetSwipeRegions(info);
        } else {
            if (mLastRectTouched != null) {
                // mLastRectTouched can be null if gesture type is changed (ex. from settings)
                // but nav bar hasn't been interacted with yet.
                mQuickStepStartingRotation = mLastRectTouched.mRotation;
            }
        }
    }

@@ -145,17 +153,25 @@ class OrientationTouchTransformer {
     */
    private void resetSwipeRegions(DefaultDisplay.Info region) {
        if (DEBUG) {
            Log.d(TAG, "clearing all regions except rotation: " + mCurrentRotation);
            Log.d(TAG, "clearing all regions except rotation: " + mCurrentDisplayRotation);
        }

        mCurrentDisplayRotation = region.rotation;
        OrientationRectF regionToKeep = mSwipeTouchRegions.get(mCurrentDisplayRotation);
        mSwipeTouchRegions.clear();
        mSwipeTouchRegions.put(mCurrentDisplayRotation,
                regionToKeep != null ? regionToKeep : createRegionForDisplay(region));
    }

        mCurrentRotation = region.rotation;
    private void resetSwipeRegions() {
        OrientationRectF regionToKeep = mSwipeTouchRegions.get(mCurrentDisplayRotation);
        mSwipeTouchRegions.clear();
        mSwipeTouchRegions.put(mCurrentRotation, createRegionForDisplay(region));
        mSwipeTouchRegions.put(mCurrentDisplayRotation, regionToKeep);
    }

    private OrientationRectF createRegionForDisplay(DefaultDisplay.Info display) {
        if (DEBUG) {
            Log.d(TAG, "creating rotation region for: " + mCurrentRotation);
            Log.d(TAG, "creating rotation region for: " + mCurrentDisplayRotation);
        }

        Point size = display.realSize;
@@ -225,6 +241,10 @@ class OrientationTouchTransformer {
        }
    }

    int getQuickStepStartingRotation() {
        return mQuickStepStartingRotation;
    }

    public void transform(MotionEvent event) {
        int eventAction = event.getActionMasked();
        switch (eventAction) {
@@ -257,6 +277,11 @@ class OrientationTouchTransformer {
                    }
                    if (rect.applyTransform(event, false)) {
                        mLastRectTouched = rect;
                        if (mCurrentDisplayRotation == mLastRectTouched.mRotation) {
                            // Start a touch session for the default nav region for the display
                            mQuickStepStartingRotation = mLastRectTouched.mRotation;
                            resetSwipeRegions();
                        }
                        if (DEBUG) {
                            Log.d(TAG, "set active region: " + rect);
                        }
@@ -310,12 +335,12 @@ class OrientationTouchTransformer {

        boolean applyTransform(MotionEvent event, boolean forceTransform) {
            mTmpMatrix.reset();
            postDisplayRotation(deltaRotation(mCurrentRotation, mRotation),
            postDisplayRotation(deltaRotation(mCurrentDisplayRotation, mRotation),
                    mHeight, mWidth, mTmpMatrix);
            if (forceTransform) {
                if (DEBUG) {
                    Log.d(TAG, "Transforming rotation due to forceTransform, "
                            + "mCurrentRotation: " + mCurrentRotation
                            + "mCurrentRotation: " + mCurrentDisplayRotation
                            + "mRotation: " + mRotation);
                }
                event.transform(mTmpMatrix);
+10 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.quickstep;

import static android.content.Intent.ACTION_USER_UNLOCKED;

import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
import static com.android.quickstep.SysUINavigationMode.Mode.THREE_BUTTONS;
import static com.android.quickstep.SysUINavigationMode.Mode.TWO_BUTTONS;
@@ -120,7 +121,6 @@ public class RecentsAnimationDeviceState implements
    private Runnable mOnDestroyFrozenTaskRunnable;

    public RecentsAnimationDeviceState(Context context) {
        final ContentResolver resolver = context.getContentResolver();
        mContext = context;
        mSysUiNavMode = SysUINavigationMode.INSTANCE.get(context);
        mDefaultDisplay = DefaultDisplay.INSTANCE.get(context);
@@ -511,8 +511,16 @@ public class RecentsAnimationDeviceState implements
        mOrientationTouchTransformer.transform(event);
    }

    public void enableMultipleRegions(boolean enable) {
    void enableMultipleRegions(boolean enable) {
        mOrientationTouchTransformer.enableMultipleRegions(enable, mDefaultDisplay.getInfo());
        if (enable) {
            UI_HELPER_EXECUTOR.execute(() -> {
                int quickStepStartingRotation =
                        mOrientationTouchTransformer.getQuickStepStartingRotation();
                SystemUiProxy.INSTANCE.get(mContext)
                        .onQuickSwitchToNewTask(quickStepStartingRotation);
            });
        }
    }

    public int getCurrentActiveRotation() {
+1 −0
Original line number Diff line number Diff line
@@ -334,6 +334,7 @@ public class SystemUiProxy implements ISystemUiProxy {
        }
    }

    @Override
    public void onQuickSwitchToNewTask(int rotation) {
        if (mSystemUiProxy != null) {
            try {