feat: permissionresult return type for all

This commit is contained in:
Nathan Walker
2022-07-13 11:53:23 -07:00
parent 144394f3ea
commit 3db79a5294
4 changed files with 14 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
import { Observable, EventData, Page, Trace } from '@nativescript/core'; import { Observable, EventData, Page, Trace } from '@nativescript/core';
import { Permissions } from '@nativescript/permissions'; import { Permissions, PermissionsType } from '@nativescript/permissions';
let page: Page; let page: Page;
@@ -35,7 +35,7 @@ export class PermissionsModel extends Observable {
super(); super();
} }
async checkPermission(args, multiple?: Array<string>) { async checkPermission(args, multiple?: Array<PermissionsType>) {
const perm = args.object.bindingContext.name; const perm = args.object.bindingContext.name;
try { try {
console.log('checkPermission', perm); console.log('checkPermission', perm);

View File

@@ -5,4 +5,5 @@ export enum PermissionStatus {
restricted = 'restricted', restricted = 'restricted',
undetermined = 'undetermined', undetermined = 'undetermined',
never_ask_again = 'never_ask_again', never_ask_again = 'never_ask_again',
blocked = 'blocked',
} }

View File

@@ -9,7 +9,7 @@ export interface PermissionRationale {
buttonNegative?: string; buttonNegative?: string;
buttonNeutral?: string; buttonNeutral?: string;
} }
export type PermissionCheckOptions = { type: 'always' | null | undefined }; export type PermissionCheckOptions = { type: 'always' | 'none' | null | undefined };
export type PermissionRequestOptions = PermissionCheckOptions & { rationale?: PermissionRationale }; export type PermissionRequestOptions = PermissionCheckOptions & { rationale?: PermissionRationale };
export type PermissionResult = { [k: PermissionsType]: { status: PermissionStatus; nativePermission: Array<string> } }; export type PermissionResult = { [k: PermissionsType]: { status: PermissionStatus; nativePermission: Array<string> } };

View File

@@ -1,6 +1,6 @@
import { Device, Trace } from '@nativescript/core'; import { Device, Trace } from '@nativescript/core';
import { PermissionStatus } from './common'; import { PermissionStatus } from './common';
import { PermissionCheckOptions, PermissionsType, PermissionRequestOptions } from '.'; import { PermissionCheckOptions, PermissionsType, PermissionRequestOptions, PermissionResult } from '.';
export * from './common'; export * from './common';
@@ -84,7 +84,7 @@ export namespace PermissionsIOS {
// }); // });
// } // }
} }
export function request(type): Promise<[PermissionStatus, boolean]> { export function request(type): Promise<PermissionResult> {
const status = getStatusForType(type); const status = getStatusForType(type);
if (Trace.isEnabled()) { if (Trace.isEnabled()) {
Trace.write(`NSPLocation request ${type}`, Trace.categories.Permissions, Trace.messageType.info); Trace.write(`NSPLocation request ${type}`, Trace.categories.Permissions, Trace.messageType.info);
@@ -152,7 +152,7 @@ export namespace PermissionsIOS {
} }
namespace NSPBluetooth { namespace NSPBluetooth {
let status: PermissionStatus = PermissionStatus.undetermined; let status: PermissionStatus = PermissionStatus.undetermined;
export function getStatus(): [PermissionStatus, boolean] { export function getStatus(): PermissionStatus {
const status2 = CBPeripheralManager.authorizationStatus(); const status2 = CBPeripheralManager.authorizationStatus();
switch (status2) { switch (status2) {
case CBPeripheralManagerAuthorizationStatus.Authorized: case CBPeripheralManagerAuthorizationStatus.Authorized:
@@ -167,7 +167,7 @@ export namespace PermissionsIOS {
default: default:
status = PermissionStatus.undetermined; status = PermissionStatus.undetermined;
} }
return [status, true]; return status;
} }
export type SubCBPeripheralManagerDelegate = Partial<CBPeripheralManagerDelegate>; export type SubCBPeripheralManagerDelegate = Partial<CBPeripheralManagerDelegate>;
@NativeClass @NativeClass
@@ -248,7 +248,7 @@ export namespace PermissionsIOS {
return AVMediaTypeVideo; return AVMediaTypeVideo;
} }
} }
export function getStatus(type?: string): [PermissionStatus, boolean] { export function getStatus(type?: string): PermissionStatus {
const videoStatus = AVCaptureDevice.authorizationStatusForMediaType(typeFromString(type)); const videoStatus = AVCaptureDevice.authorizationStatusForMediaType(typeFromString(type));
switch (videoStatus) { switch (videoStatus) {
case AVAuthorizationStatus.Authorized: case AVAuthorizationStatus.Authorized:
@@ -263,10 +263,10 @@ export namespace PermissionsIOS {
default: default:
status = PermissionStatus.undetermined; status = PermissionStatus.undetermined;
} }
return [status, true]; return status;
} }
export function request(type): Promise<[PermissionStatus, boolean]> { export function request(type): Promise<PermissionResult> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
AVCaptureDevice.requestAccessForMediaTypeCompletionHandler(typeFromString(type), (granted) => resolve(getStatus(type))); AVCaptureDevice.requestAccessForMediaTypeCompletionHandler(typeFromString(type), (granted) => resolve(getStatus(type)));
}); });
@@ -274,7 +274,7 @@ export namespace PermissionsIOS {
} }
namespace NSPSpeechRecognition { namespace NSPSpeechRecognition {
let status: PermissionStatus = PermissionStatus.undetermined; let status: PermissionStatus = PermissionStatus.undetermined;
export function getStatus(): [PermissionStatus, boolean] { export function getStatus(): PermissionStatus {
const speechStatus = SFSpeechRecognizer.authorizationStatus(); const speechStatus = SFSpeechRecognizer.authorizationStatus();
switch (speechStatus) { switch (speechStatus) {
case SFSpeechRecognizerAuthorizationStatus.Authorized: case SFSpeechRecognizerAuthorizationStatus.Authorized:
@@ -289,7 +289,7 @@ export namespace PermissionsIOS {
default: default:
status = PermissionStatus.undetermined; status = PermissionStatus.undetermined;
} }
return [status, true]; return status;
} }
export function request(): Promise<[PermissionStatus, boolean]> { export function request(): Promise<[PermissionStatus, boolean]> {
@@ -731,7 +731,7 @@ export class Permissions {
return PermissionsIOS.getPermissionStatus(permission, options?.type || DEFAULTS[permission]); return PermissionsIOS.getPermissionStatus(permission, options?.type || DEFAULTS[permission]);
} }
static async request<T extends IOSPermissionTypes | IOSPermissionTypes[]>(permission: T, options?: PermissionRequestOptions): Promise<Result<T>> { static async request<T extends IOSPermissionTypes | IOSPermissionTypes[]>(permission: T, options?: PermissionRequestOptions): Promise<PermissionResult> {
if (Trace.isEnabled()) { if (Trace.isEnabled()) {
Trace.write(`request ${permission}`, Trace.categories.Permissions, Trace.messageType.info); Trace.write(`request ${permission}`, Trace.categories.Permissions, Trace.messageType.info);
} }