diff options
Diffstat (limited to 'modules/expo-bluesky-swiss-army/src')
4 files changed, 87 insertions, 34 deletions
diff --git a/modules/expo-bluesky-swiss-army/src/DevicePrefs/index.ios.ts b/modules/expo-bluesky-swiss-army/src/DevicePrefs/index.ios.ts deleted file mode 100644 index 427185086..000000000 --- a/modules/expo-bluesky-swiss-army/src/DevicePrefs/index.ios.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {requireNativeModule} from 'expo-modules-core' - -const NativeModule = requireNativeModule('ExpoBlueskyDevicePrefs') - -export function getStringValueAsync( - key: string, - useAppGroup?: boolean, -): Promise<string | null> { - return NativeModule.getStringValueAsync(key, useAppGroup) -} - -export function setStringValueAsync( - key: string, - value: string | null, - useAppGroup?: boolean, -): Promise<void> { - return NativeModule.setStringValueAsync(key, value, useAppGroup) -} diff --git a/modules/expo-bluesky-swiss-army/src/DevicePrefs/index.ts b/modules/expo-bluesky-swiss-army/src/DevicePrefs/index.ts deleted file mode 100644 index f1eee6c28..000000000 --- a/modules/expo-bluesky-swiss-army/src/DevicePrefs/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {NotImplementedError} from '../NotImplemented' - -export function getStringValueAsync( - key: string, - useAppGroup?: boolean, -): Promise<string | null> { - throw new NotImplementedError({key, useAppGroup}) -} - -export function setStringValueAsync( - key: string, - value: string | null, - useAppGroup?: boolean, -): Promise<string | null> { - throw new NotImplementedError({key, value, useAppGroup}) -} diff --git a/modules/expo-bluesky-swiss-army/src/SharedPrefs/index.native.ts b/modules/expo-bluesky-swiss-army/src/SharedPrefs/index.native.ts new file mode 100644 index 000000000..0cea7c53b --- /dev/null +++ b/modules/expo-bluesky-swiss-army/src/SharedPrefs/index.native.ts @@ -0,0 +1,51 @@ +import {requireNativeModule} from 'expo-modules-core' + +const NativeModule = requireNativeModule('ExpoBlueskySharedPrefs') + +export function setValue( + key: string, + value: string | number | boolean | null | undefined, +): void { + // A bug on Android causes `JavaScripValue.isString()` to cause a crash on some occasions, seemingly because of a + // memory violation. Instead, we will use a specific function to set strings on this platform. + if (typeof value === 'string') { + return NativeModule.setString(key, value) + } + return NativeModule.setValue(key, value) +} + +export function removeValue(key: string): void { + return NativeModule.removeValue(key) +} + +export function getString(key: string): string | undefined { + return nullToUndefined(NativeModule.getString(key)) +} + +export function getNumber(key: string): number | undefined { + return nullToUndefined(NativeModule.getNumber(key)) +} + +export function getBool(key: string): boolean | undefined { + return nullToUndefined(NativeModule.getBool(key)) +} + +export function addToSet(key: string, value: string): void { + return NativeModule.addToSet(key, value) +} + +export function removeFromSet(key: string, value: string): void { + return NativeModule.removeFromSet(key, value) +} + +export function setContains(key: string, value: string): boolean { + return NativeModule.setContains(key, value) +} + +// iOS returns `null` if a value does not exist, and Android returns `undefined. Normalize these here for JS types +function nullToUndefined(value: any) { + if (value == null) { + return undefined + } + return value +} diff --git a/modules/expo-bluesky-swiss-army/src/SharedPrefs/index.ts b/modules/expo-bluesky-swiss-army/src/SharedPrefs/index.ts new file mode 100644 index 000000000..769344007 --- /dev/null +++ b/modules/expo-bluesky-swiss-army/src/SharedPrefs/index.ts @@ -0,0 +1,36 @@ +import {NotImplementedError} from '../NotImplemented' + +export function setValue( + key: string, + value: string | number | boolean | null | undefined, +): void { + throw new NotImplementedError({key, value}) +} + +export function removeValue(key: string): void { + throw new NotImplementedError({key}) +} + +export function getString(key: string): string | null { + throw new NotImplementedError({key}) +} + +export function getNumber(key: string): number | null { + throw new NotImplementedError({key}) +} + +export function getBool(key: string): boolean | null { + throw new NotImplementedError({key}) +} + +export function addToSet(key: string, value: string): void { + throw new NotImplementedError({key, value}) +} + +export function removeFromSet(key: string, value: string): void { + throw new NotImplementedError({key, value}) +} + +export function setContains(key: string, value: string): boolean { + throw new NotImplementedError({key, value}) +} |