summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-08-28 15:25:19 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-08-28 15:25:19 +0000
commitda5a3ac0299e0c9120f74ffb58b68c632e7fbfcc (patch)
tree534ee04a5f63d8d98106e90e5a29165343222123
parent09ff08d055236ffbec540861cc9179901aecc08e (diff)
parentcfe46219cfa5b75e5d444a7b2eedabda78c8b2e0 (diff)
Merge "Resuming the restarting activities only if they were on stack top"
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java3
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java18
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java17
3 files changed, 22 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index fc36e9984c1b..7d398a4a1c18 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -2918,7 +2918,7 @@ final class ActivityRecord extends ConfigurationContainer {
return false;
}
- boolean handleAlreadyVisible() {
+ void handleAlreadyVisible() {
stopFreezingScreenLocked(false);
try {
if (returningOptions != null) {
@@ -2926,7 +2926,6 @@ final class ActivityRecord extends ConfigurationContainer {
}
} catch(RemoteException e) {
}
- return mState == RESUMED;
}
static void activityResumedLocked(IBinder token) {
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index 8bdedffa581a..699580b2633d 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -2088,7 +2088,7 @@ class ActivityStack extends ConfigurationContainer {
boolean aboveTop = top != null;
final boolean stackShouldBeVisible = shouldBeVisible(starting);
boolean behindFullscreenActivity = !stackShouldBeVisible;
- boolean resumeNextActivity = isFocusable() && isInStackLocked(starting) == null;
+ final boolean resumeTopActivity = isFocusable() && isInStackLocked(starting) == null;
for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
final TaskRecord task = mTaskHistory.get(taskNdx);
final ArrayList<ActivityRecord> activities = task.mActivities;
@@ -2122,15 +2122,8 @@ class ActivityStack extends ConfigurationContainer {
}
if (!r.attachedToProcess()) {
- if (makeVisibleAndRestartIfNeeded(starting, configChanges, isTop,
- resumeNextActivity, r)) {
- if (activityNdx >= activities.size()) {
- // Record may be removed if its process needs to restart.
- activityNdx = activities.size() - 1;
- } else {
- resumeNextActivity = false;
- }
- }
+ makeVisibleAndRestartIfNeeded(starting, configChanges, isTop,
+ resumeTopActivity && isTop, r);
} else if (r.visible) {
// If this activity is already visible, then there is nothing to do here.
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY,
@@ -2140,10 +2133,7 @@ class ActivityStack extends ConfigurationContainer {
r.makeClientVisible();
}
- if (r.handleAlreadyVisible()) {
- resumeNextActivity = false;
- }
-
+ r.handleAlreadyVisible();
if (notifyClients) {
r.makeActiveIfNeeded(starting);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
index 60c5f0bd7188..c83e5cb71feb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java
@@ -26,6 +26,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMAR
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -1122,6 +1123,22 @@ public class ActivityStackTests extends ActivityTestsBase {
assertThat(result).isEqualTo(taskTop);
}
+ @Test
+ public void testNonTopVisibleActivityNotResume() {
+ final ActivityRecord nonTopVisibleActivity =
+ new ActivityBuilder(mService).setTask(mTask).build();
+ new ActivityBuilder(mService).setTask(mTask).build();
+ doReturn(false).when(nonTopVisibleActivity).attachedToProcess();
+ doReturn(true).when(nonTopVisibleActivity).shouldBeVisibleIgnoringKeyguard(anyBoolean());
+ doNothing().when(mSupervisor).startSpecificActivityLocked(any(), anyBoolean(),
+ anyBoolean());
+
+ mStack.ensureActivitiesVisibleLocked(null /* starting */, 0 /* configChanges */,
+ false /* preserveWindows */);
+ verify(mSupervisor).startSpecificActivityLocked(any(), eq(false) /* andResume */,
+ anyBoolean());
+ }
+
private void verifyShouldSleepActivities(boolean focusedStack,
boolean keyguardGoingAway, boolean displaySleeping, boolean expected) {
final ActivityDisplay display = mock(ActivityDisplay.class);