From 3f529ee7fa913531331310e00c4cc4dc471f5d1d Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Sun, 12 Jul 2015 15:14:01 -0700 Subject: [PATCH] Finish already paused activity if it should be finished after pausing If the app requests its activity to be finished allow it to be finished immediately if the activity is already paused. Also, don't schedule stop for an activity that was already finished in ActivityStack.stopActivityLocked(). Bug: 22170595 Bug: 22397812 Change-Id: If349f7d3070a1fd2c0688fda7381b42f625ed9e4 --- .../core/java/com/android/server/am/ActivityStack.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 8c3a9508922dc..470bbb0e29e3a 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -2669,8 +2669,13 @@ final class ActivityStack { if (!r.finishing) { if (!mService.isSleeping()) { if (DEBUG_STATES) Slog.d(TAG_STATES, "no-history finish of " + r); - requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null, - "stop-no-history", false); + if (requestFinishActivityLocked(r.appToken, Activity.RESULT_CANCELED, null, + "stop-no-history", false)) { + // Activity was finished, no need to continue trying to schedule stop. + adjustFocusedActivityLocked(r, "stopActivityFinished"); + r.resumeKeyDispatchingLocked(); + return; + } } else { if (DEBUG_STATES) Slog.d(TAG_STATES, "Not finishing noHistory " + r + " on stop because we're just sleeping"); @@ -2963,6 +2968,7 @@ final class ActivityStack { r.state = ActivityState.FINISHING; if (mode == FINISH_IMMEDIATELY + || (mode == FINISH_AFTER_PAUSE && prevState == ActivityState.PAUSED) || prevState == ActivityState.STOPPED || prevState == ActivityState.INITIALIZING) { // If this activity is already stopped, we can just finish