web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

commit d675e8c5407122da5b6cd0ee3e6dcb1979a844e6
parent 4089338d5770ef7fd99fc962259fe973dcde53b6
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Wed, 28 Aug 2024 12:17:40 +0000

client: update iclientgeolocation, update iclientsettings

Diffstat:
Mclient/src/capacitor/geolocation.ts | 15++-------------
Mclient/src/capacitor/settings.ts | 38+++++++++++++++++++++++++++++++++-----
Mclient/src/types.ts | 23++++++++++++++++++-----
3 files changed, 53 insertions(+), 23 deletions(-)

diff --git a/client/src/capacitor/geolocation.ts b/client/src/capacitor/geolocation.ts @@ -23,22 +23,11 @@ export class CapacitorClientGeolocation implements IClientGeolocation { }; } - public async current(opts?: { - request_permissions?: boolean; - }): Promise<IClientGeolocationPosition | undefined | IGeolocationErrorMessage> { + public async current(): Promise<IClientGeolocationPosition | undefined | IGeolocationErrorMessage> { try { - const has_permissions = await Geolocation.checkPermissions(); - console.log(JSON.stringify(has_permissions, null, 4), `has_permissions`) - if (opts?.request_permissions && has_permissions.location !== `granted`) { - const request_permissions = await Geolocation.requestPermissions({ permissions: [`location`] }); - console.log(JSON.stringify(request_permissions, null, 4), `request_permissions`) - if (request_permissions.location !== `granted`) return `permissions-request-failed`; - } const position = await this.get_current_position(); return position; - } catch (e) { - console.log(`e `, e) - }; + } catch (e) { }; } } diff --git a/client/src/capacitor/settings.ts b/client/src/capacitor/settings.ts @@ -1,12 +1,11 @@ import { AndroidSettings, IOSSettings, NativeSettings } from '@radroots/capacitor-native-settings'; -import type { IClientSettings, } from '../types'; +import type { IClientSettings, IClientSettingsOpen, } from '../types'; export class CapacitorClientSettings implements IClientSettings { - public async open(): Promise<boolean> { + private async open_android(setting: keyof typeof AndroidSettings): Promise<boolean> { try { - const res = await NativeSettings.open({ - optionAndroid: AndroidSettings.ApplicationDetails, - optionIOS: IOSSettings.App + const res = await NativeSettings.openAndroid({ + option: AndroidSettings[setting], }); if (typeof res.status === `boolean`) return res.status; else return false; @@ -14,4 +13,33 @@ export class CapacitorClientSettings implements IClientSettings { return false; }; }; + + private async open_ios(setting: keyof typeof IOSSettings): Promise<boolean> { + try { + const res = await NativeSettings.openIOS({ + option: IOSSettings[setting], + }); + if (typeof res.status === `boolean`) return res.status; + else return false; + } catch (e) { + return false; + }; + }; + + public async open(opts: IClientSettingsOpen): Promise<boolean> { + try { + if (`android` in opts) { + const { android: { setting } } = opts; + const res = await this.open_android(setting); + return res; + } else { + const { ios: { setting } } = opts; + const res = await this.open_ios(setting); + return res; + } + + } catch (e) { + return false; + }; + }; } diff --git a/client/src/types.ts b/client/src/types.ts @@ -1,5 +1,6 @@ import { type BatteryInfo, type DeviceInfo } from '@capacitor/device'; import { type ScanResult } from '@radroots/capacitor-bluetooth-le'; +import { IOSSettings, type AndroidSettings } from '@radroots/capacitor-native-settings'; import { type ConnectToWifiResult, type GetCurrentWifiResult, type PermissionStatus, type ScanWifiResult } from '@radroots/capacitor-wifi'; import { type ErrorResponse } from '@radroots/utils'; @@ -131,12 +132,10 @@ export type IClientGeolocationPosition = { altitude_accuracy: number | undefined; }; -export type IGeolocationErrorMessage = `permissions-required` | `permissions-request-failed`; +export type IGeolocationErrorMessage = `permissions-required`; export type IClientGeolocation = { - current(opts?: { - request_permissions?: boolean; - }): Promise<IClientGeolocationPosition | undefined | IGeolocationErrorMessage> + current(): Promise<IClientGeolocationPosition | undefined | IGeolocationErrorMessage> }; export type IClientHttpOpts = { @@ -235,6 +234,20 @@ export type OsPhotosPermissions = { photos: string; }; +export type IClientSettingsOpenAndroid = { + android: { + setting: keyof typeof AndroidSettings; + } +}; + +export type IClientSettingsOpenIos = { + ios: { + setting: keyof typeof IOSSettings; + } +}; + +export type IClientSettingsOpen = IClientSettingsOpenAndroid | IClientSettingsOpenIos; + export type IClientSettings = { - open(): Promise<boolean>; + open(opts: IClientSettingsOpen): Promise<boolean>; }; \ No newline at end of file