diff options
| author | 2024-09-23 11:30:11 +0800 | |
|---|---|---|
| committer | 2024-10-21 23:49:07 +0800 | |
| commit | 38f03c23f313bbd2984bc6cf7e33b2b61a191741 (patch) | |
| tree | 21eef9d7ec8a2f20b358c577b93a79c607258fb9 | |
| parent | 695fddd9dcf18bd5bdae725b12ab0a3e3acd3961 (diff) | |
Report non-match parent window bounds in TaskInfo
Test: presubmit
Bug: 356277166
Flag: com.android.window.flags.better_support_non_match_parent_activity
Change-Id: Ib5da0c4761227b611dac20d98e3eb311f3ee081b
| -rw-r--r-- | core/java/android/app/TaskInfo.java | 15 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/Task.java | 30 |
2 files changed, 44 insertions, 1 deletions
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java index e882bb564db9..081ce31e0886 100644 --- a/core/java/android/app/TaskInfo.java +++ b/core/java/android/app/TaskInfo.java @@ -345,6 +345,15 @@ public class TaskInfo { */ public AppCompatTaskInfo appCompatTaskInfo = AppCompatTaskInfo.create(); + /** + * The top activity's main window frame if it doesn't match the top activity bounds. + * {@code null}, otherwise. + * + * @hide + */ + @Nullable + public Rect topActivityMainWindowFrame; + TaskInfo() { // Do nothing } @@ -477,7 +486,8 @@ public class TaskInfo { && Objects.equals(capturedLink, that.capturedLink) && capturedLinkTimestamp == that.capturedLinkTimestamp && requestedVisibleTypes == that.requestedVisibleTypes - && appCompatTaskInfo.equalsForTaskOrganizer(that.appCompatTaskInfo); + && appCompatTaskInfo.equalsForTaskOrganizer(that.appCompatTaskInfo) + && Objects.equals(topActivityMainWindowFrame, that.topActivityMainWindowFrame); } /** @@ -553,6 +563,7 @@ public class TaskInfo { capturedLinkTimestamp = source.readLong(); requestedVisibleTypes = source.readInt(); appCompatTaskInfo = source.readTypedObject(AppCompatTaskInfo.CREATOR); + topActivityMainWindowFrame = source.readTypedObject(Rect.CREATOR); } /** @@ -606,6 +617,7 @@ public class TaskInfo { dest.writeLong(capturedLinkTimestamp); dest.writeInt(requestedVisibleTypes); dest.writeTypedObject(appCompatTaskInfo, flags); + dest.writeTypedObject(topActivityMainWindowFrame, flags); } @Override @@ -649,6 +661,7 @@ public class TaskInfo { + " capturedLinkTimestamp=" + capturedLinkTimestamp + " requestedVisibleTypes=" + requestedVisibleTypes + " appCompatTaskInfo=" + appCompatTaskInfo + + " topActivityMainWindowFrame=" + topActivityMainWindowFrame + "}"; } } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 4861341f830a..e930e9753c13 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3410,6 +3410,36 @@ class Task extends TaskFragment { info.requestedVisibleTypes = (windowState != null && Flags.enableFullyImmersiveInDesktop()) ? windowState.getRequestedVisibleTypes() : WindowInsets.Type.defaultVisible(); AppCompatUtils.fillAppCompatTaskInfo(this, info, top); + info.topActivityMainWindowFrame = calculateTopActivityMainWindowFrameForTaskInfo(top); + } + + /** + * Returns the top activity's main window frame if it doesn't match + * {@link ActivityRecord#getBounds() the top activity bounds}, or {@code null}, otherwise. + * + * @param top The top running activity of the task + */ + @Nullable + private static Rect calculateTopActivityMainWindowFrameForTaskInfo( + @Nullable ActivityRecord top) { + if (!Flags.betterSupportNonMatchParentActivity()) { + return null; + } + if (top == null) { + return null; + } + final WindowState mainWindow = top.findMainWindow(); + if (mainWindow == null) { + return null; + } + if (!mainWindow.mHaveFrame) { + return null; + } + final Rect windowFrame = mainWindow.getFrame(); + if (top.getBounds().equals(windowFrame)) { + return null; + } + return windowFrame; } /** |