From 049e2a46aa26dd7332859913ae54bdf02a8cd9e1 Mon Sep 17 00:00:00 2001 From: Yunfan Chen Date: Fri, 10 Sep 2021 14:21:11 +0900 Subject: [PATCH] Make requested visibility available in snapshot starting window This change make the snapshot starting window holds the requested visibilities when created from the task. Such that, when the window get back from the background, the insets state in the window state can have the correct visibilities. Test: check getInsetsStateWithVisibilityOverride as described in the bug. Bug: 196637509 Bug: 185729224 Change-Id: I54ab0791b169331c22cd89f7e6da640322bf7dd3 --- core/java/android/view/InsetsVisibilities.java | 4 ++++ core/java/android/window/StartingWindowInfo.java | 15 ++++++++++++--- .../startingsurface/StartingWindowController.java | 2 +- .../shell/startingsurface/TaskSnapshotWindow.java | 4 +--- .../phone/PhoneStartingWindowTypeAlgorithm.java | 2 +- .../core/java/com/android/server/wm/Task.java | 1 + .../server/wm/TaskOrganizerController.java | 2 +- 7 files changed, 21 insertions(+), 9 deletions(-) diff --git a/core/java/android/view/InsetsVisibilities.java b/core/java/android/view/InsetsVisibilities.java index 30668bad34242..7d259fb916343 100644 --- a/core/java/android/view/InsetsVisibilities.java +++ b/core/java/android/view/InsetsVisibilities.java @@ -116,6 +116,10 @@ public class InsetsVisibilities implements Parcelable { dest.writeIntArray(mVisibilities); } + public void readFromParcel(@NonNull Parcel in) { + in.readIntArray(mVisibilities); + } + public static final @NonNull Creator CREATOR = new Creator() { diff --git a/core/java/android/window/StartingWindowInfo.java b/core/java/android/window/StartingWindowInfo.java index 8c64474dc887c..10d21a0ff003d 100644 --- a/core/java/android/window/StartingWindowInfo.java +++ b/core/java/android/window/StartingWindowInfo.java @@ -26,6 +26,7 @@ import android.content.pm.ActivityInfo; import android.os.Parcel; import android.os.Parcelable; import android.view.InsetsState; +import android.view.InsetsVisibilities; import android.view.WindowManager; /** @@ -165,7 +166,13 @@ public final class StartingWindowInfo implements Parcelable { * TaskSnapshot. * @hide */ - public TaskSnapshot mTaskSnapshot; + public TaskSnapshot taskSnapshot; + + /** + * The requested insets visibility of the top main window. + * @hide + */ + public final InsetsVisibilities requestedVisibilities = new InsetsVisibilities(); public StartingWindowInfo() { @@ -190,7 +197,8 @@ public final class StartingWindowInfo implements Parcelable { dest.writeTypedObject(mainWindowLayoutParams, flags); dest.writeInt(splashScreenThemeResId); dest.writeBoolean(isKeyguardOccluded); - dest.writeTypedObject(mTaskSnapshot, flags); + dest.writeTypedObject(taskSnapshot, flags); + requestedVisibilities.writeToParcel(dest, flags); } void readFromParcel(@NonNull Parcel source) { @@ -203,7 +211,8 @@ public final class StartingWindowInfo implements Parcelable { mainWindowLayoutParams = source.readTypedObject(WindowManager.LayoutParams.CREATOR); splashScreenThemeResId = source.readInt(); isKeyguardOccluded = source.readBoolean(); - mTaskSnapshot = source.readTypedObject(TaskSnapshot.CREATOR); + taskSnapshot = source.readTypedObject(TaskSnapshot.CREATOR); + requestedVisibilities.readFromParcel(source); } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java index a5c47c41180ec..97d75c5e2200e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java @@ -134,7 +134,7 @@ public class StartingWindowController implements RemoteCallable