Add requestedVisibleTypes to TaskInfo
To allow Shell to know the inset types requested by each window/task
instead of the global aggregate available through InsetsState. This will
enable showing additional maximize/immersive UI affordances in the
caption bar depending on whether a specific window is requesting
immersive mode or not.
Flag: com.android.window.flags.enable_fully_immersive_in_desktop
Bug: 369388861
Test: m
Change-Id: I62a58b9c3d5623d4af977375e92bef86ede192b9
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java
index 99e6220..af242dd 100644
--- a/core/java/android/app/TaskInfo.java
+++ b/core/java/android/app/TaskInfo.java
@@ -35,6 +35,7 @@
import android.os.IBinder;
import android.os.Parcel;
import android.view.DisplayCutout;
+import android.view.WindowInsets;
import android.window.WindowContainerToken;
import java.util.ArrayList;
@@ -329,6 +330,13 @@
public long capturedLinkTimestamp;
/**
+ * The requested visible types of insets.
+ * @hide
+ */
+ @WindowInsets.Type.InsetsType
+ public int requestedVisibleTypes;
+
+ /**
* Encapsulate specific App Compat information.
* @hide
*/
@@ -465,6 +473,7 @@
&& lastNonFullscreenBounds == this.lastNonFullscreenBounds
&& Objects.equals(capturedLink, that.capturedLink)
&& capturedLinkTimestamp == that.capturedLinkTimestamp
+ && requestedVisibleTypes == that.requestedVisibleTypes
&& appCompatTaskInfo.equalsForTaskOrganizer(that.appCompatTaskInfo);
}
@@ -539,6 +548,7 @@
lastNonFullscreenBounds = source.readTypedObject(Rect.CREATOR);
capturedLink = source.readTypedObject(Uri.CREATOR);
capturedLinkTimestamp = source.readLong();
+ requestedVisibleTypes = source.readInt();
appCompatTaskInfo = source.readTypedObject(AppCompatTaskInfo.CREATOR);
}
@@ -591,6 +601,7 @@
dest.writeTypedObject(lastNonFullscreenBounds, flags);
dest.writeTypedObject(capturedLink, flags);
dest.writeLong(capturedLinkTimestamp);
+ dest.writeInt(requestedVisibleTypes);
dest.writeTypedObject(appCompatTaskInfo, flags);
}
@@ -633,6 +644,7 @@
+ " lastNonFullscreenBounds=" + lastNonFullscreenBounds
+ " capturedLink=" + capturedLink
+ " capturedLinkTimestamp=" + capturedLinkTimestamp
+ + " requestedVisibleTypes=" + requestedVisibleTypes
+ " appCompatTaskInfo=" + appCompatTaskInfo
+ "}";
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 86bb75a..15586b4 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -169,6 +169,7 @@
import android.view.InsetsState;
import android.view.RemoteAnimationAdapter;
import android.view.SurfaceControl;
+import android.view.WindowInsets;
import android.view.WindowManager;
import android.window.ITaskOrganizer;
import android.window.PictureInPictureSurfaceTransaction;
@@ -3399,6 +3400,9 @@
info.isTopActivityTransparent = top != null && !top.fillsParent();
info.isTopActivityStyleFloating = top != null && top.isStyleFloating();
info.lastNonFullscreenBounds = topTask.mLastNonFullscreenBounds;
+ final WindowState windowState = top != null ? top.findMainWindow() : null;
+ info.requestedVisibleTypes = (windowState != null && Flags.enableFullyImmersiveInDesktop())
+ ? windowState.getRequestedVisibleTypes() : WindowInsets.Type.defaultVisible();
AppCompatUtils.fillAppCompatTaskInfo(this, info, top);
}