diff options
| author | 2024-05-29 02:42:28 +0000 | |
|---|---|---|
| committer | 2024-05-29 02:42:28 +0000 | |
| commit | c560677933bd50c43e6949c6b4ecbc71c0da96f2 (patch) | |
| tree | b9af14ffa31e29815f60e2d5ceec08df92c35449 | |
| parent | 17eee9ad652e6463a15c6173896638fb8a10d23a (diff) | |
| parent | 7baaa82e0ac169d0781c1b7d1e674ed113b31783 (diff) | |
Merge "Fix snapshot window jump due to top window has another cutout mode" into main
5 files changed, 14 insertions, 56 deletions
diff --git a/services/core/java/com/android/server/wm/AbsAppSnapshotController.java b/services/core/java/com/android/server/wm/AbsAppSnapshotController.java index fd4b06148c5f..0e0b78fb3206 100644 --- a/services/core/java/com/android/server/wm/AbsAppSnapshotController.java +++ b/services/core/java/com/android/server/wm/AbsAppSnapshotController.java @@ -466,17 +466,17 @@ abstract class AbsAppSnapshotController<TYPE extends WindowContainer, } /** - * @return The {@link WindowInsetsController.Appearance} flags for the top fullscreen opaque - * window in the given {@param TYPE}. + * @return The {@link WindowInsetsController.Appearance} flags for the top main app window in + * the given {@param TYPE}. */ @WindowInsetsController.Appearance private int getAppearance(TYPE source) { final ActivityRecord topFullscreenActivity = getTopFullscreenActivity(source); - final WindowState topFullscreenOpaqueWindow = topFullscreenActivity != null - ? topFullscreenActivity.getTopFullscreenOpaqueWindow() + final WindowState topFullscreenWindow = topFullscreenActivity != null + ? topFullscreenActivity.findMainWindow() : null; - if (topFullscreenOpaqueWindow != null) { - return topFullscreenOpaqueWindow.mAttrs.insetsFlags.appearance; + if (topFullscreenWindow != null) { + return topFullscreenWindow.mAttrs.insetsFlags.appearance; } return 0; } diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index eb6262c95d84..434e92f7978a 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7660,20 +7660,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } - /** - * @return The to top most child window for which {@link LayoutParams#isFullscreen()} returns - * true and isn't fully transparent. - */ - WindowState getTopFullscreenOpaqueWindow() { - for (int i = mChildren.size() - 1; i >= 0; i--) { - final WindowState win = mChildren.get(i); - if (win != null && win.mAttrs.isFullscreen() && !win.isFullyTransparent()) { - return win; - } - } - return null; - } - WindowState findMainWindow() { return findMainWindow(true); } diff --git a/services/core/java/com/android/server/wm/StartingSurfaceController.java b/services/core/java/com/android/server/wm/StartingSurfaceController.java index 05eeeb381d8a..cff40c768381 100644 --- a/services/core/java/com/android/server/wm/StartingSurfaceController.java +++ b/services/core/java/com/android/server/wm/StartingSurfaceController.java @@ -140,23 +140,15 @@ public class StartingSurfaceController { } StartingSurface createTaskSnapshotSurface(ActivityRecord activity, TaskSnapshot taskSnapshot) { - final WindowState topFullscreenOpaqueWindow; final Task task = activity.getTask(); if (task == null) { Slog.w(TAG, "TaskSnapshotSurface.create: Failed to find task for activity=" + activity); return null; } - final ActivityRecord topFullscreenActivity = task.getTopFullscreenActivity(); - if (topFullscreenActivity == null) { - Slog.w(TAG, "TaskSnapshotSurface.create: Failed to find top fullscreen for task=" - + task); - return null; - } - topFullscreenOpaqueWindow = topFullscreenActivity.getTopFullscreenOpaqueWindow(); - if (topFullscreenOpaqueWindow == null) { - Slog.w(TAG, "TaskSnapshotSurface.create: no opaque window in " - + topFullscreenActivity); + final WindowState mainWindow = activity.findMainWindow(false); + if (mainWindow == null) { + Slog.w(TAG, "TaskSnapshotSurface.create: no main window in " + activity); return null; } if (activity.mDisplayContent.getRotation() != taskSnapshot.getRotation()) { diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index a555388ab233..e8025276df85 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3626,12 +3626,11 @@ class Task extends TaskFragment { info.taskInfo.configuration.setTo(activity.getConfiguration()); final ActivityRecord topFullscreenActivity = getTopFullscreenActivity(); if (topFullscreenActivity != null) { - final WindowState topFullscreenOpaqueWindow = - topFullscreenActivity.getTopFullscreenOpaqueWindow(); - if (topFullscreenOpaqueWindow != null) { + final WindowState mainWindow = topFullscreenActivity.findMainWindow(false); + if (mainWindow != null) { info.topOpaqueWindowInsetsState = - topFullscreenOpaqueWindow.getInsetsStateWithVisibilityOverride(); - info.topOpaqueWindowLayoutParams = topFullscreenOpaqueWindow.getAttrs(); + mainWindow.getInsetsStateWithVisibilityOverride(); + info.topOpaqueWindowLayoutParams = mainWindow.getAttrs(); } } return info; 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 70319754253b..4a9760bc3317 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -2057,7 +2057,7 @@ public class ActivityRecordTests extends WindowTestsBase { final ActivityRecord activity = createActivityWithTask(); // TaskSnapshotSurface requires a fullscreen opaque window. final WindowManager.LayoutParams params = new WindowManager.LayoutParams( - WindowManager.LayoutParams.TYPE_APPLICATION_STARTING); + TYPE_BASE_APPLICATION); params.width = params.height = WindowManager.LayoutParams.MATCH_PARENT; final TestWindowState w = new TestWindowState( mAtm.mWindowManager, getTestSession(), new TestIWindow(), params, activity); @@ -2504,25 +2504,6 @@ public class ActivityRecordTests extends WindowTestsBase { activity.removeImmediately(); } - @Test - @Presubmit - public void testGetTopFullscreenOpaqueWindow() { - final ActivityRecord activity = new ActivityBuilder(mAtm).setCreateTask(true).build(); - assertNull(activity.getTopFullscreenOpaqueWindow()); - - final WindowState window1 = createWindow(null, TYPE_BASE_APPLICATION, activity, "window1"); - final WindowState window11 = createWindow(null, TYPE_APPLICATION, activity, "window11"); - final WindowState window12 = createWindow(null, TYPE_APPLICATION, activity, "window12"); - assertEquals(window12, activity.getTopFullscreenOpaqueWindow()); - window12.mAttrs.width = 500; - assertEquals(window11, activity.getTopFullscreenOpaqueWindow()); - window11.mAttrs.width = 500; - assertEquals(window1, activity.getTopFullscreenOpaqueWindow()); - window1.mAttrs.alpha = 0f; - assertNull(activity.getTopFullscreenOpaqueWindow()); - activity.removeImmediately(); - } - @SetupWindows(addWindows = W_ACTIVITY) @Test public void testLandscapeSeascapeRotationByApp() { |