• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}