Loading services/core/java/com/android/server/wm/BackNavigationController.java +25 −10 Original line number Diff line number Diff line Loading @@ -675,14 +675,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 { Loading Loading @@ -757,15 +772,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; } Loading services/core/java/com/android/server/wm/Transition.java +4 −14 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; Loading @@ -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) { Loading Loading
services/core/java/com/android/server/wm/BackNavigationController.java +25 −10 Original line number Diff line number Diff line Loading @@ -675,14 +675,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 { Loading Loading @@ -757,15 +772,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; } Loading
services/core/java/com/android/server/wm/Transition.java +4 −14 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; Loading @@ -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) { Loading