1/**
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15/**
16 * Message/AirplaneMode utils
17 */
18const SETTING_AIRPLANE_MODE_URI = 'datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true';
19const QUERY_AIRPLANE_MODE_KEY = 'airplane_mode';
20const TAG = 'AirplaneMode';
21
22import dataShare from '@ohos.data.dataShare';
23import dataSharePredicates from '@ohos.data.dataSharePredicates';
24import LogUtils from './LogUtils';
25
26let dataShareHelper;
27
28/**
29 * add AirPlaneMode Listener.
30 */
31export function addAirPlaneModeListener(callback) {
32  LogUtils.i(TAG, 'addAirPlaneModeListener');
33  try {
34    dataShare.createDataShareHelper(globalThis.calluiAbilityContext, SETTING_AIRPLANE_MODE_URI, (err, data) => {
35      if (err != undefined) {
36        LogUtils.e(TAG, 'addAirPlaneModeListener error: code: ' + err.code + ', message: ' + err.message);
37        return;
38      }
39      dataShareHelper = data;
40      try {
41        dataShareHelper.on('dataChange', SETTING_AIRPLANE_MODE_URI, () => {
42          LogUtils.i(TAG, 'addAirPlaneModeListener dataChange');
43          queryAirPlaneMode(callback);
44        });
45        queryAirPlaneMode(callback);
46        LogUtils.i(TAG, 'addAirPlaneModeListener success');
47      } catch (err) {
48        LogUtils.e(TAG, 'addAirPlaneModeListener error: code: ' + err.code + ', message: ' + err.message);
49      }
50    });
51  } catch (err) {
52    LogUtils.e(TAG, 'addAirPlaneModeListener error: code: ' + err.code + ', message: ' + err.message);
53  }
54}
55
56/**
57 * remove AirPlaneMode Listener.
58 */
59export function removeAirPlaneModeListener() {
60  LogUtils.i(TAG, 'removeAirPlaneModeListener');
61  if (!dataShareHelper) {
62    LogUtils.e(TAG, 'removeAirPlaneModeListener dataShareHelper null');
63    return;
64  }
65  try {
66    dataShareHelper.off('dataChange', SETTING_AIRPLANE_MODE_URI, () => {
67      LogUtils.i(TAG, 'removeAirPlaneModeListener dataChange');
68    });
69  } catch (err) {
70    LogUtils.e(TAG, 'removeAirPlaneModeListener error: code: ' + err.code + ', message: ' + err.message);
71  }
72}
73
74/**
75 * turnOn AirPlaneMode.
76 */
77export function turnOnAirPlaneMode() {
78  LogUtils.i(TAG, 'turnOnAirPlaneMode');
79  if (!dataShareHelper) {
80    LogUtils.e(TAG, 'turnOnAirPlaneMode dataShareHelper null');
81    return;
82  }
83  let valueBucket = {
84    'KEYWORD': QUERY_AIRPLANE_MODE_KEY,
85    'VALUE': true
86  };
87  try {
88    let da = new dataSharePredicates.DataSharePredicates();
89    dataShareHelper.update(SETTING_AIRPLANE_MODE_URI, da, valueBucket, (err, data) => {
90      if (err != undefined) {
91        LogUtils.e(TAG, 'turnOnAirPlaneMode update error: err: ' + err);
92        return;
93      }
94      LogUtils.i(TAG, 'turnOnAirPlaneMode update succeed');
95    });
96  } catch (err) {
97    LogUtils.e(TAG, 'turnOnAirPlaneMode error: code: ' + err.code + ', message: ' + err.message);
98  }
99}
100
101/**
102 * turnOff AirPlaneMode.
103 */
104export function turnOffAirPlaneMode() {
105  LogUtils.i(TAG, 'turnOffAirPlaneMode');
106  if (!dataShareHelper) {
107    LogUtils.e(TAG, 'turnOffAirPlaneMode dataShareHelper null');
108    return;
109  }
110  let valueBucket = {
111    'KEYWORD': QUERY_AIRPLANE_MODE_KEY,
112    'VALUE': false
113  };
114  try {
115    let da = new dataSharePredicates.DataSharePredicates();
116    dataShareHelper.update(SETTING_AIRPLANE_MODE_URI, da, valueBucket, (err, data) => {
117      if (err != undefined) {
118        LogUtils.e(TAG, 'turnOffAirPlaneMode update error: code: ' + err.code + ', message:' + err.message);
119        return;
120      }
121      LogUtils.i(TAG, 'turnOffAirPlaneMode update succeed');
122    });
123  } catch (err) {
124    LogUtils.e(TAG, 'turnOffAirPlaneMode error: code: ' + err.code + ', message: ' + err.message);
125  }
126}
127
128/**
129 * query AirPlaneMode.
130 */
131export function queryAirPlaneMode(callback) {
132  LogUtils.i(TAG, 'queryAirPlaneMode');
133  if (!dataShareHelper) {
134    LogUtils.e(TAG, 'queryAirPlaneMode dataShareHelper null');
135    return;
136  }
137  let condition = new dataSharePredicates.DataSharePredicates();
138  condition.equalTo('KEYWORD', 'airplane_mode');
139  try {
140    // ID, KEYWORD, VALUE
141    dataShareHelper.query(SETTING_AIRPLANE_MODE_URI, condition, null).then((data) => {
142      LogUtils.i(TAG, 'queryAirPlaneMode query succeed');
143      if (data && data.goToFirstRow()) {
144        LogUtils.i(TAG, 'queryAirPlaneMode query succeed return key');
145        callback(data.getLong(data.getColumnIndex('VALUE')));
146        return;
147      }
148      callback(-1);
149    }).catch((err) => {
150      LogUtils.e(TAG, 'queryAirPlaneMode query in error: err: ' + JSON.stringify(err));
151    });
152  } catch (err) {
153    LogUtils.e(TAG, 'queryAirPlaneMode query out error: code: ' + err.code + ', message: ' + err.message);
154  }
155}