diff options
5 files changed, 26 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/wm/AbsAppSnapshotController.java b/services/core/java/com/android/server/wm/AbsAppSnapshotController.java index 2d8aa3f06de3..09de01e88c9e 100644 --- a/services/core/java/com/android/server/wm/AbsAppSnapshotController.java +++ b/services/core/java/com/android/server/wm/AbsAppSnapshotController.java @@ -137,7 +137,7 @@ abstract class AbsAppSnapshotController<TYPE extends WindowContainer, } abstract ActivityRecord getTopActivity(TYPE source); - abstract ActivityRecord getTopFullscreenActivity(TYPE source); + abstract WindowState getTopFullscreenWindow(TYPE source); abstract ActivityManager.TaskDescription getTaskDescription(TYPE source); /** * Find the window for a given task to take a snapshot. Top child of the task is usually the one @@ -465,10 +465,7 @@ abstract class AbsAppSnapshotController<TYPE extends WindowContainer, */ @WindowInsetsController.Appearance private int getAppearance(TYPE source) { - final ActivityRecord topFullscreenActivity = getTopFullscreenActivity(source); - final WindowState topFullscreenWindow = topFullscreenActivity != null - ? topFullscreenActivity.findMainWindow() - : null; + final WindowState topFullscreenWindow = getTopFullscreenWindow(source); if (topFullscreenWindow != null) { return topFullscreenWindow.mAttrs.insetsFlags.appearance; } diff --git a/services/core/java/com/android/server/wm/ActivitySnapshotController.java b/services/core/java/com/android/server/wm/ActivitySnapshotController.java index 62fb4bfc74d7..48bc813b0a38 100644 --- a/services/core/java/com/android/server/wm/ActivitySnapshotController.java +++ b/services/core/java/com/android/server/wm/ActivitySnapshotController.java @@ -590,10 +590,8 @@ class ActivitySnapshotController extends AbsAppSnapshotController<ActivityRecord return activity; } - @Override - ActivityRecord getTopFullscreenActivity(ActivityRecord activity) { - final WindowState win = activity.findMainWindow(); - return (win != null && win.mAttrs.isFullscreen()) ? activity : null; + WindowState getTopFullscreenWindow(ActivityRecord activity) { + return activity.findMainWindow(); } @Override diff --git a/services/core/java/com/android/server/wm/StartingSurfaceController.java b/services/core/java/com/android/server/wm/StartingSurfaceController.java index cff40c768381..a1e6701f75fd 100644 --- a/services/core/java/com/android/server/wm/StartingSurfaceController.java +++ b/services/core/java/com/android/server/wm/StartingSurfaceController.java @@ -146,7 +146,10 @@ public class StartingSurfaceController { + activity); return null; } - final WindowState mainWindow = activity.findMainWindow(false); + // For snapshot surface, the top activity could be trampoline activity, so here should + // search for top fullscreen activity in the task. + final WindowState mainWindow = task + .getTopFullscreenMainWindow(false /* includeStartingApp */); if (mainWindow == null) { Slog.w(TAG, "TaskSnapshotSurface.create: no main window in " + activity); return null; diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 74f8a0683811..d5fea0c6d636 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3007,11 +3007,17 @@ class Task extends TaskFragment { return r.getTask().mTaskId != taskId && r.token != notTop && r.canBeTopRunning(); } - ActivityRecord getTopFullscreenActivity() { - return getActivity((r) -> { - final WindowState win = r.findMainWindow(); - return (win != null && win.mAttrs.isFullscreen()); + WindowState getTopFullscreenMainWindow(boolean includeStartingApp) { + final WindowState[] candidate = new WindowState[1]; + getActivity((r) -> { + final WindowState win = r.findMainWindow(includeStartingApp); + if (win != null && win.mAttrs.isFullscreen()) { + candidate[0] = win; + return true; + } + return false; }); + return candidate[0]; } /** @@ -3579,14 +3585,12 @@ class Task extends TaskFragment { // starting window because persisted configuration does not effect to Task. info.taskInfo.configuration.setTo(activity.getConfiguration()); if (!Flags.drawSnapshotAspectRatioMatch()) { - final ActivityRecord topFullscreenActivity = getTopFullscreenActivity(); - if (topFullscreenActivity != null) { - final WindowState mainWindow = topFullscreenActivity.findMainWindow(false); - if (mainWindow != null) { - info.topOpaqueWindowInsetsState = - mainWindow.getInsetsStateWithVisibilityOverride(); - info.topOpaqueWindowLayoutParams = mainWindow.getAttrs(); - } + final WindowState mainWindow = + getTopFullscreenMainWindow(false /* includeStartingApp */); + if (mainWindow != null) { + info.topOpaqueWindowInsetsState = + mainWindow.getInsetsStateWithVisibilityOverride(); + info.topOpaqueWindowLayoutParams = mainWindow.getAttrs(); } } return info; diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index 4218f8f88a07..57c7753d5c4b 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -261,8 +261,8 @@ class TaskSnapshotController extends AbsAppSnapshotController<Task, TaskSnapshot } @Override - ActivityRecord getTopFullscreenActivity(Task source) { - return source.getTopFullscreenActivity(); + WindowState getTopFullscreenWindow(Task source) { + return source.getTopFullscreenMainWindow(true /* includeStartingApp */); } @Override |