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

Commit 64cfa05d authored by wilsonshih's avatar wilsonshih
Browse files

Update orientation state while gesture animation start.

While quickswitch in landscape mode, the orientation handler would be
update to LandscapePagedViewHandler when receive onLauncherStart,
however, it might be too late because the VelocityTracker can already
tracking with PortraitPagedViewHandler at
AbsSwipeUpHandler#setupRecentsViewUi, which leads the wrong
judgement while PagedView#onTouchEvent handling the ACTION_UP that
the velocity can nearly 0 from mOrientationHandler.getPrimaryVelocity.

By update the orientation handler earlier at onGestureAnimationStart,
the velocity tracking result should stay consistent from ACTION_DOWN
till ACTION_UP.

Bug: 213867585
Bug: 209936664
Bug: 221805258
Test: run below tests w/o shell transition.
atest FlickerTests:QuickSwitchBetweenTwoAppsForwardTest
atest FlickerTests:QuickSwitchBetweenTwoAppsBackTest

Change-Id: If73fa8d88cc372b6f783fb6cdda4148d11a2ee19
parent f10b877f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -583,7 +583,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
        } else {
            runningTasks = new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()};
        }
        mRecentsView.onGestureAnimationStart(runningTasks);
        mRecentsView.onGestureAnimationStart(runningTasks, mDeviceState.getRotationTouchHelper());
    }

    private void launcherFrameDrawn() {
+2 −1
Original line number Diff line number Diff line
@@ -206,7 +206,8 @@ public class FallbackSwipeHandler extends
        if (mRunningOverHome) {
            if (DisplayController.getNavigationMode(mContext).hasGestures) {
                mRecentsView.onGestureAnimationStartOnHome(
                        new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()});
                        new ActivityManager.RunningTaskInfo[]{mGestureState.getRunningTask()},
                        mDeviceState.getRotationTouchHelper());
            }
        } else {
            super.notifyGestureAnimationStartToRecents();
+4 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.launcher3.util.SplitConfigurationOptions;
import com.android.quickstep.FallbackActivityInterface;
import com.android.quickstep.GestureState;
import com.android.quickstep.RecentsActivity;
import com.android.quickstep.RotationTouchHelper;
import com.android.quickstep.util.GroupTask;
import com.android.quickstep.util.SplitSelectStateController;
import com.android.quickstep.util.TaskViewSimulator;
@@ -86,11 +87,12 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity, RecentsSta
     * to the home task. This allows us to handle quick-switch similarly to a quick-switching
     * from a foreground task.
     */
    public void onGestureAnimationStartOnHome(RunningTaskInfo[] homeTaskInfo) {
    public void onGestureAnimationStartOnHome(RunningTaskInfo[] homeTaskInfo,
            RotationTouchHelper rotationTouchHelper) {
        // TODO(b/195607777) General fallback love, but this might be correct
        //  Home task should be defined as the front-most task info I think?
        mHomeTaskInfo = homeTaskInfo[0];
        onGestureAnimationStart(homeTaskInfo);
        onGestureAnimationStart(homeTaskInfo, rotationTouchHelper);
    }

    /**
+5 −2
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@ import com.android.quickstep.RecentsModel.TaskVisualsChangeListener;
import com.android.quickstep.RemoteAnimationTargets;
import com.android.quickstep.RemoteTargetGluer;
import com.android.quickstep.RemoteTargetGluer.RemoteTargetHandle;
import com.android.quickstep.RotationTouchHelper;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.TaskOverlayFactory;
import com.android.quickstep.TaskThumbnailCache;
@@ -2064,11 +2065,13 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
    /**
     * Called when a gesture from an app is starting.
     */
    public void onGestureAnimationStart(RunningTaskInfo[] runningTaskInfo) {
    public void onGestureAnimationStart(RunningTaskInfo[] runningTaskInfo,
            RotationTouchHelper rotationTouchHelper) {
        mGestureActive = true;
        // This needs to be called before the other states are set since it can create the task view
        if (mOrientationState.setGestureActive(true)) {
            updateOrientationHandler();
            setLayoutRotation(rotationTouchHelper.getCurrentActiveRotation(),
                    rotationTouchHelper.getDisplayRotation());
        }

        showCurrentTask(runningTaskInfo);