diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/BackNavigationController.java | 35 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Transition.java | 18 |
2 files changed, 29 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index b67bc62e52f1..afb73acbeef0 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -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; } diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 2cfd2af89c80..8fa7592e6da0 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -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) { |