16e80583aSopenharmony_ci//@ts-nocheck
26e80583aSopenharmony_ci/*
36e80583aSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
46e80583aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
56e80583aSopenharmony_ci * you may not use this file except in compliance with the License.
66e80583aSopenharmony_ci * You may obtain a copy of the License at
76e80583aSopenharmony_ci *
86e80583aSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
96e80583aSopenharmony_ci *
106e80583aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
116e80583aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
126e80583aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136e80583aSopenharmony_ci * See the License for the specific language governing permissions and
146e80583aSopenharmony_ci * limitations under the License.
156e80583aSopenharmony_ci */
166e80583aSopenharmony_ci
176e80583aSopenharmony_ciimport { Log } from '../utils/Log';
186e80583aSopenharmony_ciimport settings from '@ohos.settings';
196e80583aSopenharmony_ciimport dataShare from '@ohos.data.dataShare';
206e80583aSopenharmony_ciimport common from '@ohos.app.ability.common';
216e80583aSopenharmony_ciimport { Context } from '@ohos.abilityAccessCtrl';
226e80583aSopenharmony_ci
236e80583aSopenharmony_ciconst TAG = 'SettingsDataManager';
246e80583aSopenharmony_ci/**
256e80583aSopenharmony_ci * Wrapper class for settings interfaces.
266e80583aSopenharmony_ci */
276e80583aSopenharmony_ciclass SettingsDataManager {
286e80583aSopenharmony_ci  private readonly uriShare: string = 'datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=';
296e80583aSopenharmony_ci  private dataShareHelper: dataShare.DataShareHelper | null = null;
306e80583aSopenharmony_ci  private RETRY_INTERVAL_MS = 2000;
316e80583aSopenharmony_ci  private MAX_RETRY_TIME = 10;
326e80583aSopenharmony_ci  private constructor() {
336e80583aSopenharmony_ci  }
346e80583aSopenharmony_ci
356e80583aSopenharmony_ci  /**
366e80583aSopenharmony_ci   * settingsData manager instance
376e80583aSopenharmony_ci   *
386e80583aSopenharmony_ci   * @return settingsDataManager instance
396e80583aSopenharmony_ci   */
406e80583aSopenharmony_ci  static getInstance(): SettingsDataManager {
416e80583aSopenharmony_ci    if (globalThis.SettingsDataManagerInstance == null) {
426e80583aSopenharmony_ci      globalThis.SettingsDataManagerInstance = new SettingsDataManager();
436e80583aSopenharmony_ci    }
446e80583aSopenharmony_ci    return globalThis.SettingsDataManagerInstance;
456e80583aSopenharmony_ci  }
466e80583aSopenharmony_ci
476e80583aSopenharmony_ci  private sleep(time: number) {
486e80583aSopenharmony_ci    return new Promise(resolve => {
496e80583aSopenharmony_ci      setTimeout(resolve, time);
506e80583aSopenharmony_ci    })
516e80583aSopenharmony_ci  }
526e80583aSopenharmony_ci
536e80583aSopenharmony_ci  public async createDataShareHelper(retryTimes: number): Promise<void> {
546e80583aSopenharmony_ci    Log.showInfo(TAG, 'createDataShareHelper');
556e80583aSopenharmony_ci    if (retryTimes < 1) {
566e80583aSopenharmony_ci      Log.showError(TAG, 'createDataShareHelper, retry too many times');
576e80583aSopenharmony_ci      return;
586e80583aSopenharmony_ci    }
596e80583aSopenharmony_ci    Log.showInfo(TAG, 'createDataShareHelper in, retry times: %{public}d', this.MAX_RETRY_TIME - retryTimes + 1);
606e80583aSopenharmony_ci    try {
616e80583aSopenharmony_ci      this.dataShareHelper = await dataShare.createDataShareHelper(globalThis.desktopContext, this.uriShare);
626e80583aSopenharmony_ci      if (this.dataShareHelper) {
636e80583aSopenharmony_ci        Log.showInfo(TAG, 'createDataShareHelper success.');
646e80583aSopenharmony_ci        globalThis.sGestureNavigationManager.getGestureNavigationStatus();
656e80583aSopenharmony_ci      }
666e80583aSopenharmony_ci    } catch (err) {
676e80583aSopenharmony_ci      Log.showError(TAG, 'createDataShareHelper error, code: ' + err?.code + ', message: ' + err?.message);
686e80583aSopenharmony_ci      await this.sleep(this.RETRY_INTERVAL_MS);
696e80583aSopenharmony_ci      this.createDataShareHelper(retryTimes - 1);
706e80583aSopenharmony_ci    }
716e80583aSopenharmony_ci  }
726e80583aSopenharmony_ci
736e80583aSopenharmony_ci  /**
746e80583aSopenharmony_ci   * Update settingData by settingDataKey.
756e80583aSopenharmony_ci   */
766e80583aSopenharmony_ci  setValue(helper: dataShare.DataShareHelper | null, settingDataKey: string, value: string): void {
776e80583aSopenharmony_ci    Log.showInfo(TAG, 'setValue:' + value);
786e80583aSopenharmony_ci    try {
796e80583aSopenharmony_ci      settings.setValueSync(globalThis.desktopContext as Context, settingDataKey, value);
806e80583aSopenharmony_ci    } catch (err) {
816e80583aSopenharmony_ci      Log.showError(TAG, `Update settingData by settingDataKey err: ${err.message || err?.code}`);
826e80583aSopenharmony_ci    }
836e80583aSopenharmony_ci  }
846e80583aSopenharmony_ci
856e80583aSopenharmony_ci  /**
866e80583aSopenharmony_ci   * get settingDataValue by settingDataKey.
876e80583aSopenharmony_ci   *
886e80583aSopenharmony_ci   * @return settingsDataValue by settingDataKey.
896e80583aSopenharmony_ci   */
906e80583aSopenharmony_ci  getValue(helper: dataShare.DataShareHelper | null, settingDataKey: string, defaultValue: string): string {
916e80583aSopenharmony_ci    let value: string = '1';
926e80583aSopenharmony_ci    try {
936e80583aSopenharmony_ci      value = settings.getValueSync(globalThis.desktopContext as Context, settingDataKey, defaultValue);
946e80583aSopenharmony_ci    } catch (err) {
956e80583aSopenharmony_ci      Log.showError(TAG, `get settingDataValue by settingDataKey err: ${err.message || err?.code}`);
966e80583aSopenharmony_ci    }
976e80583aSopenharmony_ci    Log.showInfo(TAG, 'getValue:' + value);
986e80583aSopenharmony_ci    return value;
996e80583aSopenharmony_ci  }
1006e80583aSopenharmony_ci
1016e80583aSopenharmony_ci  /**
1026e80583aSopenharmony_ci   * get settingDataUri by settingDataKey.
1036e80583aSopenharmony_ci   *
1046e80583aSopenharmony_ci   * @return settingDataUri by settingDataKey.
1056e80583aSopenharmony_ci   */
1066e80583aSopenharmony_ci  getUri(settingDataKey: string): string {
1076e80583aSopenharmony_ci    return this.uriShare + settingDataKey;
1086e80583aSopenharmony_ci  }
1096e80583aSopenharmony_ci
1106e80583aSopenharmony_ci  /**
1116e80583aSopenharmony_ci   * get settingDataHelper by settingDataKey.
1126e80583aSopenharmony_ci   *
1136e80583aSopenharmony_ci   * @return settingDataHelper by settingDataUri.
1146e80583aSopenharmony_ci   */
1156e80583aSopenharmony_ci  getHelper(context: common.Context, uri: string): dataShare.DataShareHelper | null {
1166e80583aSopenharmony_ci    return this.dataShareHelper;
1176e80583aSopenharmony_ci  }
1186e80583aSopenharmony_ci}
1196e80583aSopenharmony_ci
1206e80583aSopenharmony_ciexport const settingsDataManager = SettingsDataManager.getInstance();