summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/BackNavigationController.java35
-rw-r--r--services/core/java/com/android/server/wm/Transition.java18
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 fb79c0677a2f..6eb2e05a8e3b 100644
--- a/services/core/java/com/android/server/wm/BackNavigationController.java
+++ b/services/core/java/com/android/server/wm/BackNavigationController.java
@@ -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 {
@@ -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;
}
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) {