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