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