diff options
| author | 2020-05-04 12:37:25 +0800 | |
|---|---|---|
| committer | 2020-05-07 16:41:05 +0800 | |
| commit | b1daa5e262b1b4da7e48763967ad6813d7c1aca5 (patch) | |
| tree | f6f4cd6dba6be78bb9be5bc9a01cbfc34dd567fc | |
| parent | 950aca5795537311f014fc39998172db42727e24 (diff) | |
Updates visibility before trying to notify task stack changes
The previous activity would be immediately paused while starting
a resume-while-pausing activity, but we did not notify the
task stack changes to the listeners because the activity visibilities
weren't updated yet.
Bug: 154447447
Test: atest TaskStackChangedListenerTest
Change-Id: Id5da1c8f0fdf755341381bf49d8f48f396eebb55
3 files changed, 29 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index db5e97250cd2..4860a8ee3ea1 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -1334,6 +1334,8 @@ class ActivityStack extends Task { prev.cpuTimeAtResume = 0; // reset it } + mRootWindowContainer.ensureActivitiesVisible(resuming, 0, !PRESERVE_WINDOWS); + // Notify when the task stack has changed, but only if visibilities changed (not just // focus). Also if there is an active pinned stack - we always want to notify it about // task stack changes, because its positioning may depend on it. @@ -1342,8 +1344,6 @@ class ActivityStack extends Task { mAtmService.getTaskChangeNotificationController().notifyTaskStackChanged(); mStackSupervisor.mAppVisibilitiesChangedSinceLastPause = false; } - - mRootWindowContainer.ensureActivitiesVisible(resuming, 0, !PRESERVE_WINDOWS); } boolean isTopStackInDisplayArea() { diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml index fdc9401a66b0..f382fbae9280 100644 --- a/services/tests/wmtests/AndroidManifest.xml +++ b/services/tests/wmtests/AndroidManifest.xml @@ -58,6 +58,8 @@ android:screenOrientation="sensorLandscape" android:showWhenLocked="true" android:turnScreenOn="true" /> + <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ResumeWhilePausingActivity" + android:resumeWhilePausing="true"/> <activity android:name="com.android.server.wm.ScreenDecorWindowTests$TestActivity" android:showWhenLocked="true" android:allowEmbedded="true"/> </application> diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java index 4e92ea0f82e6..965edd4f8b11 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskStackChangedListenerTest.java @@ -81,6 +81,7 @@ public class TaskStackChangedListenerTest { @Before public void setUp() throws Exception { mService = ActivityManager.getService(); + sTaskStackChangedCalled = false; } @After @@ -114,6 +115,28 @@ public class TaskStackChangedListenerTest { @Test @Presubmit + public void testTaskStackChanged_resumeWhilePausing() throws Exception { + registerTaskStackChangedListener(new TaskStackListener() { + @Override + public void onTaskStackChanged() throws RemoteException { + synchronized (sLock) { + sTaskStackChangedCalled = true; + } + } + }); + + final Context context = getInstrumentation().getContext(); + context.startActivity(new Intent(context, ResumeWhilePausingActivity.class).addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK)); + UiDevice.getInstance(getInstrumentation()).waitForIdle(); + + synchronized (sLock) { + assertTrue(sTaskStackChangedCalled); + } + } + + @Test + @Presubmit public void testTaskDescriptionChanged() throws Exception { final Object[] params = new Object[2]; final CountDownLatch latch = new CountDownLatch(1); @@ -617,5 +640,7 @@ public class TaskStackChangedListenerTest { // Activity that has {@link android.R.attr#resizeableActivity} attribute set to {@code true} public static class ActivityInActivityView extends TestActivity {} + public static class ResumeWhilePausingActivity extends TestActivity {} + public static class LandscapeActivity extends TestActivity {} } |