diff --git a/packages/permissions/index.android.ts b/packages/permissions/index.android.ts index 499a71e3f..3c59aaabd 100644 --- a/packages/permissions/index.android.ts +++ b/packages/permissions/index.android.ts @@ -1,6 +1,6 @@ import { AndroidActivityRequestPermissionsEventData, AndroidApplication, Application, Trace, ApplicationSettings } from '@nativescript/core'; import { PermissionStatus } from './common'; -import { PermissionCheckOptions, PermissionsType, PermissionRationale, PermissionRequestOptions } from '.'; +import { PermissionCheckOptions, PermissionsType, PermissionRationale, PermissionRequestOptions, PermissionResult } from '.'; export * from './common'; @@ -23,7 +23,7 @@ function getAndroidActivity() { const NativePermissionsTypes: PermissionsType[] = ['location', 'camera', 'mediaLocation', 'microphone', 'contacts', 'event', 'storage', 'photo', 'callPhone', 'readSms', 'receiveSms', 'bluetoothScan', 'bluetoothConnect', 'bluetooth']; type NativePermissionsNames = typeof NativePermissionsTypes; // type Names = readonly ['Mike', 'Jeff', 'Ben'] type NativePermissions = NativePermissionsNames[number]; -function getNativePermissions(permission: NativePermissions, options?) { +function getNativePermissions(permission: NativePermissions, options?: PermissionCheckOptions | PermissionRequestOptions) { switch (permission) { case 'location': { const result = [android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION]; @@ -139,7 +139,7 @@ namespace PermissionsAndroid { * * See https://facebook.github.io/react-native/docs/permissionsandroid.html#check */ - export async function check(permission: string | string[]) { + export async function check(permission: string | string[]): Promise { const context: android.content.Context = getAndroidActivity(); let result = true; const granted = android.content.pm.PackageManager.PERMISSION_GRANTED; @@ -160,7 +160,7 @@ namespace PermissionsAndroid { * * See https://facebook.github.io/react-native/docs/permissionsandroid.html#request */ - export async function request(permission: string, rationale?: PermissionRationale): Promise { + export async function request(permission: string, rationale?: PermissionRationale): Promise { // if (rationale) { // const shouldShowRationale = await shouldShowRequestPermissionRationale(permission); @@ -181,7 +181,7 @@ namespace PermissionsAndroid { * * See https://facebook.github.io/react-native/docs/permissionsandroid.html#requestmultiple */ - export function requestMultiple(permissions: string[]): Promise<{ [permission: string]: PermissionStatus }> { + export function requestMultiple(permissions: string[]): Promise { return requestMultiplePermissions(permissions); } } @@ -226,7 +226,7 @@ function requestPermission(permission: string): Promise { }); } -async function requestMultiplePermissions(permissions: string[], options?: PermissionRequestOptions): Promise<{ [permission: string]: PermissionStatus }> { +async function requestMultiplePermissions(permissions: string[], options?: PermissionRequestOptions): Promise { const grantedPermissions = {}; const permissionsToCheck = []; let checkedPermissionsCount = 0; @@ -332,7 +332,7 @@ export class Permissions { return NativePermissionsTypes; } - static async check(permission: PermissionsType, options?: PermissionCheckOptions): Promise<[PermissionStatus, boolean]> { + static async check(permission: PermissionsType, options?: PermissionCheckOptions): Promise { if (Trace.isEnabled()) { Trace.write(`check ${permission}`, Trace.categories.Permissions, Trace.messageType.info); } @@ -365,7 +365,7 @@ export class Permissions { }); } - static request(permission: PermissionsType | PermissionsType[] | string[], options?: PermissionRequestOptions): Promise<[PermissionStatus, boolean] | { [permission: string]: PermissionStatus }> { + static request(permission: PermissionsType | PermissionsType[] | string[], options?: PermissionRequestOptions): Promise { if (Trace.isEnabled()) { Trace.write(`request ${permission}`, Trace.categories.Permissions, Trace.messageType.info); } diff --git a/packages/permissions/index.d.ts b/packages/permissions/index.d.ts index 23e5b6e9c..b12cb6737 100644 --- a/packages/permissions/index.d.ts +++ b/packages/permissions/index.d.ts @@ -1,6 +1,7 @@ import type { PermissionStatus } from './common'; export * from './common'; export type PermissionsType = 'location' | 'camera' | 'microphone' | 'photo' | 'contacts' | 'event' | 'reminder' | 'bluetooth' | 'bluetoothConnect' | 'bluetoothScan' | 'notification' | 'backgroundRefresh' | 'speechRecognition' | 'mediaLocation' | 'mediaLibrary' | 'motion' | 'storage' | 'callPhone' | 'readSms' | 'receiveSms'; + export interface PermissionRationale { title: string; message: string; @@ -8,15 +9,14 @@ export interface PermissionRationale { buttonNegative?: string; buttonNeutral?: string; } -export type PermissionCheckOptions = string | { type: string }; -export type PermissionRequestOptions = string | { type: string; rationale?: PermissionRationale }; -export type PermissionResult = T extends any[] ? { [k: string]: PermissionStatus } : [PermissionStatus, boolean]; +export type PermissionCheckOptions = { type: 'always' | null | undefined }; +export type PermissionRequestOptions = PermissionCheckOptions & { rationale?: PermissionRationale }; +export type PermissionResult = { [k: PermissionsType]: { status: PermissionStatus; nativePermission: Array } }; export class Permissions { static canOpenSettings(): Promise; static openSettings(): Promise; - static getTypes(): Permissions[]; - static check(permission: T, options?: PermissionCheckOptions): Promise>; - static request(permission: T, options?: PermissionRequestOptions): Promise>; - static checkMultiple(permissions: T): Promise>; + static getTypes(): Array; + static check(permission: Array | PermissionsType, options?: PermissionCheckOptions): Promise; + static request(permission: Array | PermissionsType, options?: PermissionRequestOptions): Promise; } diff --git a/packages/permissions/index.ios.ts b/packages/permissions/index.ios.ts index ec1338897..dcd476dd0 100644 --- a/packages/permissions/index.ios.ts +++ b/packages/permissions/index.ios.ts @@ -729,15 +729,7 @@ export class Permissions { return Promise.resolve([PermissionStatus.authorized, true]); } - let type: PermissionCheckOptions; - - if (typeof options === 'string') { - type = options; - } else if (options && options.type) { - type = options.type; - } - - return PermissionsIOS.getPermissionStatus(permission, type || DEFAULTS[permission]); + return PermissionsIOS.getPermissionStatus(permission, options?.type || DEFAULTS[permission]); } static async request(permission: T, options?: PermissionRequestOptions): Promise> { if (Trace.isEnabled()) { @@ -764,16 +756,8 @@ export class Permissions { throw new Error('You cannot request backgroundRefresh'); } - let type: PermissionRequestOptions; - - if (typeof options === 'string') { - type = options; - } else if (options && options.type) { - type = options.type; - } - //@ts-ignore - return PermissionsIOS.requestPermission(permission, type || DEFAULTS[permission]); + return PermissionsIOS.requestPermission(permission, options?.type || DEFAULTS[permission]); } static checkMultiple(permissions: PermissionsType[]) { return Promise.all(permissions.map((permission) => Permissions.check(permission))).then((result) =>