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:
Connor McEwen 2016-08-16 12:51:54 -07:00 коммит произвёл Facebook Github Bot 2
Родитель 7655e537ed
Коммит 6df41d5184
2 изменённых файлов: 30 добавлений и 72 удалений

Просмотреть файл

@ -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));
}
});