123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // @flow
-
- import {AsyncStorage} from "react-native";
-
- /**
- * Singleton used to manage preferences.
- * Preferences are fetched at the start of the app and saved in an instance object.
- * This allows for a synchronous access to saved data.
- */
-
- export default class AsyncStorageManager {
-
- static instance: AsyncStorageManager | null = null;
-
- /**
- * Get this class instance or create one if none is found
- * @returns {AsyncStorageManager}
- */
- static getInstance(): AsyncStorageManager {
- return AsyncStorageManager.instance === null ?
- AsyncStorageManager.instance = new AsyncStorageManager() :
- AsyncStorageManager.instance;
- }
-
- // Object storing preferences keys, default and current values for use in the app
- preferences = {
- showIntro: {
- key: 'showIntro',
- default: '1',
- current: '',
- },
- updateNumber: {
- key: 'updateNumber',
- default: '0',
- current: '',
- },
- proxiwashNotifications: {
- key: 'proxiwashNotifications',
- default: '5',
- current: '',
- },
- nightModeFollowSystem: {
- key: 'nightModeFollowSystem',
- default: '1',
- current: '',
- },
- nightMode: {
- key: 'nightMode',
- default: '0',
- current: '',
- },
- expoToken: {
- key: 'expoToken',
- default: '',
- current: '',
- },
- debugUnlocked: {
- key: 'debugUnlocked',
- default: '0',
- current: '',
- },
- defaultStartScreen: {
- key: 'defaultStartScreen',
- default: 'home',
- current: '',
- },
- proxiwashShowBanner: {
- key: 'proxiwashShowBanner',
- default: '1',
- current: '',
- },
- planexShowBanner: {
- key: 'planexShowBanner',
- default: '1',
- current: '',
- },
- showAprilFoolsStart: {
- key: 'showAprilFoolsStart',
- default: '1',
- current: '',
- },
- };
-
- /**
- * Set preferences object current values from AsyncStorage.
- * This function should be called at the app's start.
- *
- * @return {Promise<void>}
- */
- async loadPreferences() {
- let prefKeys = [];
- // Get all available keys
- for (let [key, value] of Object.entries(this.preferences)) {
- //$FlowFixMe
- prefKeys.push(value.key);
- }
- // Get corresponding values
- let resultArray: Array<Array<string>> = await AsyncStorage.multiGet(prefKeys);
- // Save those values for later use
- for (let i = 0; i < resultArray.length; i++) {
- let key: string = resultArray[i][0];
- let val: string | null = resultArray[i][1];
- if (val === null)
- val = this.preferences[key].default;
- this.preferences[key].current = val;
- }
- }
-
- /**
- * Save the value associated to the given key to preferences.
- * This updates the preferences object and saves it to AsyncStorage.
- *
- * @param key
- * @param val
- */
- savePref(key: string, val: string) {
- this.preferences[key].current = val;
- AsyncStorage.setItem(key, val);
- }
-
- }
|