Skip to content

Commit aa5a37f

Browse files
committed
Change Android Permissions module to use promises
1 parent 741d02f commit aa5a37f

File tree

2 files changed

+32
-65
lines changed

2 files changed

+32
-65
lines changed

Libraries/PermissionsAndroid/PermissionsAndroid.js

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
'use strict';
1313

1414
const DialogManagerAndroid = require('NativeModules').DialogManagerAndroid;
15-
const AndroidPermissions = require('NativeModules').AndroidPermissions;
15+
const Permissions = require('NativeModules').PermissionsAndroid;
1616

1717
type Rationale = {
1818
title: string;
@@ -99,13 +99,7 @@ class PermissionsAndroid {
9999
* permissions has been granted
100100
*/
101101
checkPermission(permission: string) : Promise<boolean> {
102-
return new Promise((resolve, reject) => {
103-
AndroidPermissions.checkPermission(
104-
permission,
105-
function(perm: string, result: boolean) { resolve(result); },
106-
function(error: string) { reject(error); },
107-
);
108-
});
102+
return Permissions.checkPermission(permission)
109103
}
110104

111105
/**
@@ -119,36 +113,25 @@ class PermissionsAndroid {
119113
* and then shows the system permission dialog
120114
*/
121115
requestPermission(permission: string, rationale?: Rationale) : Promise<boolean> {
122-
return new Promise((resolve, reject) => {
123-
const requestPermission = () => {
124-
AndroidPermissions.requestPermission(
125-
permission,
126-
function(perm: string, result: boolean) { resolve(result); },
127-
function(error: string) { reject(error); },
128-
);
129-
};
116+
return new Promise(async (resolve, reject) => {
117+
const requestPermission = () => resolve(Permissions.requestPermission(permission));
130118

131119
if (rationale) {
132-
AndroidPermissions.shouldShowRequestPermissionRationale(
133-
permission,
134-
function(perm: string, shouldShowRationale: boolean) {
135-
if (shouldShowRationale) {
136-
DialogManagerAndroid.showAlert(
137-
rationale,
138-
() => {
139-
DialogManagerAndroid.showAlert({
140-
message: 'Error Requesting Permissions'
141-
}, {}, {});
142-
reject();
143-
},
144-
requestPermission
145-
);
146-
} else {
147-
requestPermission();
148-
}
149-
},
150-
function(error: string) { reject(error); },
151-
);
120+
const shouldShowRationale = await Permissions.shouldShowRequestPermissionRationale(permission)
121+
if (shouldShowRationale) {
122+
DialogManagerAndroid.showAlert(
123+
rationale,
124+
() => {
125+
DialogManagerAndroid.showAlert({
126+
message: 'Error Requesting Permissions'
127+
}, {}, {});
128+
reject();
129+
},
130+
requestPermission
131+
);
132+
} else {
133+
requestPermission();
134+
}
152135
} else {
153136
requestPermission();
154137
}

ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import android.util.SparseArray;
1717

1818
import com.facebook.react.bridge.Callback;
19+
import com.facebook.react.bridge.Promise;
1920
import com.facebook.react.bridge.ReactApplicationContext;
2021
import com.facebook.react.bridge.ReactContextBaseJavaModule;
2122
import com.facebook.react.bridge.ReactMethod;
@@ -37,29 +38,22 @@ public PermissionsModule(ReactApplicationContext reactContext) {
3738

3839
@Override
3940
public String getName() {
40-
return "AndroidPermissions";
41+
return "PermissionsAndroid";
4142
}
4243

4344
/**
4445
* Check if the app has the permission given. successCallback is called with true if the
4546
* permission had been granted, false otherwise. See {@link Activity#checkSelfPermission}.
4647
*/
4748
@ReactMethod
48-
public void checkPermission(
49-
final String permission,
50-
final Callback successCallback,
51-
final Callback errorCallback) {
49+
public void checkPermission(final String permission, final Promise promise) {
5250
PermissionAwareActivity activity = getPermissionAwareActivity();
5351
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
54-
successCallback.invoke(
55-
permission,
56-
activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
57-
PackageManager.PERMISSION_GRANTED);
52+
promise.resolve(activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
53+
PackageManager.PERMISSION_GRANTED);
5854
return;
5955
}
60-
successCallback.invoke(
61-
permission,
62-
activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED);
56+
promise.resolve(activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED);
6357
}
6458

6559
/**
@@ -71,17 +65,12 @@ public void checkPermission(
7165
* See {@link Activity#shouldShowRequestPermissionRationale}.
7266
*/
7367
@ReactMethod
74-
public void shouldShowRequestPermissionRationale(
75-
final String permission,
76-
final Callback successCallback,
77-
final Callback errorCallback) {
68+
public void shouldShowRequestPermissionRationale(final String permission, final Promise promise) {
7869
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
79-
successCallback.invoke(permission, false);
70+
promise.resolve(false);
8071
return;
8172
}
82-
successCallback.invoke(
83-
permission,
84-
getPermissionAwareActivity().shouldShowRequestPermissionRationale(permission));
73+
promise.resolve(getPermissionAwareActivity().shouldShowRequestPermissionRationale(permission));
8574
}
8675

8776
/**
@@ -91,28 +80,23 @@ public void shouldShowRequestPermissionRationale(
9180
* See {@link Activity#checkSelfPermission}.
9281
*/
9382
@ReactMethod
94-
public void requestPermission(
95-
final String permission,
96-
final Callback successCallback,
97-
final Callback errorCallback) {
83+
public void requestPermission(final String permission, final Promise promise) {
9884
PermissionAwareActivity activity = getPermissionAwareActivity();
9985
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
100-
successCallback.invoke(
101-
permission,
102-
activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
86+
promise.resolve(activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
10387
PackageManager.PERMISSION_GRANTED);
10488
return;
10589
}
10690
if (activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) {
107-
successCallback.invoke(permission, true);
91+
promise.resolve(true);
10892
return;
10993
}
11094

11195
mCallbacks.put(
11296
mRequestCode, new Callback() {
11397
@Override
11498
public void invoke(Object... args) {
115-
successCallback.invoke(permission, args[0].equals(PackageManager.PERMISSION_GRANTED));
99+
promise.resolve(args[0].equals(PackageManager.PERMISSION_GRANTED));
116100
}
117101
});
118102

0 commit comments

Comments
 (0)