summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/AbsAppSnapshotController.java7
-rw-r--r--services/core/java/com/android/server/wm/ActivitySnapshotController.java6
-rw-r--r--services/core/java/com/android/server/wm/StartingSurfaceController.java5
-rw-r--r--services/core/java/com/android/server/wm/Task.java28
-rw-r--r--services/core/java/com/android/server/wm/TaskSnapshotController.java4
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