diff options
| author | 2023-03-15 12:29:00 +0000 | |
|---|---|---|
| committer | 2023-03-15 12:29:00 +0000 | |
| commit | 5fe3c3e64ad57e3d6fae52f794dc4c5aea238470 (patch) | |
| tree | 21190343ee3f1904841f95d5e9d739a50b33cdd0 | |
| parent | ccf0a674ec1b564728b3d77b36bb90366700296a (diff) | |
| parent | 8494acd9abb697fb35d26eaf3d2cbd412238ec63 (diff) | |
Merge "Change TaskInfo topActivityInSizeCompat to look at visibility" into tm-qpr-dev
3 files changed, 26 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index ddfd5ae2f27d..3461bc27b40c 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3453,8 +3453,10 @@ class Task extends TaskFragment { final boolean isTopActivityResumed = top != null && top.getOrganizedTask() == this && top.isState(RESUMED); - // Whether the direct top activity is in size compat mode on foreground. - info.topActivityInSizeCompat = isTopActivityResumed && top.inSizeCompatMode(); + final boolean isTopActivityVisible = top != null + && top.getOrganizedTask() == this && top.isVisible(); + // Whether the direct top activity is in size compat mode + info.topActivityInSizeCompat = isTopActivityVisible && top.inSizeCompatMode(); if (info.topActivityInSizeCompat && mWmService.mLetterboxConfiguration.isTranslucentLetterboxingEnabled()) { // We hide the restart button in case of transparent activities. diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index d77b6ada268e..3ab9ea906128 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -51,6 +51,7 @@ import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANG import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__LETTERBOXED_FOR_SIZE_COMPAT_MODE; import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__NOT_LETTERBOXED; import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__NOT_VISIBLE; +import static com.android.server.wm.ActivityRecord.State.PAUSED; import static com.android.server.wm.ActivityRecord.State.RESTARTING_PROCESS; import static com.android.server.wm.ActivityRecord.State.RESUMED; import static com.android.server.wm.ActivityRecord.State.STOPPED; @@ -3884,6 +3885,24 @@ public class SizeCompatTests extends WindowTestsBase { assertTrue(mActivity.inSizeCompatMode()); } + @Test + public void testTopActivityInSizeCompatMode_pausedAndInSizeCompatMode_returnsTrue() { + setUpDisplaySizeWithApp(1000, 2500); + mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */); + + spyOn(mActivity); + doReturn(mTask).when(mActivity).getOrganizedTask(); + prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT); + + rotateDisplay(mActivity.mDisplayContent, ROTATION_90); + mActivity.setState(PAUSED, "test"); + + assertTrue(mActivity.inSizeCompatMode()); + assertEquals(mActivity.getState(), PAUSED); + assertTrue(mActivity.isVisible()); + assertTrue(mTask.getTaskInfo().topActivityInSizeCompat); + } + /** * Tests that all three paths in which aspect ratio logic can be applied yield the same * result, which is that aspect ratio is respected on app bounds. The three paths are diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index fa98537f8909..87c2a9af8c15 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -1485,9 +1485,9 @@ public class WindowOrganizerTests extends WindowTestsBase { assertEquals(rootTask.mTaskId, info.taskId); assertTrue(info.topActivityInSizeCompat); - // Ensure task info show top activity that is not in foreground as not in size compat. + // Ensure task info show top activity that is not visible as not in size compat. clearInvocations(organizer); - doReturn(false).when(activity).isState(RESUMED); + doReturn(false).when(activity).isVisible(); rootTask.onSizeCompatActivityChanged(); mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); verify(organizer).onTaskInfoChanged(infoCaptor.capture()); @@ -1497,7 +1497,7 @@ public class WindowOrganizerTests extends WindowTestsBase { // Ensure task info show non size compat top activity as not in size compat. clearInvocations(organizer); - doReturn(true).when(activity).isState(RESUMED); + doReturn(true).when(activity).isVisible(); doReturn(false).when(activity).inSizeCompatMode(); rootTask.onSizeCompatActivityChanged(); mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents(); |