• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}