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

Commit d6d8503b authored by wilsonshih's avatar wilsonshih
Browse files

Fix extra transition animation played after back gesture trigger.

Add type check for TaskFragment.

Bug: 274997067
Test: triger back-to-activity animation on TaskFragment, then verify
there won't load no extra transition animation.

Change-Id: I9aff6399020df9012ba807a1b834c74ee07a7c50
parent 23b25b07
Loading
Loading
Loading
Loading
+25 −10
Original line number Diff line number Diff line
@@ -666,14 +666,29 @@ class BackNavigationController {
        private static final int TASK_SWITCH = 1;
        private static final int ACTIVITY_SWITCH = 2;

        private static boolean isActivitySwitch(WindowContainer close, WindowContainer open) {
            if (close.asActivityRecord() == null || open.asActivityRecord() == null
                    || (close.asActivityRecord().getTask()
                    != open.asActivityRecord().getTask())) {
                return false;
            }
            return true;
        }

        private static boolean isTaskSwitch(WindowContainer close, WindowContainer open) {
            if (close.asTask() == null || open.asTask() == null
                    || (close.asTask() == open.asTask())) {
                return false;
            }
            return true;
        }

        private void initiate(WindowContainer close, WindowContainer open)  {
            WindowContainer closeTarget;
            if (close.asActivityRecord() != null && open.asActivityRecord() != null
                    && (close.asActivityRecord().getTask() == open.asActivityRecord().getTask())) {
            if (isActivitySwitch(close, open)) {
                mSwitchType = ACTIVITY_SWITCH;
                closeTarget = close.asActivityRecord();
            } else if (close.asTask() != null && open.asTask() != null
                    && close.asTask() != open.asTask()) {
            } else if (isTaskSwitch(close, open)) {
                mSwitchType = TASK_SWITCH;
                closeTarget = close.asTask().getTopNonFinishingActivity();
            } else {
@@ -748,15 +763,15 @@ class BackNavigationController {
        }

        boolean isTarget(WindowContainer wc, boolean open) {
            if (open) {
                return wc == mOpenAdaptor.mTarget || mOpenAdaptor.mTarget.hasChild(wc);
            if (!mComposed) {
                return false;
            }

            final WindowContainer target = open ? mOpenAdaptor.mTarget : mCloseAdaptor.mTarget;
            if (mSwitchType == TASK_SWITCH) {
                return  wc == mCloseAdaptor.mTarget
                        || (wc.asTask() != null && wc.hasChild(mCloseAdaptor.mTarget));
                return  wc == target
                        || (wc.asTask() != null && wc.hasChild(target));
            } else if (mSwitchType == ACTIVITY_SWITCH) {
                return wc == mCloseAdaptor.mTarget;
                return wc == target || (wc.asTaskFragment() != null && wc.hasChild(target));
            }
            return false;
        }
+4 −14
Original line number Diff line number Diff line
@@ -2363,6 +2363,9 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
            if (isTranslucent(wc)) {
                flags |= FLAG_TRANSLUCENT;
            }
            if (wc.mWmService.mAtmService.mBackNavigationController.isMonitorTransitionTarget(wc)) {
                flags |= TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;
            }
            final Task task = wc.asTask();
            if (task != null) {
                final ActivityRecord topActivity = task.getTopNonFinishingActivity();
@@ -2371,19 +2374,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
                            && topActivity.mStartingData.hasImeSurface()) {
                        flags |= FLAG_WILL_IME_SHOWN;
                    }
                    if (topActivity.mAtmService.mBackNavigationController
                            .isMonitorTransitionTarget(topActivity)) {
                        flags |= TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;
                    }
                    if (topActivity != null && topActivity.mLaunchTaskBehind) {
                    if (topActivity.mLaunchTaskBehind) {
                        Slog.e(TAG, "Unexpected launch-task-behind operation in shell transition");
                        flags |= FLAG_TASK_LAUNCHING_BEHIND;
                    }
                } else {
                    if (task.mAtmService.mBackNavigationController
                            .isMonitorTransitionTarget(task)) {
                        flags |= TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;
                    }
                }
                if (task.voiceSession != null) {
                    flags |= FLAG_IS_VOICE_INTERACTION;
@@ -2397,10 +2391,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
                    flags |= FLAG_IS_VOICE_INTERACTION;
                }
                flags |= record.mTransitionChangeFlags;
                if (record.mAtmService.mBackNavigationController
                        .isMonitorTransitionTarget(record)) {
                    flags |= TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;
                }
            }
            final TaskFragment taskFragment = wc.asTaskFragment();
            if (taskFragment != null && task == null) {