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