diff --git a/core/api/current.txt b/core/api/current.txt index df10ffe1e24a1..6166f623f30ec 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -6717,6 +6717,7 @@ package android.app { method public boolean areNotificationsEnabled(); method public boolean areNotificationsPaused(); method public boolean canNotifyAsPackage(@NonNull String); + method public boolean canSendFullScreenIntent(); method public void cancel(int); method public void cancel(@Nullable String, int); method public void cancelAll(); @@ -36766,6 +36767,7 @@ package android.provider { field public static final String ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS = "android.settings.MANAGE_ALL_SIM_PROFILES_SETTINGS"; field public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS"; field public static final String ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION = "android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION"; + field public static final String ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT = "android.settings.MANAGE_APP_USE_FULL_SCREEN_INTENT"; field public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS"; field public static final String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMISSION"; field public static final String ACTION_MANAGE_SUPERVISOR_RESTRICTED_SETTING = "android.settings.MANAGE_SUPERVISOR_RESTRICTED_SETTING"; diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index f6d27ad08b009..4e94a1dcf6422 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -31,6 +31,7 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.PermissionChecker; import android.content.pm.ParceledListSlice; import android.content.pm.ShortcutInfo; import android.graphics.drawable.Icon; @@ -854,6 +855,32 @@ public class NotificationManager { } } + /** + * Returns whether the calling app can send fullscreen intents. + *
From Android {@link android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE}, apps may not have + * permission to use {@link android.Manifest.permission#USE_FULL_SCREEN_INTENT}. If permission + * is denied, notification will show up as an expanded heads up notification on lockscreen. + *
To request access, add the {@link android.Manifest.permission#USE_FULL_SCREEN_INTENT} + * permission to your manifest, and use + * {@link android.provider.Settings#ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT}. + */ + public boolean canSendFullScreenIntent() { + final int result = PermissionChecker.checkPermissionForPreflight(mContext, + android.Manifest.permission.USE_FULL_SCREEN_INTENT, + mContext.getAttributionSource()); + + switch (result) { + case PermissionChecker.PERMISSION_GRANTED: + return true; + case PermissionChecker.PERMISSION_SOFT_DENIED: + case PermissionChecker.PERMISSION_HARD_DENIED: + return false; + default: + if (localLOGV) Log.v(TAG, "Unknown PermissionChecker result: " + result); + return false; + } + } + /** * Creates a group container for {@link NotificationChannel} objects. * diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 6829cd71cc5bf..cf685720d2411 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -19367,6 +19367,18 @@ public final class Settings { public static final String ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION = "android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION"; + /** + * Activity Action: Show screen for controlling whether an app can send full screen intents. + *
+ * Input: the intent's data URI must specify the application package name for which you want + * to manage full screen intents. + *
+ * Output: Nothing. + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT = + "android.settings.MANAGE_APP_USE_FULL_SCREEN_INTENT"; + /** * Activity Action: For system or preinstalled apps to show their {@link Activity} embedded * in Settings app on large screen devices.