summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Louis Chang <louischang@google.com> 2019-09-02 15:59:38 +0800
committer Louis Chang <louischang@google.com> 2019-09-06 05:34:16 +0000
commitfe0dfcbe2a15e350c25c252228329b84c58ad83c (patch)
tree9e843c0acf1eeec81807929591981e1a71943ae4
parent0383ea90acea6141829fc4bf80004f33ca42228c (diff)
Fix two activity stack leak cases
1) An activity stack was created while starting an activity. The stack should be destroyed if activity did not landed on the stack eventually. 2) Recent stack shouldn't be created if the recents component is also the home activity, while showing Recents in split-screen. Bug: 137232340 Test: atest ActivityStarterTests ActivityVisibilityTests Change-Id: Id870bc5249cd98b891ee7e6a1968f1ee2c6060fd
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java9
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java5
2 files changed, 10 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index a8eaaa4c2438..a09d3c8fc4f2 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -834,11 +834,12 @@ class ActivityStack extends ConfigurationContainer {
// so that the divider matches and remove this logic.
// TODO: This is currently only called when entering split-screen while in another
// task, and from the tests
- // TODO (b/78247419): Check if launcher and overview are same then move home stack
- // instead of recents stack. Then fix the rotation animation from fullscreen to
- // minimized mode
+ // TODO (b/78247419): Fix the rotation animation from fullscreen to minimized mode
+ final boolean isRecentsComponentHome =
+ mService.getRecentTasks().isRecentsComponentHomeActivity(mCurrentUser);
final ActivityStack recentStack = display.getOrCreateStack(
- WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_RECENTS,
+ WINDOWING_MODE_SPLIT_SCREEN_SECONDARY,
+ isRecentsComponentHome ? ACTIVITY_TYPE_HOME : ACTIVITY_TYPE_RECENTS,
true /* onTop */);
recentStack.moveToFront("setWindowingMode");
// If task moved to docked stack - show recents if needed.
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 5717e2fa02d2..66ebe097695b 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -2337,7 +2337,12 @@ class ActivityStarter {
REPARENT_MOVE_STACK_TO_FRONT, ANIMATE, DEFER_RESUME,
"reparentingHome");
mMovedToFront = true;
+ } else if (launchStack.topTask() == null) {
+ // The task does not need to be reparented to the launch stack. Remove the
+ // launch stack if there is no activity in it.
+ launchStack.remove();
}
+
mOptions = null;
// We are moving a task to the front, use starting window to hide initial drawn