Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e713dbd authored by Linus Tufvesson's avatar Linus Tufvesson Committed by Android (Google) Code Review
Browse files

Merge "Add SYSTEM_APPLICATION_OVERLAY"

parents 316dbd3b 68e0831b
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -241,6 +241,7 @@ package android {
    field public static final String SUBSTITUTE_NOTIFICATION_APP_NAME = "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME";
    field public static final String SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON = "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON";
    field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
    field public static final String SYSTEM_APPLICATION_OVERLAY = "android.permission.SYSTEM_APPLICATION_OVERLAY";
    field public static final String SYSTEM_CAMERA = "android.permission.SYSTEM_CAMERA";
    field public static final String TETHER_PRIVILEGED = "android.permission.TETHER_PRIVILEGED";
    field public static final String TOGGLE_AUTOMOTIVE_PROJECTION = "android.permission.TOGGLE_AUTOMOTIVE_PROJECTION";
@@ -13332,9 +13333,10 @@ package android.view {
    method public final void setUserActivityTimeout(long);
    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
  }
  @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 {
  @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 {
  }
}
+17 −1
Original line number Diff line number Diff line
@@ -2131,6 +2131,16 @@ public interface WindowManager extends ViewManager {
         */
        public static final int PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS = 0x00000004;

        /**
         * When set {@link LayoutParams#TYPE_APPLICATION_OVERLAY} windows will 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 static final int SYSTEM_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
         * types that normally only appear on the owning user's screen. Refer to each window type
@@ -2328,6 +2338,7 @@ 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 {}

@@ -2361,6 +2372,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,
        })
        public @interface PrivateFlags {}

@@ -2473,7 +2485,11 @@ public interface WindowManager extends ViewManager {
                @ViewDebug.FlagToString(
                        mask = PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP,
                        equals = PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP,
                        name = "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")
        })
        @PrivateFlags
        @TestApi
+13 −0
Original line number Diff line number Diff line
@@ -2682,6 +2682,19 @@
        android:description="@string/permdesc_systemAlertWindow"
        android:protectionLevel="signature|appop|installer|pre23|development|recents" />

    <!-- @SystemApi @hide Allows an application to create windows using the type
         {@link android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY},
         shown on top of all other apps.

         Allows an application to use
         {@link android.view.WindowManager.LayoutsParams#SYSTEM_FLAG_SYSTEM_APPLICATION_OVERLAY}
         to create overlays that will stay visible, even if another window is requesting overlays to
         be hidden through {@link android.view.Window#setHideOverlayWindows(boolean)}.

         <p>Not for use by third-party applications. -->
    <permission android:name="android.permission.SYSTEM_APPLICATION_OVERLAY"
                android:protectionLevel="signature|wellbeing"/>

    <!-- @deprecated Use {@link android.Manifest.permission#REQUEST_COMPANION_RUN_IN_BACKGROUND}
         @hide
    -->
+2 −1
Original line number Diff line number Diff line
@@ -369,8 +369,9 @@
    <!-- Permissions required for CTS tests to close system dialogs -->
    <uses-permission android:name="android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS" />

    <!-- Permission required for CTS test - HideOverlayWindowsTest -->
    <!-- Permissions required for CTS test - HideOverlayWindowsTest -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.SYSTEM_APPLICATION_OVERLAY"/>

    <!-- Permission required for CTS test - CtsHdmiCecHostTestCases -->
    <uses-permission android:name="android.permission.HDMI_CEC" />
+6 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.policy;

import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
import static android.Manifest.permission.SYSTEM_ALERT_WINDOW;
import static android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY;
import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW;
import static android.app.AppOpsManager.OP_TOAST_WINDOW;
import static android.content.Context.CONTEXT_RESTRICTED;
@@ -2191,6 +2192,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    == PERMISSION_GRANTED) ? ADD_OKAY : ADD_PERMISSION_DENIED;
        }

        if (mContext.checkCallingOrSelfPermission(SYSTEM_APPLICATION_OVERLAY)
                == PERMISSION_GRANTED) {
            return ADD_OKAY;
        }

        // check if user has enabled this operation. SecurityException will be thrown if this app
        // has not been allowed by the user. The reason to use "noteOp" (instead of checkOp) is to
        // make sure the usage is logged.
Loading