summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrii Kulian <akulian@google.com>2016-07-29 12:55:41 -0700
committergitbuildkicker <android-build@google.com>2016-08-31 22:21:10 -0700
commit496a58155cc12c67592e1172990bf50ee3df7646 (patch)
tree7e66d7f1e8245df230c895630997146ea9c50e82
parented429599ec2cb62c74bbf325ff8197ccf63a551d (diff)
downloadbase-496a58155cc12c67592e1172990bf50ee3df7646.tar.gz
DO NOT MERGE -- Fix finishing activity in non-focused stack
This CL explicitly checks if we're finishing activity in non-focused stack as there are other cases except this one when we finish paused activities in FINISH_AFTER_VISIBLE mode. Bug: 29007436 Bug: 29458854 Change-Id: I67744d23cd72f2fe8861180008bfdd284a7b5e26 (cherry picked from commit 995fa2bd2d334a37e10760c21ac108f4a3595713) (cherry picked from commit 772c598f660444306c9d8bff42e5fba08132e5cf)
-rw-r--r--services/core/java/com/android/server/am/ActivityStack.java13
1 files changed, 8 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 994200953eb7..5859d34cb14f 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -3542,19 +3542,22 @@ final class ActivityStack {
final ActivityState prevState = r.state;
if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to FINISHING: " + r);
r.state = ActivityState.FINISHING;
+ final boolean finishingActivityInNonFocusedStack
+ = r.task.stack != mStackSupervisor.getFocusedStack()
+ && prevState == ActivityState.PAUSED && mode == FINISH_AFTER_VISIBLE;
if (mode == FINISH_IMMEDIATELY
|| (prevState == ActivityState.PAUSED
- && (mode == FINISH_AFTER_PAUSE || mode == FINISH_AFTER_VISIBLE
- || mStackId == PINNED_STACK_ID))
+ && (mode == FINISH_AFTER_PAUSE || mStackId == PINNED_STACK_ID))
+ || finishingActivityInNonFocusedStack
|| prevState == ActivityState.STOPPED
|| prevState == ActivityState.INITIALIZING) {
r.makeFinishingLocked();
boolean activityRemoved = destroyActivityLocked(r, true, "finish-imm");
- if (prevState == ActivityState.PAUSED && mode == FINISH_AFTER_VISIBLE) {
- // Finishing activity that was in paused state - this can happen if it was in
- // not currently focused stack. Need to make something visible in its place.
+ if (finishingActivityInNonFocusedStack) {
+ // Finishing activity that was in paused state and it was in not currently focused
+ // stack, need to make something visible in its place.
mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
}
if (activityRemoved) {