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();