1/** 2 * @file Describe the file 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 */ 16import Audio from '@ohos.multimedia.audio'; 17import bluetooth from '@ohos.bluetooth'; 18import dataAbility from '@ohos.data.dataAbility'; 19import featureAbility from '@ohos.ability.featureAbility'; 20import settings from '@ohos.settings'; 21import SettingsDataConfig from '../Utils/SettingsDataConfig'; 22import SettingsDBHelper from '../Utils/SettingsDBHelper'; 23import { Log } from '../Utils/Log'; 24 25import rpc from '@ohos.rpc'; 26import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 27 28let rdbStore; 29let requests: any[] = []; 30 31function DoSystemSetting(settingsKey: string, settingsValue: string) { 32 switch (settingsKey) { 33 case SettingsDataConfig.SettingsKey.SETTINGS_AUDIO_RINGTONE: { 34 try { 35 let volumeType = Audio.AudioVolumeType.RINGTONE; 36 Log.I('settings RINGTONE start') 37 Audio.getAudioManager().setVolume(volumeType, parseInt(settingsValue)).then(() => { 38 Log.I('settings Promise returned to indicate a successful RINGTONE setting.') 39 }); 40 } catch (err) { 41 Log.I('settings RINGTONE failed error = ' + JSON.stringify(err)); 42 } 43 break 44 } 45 case SettingsDataConfig.SettingsKey.SETTINGS_AUDIO_MEDIA: { 46 try { 47 let volumeType = Audio.AudioVolumeType.MEDIA; 48 Log.I('settings MEDIA start') 49 Audio.getAudioManager().setVolume(volumeType, parseInt(settingsValue)).then(() => { 50 Log.I('settings Promise returned to indicate a successful MEDIA setting.') 51 }); 52 } catch (err) { 53 Log.I('settings MEDIA failed error = ' + JSON.stringify(err)); 54 } 55 break 56 } 57 case SettingsDataConfig.SettingsKey.SETTINGS_AUDIO_VOICE_CALL: { 58 try { 59 let volumeType = Audio.AudioVolumeType.VOICE_CALL; 60 Log.I('settings VOICE_CALL start') 61 Audio.getAudioManager().setVolume(volumeType, parseInt(settingsValue)).then(() => { 62 Log.I('settings Promise returned to indicate a successful VOICE_CALL setting.') 63 }); 64 } catch (err) { 65 Log.I('settings VOICE_CALL failed error = ' + JSON.stringify(err)); 66 } 67 break 68 } 69 case settings.general.DEVICE_NAME: { 70 try { 71 let result = bluetooth.setLocalName(settingsValue); 72 Log.I('settings bluetooth_name res = ' + result) 73 } catch (err) { 74 Log.I('settings bluetooth_name failed, error = ' + JSON.stringify(err)); 75 } 76 break 77 } 78 default: { 79 Log.I(settingsKey + ' key is not brightness or audio or deviceName'); 80 } 81 } 82} 83 84function verifyPermission(callBack) { 85 try { 86 let tokenID = rpc.IPCSkeleton.getCallingTokenId(); 87 Log.I('tokenID = ' + tokenID); 88 let grantStatus = abilityAccessCtrl.createAtManager().verifyAccessToken(tokenID, "ohos.permission.MANAGE_SECURE_SETTINGS"); 89 grantStatus.then(data => { 90 if (data == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { 91 Log.I('MANAGE_SECURE_SETTINGS active'); 92 callBack(true); 93 } else { 94 Log.W('MANAGE_SECURE_SETTINGS grantStatus= ' + JSON.stringify(data)); 95 callBack(false); 96 } 97 }).catch((err) => { 98 Log.E('tokenID = ' + tokenID + ' verifyAccessToken is failed: ' + JSON.stringify(err)); 99 callBack(false); 100 }) 101 } catch (err) { 102 Log.E('err = ' + JSON.stringify(err)); 103 callBack(false); 104 } 105} 106 107function isTrustList(keyWord: String) { 108 let ret = -1; 109 let trustList: Array<String> = [ 110 settings.display.SCREEN_BRIGHTNESS_STATUS, 111 settings.display.AUTO_SCREEN_BRIGHTNESS, 112 settings.display.SCREEN_OFF_TIMEOUT 113 ]; 114 ret = trustList.findIndex((trustItem) => { 115 return trustItem === keyWord 116 }) 117 return ret != -1; 118} 119 120export default { 121 onInitialized(abilityInfo) { 122 Log.I('onInitialize getContext start'); 123 let context = featureAbility.getContext(); 124 globalThis.abilityContext = context; 125 if (context != null) { 126 SettingsDBHelper.getInstance().getRdbStore().then((rdb: any) => { 127 Log.I(" onInitialized rdb:" + rdb); 128 rdbStore = rdb; 129 Log.I(" onInitialized requests:" + JSON.stringify(requests)); 130 for (let i = 0; i < requests.length; i++) { 131 let opt: string = requests[i]["operation"]; 132 let columns = requests[i]["columns"]; 133 let predicates = requests[i]["predicates"]; 134 let value = requests[i]["value"]; 135 if (opt == "insert") { 136 rdbStore.insert(SettingsDataConfig.TABLE_NAME, value, function (err, ret) { 137 Log.I('onInitialized insert ret: ' + ret); 138 }); 139 } else if (opt == "query") { 140 let rdbPredicates = dataAbility.createRdbPredicates(SettingsDataConfig.TABLE_NAME, predicates); 141 rdbStore.query(rdbPredicates, columns, function (err, resultSet) { 142 Log.I('onInitialized query ret: ' + JSON.stringify(resultSet)); 143 }); 144 } else if (opt == "update") { 145 let rdbPredicates = dataAbility.createRdbPredicates(SettingsDataConfig.TABLE_NAME, predicates); 146 rdbStore.update(value, rdbPredicates, function (err, ret) { 147 Log.I('onInitialized update ret: ' + ret); 148 }); 149 } 150 } 151 }).catch(err => { 152 Log.I('onInitialize failed'); 153 }) 154 Log.I('onInitialize end'); 155 } else { 156 Log.I('onInitialize context error!'); 157 } 158 }, 159 160 insert(uri, value, callback) { 161 Log.I('insert keyword = ' + value["KEYWORD"] + ' start:' + uri); 162 let rdbInsert = (GrantStatus) => { 163 if (!GrantStatus) { 164 callback(-1, 0); 165 return; 166 } 167 DoSystemSetting(value["KEYWORD"], value["VALUE"]); 168 if (rdbStore == null) { 169 let request = { 170 "operation": "insert", "columns": null, "predicates": null, value: value 171 }; 172 Log.I('insert request = ' + JSON.stringify(request)); 173 requests.push(request); 174 callback(-1, 0); 175 } else { 176 rdbStore.insert(SettingsDataConfig.TABLE_NAME, value, function (err, ret) { 177 Log.I('insert before callback '); 178 callback(err, ret); 179 Log.I('insert after callback '); 180 Log.I('insert result: ' + ret); 181 }); 182 } 183 } 184 185 try { 186 if (isTrustList(value["KEYWORD"])) { 187 Log.I('trustList data exists.'); 188 rdbInsert(true); 189 } else { 190 Log.I('Start to verify permissions.'); 191 verifyPermission(rdbInsert); 192 } 193 } catch (err) { 194 Log.E('Insert Data error:' + JSON.stringify(err)); 195 callback(-1, 0); 196 } 197 }, 198 199 query(uri, columns, predicates, callback) { 200 Log.I('query start uri:' + uri); 201 if (rdbStore == null) { 202 let request = { 203 "operation": "query", "columns": columns, "predicates": predicates, value: "" 204 }; 205 Log.I('query request = ' + JSON.stringify(request)); 206 requests.push(request); 207 callback(-1, { 208 "_napiwrapper": {} 209 }); 210 } else { 211 let rdbPredicates = dataAbility.createRdbPredicates(SettingsDataConfig.TABLE_NAME, predicates); 212 rdbStore.query(rdbPredicates, columns, function (err, resultSet) { 213 Log.I('query before callback err:' + JSON.stringify(err) + " ResultSet" + JSON.stringify(resultSet)); 214 callback(err, resultSet); 215 Log.I('query after callback '); 216 Log.I('query result: ' + JSON.stringify(resultSet)); 217 }); 218 } 219 }, 220 221 update(uri, value, predicates, callback) { 222 Log.I('update keyword = ' + value["KEYWORD"] + ' start:' + uri); 223 let rdbUpData = (GrantStatus) => { 224 if (!GrantStatus) { 225 callback(-1, 0); 226 return; 227 } 228 DoSystemSetting(value["KEYWORD"], value["VALUE"]); 229 if (rdbStore == null) { 230 let request = { 231 "operation": "update", "columns": null, "predicates": predicates, value: value 232 }; 233 Log.I('update request = ' + JSON.stringify(request)); 234 requests.push(request); 235 callback(-1, 0); 236 } else { 237 let rdbPredicates = dataAbility.createRdbPredicates(SettingsDataConfig.TABLE_NAME, predicates); 238 rdbStore.update(value, rdbPredicates, function (err, ret) { 239 Log.I('update before callback ' + JSON.stringify(err)); 240 callback(err, ret); 241 Log.I('update after callback ' + JSON.stringify(ret)); 242 Log.I('update result: ' + ret); 243 }); 244 } 245 } 246 247 try { 248 if (isTrustList(value["KEYWORD"])) { 249 Log.I('trustList data exists.'); 250 rdbUpData(true); 251 } else { 252 Log.I('Start to verify permissions.'); 253 verifyPermission(rdbUpData); 254 } 255 } catch (err) { 256 Log.E('upData error:' + JSON.stringify(err)); 257 callback(-1, 0); 258 } 259 } 260}; 261