瀏覽代碼

Merge pull request #74 from kmagiera/locationStatusWhenInUse

Allow location type to be specified in getPermissionStatus.
Yonah Forst 8 年之前
父節點
當前提交
09b14d4506

+ 5 - 5
ReactNativePermissions.js

@@ -15,7 +15,7 @@ const RNPTypes = {
 		'reminder',
 		'bluetooth',
 		'notification',
-		'backgroundRefresh', 
+		'backgroundRefresh',
 	],
 	android: [
 		'location',
@@ -58,9 +58,9 @@ class ReactNativePermissions {
 	}
 
 
-	getPermissionStatus(permission) {
+	getPermissionStatus(permission, type) {
   	if (this.getPermissionTypes().indexOf(permission) >= 0) {
-			return RNPermissions.getPermissionStatus(permission)
+			return RNPermissions.getPermissionStatus(permission, type)
 		} else {
 			return Promise.reject(`ReactNativePermissions: ${permission} is not a valid permission type on ${Platform.OS}`)
 		}
@@ -68,7 +68,7 @@ class ReactNativePermissions {
 
 	requestPermission(permission, type) {
 		let options;
-		
+
 		if (this.getPermissionTypes().indexOf(permission) === -1) {
 			return Promise.reject(`ReactNativePermissions: ${permission} is not a valid permission type on ${Platform.OS}`)
 		} else if (permission == 'backgroundRefresh'){
@@ -90,7 +90,7 @@ class ReactNativePermissions {
 		function processNext() {
 			i--
 			let p = permissions[i]
-			
+
 			if (!p) {
 				return Promise.resolve(obj)
 			}

+ 5 - 4
ReactNativePermissions.m

@@ -66,15 +66,17 @@ RCT_EXPORT_METHOD(openSettings)
     }
 }
 
-RCT_REMAP_METHOD(getPermissionStatus, getPermissionStatus:(RNPType)type resolve:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
+RCT_REMAP_METHOD(getPermissionStatus, getPermissionStatus:(RNPType)type json:(id)json resolve:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
 {
     NSString *status;
     
     switch (type) {
             
-        case RNPTypeLocation:
-            status = [RNPLocation getStatus];
+        case RNPTypeLocation: {
+            NSString *locationPermissionType = [RCTConvert NSString:json];
+            status = [RNPLocation getStatusForType:locationPermissionType];
             break;
+        }
         case RNPTypeCamera:
             status = [RNPAudioVideo getStatus:@"video"];
             break;
@@ -139,7 +141,6 @@ RCT_REMAP_METHOD(requestPermission, permissionType:(RNPType)type json:(id)json r
 
 }
 
-
 - (void) requestLocation:(id)json resolve:(RCTPromiseResolveBlock)resolve
 {
     if (self.locationMgr == nil) {

+ 2 - 2
android/src/main/java/com/joshblour/reactnativepermissions/ReactNativePermissionsModule.java

@@ -46,7 +46,7 @@ public class ReactNativePermissionsModule extends ReactContextBaseJavaModule {
   }
 
   @ReactMethod
-  public void getPermissionStatus(String permissionString, Promise promise) {
+  public void getPermissionStatus(String permissionString, String nullForiOSCompat, Promise promise) {
     String permission = permissionForString(permissionString);
 
     // check if permission is valid
@@ -94,7 +94,7 @@ public class ReactNativePermissionsModule extends ReactContextBaseJavaModule {
         // NOOP
       }
     };
-    
+
     mPermissionsModule.requestPermission(permission, new PromiseImpl(resolve, reject));
   }
 

+ 1 - 1
permissions/RNPLocation.h

@@ -11,7 +11,7 @@
 
 @interface RNPLocation : NSObject
 
-+ (NSString *)getStatus;
++ (NSString *)getStatusForType:(NSString *)type;
 - (void)request:(NSString *)type completionHandler:(void (^)(NSString *))completionHandler;
 
 @end

+ 9 - 8
permissions/RNPLocation.m

@@ -17,13 +17,14 @@
 
 @implementation RNPLocation
 
-+ (NSString *)getStatus
++ (NSString *)getStatusForType:(NSString *)type
 {
     int status = [CLLocationManager authorizationStatus];
     switch (status) {
         case kCLAuthorizationStatusAuthorizedAlways:
-        case kCLAuthorizationStatusAuthorizedWhenInUse:
             return RNPStatusAuthorized;
+        case kCLAuthorizationStatusAuthorizedWhenInUse:
+            return [type isEqualToString:@"always"] ? RNPStatusDenied : RNPStatusAuthorized;
         case kCLAuthorizationStatusDenied:
             return RNPStatusDenied;
         case kCLAuthorizationStatusRestricted:
@@ -35,15 +36,15 @@
 
 - (void)request:(NSString*)type completionHandler:(void (^)(NSString *))completionHandler
 {
-    NSString *status = [RNPLocation getStatus];
+    NSString *status = [RNPLocation getStatusForType:nil];
     if (status == RNPStatusUndetermined) {
         self.completionHandler = completionHandler;
-        
+
         if (self.locationManager == nil) {
             self.locationManager = [[CLLocationManager alloc] init];
             self.locationManager.delegate = self;
         }
-        
+
         if ([type isEqualToString:@"always"]) {
             [self.locationManager requestAlwaysAuthorization];
         } else {
@@ -64,14 +65,14 @@
             self.locationManager.delegate = nil;
             self.locationManager = nil;
         }
-        
+
         if (self.completionHandler) {
             //for some reason, checking permission right away returns denied. need to wait a tiny bit
             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
-                self.completionHandler([RNPLocation getStatus]);
+                self.completionHandler([RNPLocation getStatusForType:nil]);
                 self.completionHandler = nil;
             });
-        }        
+        }
     }
 }
 @end