summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt5
-rw-r--r--core/java/android/view/WindowManager.java43
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java5
3 files changed, 41 insertions, 12 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 5f614721da5b..1addc075874e 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -13384,15 +13384,16 @@ package android.view {
public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
method public final long getUserActivityTimeout();
+ method public boolean isSystemApplicationOverlay();
+ method @RequiresPermission(android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY) public void setSystemApplicationOverlay(boolean);
method public final void setUserActivityTimeout(long);
field @RequiresPermission(android.Manifest.permission.USE_BACKGROUND_BLUR) public static final int FLAG_BLUR_BEHIND = 4; // 0x4
field @RequiresPermission(android.Manifest.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS) public static final int SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS = 524288; // 0x80000
field @RequiresPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW) public static final int SYSTEM_FLAG_SHOW_FOR_ALL_USERS = 16; // 0x10
- field @RequiresPermission(android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY) public static final int SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY = 8; // 0x8
field @RequiresPermission(android.Manifest.permission.USE_BACKGROUND_BLUR) public int backgroundBlurRadius;
}
- @IntDef(flag=true, prefix={"SYSTEM_FLAG_"}, value={android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS, android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS, android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowManager.LayoutParams.SystemFlags {
+ @IntDef(flag=true, prefix={"SYSTEM_FLAG_"}, value={android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS, android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowManager.LayoutParams.SystemFlags {
}
}
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index c2d990a40fe4..8b8645cf6c4f 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -2151,9 +2151,8 @@ public interface WindowManager extends ViewManager {
* visible window.
* @hide
*/
- @SystemApi
@RequiresPermission(permission.SYSTEM_APPLICATION_OVERLAY)
- public static final int SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY = 0x00000008;
+ public static final int PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY = 0x00000008;
/** In a multiuser system if this flag is set and the owner is a system process then this
* window will appear on all user screens. This overrides the default behavior of window
@@ -2352,7 +2351,6 @@ public interface WindowManager extends ViewManager {
@IntDef(flag = true, prefix = { "SYSTEM_FLAG_" }, value = {
SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS,
SYSTEM_FLAG_SHOW_FOR_ALL_USERS,
- SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY,
})
public @interface SystemFlags {}
@@ -2386,7 +2384,7 @@ public interface WindowManager extends ViewManager {
PRIVATE_FLAG_TRUSTED_OVERLAY,
PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME,
PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP,
- SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY,
+ PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY,
})
public @interface PrivateFlags {}
@@ -2501,9 +2499,9 @@ public interface WindowManager extends ViewManager {
equals = PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP,
name = "INTERCEPT_GLOBAL_DRAG_AND_DROP"),
@ViewDebug.FlagToString(
- mask = SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY,
- equals = SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY,
- name = "SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY")
+ mask = PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY,
+ equals = PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY,
+ name = "PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY")
})
@PrivateFlags
@TestApi
@@ -3375,6 +3373,37 @@ public interface WindowManager extends ViewManager {
}
/**
+ * When set on {@link LayoutParams#TYPE_APPLICATION_OVERLAY} windows they stay visible,
+ * even if {@link LayoutParams#SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS} is set for
+ * another visible window.
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(permission.SYSTEM_APPLICATION_OVERLAY)
+ public void setSystemApplicationOverlay(boolean isSystemApplicationOverlay) {
+ if (isSystemApplicationOverlay) {
+ privateFlags |= PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY;
+ } else {
+ privateFlags &= ~PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY;
+ }
+ }
+
+ /**
+ * Returns if this window is marked as being a system application overlay.
+ * @see LayoutParams#setSystemApplicationOverlay(boolean)
+ *
+ * <p>Note: the owner of the window must hold
+ * {@link android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY} for this to have any
+ * effect.
+ * @hide
+ */
+ @SystemApi
+ public boolean isSystemApplicationOverlay() {
+ return (privateFlags & PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY)
+ == PRIVATE_FLAG_SYSTEM_APPLICATION_OVERLAY;
+ }
+
+ /**
* @return the insets types that this window is avoiding overlapping.
*/
public @InsetsType int getFitInsetsTypes() {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 531959267261..621b9719cd39 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -67,7 +67,6 @@ import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
-import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
@@ -3048,8 +3047,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
return;
}
- if (mAttrs.type == TYPE_APPLICATION_OVERLAY && mSession.mCanCreateSystemApplicationOverlay
- && (mAttrs.privateFlags & SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY) != 0) {
+ if (mAttrs.type == TYPE_APPLICATION_OVERLAY && mAttrs.isSystemApplicationOverlay()
+ && mSession.mCanCreateSystemApplicationOverlay) {
return;
}