• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//@ts-nocheck
2/*
3 * Copyright (c) 2022 Huawei Device Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import { Log } from '../utils/Log';
18import settings from '@ohos.settings';
19import dataShare from '@ohos.data.dataShare';
20import common from '@ohos.app.ability.common';
21import { Context } from '@ohos.abilityAccessCtrl';
22
23const TAG = 'SettingsDataManager';
24/**
25 * Wrapper class for settings interfaces.
26 */
27class SettingsDataManager {
28  private readonly uriShare: string = 'datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=';
29  private dataShareHelper: dataShare.DataShareHelper | null = null;
30  private RETRY_INTERVAL_MS = 2000;
31  private MAX_RETRY_TIME = 10;
32  private constructor() {
33  }
34
35  /**
36   * settingsData manager instance
37   *
38   * @return settingsDataManager instance
39   */
40  static getInstance(): SettingsDataManager {
41    if (globalThis.SettingsDataManagerInstance == null) {
42      globalThis.SettingsDataManagerInstance = new SettingsDataManager();
43    }
44    return globalThis.SettingsDataManagerInstance;
45  }
46
47  private sleep(time: number) {
48    return new Promise(resolve => {
49      setTimeout(resolve, time);
50    })
51  }
52
53  public async createDataShareHelper(retryTimes: number): Promise<void> {
54    Log.showInfo(TAG, 'createDataShareHelper');
55    if (retryTimes < 1) {
56      Log.showError(TAG, 'createDataShareHelper, retry too many times');
57      return;
58    }
59    Log.showInfo(TAG, 'createDataShareHelper in, retry times: %{public}d', this.MAX_RETRY_TIME - retryTimes + 1);
60    try {
61      this.dataShareHelper = await dataShare.createDataShareHelper(globalThis.desktopContext, this.uriShare);
62      if (this.dataShareHelper) {
63        Log.showInfo(TAG, 'createDataShareHelper success.');
64        globalThis.sGestureNavigationManager.getGestureNavigationStatus();
65      }
66    } catch (err) {
67      Log.showError(TAG, 'createDataShareHelper error, code: ' + err?.code + ', message: ' + err?.message);
68      await this.sleep(this.RETRY_INTERVAL_MS);
69      this.createDataShareHelper(retryTimes - 1);
70    }
71  }
72
73  /**
74   * Update settingData by settingDataKey.
75   */
76  setValue(helper: dataShare.DataShareHelper | null, settingDataKey: string, value: string): void {
77    Log.showInfo(TAG, 'setValue:' + value);
78    try {
79      settings.setValueSync(globalThis.desktopContext as Context, settingDataKey, value);
80    } catch (err) {
81      Log.showError(TAG, `Update settingData by settingDataKey err: ${err.message || err?.code}`);
82    }
83  }
84
85  /**
86   * get settingDataValue by settingDataKey.
87   *
88   * @return settingsDataValue by settingDataKey.
89   */
90  getValue(helper: dataShare.DataShareHelper | null, settingDataKey: string, defaultValue: string): string {
91    let value: string = '1';
92    try {
93      value = settings.getValueSync(globalThis.desktopContext as Context, settingDataKey, defaultValue);
94    } catch (err) {
95      Log.showError(TAG, `get settingDataValue by settingDataKey err: ${err.message || err?.code}`);
96    }
97    Log.showInfo(TAG, 'getValue:' + value);
98    return value;
99  }
100
101  /**
102   * get settingDataUri by settingDataKey.
103   *
104   * @return settingDataUri by settingDataKey.
105   */
106  getUri(settingDataKey: string): string {
107    return this.uriShare + settingDataKey;
108  }
109
110  /**
111   * get settingDataHelper by settingDataKey.
112   *
113   * @return settingDataHelper by settingDataUri.
114   */
115  getHelper(context: common.Context, uri: string): dataShare.DataShareHelper | null {
116    return this.dataShareHelper;
117  }
118}
119
120export const settingsDataManager = SettingsDataManager.getInstance();