| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | 
							- 'use strict';
 - 
 - var ReactNative = require('react-native')
 - var Platform = ReactNative.Platform
 - var RNPermissions = ReactNative.NativeModules.ReactNativePermissions;
 - 
 - const RNPTypes = {
 - 	ios: [
 - 		'location',
 - 		'camera',
 - 		'microphone',
 - 		'photo',
 - 		'contacts',
 - 		'event',
 - 		'reminder',
 - 		'bluetooth',
 - 		'notification',
 - 		'backgroundRefresh',
 - 		'speechRecognition',
 - 	],
 - 	android: [
 - 		'location',
 - 		'camera',
 - 		'microphone',
 - 		'contacts',
 - 		'event',
 - 		'photo',
 - 		'storage'
 - 	]
 - }
 - 
 - class ReactNativePermissions {
 - 	constructor() {
 - 		//legacy support
 - 		this.StatusUndetermined = 'undetermined'
 - 		this.StatusDenied = 'denied'
 - 		this.StatusAuthorized = 'authorized'
 - 		this.StatusRestricted = 'restricted'
 - 
 - 		this.getPermissionTypes().forEach(type => {
 - 			let methodName = `${type}PermissionStatus`
 - 			this[methodName] = p => {
 - 				console.warn(`ReactNativePermissions: ${methodName} is depricated. Use getPermissionStatus('${type}') instead.`)
 - 				return this.getPermissionStatus(p == 'reminder' ? p : type)
 - 			}
 - 		})
 - 	}
 - 
 - 	canOpenSettings() {
 - 		return RNPermissions.canOpenSettings()
 - 	}
 - 
 - 	openSettings() {
 - 		return RNPermissions.openSettings()
 - 	}
 - 
 - 	getPermissionTypes() {
 - 		return RNPTypes[Platform.OS];
 - 	}
 - 
 - 
 - 	getPermissionStatus(permission, type) {
 -   	if (this.getPermissionTypes().indexOf(permission) >= 0) {
 - 			return RNPermissions.getPermissionStatus(permission, type)
 - 		} else {
 - 			return Promise.reject(`ReactNativePermissions: ${permission} is not a valid permission type on ${Platform.OS}`)
 - 		}
 - 	}
 - 
 - 	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'){
 - 			return Promise.reject('ReactNativePermissions: You cannot request backgroundRefresh')
 - 		} else if (permission == 'location') {
 - 			options = type || 'whenInUse'
 - 		} else if (permission == 'notification') {
 - 			options = type || ['alert', 'badge', 'sound']
 - 		}
 - 
 - 		return RNPermissions.requestPermission(permission, options)
 - 	}
 - 
 - 	//recursive funciton to chain a promises for a list of permissions
 - 	checkMultiplePermissions(permissions) {
 - 		let i = permissions.length
 - 		let that = this
 - 		const obj = {}
 - 		function processNext() {
 - 			i--
 - 			let p = permissions[i]
 - 
 - 			if (!p) {
 - 				return Promise.resolve(obj)
 - 			}
 - 
 - 			return that.getPermissionStatus(p)
 - 				.then(res => {
 - 					obj[p] = res
 - 					return processNext()
 - 				}).catch(e => {
 - 					console.warn(e)
 - 					return processNext()
 - 				})
 - 		}
 - 		return processNext()
 - 	}
 - }
 - 
 - module.exports = new ReactNativePermissions()
 
 
  |