@nativescript-community/perms
Advanced tools
Comparing version 2.2.2 to 2.2.3
@@ -6,2 +6,10 @@ # Change Log | ||
## [2.2.3](https://github.com/nativescript-community/perms/compare/v2.2.2...v2.2.3) (2022-02-17) | ||
**Note:** Version bump only for package @nativescript-community/perms | ||
## [2.2.2](https://github.com/nativescript-community/perms/compare/v2.2.1...v2.2.2) (2022-01-10) | ||
@@ -8,0 +16,0 @@ |
{ | ||
"name": "@nativescript-community/perms", | ||
"version": "2.2.2", | ||
"version": "2.2.3", | ||
"description": "An unified permissions API for NativeScript on iOS and Android.", | ||
@@ -35,3 +35,3 @@ "main": "./permissions", | ||
"readmeFilename": "README.md", | ||
"gitHead": "2a43fd40f931e451666c09af2cb1dbbf776bfc45" | ||
"gitHead": "16b806ca168ab64c3b46fc3386dd4f561ce11db8" | ||
} |
import { CheckOptions, Permissions as PermissionsType, RequestOptions, Status } from './permissions'; | ||
export * from './permissions.common'; | ||
export declare const permissionTypes: { | ||
readonly location: string[]; | ||
readonly camera: string; | ||
readonly microphone: string; | ||
readonly contacts: string; | ||
readonly event: string; | ||
readonly storage: string[]; | ||
readonly photo: string; | ||
readonly callPhone: string; | ||
readonly readSms: string; | ||
readonly receiveSms: string; | ||
}; | ||
export declare enum PermissionStatus { | ||
@@ -22,7 +10,7 @@ GRANTED = "authorized", | ||
export declare function openSettings(): Promise<void>; | ||
export declare function getTypes(): string[]; | ||
export declare function getTypes(): PermissionsType[]; | ||
export declare function check(permission: PermissionsType, options?: CheckOptions): Promise<[Status, boolean]>; | ||
export declare function request(permission: PermissionsType, options?: RequestOptions): Promise<[Status, boolean] | { | ||
export declare function request(permission: PermissionsType | string[], options?: RequestOptions): Promise<[Status, boolean] | { | ||
[permission: string]: [Status, boolean]; | ||
}>; | ||
export declare function checkMultiple(permissions: PermissionsType[]): Promise<any>; |
@@ -14,37 +14,72 @@ import { Trace } from '@nativescript/core'; | ||
const JELLY_BEAN = 18; | ||
const LOLLIPOP = 21; | ||
const MARSHMALLOW = 23; | ||
const ANDROIDQ = 29; | ||
export const permissionTypes = { | ||
get location() { | ||
return [android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION]; | ||
}, | ||
get camera() { | ||
return android.Manifest.permission.CAMERA; | ||
}, | ||
get microphone() { | ||
return android.Manifest.permission.RECORD_AUDIO; | ||
}, | ||
get contacts() { | ||
return android.Manifest.permission.READ_CONTACTS; | ||
}, | ||
get event() { | ||
return android.Manifest.permission.READ_CALENDAR; | ||
}, | ||
get storage() { | ||
return [android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE]; | ||
}, | ||
get photo() { | ||
return android.Manifest.permission.WRITE_EXTERNAL_STORAGE; | ||
}, | ||
get callPhone() { | ||
return android.Manifest.permission.CALL_PHONE; | ||
}, | ||
get readSms() { | ||
return android.Manifest.permission.READ_SMS; | ||
}, | ||
get receiveSms() { | ||
return android.Manifest.permission.RECEIVE_SMS; | ||
const ANDROIDS = 31; | ||
const NativePermissionsTypes = ['location', 'camera', 'mediaLocation', 'microphone', 'contacts', 'event', 'storage', 'photo', 'callPhone', 'readSms', 'receiveSms', 'bluetoothScan', 'bluetoothConnect', 'bluetooth']; | ||
function getNativePermissions(permission, options) { | ||
switch (permission) { | ||
case 'location': { | ||
const result = [android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION]; | ||
if (getAndroidSDK() >= ANDROIDQ) { | ||
const type = typeof options === 'string' ? options : options && options.type; | ||
if (type === 'always') { | ||
result.push(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION); | ||
} | ||
} | ||
return result; | ||
} | ||
case 'camera': { | ||
return [android.Manifest.permission.CAMERA]; | ||
} | ||
case 'mediaLocation': { | ||
if (getAndroidSDK() >= ANDROIDQ) { | ||
return [android.Manifest.permission.ACCESS_MEDIA_LOCATION]; | ||
} | ||
break; | ||
} | ||
case 'microphone': { | ||
return [android.Manifest.permission.RECORD_AUDIO]; | ||
} | ||
case 'contacts': { | ||
return [android.Manifest.permission.READ_CONTACTS]; | ||
} | ||
case 'event': { | ||
return [android.Manifest.permission.READ_CALENDAR]; | ||
} | ||
case 'storage': { | ||
return [android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE]; | ||
} | ||
case 'photo': { | ||
return [android.Manifest.permission.WRITE_EXTERNAL_STORAGE]; | ||
} | ||
case 'callPhone': { | ||
return [android.Manifest.permission.CALL_PHONE]; | ||
} | ||
case 'readSms': { | ||
return [android.Manifest.permission.READ_SMS]; | ||
} | ||
case 'receiveSms': { | ||
return [android.Manifest.permission.RECEIVE_SMS]; | ||
} | ||
case 'bluetoothScan': { | ||
if (getAndroidSDK() >= ANDROIDS) { | ||
return [android.Manifest.permission.BLUETOOTH_SCAN]; | ||
} | ||
break; | ||
} | ||
case 'bluetoothConnect': { | ||
if (getAndroidSDK() >= ANDROIDS) { | ||
return [android.Manifest.permission.BLUETOOTH_CONNECT]; | ||
} | ||
break; | ||
} | ||
case 'bluetooth': { | ||
if (getAndroidSDK() >= ANDROIDS) { | ||
return [android.Manifest.permission.BLUETOOTH_ADVERTISE]; | ||
} | ||
break; | ||
} | ||
} | ||
}; | ||
return null; | ||
} | ||
const STORAGE_KEY = '@NSPermissions:didAskPermission:'; | ||
@@ -220,3 +255,3 @@ const setDidAskOnce = (permission) => Promise.resolve().then(() => setBoolean(STORAGE_KEY + permission, true)); | ||
const intent = new android.content.Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); | ||
intent.setData(android.net.Uri.parse("package:" + activity.getPackageName())); | ||
intent.setData(android.net.Uri.parse('package:' + activity.getPackageName())); | ||
activity.startActivityForResult(intent, 5140); | ||
@@ -226,3 +261,3 @@ }); | ||
export function getTypes() { | ||
return Object.keys(permissionTypes); | ||
return NativePermissionsTypes; | ||
} | ||
@@ -233,7 +268,4 @@ export async function check(permission, options) { | ||
} | ||
const perms = permissionTypes[permission]; | ||
const perms = getNativePermissions(permission, options); | ||
if (!perms) { | ||
if (Trace.isEnabled()) { | ||
CLog(CLogTypes.warning, permission, 'is not a valid permission type on Android'); | ||
} | ||
return ['authorized', true]; | ||
@@ -263,26 +295,28 @@ } | ||
} | ||
let types = permissionTypes[permission]; | ||
if (!types) { | ||
if (Trace.isEnabled()) { | ||
CLog(CLogTypes.warning, permission, 'is not a valid permission type on Android'); | ||
let types = []; | ||
if (Array.isArray(permission)) { | ||
permission.forEach(s => s.startsWith('android.permission.') && types.push(s)); | ||
} | ||
else { | ||
if (permission.startsWith('android.permission.')) { | ||
types.push(permission); | ||
} | ||
else { | ||
types = getNativePermissions(permission, options); | ||
} | ||
} | ||
if (types.length === 0) { | ||
return Promise.resolve(['authorized', true]); | ||
} | ||
if (getAndroidSDK() >= ANDROIDQ) { | ||
const type = typeof options === 'string' ? options : options && options.type; | ||
if (permission === 'location' && type === 'always') { | ||
if (!Array.isArray(types)) { | ||
types = [types]; | ||
} | ||
types.push(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION); | ||
} | ||
} | ||
const rationale = typeof options === 'string' ? undefined : options && options.rationale; | ||
if (Array.isArray(types)) { | ||
if (types.length > 1) { | ||
return requestMultiplePermissions(types); | ||
} | ||
return PermissionsAndroid.request(types, rationale).then(result => { | ||
return PermissionsAndroid.request(types[0], rationale).then(result => { | ||
if (typeof result === 'boolean') { | ||
return [result ? 'authorized' : 'denied', true]; | ||
} | ||
if (Array.isArray(permission)) { | ||
return Promise.all(permission.map(setDidAskOnce)).then(() => [result, true]); | ||
} | ||
return setDidAskOnce(permission).then(() => [result, true]); | ||
@@ -289,0 +323,0 @@ }); |
@@ -13,5 +13,8 @@ export type Status = 'authorized' | 'denied' | 'limited' | 'restricted' | 'undetermined'; | ||
| 'bluetooth' | ||
| 'bluetoothConnect' | ||
| 'bluetoothScan' | ||
| 'notification' | ||
| 'backgroundRefresh' | ||
| 'speechRecognition' | ||
| 'mediaLocation' | ||
| 'mediaLibrary' | ||
@@ -39,6 +42,6 @@ | 'motion' | ||
export function check(permission: Permissions, options?: CheckOptions): Promise<[Status, boolean]>; | ||
export function check(permission: Permissions | string[], options?: CheckOptions): Promise<[Status, boolean]>; | ||
export function request(permission: Permissions, options?: RequestOptions): Promise<[Status, boolean]>; | ||
export function request(permission: Permissions | string[], options?: RequestOptions): Promise<[Status, boolean]>; | ||
export function checkMultiple(permissions: Permissions[]): Promise<{ [k: string]: string }>; |
Sorry, the diff of this file is not supported yet
113668
1239