• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * @file Describe the file
3 * Copyright (c) 2021 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 dataStorage from '@ohos.data.preferences';
18import deviceInfo from '@ohos.deviceInfo';
19import ohosDataRdb from '@ohos.data.rdb';
20import i18n from '@ohos.i18n';
21import settings from '@ohos.settings';
22import systemParameter from '@ohos.systemparameter';
23import SettingsDataConfig from '../Utils/SettingsDataConfig';
24import { Log } from '../Utils/Log';
25
26let DDL_TABLE_CREATE = `CREATE TABLE IF NOT EXISTS ${SettingsDataConfig.TABLE_NAME} (`
27+ `${SettingsDataConfig.FIELD_ID} INTEGER PRIMARY KEY AUTOINCREMENT, `
28+ `KEYWORD TEXT, `
29+ `VALUE TEXT CHECK (LENGTH(VALUE)<=1000))`;
30
31const DEFAULT_JSON_FILE_NAME : string = "default_settings.json";
32const SETTINGSDATA_PREFERENCE : string = "SettingsDataPreference";
33
34let DefaultKey = SettingsDataConfig.DefaultKey;
35let SettingsKey = SettingsDataConfig.SettingsKey;
36
37const DefalutKVGlobal = {
38  "settings.screen.brightness.default": "50",
39  "settings.time.format.default": "24",
40  "settings.audio.ringtone.default": "5",
41  "settings.audio.media.default": "5",
42  "settings.audio.voicecall.default": "5",
43  "settings.display.navigationbar_status.default": "1",
44  "cellular_data_enable.default": "1",
45};
46
47const TIME_FORMAT = {
48  TIME_FORMAT_24: "24",
49  TIME_FORMAT_12: "12",
50}
51
52class SettingsDBHelper {
53  private firstStartupFlag: boolean;
54  private rdbStore_;
55  private context_;
56  private static instance_: SettingsDBHelper;
57
58  private constructor() {
59    this.firstStartupFlag = false;
60    this.rdbStore_ = undefined;
61    this.context_ = globalThis.abilityContext;
62    Log.I('call construstor');
63  }
64
65  private async firstStartupConfig() : Promise<void> {
66    Log.I("firstStartupConfig start");
67    let storage = await dataStorage.getPreferences(this.context_, SETTINGSDATA_PREFERENCE)
68    Log.I("firstStartupConfig getStorage = " + storage);
69    let isExist = await storage.has('isFirstStartUp')
70    Log.I("firstStartupConfig has isFirstStartUp = " + isExist);
71    if (!isExist) {
72      Log.I("The key of isFirstStartUp is not contained.")
73      Log.I("firstStartupConfig put start");
74      await storage.put('isFirstStartUp', 'true');
75      Log.I("firstStartupConfig flush start");
76      await storage.flush();
77      Log.I("firstStartupConfig flush end");
78      this.firstStartupFlag = true;
79    } else {
80      let startup = await storage.get('isFirstStartUp', 'null');
81      if (startup != 'true') {
82        Log.I("firstStartupConfig get startup = " + startup);
83        this.firstStartupFlag = true;
84      }
85    }
86    Log.I("firstStartupConfig end");
87    return;
88  }
89
90  public async initRdbStore() {
91    Log.I('call initRdbStore start');
92    this.rdbStore_ = await ohosDataRdb.getRdbStore(this.context_, { name: SettingsDataConfig.DB_NAME }, 1);
93    Log.I('call initRdbStore, rdbStore_ = ' + this.rdbStore_);
94
95    Log.I("initRdbStore executeSql");
96    await this.rdbStore_.executeSql(DDL_TABLE_CREATE, []);
97
98    Log.I('getRdbStore firstStartupConfig');
99    await this.firstStartupConfig();
100
101    if (this.firstStartupFlag) {
102      Log.I('initRdbStore getDefaultSettingsKV');
103      let defaultKV = await this.getDefaultSettingsKV();
104      Log.I('initRdbStore loadDefaultSettings');
105      await this.loadDefaultSettings(defaultKV);
106    } else {
107      Log.I('initRdbStore not need loadDefaultSettings');
108    }
109    Log.I('call initRdbStore end');
110    return this.rdbStore_;
111  }
112
113  public static getInstance() {
114    if (!SettingsDBHelper.instance_) {
115      Log.I('call getInstance start');
116      SettingsDBHelper.instance_ = new SettingsDBHelper();
117      Log.I('call getInstance end');
118    }
119    return SettingsDBHelper.instance_;
120  }
121
122  public async getRdbStore() {
123    Log.I('call getRdbStore start');
124    return await SettingsDBHelper.instance_.initRdbStore();
125  }
126
127  private async loadSettings(rdbStore_, key, value): Promise<void> {
128    Log.I("key=" + key + " value " + value);
129    await this.rdbStore_.insert(
130      SettingsDataConfig.TABLE_NAME,
131      { "KEYWORD": key, "VALUE": value },
132      (err, ret) => {
133        if (err) {
134          Log.E("loadSettings insert error:" + JSON.stringify(err));
135        }
136        Log.I("loadSettings insert ret = " + ret);
137      });
138  }
139
140  private async loadDefaultSettings(defaultKV) {
141    Log.I("loadDefaultSettings start");
142
143    await this.loadSettings(this.rdbStore_,
144      settings.display.SCREEN_BRIGHTNESS_STATUS, defaultKV[DefaultKey.SETTINGS_SCREEN_BRIGHTNESS_DEFAULT]);
145
146    await this.loadSettings(this.rdbStore_,
147      settings.date.TIME_FORMAT, defaultKV[DefaultKey.SETTINGS_TIME_FORMAT_DEFAULT]);
148
149    await this.loadSettings(this.rdbStore_,
150      SettingsKey.SETTINGS_AUDIO_RINGTONE, defaultKV[DefaultKey.SETTINGS_AUDIO_RINGTONE_DEFAULT]);
151
152    await this.loadSettings(this.rdbStore_,
153      SettingsKey.SETTINGS_AUDIO_MEDIA, defaultKV[DefaultKey.SETTINGS_AUDIO_MEDIA_DEFAULT]);
154
155    await this.loadSettings(this.rdbStore_,
156      SettingsKey.SETTINGS_AUDIO_VOICE_CALL, defaultKV[DefaultKey.SETTINGS_AUDIO_VOICE_CALL_DEFAULT]);
157
158    await this.loadSettings(this.rdbStore_,
159      settings.general.DEVICE_NAME, defaultKV[DefaultKey.SETTINGS_GENERAL_DEVICE_NAME_DEFAULT]);
160
161    await this.loadSettings(this.rdbStore_,
162      SettingsKey.SETTINGS_DISPALY_NAVBAR_STATUS, defaultKV[DefaultKey.SETTINGS_DISPALY_NAVBAR_STATUS_DEFAULT]);
163
164    await this.loadSettings(this.rdbStore_,
165      SettingsKey.CELLULAR_DATA_ENABLE, defaultKV[DefaultKey.CELLULAR_DATA_ENABLE_DEFAULT]);
166
167    Log.I("loadDefaultSettings end");
168    return;
169  }
170
171  private async readDefaultFile(): Promise<string> {
172    Log.I("readDefaultFile start");
173    let rawStr: string = "";
174    try {
175      let resManager = this.context_.resourceManager;
176      Log.I("readDefaultFile resManager=" + resManager);
177      let content = await resManager.getRawFile(DEFAULT_JSON_FILE_NAME);
178      rawStr = String.fromCharCode.apply(null, content);
179    } catch (err) {
180      Log.E("readDefaultFile readRawFile err" + err);
181    }
182    Log.I("readDefaultFile end");
183    return rawStr;
184  }
185
186  private async getDefaultSettingsKV() {
187    Log.I("getDefaultSettingsKV start");
188    let defaultKV = {};
189    try {
190      let content: string = await this.readDefaultFile();
191      if (!content) {
192        Log.I("getDefaultSettingsKV readDefaultFile err! content = " + content);
193        throw new Error("readfile error!")
194      }
195      let defaultJson = JSON.parse(content);
196      Log.I("getDefaultSettingsKV parse = " + JSON.stringify(defaultJson));
197      for (var index = 0; index < defaultJson.settings.length; index++) {
198        defaultKV[defaultJson.settings[index].name] = defaultJson.settings[index].value;
199      }
200    } catch (err) {
201      Log.E("getDefaultSettingsKV catch err! err = " + err);
202      defaultKV = DefalutKVGlobal;
203    }
204    let deviceName: string = deviceInfo.marketName;
205    if (deviceName.startsWith('"') && deviceName.endsWith('"')) {
206      deviceName = JSON.parse(deviceName);
207    }
208    defaultKV[DefaultKey.SETTINGS_GENERAL_DEVICE_NAME_DEFAULT] = deviceName;
209
210    if (i18n.is24HourClock()) {
211      defaultKV[DefaultKey.SETTINGS_TIME_FORMAT_DEFAULT] = TIME_FORMAT.TIME_FORMAT_24;
212    } else {
213      defaultKV[DefaultKey.SETTINGS_TIME_FORMAT_DEFAULT] = TIME_FORMAT.TIME_FORMAT_12;
214    }
215
216    let defaultBrightness = systemParameter.getSync('const.display.brightness.default');
217    if (defaultBrightness.length > 0) {
218      defaultKV[DefaultKey.SETTINGS_SCREEN_BRIGHTNESS_DEFAULT] = defaultBrightness;
219    }
220    return defaultKV;
221  }
222}
223
224export default SettingsDBHelper;
225