1c36cf2e9Sopenharmony_ci/* 2c36cf2e9Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd. 3c36cf2e9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c36cf2e9Sopenharmony_ci * you may not use this file except in compliance with the License. 5c36cf2e9Sopenharmony_ci * You may obtain a copy of the License at 6c36cf2e9Sopenharmony_ci * 7c36cf2e9Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c36cf2e9Sopenharmony_ci * 9c36cf2e9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c36cf2e9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c36cf2e9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c36cf2e9Sopenharmony_ci * See the License for the specific language governing permissions and 13c36cf2e9Sopenharmony_ci * limitations under the License. 14c36cf2e9Sopenharmony_ci */ 15c36cf2e9Sopenharmony_ci 16c36cf2e9Sopenharmony_ciimport { Log } from '@ohos/common'; 17c36cf2e9Sopenharmony_ciimport data_preferences from '@ohos.data.preferences'; 18c36cf2e9Sopenharmony_ciimport type common from '@ohos.app.ability.common'; 19c36cf2e9Sopenharmony_ciimport { GlobalThisHelper, GlobalThisStorageKey} from '@ohos/common'; 20c36cf2e9Sopenharmony_ciimport { PreferencesKey } from '@ohos/common'; 21c36cf2e9Sopenharmony_ci 22c36cf2e9Sopenharmony_ciconst TAG = '[PreferencesAdapter]:'; 23c36cf2e9Sopenharmony_citype ValueType = number | string | boolean | Array<number> | Array<string> | Array<boolean>; 24c36cf2e9Sopenharmony_ci 25c36cf2e9Sopenharmony_ci/** 26c36cf2e9Sopenharmony_ci * StorageHelper 27c36cf2e9Sopenharmony_ci */ 28c36cf2e9Sopenharmony_ciexport default class PreferencesAdapter { 29c36cf2e9Sopenharmony_ci private static preferencesAdapterKey = [ 30c36cf2e9Sopenharmony_ci PreferencesKey.KEY_PRIVACY_STATEMENT_PREFERENCES 31c36cf2e9Sopenharmony_ci ]; 32c36cf2e9Sopenharmony_ci private preferences: data_preferences.Preferences = undefined; 33c36cf2e9Sopenharmony_ci 34c36cf2e9Sopenharmony_ci private validKey(key: string) : boolean { 35c36cf2e9Sopenharmony_ci const element = PreferencesAdapter.preferencesAdapterKey.find((ele) => ele === key); 36c36cf2e9Sopenharmony_ci if (element === undefined) { 37c36cf2e9Sopenharmony_ci Log.error(TAG, 'Can not find PREFERENCES_KEY key: ' + JSON.stringify(key)); 38c36cf2e9Sopenharmony_ci return false; 39c36cf2e9Sopenharmony_ci } 40c36cf2e9Sopenharmony_ci return true; 41c36cf2e9Sopenharmony_ci } 42c36cf2e9Sopenharmony_ci 43c36cf2e9Sopenharmony_ci public static getInstance() : PreferencesAdapter { 44c36cf2e9Sopenharmony_ci if (GlobalThisHelper.getValue<PreferencesAdapter>(GlobalThisStorageKey.KEY_PREFERENCES_ADAPTER) !== undefined) { 45c36cf2e9Sopenharmony_ci return GlobalThisHelper.getValue<PreferencesAdapter>(GlobalThisStorageKey.KEY_PREFERENCES_ADAPTER); 46c36cf2e9Sopenharmony_ci } 47c36cf2e9Sopenharmony_ci return GlobalThisHelper.createValue<PreferencesAdapter>(new PreferencesAdapter(), GlobalThisStorageKey.KEY_PREFERENCES_ADAPTER); 48c36cf2e9Sopenharmony_ci } 49c36cf2e9Sopenharmony_ci 50c36cf2e9Sopenharmony_ci /** 51c36cf2e9Sopenharmony_ci * 创建preferences对象 52c36cf2e9Sopenharmony_ci */ 53c36cf2e9Sopenharmony_ci public async getOrCreatePreferencesSync(preferencesName: string): Promise<boolean> { 54c36cf2e9Sopenharmony_ci Log.info(TAG, 'getOrCreatePreferencesSync start'); 55c36cf2e9Sopenharmony_ci const ABILITY_CONTEXT = GlobalThisHelper.getValue<common.UIExtensionContext>(GlobalThisStorageKey.KEY_MAIN_ABILITY_CONTEXT); 56c36cf2e9Sopenharmony_ci if (preferencesName) { 57c36cf2e9Sopenharmony_ci try { 58c36cf2e9Sopenharmony_ci Log.info(TAG, 'getOrCreatePreferencesSync getValue'); 59c36cf2e9Sopenharmony_ci const preferences = await data_preferences.getPreferences(ABILITY_CONTEXT, preferencesName); 60c36cf2e9Sopenharmony_ci Log.info(TAG, 'getOrCreatePreferencesSync getPreferences: ' + JSON.stringify(preferences)); 61c36cf2e9Sopenharmony_ci if (this.setPreferences(preferences)) { 62c36cf2e9Sopenharmony_ci return true; 63c36cf2e9Sopenharmony_ci } else { 64c36cf2e9Sopenharmony_ci return false; 65c36cf2e9Sopenharmony_ci } 66c36cf2e9Sopenharmony_ci } catch (err) { 67c36cf2e9Sopenharmony_ci Log.error('Failed to get preferences. code =' + err.code + ', message =' + err.message); 68c36cf2e9Sopenharmony_ci return false; 69c36cf2e9Sopenharmony_ci } 70c36cf2e9Sopenharmony_ci } else { 71c36cf2e9Sopenharmony_ci Log.error('getOrCreatePreferencesSync preferencesName is undefined'); 72c36cf2e9Sopenharmony_ci return false; 73c36cf2e9Sopenharmony_ci } 74c36cf2e9Sopenharmony_ci } 75c36cf2e9Sopenharmony_ci 76c36cf2e9Sopenharmony_ci /** 77c36cf2e9Sopenharmony_ci * 设置preferences对象 78c36cf2e9Sopenharmony_ci */ 79c36cf2e9Sopenharmony_ci public setPreferences(preferences: data_preferences.Preferences): boolean { 80c36cf2e9Sopenharmony_ci this.preferences = preferences; 81c36cf2e9Sopenharmony_ci return true; 82c36cf2e9Sopenharmony_ci } 83c36cf2e9Sopenharmony_ci 84c36cf2e9Sopenharmony_ci /** 85c36cf2e9Sopenharmony_ci * 通过key获取对应value 86c36cf2e9Sopenharmony_ci */ 87c36cf2e9Sopenharmony_ci public async getValue(key: string): Promise<ValueType> { 88c36cf2e9Sopenharmony_ci Log.info(TAG, 'getValue key: ' + JSON.stringify(key)); 89c36cf2e9Sopenharmony_ci if (this.preferences) { 90c36cf2e9Sopenharmony_ci try { 91c36cf2e9Sopenharmony_ci return <ValueType>(await this.preferences.get(key, false)); 92c36cf2e9Sopenharmony_ci } catch (err) { 93c36cf2e9Sopenharmony_ci Log.error(TAG, 'Failed to get value of getValue. code =' + err.code + ', message =' + err.message); 94c36cf2e9Sopenharmony_ci return undefined; 95c36cf2e9Sopenharmony_ci } 96c36cf2e9Sopenharmony_ci } else { 97c36cf2e9Sopenharmony_ci Log.error(TAG, 'getValue preferences is undefined, please set preferences'); 98c36cf2e9Sopenharmony_ci return undefined; 99c36cf2e9Sopenharmony_ci } 100c36cf2e9Sopenharmony_ci } 101c36cf2e9Sopenharmony_ci 102c36cf2e9Sopenharmony_ci /** 103c36cf2e9Sopenharmony_ci * 设置value 104c36cf2e9Sopenharmony_ci */ 105c36cf2e9Sopenharmony_ci public async putValue(key: string, value: ValueType): Promise<boolean> { 106c36cf2e9Sopenharmony_ci Log.info(TAG, 'putValue start'); 107c36cf2e9Sopenharmony_ci if (!this.validKey(key)) { 108c36cf2e9Sopenharmony_ci return false; 109c36cf2e9Sopenharmony_ci } 110c36cf2e9Sopenharmony_ci if (this.preferences) { 111c36cf2e9Sopenharmony_ci try { 112c36cf2e9Sopenharmony_ci await this.preferences.put(key, value); 113c36cf2e9Sopenharmony_ci Log.info(TAG, 'putValue success'); 114c36cf2e9Sopenharmony_ci return true; 115c36cf2e9Sopenharmony_ci } catch (err) { 116c36cf2e9Sopenharmony_ci Log.error(TAG, 'Failed to put value of putValue. code =' + err.code + ', message =' + err.message); 117c36cf2e9Sopenharmony_ci return false; 118c36cf2e9Sopenharmony_ci } 119c36cf2e9Sopenharmony_ci } else { 120c36cf2e9Sopenharmony_ci Log.error(TAG, 'putValue preferences is undefined, please set preferences'); 121c36cf2e9Sopenharmony_ci return false; 122c36cf2e9Sopenharmony_ci } 123c36cf2e9Sopenharmony_ci } 124c36cf2e9Sopenharmony_ci 125c36cf2e9Sopenharmony_ci /** 126c36cf2e9Sopenharmony_ci * 删除preferences中的值 127c36cf2e9Sopenharmony_ci */ 128c36cf2e9Sopenharmony_ci public async deleteValue(key: string): Promise<boolean> { 129c36cf2e9Sopenharmony_ci if (!this.validKey(key)) { 130c36cf2e9Sopenharmony_ci return false; 131c36cf2e9Sopenharmony_ci } 132c36cf2e9Sopenharmony_ci if (this.preferences) { 133c36cf2e9Sopenharmony_ci try { 134c36cf2e9Sopenharmony_ci await this.preferences.delete(key); 135c36cf2e9Sopenharmony_ci Log.info(TAG, 'deleteValue success'); 136c36cf2e9Sopenharmony_ci return true; 137c36cf2e9Sopenharmony_ci } catch (err) { 138c36cf2e9Sopenharmony_ci Log.error(TAG, 'Failed to delete value of deleteValue. code =' + err.code + ', message =' + err.message); 139c36cf2e9Sopenharmony_ci return false; 140c36cf2e9Sopenharmony_ci } 141c36cf2e9Sopenharmony_ci } else { 142c36cf2e9Sopenharmony_ci Log.error(TAG, 'deleteValue preferences is undefined, please set preferences'); 143c36cf2e9Sopenharmony_ci return false; 144c36cf2e9Sopenharmony_ci } 145c36cf2e9Sopenharmony_ci } 146c36cf2e9Sopenharmony_ci 147c36cf2e9Sopenharmony_ci /** 148c36cf2e9Sopenharmony_ci * 持久化存储 149c36cf2e9Sopenharmony_ci */ 150c36cf2e9Sopenharmony_ci public async flush(): Promise<boolean> { 151c36cf2e9Sopenharmony_ci Log.info(TAG, 'flush start'); 152c36cf2e9Sopenharmony_ci if (this.preferences) { 153c36cf2e9Sopenharmony_ci try { 154c36cf2e9Sopenharmony_ci await this.preferences.flush(); 155c36cf2e9Sopenharmony_ci Log.info(TAG, 'flush success'); 156c36cf2e9Sopenharmony_ci return true; 157c36cf2e9Sopenharmony_ci } catch (err) { 158c36cf2e9Sopenharmony_ci Log.error(TAG, 'Failed to flush value of flush. code =' + err.code + ', message =' + err.message); 159c36cf2e9Sopenharmony_ci return false; 160c36cf2e9Sopenharmony_ci } 161c36cf2e9Sopenharmony_ci } else { 162c36cf2e9Sopenharmony_ci Log.error(TAG, 'flush preferences is undefined, please set preferences'); 163c36cf2e9Sopenharmony_ci return false; 164c36cf2e9Sopenharmony_ci } 165c36cf2e9Sopenharmony_ci } 166c36cf2e9Sopenharmony_ci}