Merge "Don't handle the system UI visibility at server side"
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 0015bc6..5537edb 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -78,6 +78,7 @@
import android.util.Singleton;
import android.util.Size;
import android.view.Surface;
+import android.view.WindowInsetsController.Appearance;
import com.android.internal.app.LocalePicker;
import com.android.internal.app.procstats.ProcessStats;
@@ -2116,7 +2117,7 @@
// the task having a secure window or having previews disabled
private final boolean mIsRealSnapshot;
private final int mWindowingMode;
- private final int mSystemUiVisibility;
+ private final @Appearance int mAppearance;
private final boolean mIsTranslucent;
// Must be one of the named color spaces, otherwise, always use SRGB color space.
private final ColorSpace mColorSpace;
@@ -2125,7 +2126,7 @@
@NonNull ComponentName topActivityComponent, HardwareBuffer snapshot,
@NonNull ColorSpace colorSpace, int orientation, int rotation, Point taskSize,
Rect contentInsets, boolean isLowResolution, boolean isRealSnapshot,
- int windowingMode, int systemUiVisibility, boolean isTranslucent) {
+ int windowingMode, @Appearance int appearance, boolean isTranslucent) {
mId = id;
mTopActivityComponent = topActivityComponent;
mSnapshot = snapshot;
@@ -2138,7 +2139,7 @@
mIsLowResolution = isLowResolution;
mIsRealSnapshot = isRealSnapshot;
mWindowingMode = windowingMode;
- mSystemUiVisibility = systemUiVisibility;
+ mAppearance = appearance;
mIsTranslucent = isTranslucent;
}
@@ -2157,7 +2158,7 @@
mIsLowResolution = source.readBoolean();
mIsRealSnapshot = source.readBoolean();
mWindowingMode = source.readInt();
- mSystemUiVisibility = source.readInt();
+ mAppearance = source.readInt();
mIsTranslucent = source.readBoolean();
}
@@ -2265,11 +2266,11 @@
}
/**
- * @return The system ui visibility flags for the top most visible fullscreen window at the
+ * @return The {@link Appearance} flags for the top most visible fullscreen window at the
* time that the snapshot was taken.
*/
- public int getSystemUiVisibility() {
- return mSystemUiVisibility;
+ public @Appearance int getAppearance() {
+ return mAppearance;
}
@Override
@@ -2291,7 +2292,7 @@
dest.writeBoolean(mIsLowResolution);
dest.writeBoolean(mIsRealSnapshot);
dest.writeInt(mWindowingMode);
- dest.writeInt(mSystemUiVisibility);
+ dest.writeInt(mAppearance);
dest.writeBoolean(mIsTranslucent);
}
@@ -2311,7 +2312,7 @@
+ " mIsLowResolution=" + mIsLowResolution
+ " mIsRealSnapshot=" + mIsRealSnapshot
+ " mWindowingMode=" + mWindowingMode
- + " mSystemUiVisibility=" + mSystemUiVisibility
+ + " mAppearance=" + mAppearance
+ " mIsTranslucent=" + mIsTranslucent;
}
@@ -2336,7 +2337,7 @@
private Rect mContentInsets;
private boolean mIsRealSnapshot;
private int mWindowingMode;
- private int mSystemUiVisibility;
+ private @Appearance int mAppearance;
private boolean mIsTranslucent;
private int mPixelFormat;
@@ -2393,8 +2394,8 @@
return this;
}
- public Builder setSystemUiVisibility(int systemUiVisibility) {
- mSystemUiVisibility = systemUiVisibility;
+ public Builder setAppearance(@Appearance int appearance) {
+ mAppearance = appearance;
return this;
}
@@ -2428,7 +2429,7 @@
false /* isLowResolution */,
mIsRealSnapshot,
mWindowingMode,
- mSystemUiVisibility,
+ mAppearance,
mIsTranslucent);
}
diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto
index 32a40d9..0453d3f3 100644
--- a/core/proto/android/server/windowmanagerservice.proto
+++ b/core/proto/android/server/windowmanagerservice.proto
@@ -381,7 +381,7 @@
optional int32 requested_width = 18;
optional int32 requested_height = 19;
optional int32 view_visibility = 20 [(.android.typedef) = "android.view.View.Visibility"];
- optional int32 system_ui_visibility = 21;
+ optional int32 system_ui_visibility = 21 [deprecated=true];
optional bool has_surface = 22;
optional bool is_ready_for_display = 23;
optional .android.graphics.RectProto display_frame = 24 [deprecated=true];
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java
index 3de0b4b..d8fa90a 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java
@@ -29,6 +29,7 @@
import android.graphics.Rect;
import android.hardware.HardwareBuffer;
import android.util.Log;
+import android.view.WindowInsetsController.Appearance;
/**
* Data for a single thumbnail.
@@ -43,7 +44,7 @@
public boolean isRealSnapshot;
public boolean isTranslucent;
public int windowingMode;
- public int systemUiVisibility;
+ public @Appearance int appearance;
public float scale;
public long snapshotId;
@@ -57,7 +58,6 @@
isRealSnapshot = true;
isTranslucent = false;
windowingMode = WINDOWING_MODE_UNDEFINED;
- systemUiVisibility = 0;
snapshotId = 0;
}
@@ -93,7 +93,7 @@
isRealSnapshot = snapshot.isRealSnapshot();
isTranslucent = snapshot.isTranslucent();
windowingMode = snapshot.getWindowingMode();
- systemUiVisibility = snapshot.getSystemUiVisibility();
+ appearance = snapshot.getAppearance();
snapshotId = snapshot.getId();
}
}
diff --git a/proto/src/task_snapshot.proto b/proto/src/task_snapshot.proto
index 2006fb3..4b0e4c2 100644
--- a/proto/src/task_snapshot.proto
+++ b/proto/src/task_snapshot.proto
@@ -29,7 +29,7 @@
int32 inset_bottom = 5;
bool is_real_snapshot = 6;
int32 windowing_mode = 7;
- int32 system_ui_visibility = 8;
+ int32 system_ui_visibility = 8 [deprecated=true];
bool is_translucent = 9;
string top_activity_component = 10;
// deprecated because original width and height are stored now instead of the scale.
@@ -40,4 +40,5 @@
int32 task_width = 14;
// The task height when the snapshot was taken
int32 task_height = 15;
+ int32 appearance = 16;
}
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 11a436e..e4f9256 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -118,7 +118,6 @@
import android.app.ActivityThread;
import android.app.LoadedApk;
import android.app.ResourcesManager;
-import android.app.StatusBarManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -2746,7 +2745,7 @@
final int dockedAppearance = updateLightStatusBarLw(0 /* appearance */,
mTopDockedOpaqueWindowState, mTopDockedOpaqueOrDimmingWindowState,
mDockedStackBounds);
- final int disableFlags = win.getSystemUiVisibility() & StatusBarManager.DISABLE_MASK;
+ final int disableFlags = win.getDisableFlags();
final int opaqueAppearance = updateSystemBarsLw(win, disableFlags);
final WindowState navColorWin = chooseNavigationColorWindowLw(
mTopFullscreenOpaqueWindowState, mTopFullscreenOpaqueOrDimmingWindowState,
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index 3327300..616a789 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -41,6 +41,7 @@
import android.view.SurfaceControl;
import android.view.ThreadedRenderer;
import android.view.WindowInsets.Type;
+import android.view.WindowInsetsController.Appearance;
import android.view.WindowManager.LayoutParams;
import com.android.internal.annotations.VisibleForTesting;
@@ -333,7 +334,7 @@
builder.setOrientation(activity.getTask().getConfiguration().orientation);
builder.setRotation(activity.getTask().getDisplayContent().getRotation());
builder.setWindowingMode(task.getWindowingMode());
- builder.setSystemUiVisibility(getSystemUiVisibility(task));
+ builder.setAppearance(getAppearance(task));
return true;
}
@@ -507,7 +508,7 @@
hwBitmap.getColorSpace(), mainWindow.getConfiguration().orientation,
mainWindow.getWindowConfiguration().getRotation(), new Point(taskWidth, taskHeight),
contentInsets, false /* isLowResolution */, false /* isRealSnapshot */,
- task.getWindowingMode(), getSystemUiVisibility(task), false);
+ task.getWindowingMode(), getAppearance(task), false);
}
/**
@@ -584,16 +585,16 @@
}
/**
- * @return The SystemUI visibility flags for the top fullscreen opaque window in the given
+ * @return The {@link Appearance} flags for the top fullscreen opaque window in the given
* {@param task}.
*/
- private int getSystemUiVisibility(Task task) {
+ private @Appearance int getAppearance(Task task) {
final ActivityRecord topFullscreenActivity = task.getTopFullscreenActivity();
final WindowState topFullscreenOpaqueWindow = topFullscreenActivity != null
? topFullscreenActivity.getTopFullscreenOpaqueWindow()
: null;
if (topFullscreenOpaqueWindow != null) {
- return topFullscreenOpaqueWindow.getSystemUiVisibility();
+ return topFullscreenOpaqueWindow.mAttrs.insetsFlags.appearance;
}
return 0;
}
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotLoader.java b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
index 89ddc29..9717e7e 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotLoader.java
@@ -197,7 +197,7 @@
hwBitmap.getColorSpace(), proto.orientation, proto.rotation, taskSize,
new Rect(proto.insetLeft, proto.insetTop, proto.insetRight, proto.insetBottom),
loadLowResolutionBitmap, proto.isRealSnapshot, proto.windowingMode,
- proto.systemUiVisibility, proto.isTranslucent);
+ proto.appearance, proto.isTranslucent);
} catch (IOException e) {
Slog.w(TAG, "Unable to load task snapshot data for taskId=" + taskId);
return null;
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
index 324f0c2..f77b6d2 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
@@ -382,7 +382,7 @@
proto.insetBottom = mSnapshot.getContentInsets().bottom;
proto.isRealSnapshot = mSnapshot.isRealSnapshot();
proto.windowingMode = mSnapshot.getWindowingMode();
- proto.systemUiVisibility = mSnapshot.getSystemUiVisibility();
+ proto.appearance = mSnapshot.getAppearance();
proto.isTranslucent = mSnapshot.isTranslucent();
proto.topActivityComponent = mSnapshot.getTopActivityComponent().flattenToString();
proto.id = mSnapshot.getId();
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 2e95fca..f768435 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2212,15 +2212,12 @@
if (attrs != null) {
displayPolicy.adjustWindowParamsLw(win, attrs, pid, uid);
win.mToken.adjustWindowParams(win, attrs);
- int systemUiVisibility = attrs.systemUiVisibility
- | attrs.subtreeSystemUiVisibility;
- if ((systemUiVisibility & DISABLE_MASK) != 0) {
- // if they don't have the permission, mask out the status bar bits
- if (!hasStatusBarPermission(pid, uid)) {
- systemUiVisibility &= ~DISABLE_MASK;
- }
+ int disableFlags =
+ (attrs.systemUiVisibility | attrs.subtreeSystemUiVisibility) & DISABLE_MASK;
+ if (disableFlags != 0 && !hasStatusBarPermission(pid, uid)) {
+ disableFlags = 0;
}
- win.mSystemUiVisibility = systemUiVisibility;
+ win.mDisableFlags = disableFlags;
if (win.mAttrs.type != attrs.type) {
throw new IllegalArgumentException(
"Window type can not be changed after the window is added.");
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index d972a51..b5509f6 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -176,7 +176,6 @@
import static com.android.server.wm.WindowStateProto.STACK_ID;
import static com.android.server.wm.WindowStateProto.SURFACE_INSETS;
import static com.android.server.wm.WindowStateProto.SURFACE_POSITION;
-import static com.android.server.wm.WindowStateProto.SYSTEM_UI_VISIBILITY;
import static com.android.server.wm.WindowStateProto.VIEW_VISIBILITY;
import static com.android.server.wm.WindowStateProto.WINDOW_CONTAINER;
import static com.android.server.wm.WindowStateProto.WINDOW_FRAMES;
@@ -231,6 +230,7 @@
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.view.View;
+import android.view.ViewDebug;
import android.view.ViewTreeObserver;
import android.view.WindowInfo;
import android.view.WindowInsets.Type.InsetsType;
@@ -307,7 +307,14 @@
final boolean mIsWallpaper;
private final boolean mIsFloatingLayer;
int mViewVisibility;
- int mSystemUiVisibility;
+
+ /**
+ * Flags to disable system UI functions. This can only be set by the one which has the
+ * status bar permission.
+ *
+ * @see View.SystemUiVisibility
+ */
+ int mDisableFlags;
/**
* The visibility flag of the window based on policy like {@link WindowManagerPolicy}.
@@ -1284,9 +1291,9 @@
return mAttrs;
}
- /** Retrieves the current system UI visibility flags associated with this window. */
- int getSystemUiVisibility() {
- return mSystemUiVisibility;
+ /** Retrieves the flags used to disable system UI functions. */
+ int getDisableFlags() {
+ return mDisableFlags;
}
/** Gets the layer at which this window's surface will be Z-ordered. */
@@ -3889,7 +3896,6 @@
proto.write(REQUESTED_WIDTH, mRequestedWidth);
proto.write(REQUESTED_HEIGHT, mRequestedHeight);
proto.write(VIEW_VISIBILITY, mViewVisibility);
- proto.write(SYSTEM_UI_VISIBILITY, mSystemUiVisibility);
proto.write(HAS_SURFACE, mHasSurface);
proto.write(IS_READY_FOR_DISPLAY, isReadyForDisplay());
proto.write(REMOVE_ON_EXIT, mRemoveOnExit);
@@ -3965,8 +3971,10 @@
pw.println(prefix + "mViewVisibility=0x" + Integer.toHexString(mViewVisibility)
+ " mHaveFrame=" + mHaveFrame
+ " mObscured=" + mObscured);
- pw.println(prefix
- + " mSystemUiVisibility=0x" + Integer.toHexString(mSystemUiVisibility));
+ if (mDisableFlags != 0) {
+ pw.println(prefix + "mDisableFlags=" + ViewDebug.flagsToString(
+ View.class, "mSystemUiVisibility", mDisableFlags));
+ }
}
if (!isVisibleByPolicy() || !mLegacyPolicyVisibilityAfterAnim || !mAppOpVisibility
|| isParentWindowHidden() || mPermanentlyHidden || mForceHideNonSystemOverlayWindow
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotControllerTest.java
index 0b99e32..0bb2867 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotControllerTest.java
@@ -16,6 +16,7 @@
package com.android.server.wm;
+import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
@@ -41,7 +42,6 @@
import android.hardware.HardwareBuffer;
import android.platform.test.annotations.Presubmit;
import android.util.ArraySet;
-import android.view.View;
import androidx.test.filters.SmallTest;
@@ -135,7 +135,7 @@
final long id = 1234L;
final ComponentName activityComponent = new ComponentName("package", ".Class");
final int windowingMode = WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
- final int systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN;
+ final int appearance = APPEARANCE_LIGHT_STATUS_BARS;
final int pixelFormat = PixelFormat.RGBA_8888;
final int orientation = Configuration.ORIENTATION_PORTRAIT;
final float scaleFraction = 0.25f;
@@ -147,7 +147,7 @@
new ActivityManager.TaskSnapshot.Builder();
builder.setId(id);
builder.setTopActivityComponent(activityComponent);
- builder.setSystemUiVisibility(systemUiVisibility);
+ builder.setAppearance(appearance);
builder.setWindowingMode(windowingMode);
builder.setColorSpace(sRGB);
builder.setOrientation(orientation);
@@ -164,7 +164,7 @@
ActivityManager.TaskSnapshot snapshot = builder.build();
assertEquals(id, snapshot.getId());
assertEquals(activityComponent, snapshot.getTopActivityComponent());
- assertEquals(systemUiVisibility, snapshot.getSystemUiVisibility());
+ assertEquals(appearance, snapshot.getAppearance());
assertEquals(windowingMode, snapshot.getWindowingMode());
assertEquals(sRGB, snapshot.getColorSpace());
// Snapshots created with the Builder class are always high-res. The only way to get a
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
index bfee894..8b90824 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskSnapshotPersisterLoaderTest.java
@@ -18,6 +18,8 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
+import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
@@ -36,7 +38,6 @@
import android.platform.test.annotations.Presubmit;
import android.util.ArraySet;
import android.view.Surface;
-import android.view.View;
import androidx.test.filters.MediumTest;
@@ -362,17 +363,16 @@
}
@Test
- public void testSystemUiVisibilityPersistAndLoadSnapshot() {
- final int lightBarFlags = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
- | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
+ public void testAppearancePersistAndLoadSnapshot() {
+ final int lightBarFlags = APPEARANCE_LIGHT_STATUS_BARS | APPEARANCE_LIGHT_NAVIGATION_BARS;
TaskSnapshot a = new TaskSnapshotBuilder()
.setSystemUiVisibility(0)
.build();
TaskSnapshot b = new TaskSnapshotBuilder()
.setSystemUiVisibility(lightBarFlags)
.build();
- assertEquals(0, a.getSystemUiVisibility());
- assertEquals(lightBarFlags, b.getSystemUiVisibility());
+ assertEquals(0, a.getAppearance());
+ assertEquals(lightBarFlags, b.getAppearance());
mPersister.persistSnapshot(1, mTestUserId, a);
mPersister.persistSnapshot(2, mTestUserId, b);
mPersister.waitForQueueEmpty();
@@ -382,8 +382,8 @@
false /* isLowResolution */);
assertNotNull(snapshotA);
assertNotNull(snapshotB);
- assertEquals(0, snapshotA.getSystemUiVisibility());
- assertEquals(lightBarFlags, snapshotB.getSystemUiVisibility());
+ assertEquals(0, snapshotA.getAppearance());
+ assertEquals(lightBarFlags, snapshotB.getAppearance());
}
@Test