summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wei Sheng Shih <wilsonshih@google.com> 2024-05-29 02:42:28 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-05-29 02:42:28 +0000
commitc560677933bd50c43e6949c6b4ecbc71c0da96f2 (patch)
treeb9af14ffa31e29815f60e2d5ceec08df92c35449
parent17eee9ad652e6463a15c6173896638fb8a10d23a (diff)
parent7baaa82e0ac169d0781c1b7d1e674ed113b31783 (diff)
Merge "Fix snapshot window jump due to top window has another cutout mode" into main
-rw-r--r--services/core/java/com/android/server/wm/AbsAppSnapshotController.java12
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java14
-rw-r--r--services/core/java/com/android/server/wm/StartingSurfaceController.java14
-rw-r--r--services/core/java/com/android/server/wm/Task.java9
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java21
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() {