Browse Source

return promise from `openSettings` resolve when user returns to app

Yonah Forst 8 years ago
parent
commit
f54d001cbc

+ 7 - 2
Example/Example.js

@@ -41,6 +41,11 @@ export default class Example extends Component {
     }
   }
 
+  _openSettings() {
+    return Permissions.openSettings()
+      .then(() => alert('back to app!!'))
+  }
+
   _updatePermissions(types) {
     Permissions.checkMultiplePermissions(types)
       .then(status => {
@@ -71,7 +76,7 @@ export default class Example extends Component {
             "There was a problem getting your permission. Please enable it from settings.",
             [
               {text: 'Cancel', style: 'cancel'},
-              {text: 'Open Settings', onPress: Permissions.openSettings },
+              {text: 'Open Settings', onPress: this._openSettings.bind(this) },
             ]
           )
         }
@@ -111,7 +116,7 @@ export default class Example extends Component {
           </TouchableHighlight>
 
           <TouchableHighlight 
-            onPress={Permissions.openSettings}>
+            onPress={this._openSettings.bind(this)}>
             <Text style={styles.text}>Open settings</Text>
           </TouchableHighlight>
         </View>

+ 13 - 1
ReactNativePermissions.m

@@ -59,14 +59,26 @@ RCT_REMAP_METHOD(canOpenSettings, canOpenSettings:(RCTPromiseResolveBlock)resolv
     resolve(@(UIApplicationOpenSettingsURLString != nil));
 }
 
-RCT_EXPORT_METHOD(openSettings)
+    
+RCT_EXPORT_METHOD(openSettings:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
 {
     if (@(UIApplicationOpenSettingsURLString != nil)) {
+        
+        NSNotificationCenter * __weak center = [NSNotificationCenter defaultCenter];
+        id __block token = [center addObserverForName:UIApplicationDidBecomeActiveNotification
+                                               object:nil
+                                                queue:nil
+                                           usingBlock:^(NSNotification *note) {
+                                               [center removeObserver:token];
+                                               resolve(@YES);
+                                           }];
+        
         NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
         [[UIApplication sharedApplication] openURL:url];
     }
 }
 
+
 RCT_REMAP_METHOD(getPermissionStatus, getPermissionStatus:(RNPType)type json:(id)json resolve:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
 {
     NSString *status;

+ 0 - 0
ReactNativePermissions.xcodeproj/xcuserdata/Yonah.xcuserdatad/xcschemes/ReactNativeHeading.xcscheme → ReactNativePermissions.xcodeproj/xcuserdata/Yonah.xcuserdatad/xcschemes/ReactNativePermissions.xcscheme


+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "react-native-permissions",
-  "version": "0.2.7",
+  "version": "0.3.0",
   "repository": {
     "type": "git",
     "url": "https://github.com/joshblour/react-native-permissions.git"