diff options
| author | 2019-06-17 22:57:15 -0700 | |
|---|---|---|
| committer | 2019-06-17 22:57:15 -0700 | |
| commit | f669f40d15f71682f989752a055a7c40ba80ea1f (patch) | |
| tree | a82dd41ca66b56645534dbf59bc6140becbab5e1 | |
| parent | 736f63e16e382e4b07d6fc1d81a4e1e068b8a526 (diff) | |
| parent | 212ed95c850efd71a5171347f0a49710d2af68d5 (diff) | |
Merge "Set activity state to PAUSED when making visible from STOPPING/STOPPED" into qt-dev am: 1b33cfbc12
am: 212ed95c85
Change-Id: Ie48e14c4b98def810df11ac57f7bda865c87fb60
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 7 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java | 15 |
2 files changed, 18 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 1344727ab36d..0faea61b9d60 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2039,6 +2039,13 @@ final class ActivityRecord extends ConfigurationContainer { mAtmService.getLifecycleManager().scheduleTransaction(app.getThread(), appToken, WindowVisibilityItem.obtain(true /* showWindow */)); makeActiveIfNeeded(null /* activeActivity*/); + if (isState(STOPPING, STOPPED) && isFocusable()) { + // #shouldMakeActive() only evaluates the topmost activities in task, so + // activities that are not the topmost in task are not being resumed or paused. + // For activities that are still in STOPPING or STOPPED state, updates the state + // to PAUSE at least when making it visible. + setState(PAUSED, "makeClientVisible"); + } } catch (Exception e) { Slog.w(TAG, "Exception thrown sending visibility update: " + intent.getComponent(), e); } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 11a177a71a10..8fbb7f53e668 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -31,6 +31,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; import static com.android.dx.mockito.inline.extended.ExtendedMockito.when; import static com.android.server.wm.ActivityStack.ActivityState.INITIALIZING; +import static com.android.server.wm.ActivityStack.ActivityState.PAUSED; import static com.android.server.wm.ActivityStack.ActivityState.PAUSING; import static com.android.server.wm.ActivityStack.ActivityState.RESUMED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPED; @@ -56,7 +57,6 @@ import android.app.servertransaction.PauseActivityItem; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Rect; -import android.os.RemoteException; import android.platform.test.annotations.Presubmit; import android.util.MergedConfiguration; import android.util.MutableBoolean; @@ -163,12 +163,10 @@ public class ActivityRecordTests extends ActivityTestsBase { // Make sure the state does not change if we are not the current top activity. mActivity.setState(STOPPED, "testPausingWhenVisibleFromStopped behind"); - // Make sure that the state does not change when we have an activity becoming translucent final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); mStack.mTranslucentActivityWaiting = topActivity; mActivity.makeVisibleIfNeeded(null /* starting */, true /* reportToClient */); - - assertTrue(mActivity.isState(STOPPED)); + assertTrue(mActivity.isState(PAUSED)); } private void ensureActivityConfiguration() { @@ -439,6 +437,15 @@ public class ActivityRecordTests extends ActivityTestsBase { } @Test + public void testShouldPauseWhenMakeClientVisible() { + ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build(); + topActivity.changeWindowTranslucency(false); + mActivity.setState(ActivityStack.ActivityState.STOPPED, "Testing"); + mActivity.makeClientVisible(); + assertEquals(PAUSED, mActivity.getState()); + } + + @Test public void testSizeCompatMode_FixedAspectRatioBoundsWithDecor() { setupDisplayContentForCompatDisplayInsets(); final int decorHeight = 200; // e.g. The device has cutout. |