Skip to content

Commit d4da5a9

Browse files
Adds funtionality for checking and requesting full screen intent on Android
1 parent c1a6a9b commit d4da5a9

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionConstants.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ final class PermissionConstants {
1616
static final int PERMISSION_CODE_REQUEST_INSTALL_PACKAGES = 212;
1717
static final int PERMISSION_CODE_ACCESS_NOTIFICATION_POLICY = 213;
1818
static final int PERMISSION_CODE_SCHEDULE_EXACT_ALARM = 214;
19+
static final int PERMISSION_CODE_USE_FULL_SCREEN_INTENT = 215;
1920

2021

2122
// PERMISSION_GROUP
@@ -62,6 +63,7 @@ final class PermissionConstants {
6263
static final int PERMISSION_GROUP_CALENDAR_FULL_ACCESS = 37;
6364
static final int PERMISSION_GROUP_ASSISTANT = 38;
6465
static final int PERMISSION_GROUP_BACKGROUND_REFRESH = 39;
66+
static final int PERMISSION_GROUP_USE_FULL_SCREEN_INTENT = 40;
6567

6668
@Retention(RetentionPolicy.SOURCE)
6769
@IntDef({
@@ -101,6 +103,8 @@ final class PermissionConstants {
101103
PERMISSION_GROUP_CALENDAR_WRITE_ONLY,
102104
PERMISSION_GROUP_CALENDAR_FULL_ACCESS,
103105
PERMISSION_GROUP_ASSISTANT,
106+
PERMISSION_GROUP_BACKGROUND_REFRESH,
107+
PERMISSION_GROUP_USE_FULL_SCREEN_INTENT,
104108
})
105109
@interface PermissionGroup {
106110
}

permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionManager.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,16 @@ public boolean onRequestPermissionsResult(
266266
requestResults.put(
267267
permission,
268268
determinePermissionStatus(permission));
269+
} else if (permission == PermissionConstants.PERMISSION_GROUP_USE_FULL_SCREEN_INTENT) {
270+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
271+
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
272+
int status = notificationManager.canUseFullScreenIntent()
273+
? PermissionConstants.PERMISSION_STATUS_GRANTED
274+
: PermissionConstants.PERMISSION_STATUS_DENIED;
275+
requestResults.put(permission, status);
276+
} else {
277+
requestResults.put(permission, PermissionConstants.PERMISSION_STATUS_GRANTED);
278+
}
269279
} else if (!requestResults.containsKey(permission)) {
270280
requestResults.put(
271281
permission,
@@ -421,6 +431,10 @@ void requestPermissions(
421431
} else {
422432
requestResults.put(permission, PermissionConstants.PERMISSION_STATUS_DENIED);
423433
}
434+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && permission == PermissionConstants.PERMISSION_GROUP_USE_FULL_SCREEN_INTENT) {
435+
launchSpecialPermission(
436+
Settings.ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT,
437+
PermissionConstants.PERMISSION_CODE_USE_FULL_SCREEN_INTENT);
424438
} else {
425439
permissionsToRequest.addAll(names);
426440
pendingRequestCount += names.size();
@@ -565,7 +579,17 @@ private int determinePermissionStatus(final @PermissionConstants.PermissionGroup
565579
}else {
566580
permissionStatuses.add(PermissionUtils.determineDeniedVariant(activity, name));
567581
}
568-
}else {
582+
} else if (permission == PermissionConstants.PERMISSION_GROUP_USE_FULL_SCREEN_INTENT) {
583+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
584+
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
585+
int status = notificationManager.canUseFullScreenIntent()
586+
? PermissionConstants.PERMISSION_STATUS_GRANTED
587+
: PermissionConstants.PERMISSION_STATUS_DENIED;
588+
permissionStatuses.add(status);
589+
} else {
590+
permissionStatuses.add(PermissionConstants.PERMISSION_STATUS_GRANTED);
591+
}
592+
} else {
569593
final int permissionStatus = ContextCompat.checkSelfPermission(context, name);
570594
if (permissionStatus != PackageManager.PERMISSION_GRANTED) {
571595
permissionStatuses.add(PermissionUtils.determineDeniedVariant(activity, name));

permission_handler_android/android/src/main/java/com/baseflow/permissionhandler/PermissionUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ static int parseManifestName(String permission) {
9595
return PermissionConstants.PERMISSION_GROUP_AUDIO;
9696
case Manifest.permission.SCHEDULE_EXACT_ALARM:
9797
return PermissionConstants.PERMISSION_GROUP_SCHEDULE_EXACT_ALARM;
98+
case Manifest.permission.USE_FULL_SCREEN_INTENT:
99+
return PermissionConstants.PERMISSION_GROUP_USE_FULL_SCREEN_INTENT;
98100
default:
99101
return PermissionConstants.PERMISSION_GROUP_UNKNOWN;
100102
}
@@ -354,6 +356,11 @@ static List<String> getManifestNames(Context context, @PermissionConstants.Permi
354356
if (hasPermissionInManifest(context, permissionNames, Manifest.permission.SCHEDULE_EXACT_ALARM))
355357
permissionNames.add(Manifest.permission.SCHEDULE_EXACT_ALARM);
356358
break;
359+
case PermissionConstants.PERMISSION_GROUP_USE_FULL_SCREEN_INTENT:
360+
// The USE_FULL_SCREEN_INTENT permission is introduced in Android UPSIDE_DOWN_CAKE, before Android 34 it should alway return Granted
361+
if (hasPermissionInManifest(context, permissionNames, Manifest.permission.USE_FULL_SCREEN_INTENT))
362+
permissionNames.add(Manifest.permission.USE_FULL_SCREEN_INTENT);
363+
break;
357364
case PermissionConstants.PERMISSION_GROUP_MEDIA_LIBRARY:
358365
case PermissionConstants.PERMISSION_GROUP_REMINDERS:
359366
case PermissionConstants.PERMISSION_GROUP_UNKNOWN:

permission_handler_platform_interface/lib/src/permissions.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,11 @@ class Permission {
326326
/// Permission for reading the current background refresh status. (iOS only)
327327
static const backgroundRefresh = Permission._(39);
328328

329+
/// Permission for allowing full screen on the device for alarms and calls
330+
///
331+
/// Android 14+ (API 34+)
332+
static const fullScreen = Permission._(40);
333+
329334
/// Returns a list of all possible [PermissionGroup] values.
330335
static const List<Permission> values = <Permission>[
331336
// ignore: deprecated_member_use_from_same_package
@@ -369,6 +374,7 @@ class Permission {
369374
calendarFullAccess,
370375
assistant,
371376
backgroundRefresh,
377+
fullScreen,
372378
];
373379

374380
static const List<String> _names = <String>[
@@ -412,6 +418,7 @@ class Permission {
412418
'calendarFullAccess',
413419
'assistant',
414420
'backgroundRefresh',
421+
'fullScreen',
415422
];
416423

417424
@override

0 commit comments

Comments
 (0)