Change Android Permission Module to use promises
Summary: This is a follow-up to #9292 satya164 Closes https://github.com/facebook/react-native/pull/9325 Differential Revision: D3723568 fbshipit-source-id: d553a70bde53ed5d7c1f5f544c85c5c5935e3ca4
This commit is contained in:
Родитель
7655e537ed
Коммит
6df41d5184
|
@ -12,11 +12,11 @@
|
|||
'use strict';
|
||||
|
||||
const DialogManagerAndroid = require('NativeModules').DialogManagerAndroid;
|
||||
const AndroidPermissions = require('NativeModules').AndroidPermissions;
|
||||
const Permissions = require('NativeModules').PermissionsAndroid;
|
||||
|
||||
type Rationale = {
|
||||
title: string,
|
||||
message: string,
|
||||
title: string;
|
||||
message: string;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -99,13 +99,7 @@ class PermissionsAndroid {
|
|||
* permissions has been granted
|
||||
*/
|
||||
checkPermission(permission: string) : Promise<boolean> {
|
||||
return new Promise((resolve, reject) => {
|
||||
AndroidPermissions.checkPermission(
|
||||
permission,
|
||||
function(perm: string, result: boolean) { resolve(result); },
|
||||
function(error: string) { reject(error); },
|
||||
);
|
||||
});
|
||||
return Permissions.checkPermission(permission);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -118,41 +112,21 @@ class PermissionsAndroid {
|
|||
* (https://developer.android.com/training/permissions/requesting.html#explain)
|
||||
* and then shows the system permission dialog
|
||||
*/
|
||||
requestPermission(permission: string, rationale?: Rationale) : Promise<boolean> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const requestPermission = () => {
|
||||
AndroidPermissions.requestPermission(
|
||||
permission,
|
||||
function(perm: string, result: boolean) { resolve(result); },
|
||||
function(error: string) { reject(error); },
|
||||
);
|
||||
};
|
||||
async requestPermission(permission: string, rationale?: Rationale) : Promise<boolean> {
|
||||
if (rationale) {
|
||||
const shouldShowRationale = await Permissions.shouldShowRequestPermissionRationale(permission);
|
||||
|
||||
if (rationale) {
|
||||
AndroidPermissions.shouldShowRequestPermissionRationale(
|
||||
permission,
|
||||
function(perm: string, shouldShowRationale: boolean) {
|
||||
if (shouldShowRationale) {
|
||||
DialogManagerAndroid.showAlert(
|
||||
rationale,
|
||||
() => {
|
||||
DialogManagerAndroid.showAlert({
|
||||
message: 'Error Requesting Permissions'
|
||||
}, {}, {});
|
||||
reject();
|
||||
},
|
||||
requestPermission
|
||||
);
|
||||
} else {
|
||||
requestPermission();
|
||||
}
|
||||
},
|
||||
function(error: string) { reject(error); },
|
||||
);
|
||||
} else {
|
||||
requestPermission();
|
||||
if (shouldShowRationale) {
|
||||
return new Promise((resolve, reject) => {
|
||||
DialogManagerAndroid.showAlert(
|
||||
rationale,
|
||||
() => reject(new Error('Error showing rationale')),
|
||||
() => resolve(Permissions.requestPermission(permission))
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
return Permissions.requestPermission(permission);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ import android.os.Process;
|
|||
import android.util.SparseArray;
|
||||
|
||||
import com.facebook.react.bridge.Callback;
|
||||
import com.facebook.react.bridge.Promise;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
|
@ -37,7 +38,7 @@ public class PermissionsModule extends ReactContextBaseJavaModule implements Per
|
|||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "AndroidPermissions";
|
||||
return "PermissionsAndroid";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -45,21 +46,14 @@ public class PermissionsModule extends ReactContextBaseJavaModule implements Per
|
|||
* permission had been granted, false otherwise. See {@link Activity#checkSelfPermission}.
|
||||
*/
|
||||
@ReactMethod
|
||||
public void checkPermission(
|
||||
final String permission,
|
||||
final Callback successCallback,
|
||||
final Callback errorCallback) {
|
||||
public void checkPermission(final String permission, final Promise promise) {
|
||||
PermissionAwareActivity activity = getPermissionAwareActivity();
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
successCallback.invoke(
|
||||
permission,
|
||||
activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
|
||||
PackageManager.PERMISSION_GRANTED);
|
||||
promise.resolve(activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
|
||||
PackageManager.PERMISSION_GRANTED);
|
||||
return;
|
||||
}
|
||||
successCallback.invoke(
|
||||
permission,
|
||||
activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED);
|
||||
promise.resolve(activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -71,17 +65,12 @@ public class PermissionsModule extends ReactContextBaseJavaModule implements Per
|
|||
* See {@link Activity#shouldShowRequestPermissionRationale}.
|
||||
*/
|
||||
@ReactMethod
|
||||
public void shouldShowRequestPermissionRationale(
|
||||
final String permission,
|
||||
final Callback successCallback,
|
||||
final Callback errorCallback) {
|
||||
public void shouldShowRequestPermissionRationale(final String permission, final Promise promise) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
successCallback.invoke(permission, false);
|
||||
promise.resolve(false);
|
||||
return;
|
||||
}
|
||||
successCallback.invoke(
|
||||
permission,
|
||||
getPermissionAwareActivity().shouldShowRequestPermissionRationale(permission));
|
||||
promise.resolve(getPermissionAwareActivity().shouldShowRequestPermissionRationale(permission));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -91,20 +80,15 @@ public class PermissionsModule extends ReactContextBaseJavaModule implements Per
|
|||
* See {@link Activity#checkSelfPermission}.
|
||||
*/
|
||||
@ReactMethod
|
||||
public void requestPermission(
|
||||
final String permission,
|
||||
final Callback successCallback,
|
||||
final Callback errorCallback) {
|
||||
public void requestPermission(final String permission, final Promise promise) {
|
||||
PermissionAwareActivity activity = getPermissionAwareActivity();
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
successCallback.invoke(
|
||||
permission,
|
||||
activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
|
||||
promise.resolve(activity.checkPermission(permission, Process.myPid(), Process.myUid()) ==
|
||||
PackageManager.PERMISSION_GRANTED);
|
||||
return;
|
||||
}
|
||||
if (activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) {
|
||||
successCallback.invoke(permission, true);
|
||||
promise.resolve(true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -112,7 +96,7 @@ public class PermissionsModule extends ReactContextBaseJavaModule implements Per
|
|||
mRequestCode, new Callback() {
|
||||
@Override
|
||||
public void invoke(Object... args) {
|
||||
successCallback.invoke(permission, args[0].equals(PackageManager.PERMISSION_GRANTED));
|
||||
promise.resolve(args[0].equals(PackageManager.PERMISSION_GRANTED));
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче