Update system application overlay api
Convert the SYSTEM_FLAG into a PRIVATE_FLAG and expose a method for setting it. This API is easier to use since it makes it possible to setup the LayoutParams before having access to the Window. Bug: 171177581 Test: atest CtsWindowManagerDeviceTestCases:HideOverlayWindowsTest Change-Id: I0bf3857e3dbf67f8833b3b3847b2253d31b9d4a5
This commit is contained in:
@@ -13378,15 +13378,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 {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -3374,6 +3372,37 @@ public interface WindowManager extends ViewManager {
|
||||
privateFlags |= PRIVATE_FLAG_TRUSTED_OVERLAY;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -68,7 +68,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;
|
||||
@@ -3049,8 +3048,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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user