19
19
import android .text .TextUtils ;
20
20
import android .util .Log ;
21
21
22
+ import androidx .core .app .NotificationManagerCompat ;
22
23
import io .flutter .plugin .common .PluginRegistry .ActivityResultListener ;
23
24
import java .lang .annotation .Retention ;
24
25
import java .lang .annotation .RetentionPolicy ;
@@ -60,7 +61,8 @@ public class PermissionHandlerPlugin implements MethodCallHandler {
60
61
private static final int PERMISSION_GROUP_SPEECH = 13 ;
61
62
private static final int PERMISSION_GROUP_STORAGE = 14 ;
62
63
private static final int PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS = 15 ;
63
- private static final int PERMISSION_GROUP_UNKNOWN = 16 ;
64
+ private static final int PERMISSION_GROUP_NOTIFICATION = 16 ;
65
+ private static final int PERMISSION_GROUP_UNKNOWN = 17 ;
64
66
65
67
private PermissionHandlerPlugin (Registrar mRegistrar ) {
66
68
this .mRegistrar = mRegistrar ;
@@ -84,6 +86,7 @@ private PermissionHandlerPlugin(Registrar mRegistrar) {
84
86
PERMISSION_GROUP_SPEECH ,
85
87
PERMISSION_GROUP_STORAGE ,
86
88
PERMISSION_GROUP_IGNORE_BATTERY_OPTIMIZATIONS ,
89
+ PERMISSION_GROUP_NOTIFICATION ,
87
90
PERMISSION_GROUP_UNKNOWN ,
88
91
})
89
92
private @interface PermissionGroup {
@@ -250,6 +253,16 @@ public void onMethodCall(MethodCall call, Result result) {
250
253
251
254
@ PermissionStatus
252
255
private int checkPermissionStatus (@ PermissionGroup int permission ) {
256
+ final Context context = mRegistrar .activity () == null ? mRegistrar .activeContext () : mRegistrar .activity ();
257
+ if (context == null ) {
258
+ Log .d (LOG_TAG , "Unable to detect current Activity or App Context." );
259
+ return PERMISSION_STATUS_UNKNOWN ;
260
+ }
261
+
262
+ if (permission == PERMISSION_GROUP_NOTIFICATION ) {
263
+ return checkNotificationPermissionStatus (context );
264
+ }
265
+
253
266
final List <String > names = getManifestNames (permission );
254
267
255
268
if (names == null ) {
@@ -264,12 +277,6 @@ private int checkPermissionStatus(@PermissionGroup int permission) {
264
277
return PERMISSION_STATUS_UNKNOWN ;
265
278
}
266
279
267
- final Context context = mRegistrar .activity () == null ? mRegistrar .activeContext () : mRegistrar .activity ();
268
- if (context == null ) {
269
- Log .d (LOG_TAG , "Unable to detect current Activity or App Context." );
270
- return PERMISSION_STATUS_UNKNOWN ;
271
- }
272
-
273
280
final boolean targetsMOrHigher = context .getApplicationInfo ().targetSdkVersion >= VERSION_CODES .M ;
274
281
275
282
for (String name : names ) {
@@ -655,6 +662,7 @@ private List<String> getManifestNames(@PermissionGroup int permission) {
655
662
permissionNames .add (Manifest .permission .REQUEST_IGNORE_BATTERY_OPTIMIZATIONS );
656
663
break ;
657
664
665
+ case PERMISSION_GROUP_NOTIFICATION :
658
666
case PERMISSION_GROUP_MEDIA_LIBRARY :
659
667
case PERMISSION_GROUP_PHOTOS :
660
668
case PERMISSION_GROUP_REMINDERS :
@@ -726,4 +734,13 @@ private boolean isLocationServiceEnabled(Context context) {
726
734
return !TextUtils .isEmpty (locationProviders );
727
735
}
728
736
}
737
+
738
+ private int checkNotificationPermissionStatus (Context context ) {
739
+ NotificationManagerCompat manager = NotificationManagerCompat .from (context );
740
+ boolean isGranted = manager .areNotificationsEnabled ();
741
+ if (isGranted ) {
742
+ return PERMISSION_STATUS_GRANTED ;
743
+ }
744
+ return PERMISSION_STATUS_DENIED ;
745
+ }
729
746
}
0 commit comments