Skip to content

Commit 0a96049

Browse files
authored
feat(android): runtime notifications for sdk-33 (#697)
1 parent 313ca1c commit 0a96049

File tree

6 files changed

+31
-16
lines changed

6 files changed

+31
-16
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ PERMISSIONS.ANDROID.BODY_SENSORS;
463463
PERMISSIONS.ANDROID.CALL_PHONE;
464464
PERMISSIONS.ANDROID.CAMERA;
465465
PERMISSIONS.ANDROID.GET_ACCOUNTS;
466+
PERMISSIONS.ANDROID.POST_NOTIFICATIONS;
466467
PERMISSIONS.ANDROID.PROCESS_OUTGOING_CALLS;
467468
PERMISSIONS.ANDROID.READ_CALENDAR;
468469
PERMISSIONS.ANDROID.READ_CALL_LOG;
@@ -788,7 +789,7 @@ checkNotifications().then(({status, settings}) => {
788789
Request notifications permission status and get notifications settings values.
789790

790791
You cannot request notifications permissions on Windows. Disabling or enabling notifications can only be done through the App Settings.
791-
You cannot request notifications permissions on Android. `requestNotifications` is the same than `checkNotifications` on this platform.
792+
`requestNotifications` is iOS-only. To request notifications permissions on Android, use `request(PERMISSIONS.ANDROID.POST_NOTIFICATIONS)`
792793

793794
```ts
794795
// only used on iOS

android/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ buildscript {
2020
apply plugin: "com.android.library"
2121

2222
android {
23-
compileSdkVersion safeExtGet("compileSdkVersion", 30)
24-
buildToolsVersion safeExtGet("buildToolsVersion", "30.0.2")
23+
compileSdkVersion safeExtGet("compileSdkVersion", 33)
24+
buildToolsVersion safeExtGet("buildToolsVersion", "33.0.0")
2525
defaultConfig {
2626
minSdkVersion safeExtGet("minSdkVersion", 21)
27-
targetSdkVersion safeExtGet("targetSdkVersion", 30)
27+
targetSdkVersion safeExtGet("targetSdkVersion", 33)
2828
}
2929
lintOptions {
3030
abortOnError false

android/src/main/java/com/zoontek/rnpermissions/RNPermissionsModule.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ public String getName() {
8585
return "GET_ACCOUNTS";
8686
if (permission.equals("android.permission.PROCESS_OUTGOING_CALLS"))
8787
return "PROCESS_OUTGOING_CALLS";
88+
if (permission.equals("android.permission.POST_NOTIFICATIONS"))
89+
return "POST_NOTIFICATIONS";
8890
if (permission.equals("android.permission.READ_CALENDAR"))
8991
return "READ_CALENDAR";
9092
if (permission.equals("android.permission.READ_CALL_LOG"))
@@ -141,16 +143,13 @@ private boolean permissionExists(final String permission) {
141143

142144
@ReactMethod
143145
public void checkNotifications(final Promise promise) {
144-
final boolean enabled = NotificationManagerCompat
145-
.from(getReactApplicationContext()).areNotificationsEnabled();
146-
147-
final WritableMap output = Arguments.createMap();
148-
final WritableMap settings = Arguments.createMap();
149-
150-
output.putString("status", enabled ? GRANTED : BLOCKED);
151-
output.putMap("settings", settings);
146+
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
147+
this.checkNotificationsCompat(promise);
148+
return;
149+
}
152150

153-
promise.resolve(output);
151+
String fieldName = this.getFieldName("android.permission.POST_NOTIFICATIONS");
152+
this.checkPermission(fieldName, promise);
154153
}
155154

156155
@ReactMethod
@@ -368,6 +367,19 @@ public boolean onRequestPermissionsResult(int requestCode, String[] permissions,
368367
return mCallbacks.size() == 0;
369368
}
370369

370+
private void checkNotificationsCompat(final Promise promise) {
371+
final boolean enabled = NotificationManagerCompat
372+
.from(getReactApplicationContext()).areNotificationsEnabled();
373+
374+
final WritableMap output = Arguments.createMap();
375+
final WritableMap settings = Arguments.createMap();
376+
377+
output.putString("status", enabled ? GRANTED : BLOCKED);
378+
output.putMap("settings", settings);
379+
380+
promise.resolve(output);
381+
}
382+
371383
private PermissionAwareActivity getPermissionAwareActivity() {
372384
Activity activity = getCurrentActivity();
373385
if (activity == null) {

example/android/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<uses-permission android:name="android.permission.CAMERA" />
2020
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
2121
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
22+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
2223
<uses-permission android:name="android.permission.READ_CALENDAR" />
2324
<uses-permission android:name="android.permission.READ_CALL_LOG" />
2425
<uses-permission android:name="android.permission.READ_CONTACTS" />

example/android/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import org.apache.tools.ant.taskdefs.condition.Os
44

55
buildscript {
66
ext {
7-
buildToolsVersion = "31.0.0"
7+
buildToolsVersion = "33.0.0"
88
minSdkVersion = 21
9-
compileSdkVersion = 31
10-
targetSdkVersion = 31
9+
compileSdkVersion = 33
10+
targetSdkVersion = 33
1111

1212
if (System.properties['os.arch'] == "aarch64") {
1313
// For M1 Users we need to use the NDK 24 which added support for aarch64

src/permissions.android.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const ANDROID = Object.freeze({
1717
CALL_PHONE: 'android.permission.CALL_PHONE',
1818
CAMERA: 'android.permission.CAMERA',
1919
GET_ACCOUNTS: 'android.permission.GET_ACCOUNTS',
20+
POST_NOTIFICATIONS: 'android.permission.POST_NOTIFICATIONS',
2021
PROCESS_OUTGOING_CALLS: 'android.permission.PROCESS_OUTGOING_CALLS',
2122
READ_CALENDAR: 'android.permission.READ_CALENDAR',
2223
READ_CALL_LOG: 'android.permission.READ_CALL_LOG',

0 commit comments

Comments
 (0)