1048147e0Sopenharmony_ci/**
2048147e0Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3048147e0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4048147e0Sopenharmony_ci * you may not use this file except in compliance with the License.
5048147e0Sopenharmony_ci * You may obtain a copy of the License at
6048147e0Sopenharmony_ci *
7048147e0Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8048147e0Sopenharmony_ci *
9048147e0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10048147e0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11048147e0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12048147e0Sopenharmony_ci * See the License for the specific language governing permissions and
13048147e0Sopenharmony_ci * limitations under the License.
14048147e0Sopenharmony_ci */
15048147e0Sopenharmony_ci
16048147e0Sopenharmony_ciimport SettingModel from '../model/SettingsModel';
17048147e0Sopenharmony_ci
18048147e0Sopenharmony_cilet mSettingModel = new SettingModel();
19048147e0Sopenharmony_ciimport HiLog from '../utils/HiLog';
20048147e0Sopenharmony_ciimport common from '../data/commonData';
21048147e0Sopenharmony_ciimport LooseObject from '../data/LooseObject'
22048147e0Sopenharmony_ciimport MmsPreferences from '../utils/MmsPreferences';
23048147e0Sopenharmony_ci
24048147e0Sopenharmony_ciconst TAG = 'SettingService';
25048147e0Sopenharmony_ci
26048147e0Sopenharmony_ciexport default {
27048147e0Sopenharmony_ci
28048147e0Sopenharmony_ci    /**
29048147e0Sopenharmony_ci     * Set Initial Value
30048147e0Sopenharmony_ci     *
31048147e0Sopenharmony_ci     * @param {Object} callback
32048147e0Sopenharmony_ci     */
33048147e0Sopenharmony_ci    setOnSettingValueListener(callback) {
34048147e0Sopenharmony_ci        let result: LooseObject = {
35048147e0Sopenharmony_ci            'integrationSwitch': false,
36048147e0Sopenharmony_ci            'maliciousWebSwitch': false,
37048147e0Sopenharmony_ci            'showContactSwitch': false,
38048147e0Sopenharmony_ci        };
39048147e0Sopenharmony_ci        mSettingModel.setOnSettingValueListener(settingValue => {
40048147e0Sopenharmony_ci            if (settingValue.integrationSwitch === common.bool.TRUE || settingValue.integrationSwitch === '') {
41048147e0Sopenharmony_ci                result.integrationSwitch = true;
42048147e0Sopenharmony_ci            }
43048147e0Sopenharmony_ci            if (settingValue.maliciousWebSwitch === common.bool.TRUE || settingValue.integrationSwitch === '') {
44048147e0Sopenharmony_ci                result.maliciousWebSwitch = true;
45048147e0Sopenharmony_ci            }
46048147e0Sopenharmony_ci            if (settingValue.showContactSwitch === common.bool.TRUE || settingValue.integrationSwitch === '') {
47048147e0Sopenharmony_ci                result.showContactSwitch = true;
48048147e0Sopenharmony_ci            }
49048147e0Sopenharmony_ci        });
50048147e0Sopenharmony_ci        callback(result);
51048147e0Sopenharmony_ci    },
52048147e0Sopenharmony_ci
53048147e0Sopenharmony_ci    /**
54048147e0Sopenharmony_ci     * Restore Page Defaults
55048147e0Sopenharmony_ci     *
56048147e0Sopenharmony_ci     * @param {Object} callback
57048147e0Sopenharmony_ci     */
58048147e0Sopenharmony_ci    restoreSwitchValue(callback) {
59048147e0Sopenharmony_ci        mSettingModel.restoreSwitchValueToDefault(callback);
60048147e0Sopenharmony_ci    },
61048147e0Sopenharmony_ci
62048147e0Sopenharmony_ci    /**
63048147e0Sopenharmony_ci     * Update related values
64048147e0Sopenharmony_ci     * @param code     Updated code.
65048147e0Sopenharmony_ci     * @param actionData     Updated Value
66048147e0Sopenharmony_ci     * @param callback
67048147e0Sopenharmony_ci     * @return
68048147e0Sopenharmony_ci     */
69048147e0Sopenharmony_ci    updateSettingValue(code, actionData, callback) {
70048147e0Sopenharmony_ci        switch (code) {
71048147e0Sopenharmony_ci          case common.route.MESSAGE_CODE_UPDATE_DELIVERY_REPORTS_VALUE:
72048147e0Sopenharmony_ci            // Delivery Report
73048147e0Sopenharmony_ci              mSettingModel.updateSwitchValue(common.string.KEY_OF_DELIVERY_REPORT_SWITCH,
74048147e0Sopenharmony_ci                    actionData.intValue, callback);
75048147e0Sopenharmony_ci              break;
76048147e0Sopenharmony_ci          case common.route.MESSAGE_CODE_UPDATE_AUTO_RETRIEVE_MMS_VALUE:
77048147e0Sopenharmony_ci            // Automatically downloading MMs
78048147e0Sopenharmony_ci              mSettingModel.updateSwitchValue(common.string.KEY_OF_AUTO_RETRIEVE_SWITCH,
79048147e0Sopenharmony_ci                    actionData.intValue, callback);
80048147e0Sopenharmony_ci              break;
81048147e0Sopenharmony_ci          case common.route.MESSAGE_CODE_UPDATE_RECALL_MESSAGES_VALUE:
82048147e0Sopenharmony_ci            // Cancel Sending
83048147e0Sopenharmony_ci              mSettingModel.updateSwitchValue(common.string.KEY_OF_RECALL_MESSAGE_SWITCH,
84048147e0Sopenharmony_ci                    actionData.booleanValue, callback);
85048147e0Sopenharmony_ci              break;
86048147e0Sopenharmony_ci          case common.route.MESSAGE_CODE_UPDATE_AUTO_DELETE_INFO_MESSAGES_VALUE:
87048147e0Sopenharmony_ci            // Automatically delete notification information
88048147e0Sopenharmony_ci              mSettingModel.updateSwitchValue(common.string.KEY_OF_AUTO_DELETE_INFO_SWITCH,
89048147e0Sopenharmony_ci                    actionData.booleanValue, callback);
90048147e0Sopenharmony_ci              break;
91048147e0Sopenharmony_ci          case common.route.MESSAGE_CODE_UPDATE_ARCHIVE_INFO_MESSAGES_VALUE:
92048147e0Sopenharmony_ci            // Notification information integration
93048147e0Sopenharmony_ci              mSettingModel.updateSwitchValue(common.string.KEY_OF_INTEGRATION_SWITCH,
94048147e0Sopenharmony_ci                    actionData.booleanValue, callback);
95048147e0Sopenharmony_ci              break;
96048147e0Sopenharmony_ci          case common.route.MESSAGE_CODE_UPDATE_MALICIOUS_WEBSITE_IDENTIFICATION_VALUE:
97048147e0Sopenharmony_ci            // Malicious Website Identification
98048147e0Sopenharmony_ci                mSettingModel.updateSwitchValue(common.string.KEY_OF_MALICIOUS_WEB_SWITCH,
99048147e0Sopenharmony_ci                    actionData.booleanValue, callback);
100048147e0Sopenharmony_ci              break;
101048147e0Sopenharmony_ci          case common.route.MESSAGE_CODE_UPDATE_SHOW_CONTACT_PROFILE_PICS_VALUE:
102048147e0Sopenharmony_ci            // Display contact avatar
103048147e0Sopenharmony_ci              mSettingModel.updateSwitchValue(common.string.KEY_OF_SHOW_CONTACT_SWITCH,
104048147e0Sopenharmony_ci                    actionData.booleanValue, callback);
105048147e0Sopenharmony_ci              break;
106048147e0Sopenharmony_ci          default:
107048147e0Sopenharmony_ci              HiLog.w(TAG, 'updateSettingValue, code is not exit');
108048147e0Sopenharmony_ci        }
109048147e0Sopenharmony_ci    },
110048147e0Sopenharmony_ci
111048147e0Sopenharmony_ci    /**
112048147e0Sopenharmony_ci     * Obtains the switch value on the advanced settings page.
113048147e0Sopenharmony_ci     *
114048147e0Sopenharmony_ci     * @param {Object} callback
115048147e0Sopenharmony_ci     */
116048147e0Sopenharmony_ci    getAdvancedPageSwitchValue(callback) {
117048147e0Sopenharmony_ci        mSettingModel.getAdvancedPageSwitchValue(callback);
118048147e0Sopenharmony_ci    },
119048147e0Sopenharmony_ci
120048147e0Sopenharmony_ci    /**
121048147e0Sopenharmony_ci     * Updating SMSC Numbers
122048147e0Sopenharmony_ci     * @param actionData
123048147e0Sopenharmony_ci     * @param callback
124048147e0Sopenharmony_ci     * @return
125048147e0Sopenharmony_ci     */
126048147e0Sopenharmony_ci    updateSmscNumber(actionData) {
127048147e0Sopenharmony_ci        mSettingModel.updateSmscNumber(actionData, result => {
128048147e0Sopenharmony_ci            if (result.code == common.int.SUCCESS) {
129048147e0Sopenharmony_ci                HiLog.i(TAG, 'updateSmscNumber, success');
130048147e0Sopenharmony_ci            } else {
131048147e0Sopenharmony_ci                HiLog.w(TAG, 'updateSmscNumber, fail');
132048147e0Sopenharmony_ci            }
133048147e0Sopenharmony_ci        });
134048147e0Sopenharmony_ci    },
135048147e0Sopenharmony_ci
136048147e0Sopenharmony_ci    /**
137048147e0Sopenharmony_ci     * Share the selected content in the SMSC dialog box.
138048147e0Sopenharmony_ci     * @param actionData
139048147e0Sopenharmony_ci     * @param callback
140048147e0Sopenharmony_ci     * @return
141048147e0Sopenharmony_ci     */
142048147e0Sopenharmony_ci    shareSmsEnterSelectedText(actionData) {
143048147e0Sopenharmony_ci        // The sharing API is not provided.
144048147e0Sopenharmony_ci        mSettingModel.shareSmsEnterSelectedText(actionData, result => {
145048147e0Sopenharmony_ci            if (result.code == common.int.SUCCESS) {
146048147e0Sopenharmony_ci                HiLog.i(TAG, 'shareSmsEnterSelectedText, success');
147048147e0Sopenharmony_ci            } else {
148048147e0Sopenharmony_ci            }
149048147e0Sopenharmony_ci        });
150048147e0Sopenharmony_ci    },
151048147e0Sopenharmony_ci
152048147e0Sopenharmony_ci    /**
153048147e0Sopenharmony_ci     * Values of the notification information integration switch and whether to display contact avatars
154048147e0Sopenharmony_ci     */
155048147e0Sopenharmony_ci    getSettingFlagForConvListPage() {
156048147e0Sopenharmony_ci        let result: LooseObject = {
157048147e0Sopenharmony_ci            'isShowContactHeadIcon': false,
158048147e0Sopenharmony_ci            'hasAggregate': false,
159048147e0Sopenharmony_ci            'recallMessagesFlag': false,
160048147e0Sopenharmony_ci        };
161048147e0Sopenharmony_ci        mSettingModel.getSettingValue(settingValue => {
162048147e0Sopenharmony_ci            if (settingValue.code === common.int.SUCCESS) {
163048147e0Sopenharmony_ci                HiLog.i(TAG, 'getSettingFlagForConvListPage, Success');
164048147e0Sopenharmony_ci                if (settingValue.abilityResult.isShowContactHeadIcon === common.bool.TRUE ||
165048147e0Sopenharmony_ci                    settingValue.abilityResult.isShowContactHeadIcon === '') {
166048147e0Sopenharmony_ci                    result.isShowContactHeadIcon = true;
167048147e0Sopenharmony_ci                }
168048147e0Sopenharmony_ci                if (settingValue.abilityResult.hasAggregate == common.bool.TRUE ||
169048147e0Sopenharmony_ci                    settingValue.abilityResult.hasAggregate === '') {
170048147e0Sopenharmony_ci                    result.hasAggregate = true;
171048147e0Sopenharmony_ci                }
172048147e0Sopenharmony_ci                if (settingValue.abilityResult.recallMessagesFlag == common.bool.TRUE ||
173048147e0Sopenharmony_ci                    settingValue.abilityResult.recallMessagesFlag === '') {
174048147e0Sopenharmony_ci                    result.recallMessagesFlag = true;
175048147e0Sopenharmony_ci                }
176048147e0Sopenharmony_ci            } else {
177048147e0Sopenharmony_ci                HiLog.w(TAG, 'getSettingFlagForConvListPage, fail');
178048147e0Sopenharmony_ci            }
179048147e0Sopenharmony_ci        });
180048147e0Sopenharmony_ci        return result;
181048147e0Sopenharmony_ci    },
182048147e0Sopenharmony_ci
183048147e0Sopenharmony_ci    /**
184048147e0Sopenharmony_ci     * Determine whether a delivery report is required.
185048147e0Sopenharmony_ci     *
186048147e0Sopenharmony_ci     * @param {boolean} isMms    MMS or not
187048147e0Sopenharmony_ci     */
188048147e0Sopenharmony_ci    judgeIsDeliveryReport(isMms) {
189048147e0Sopenharmony_ci        let deliveryReportSwitch = MmsPreferences.getInstance().getValueOfDeliveryReportSwitch();
190048147e0Sopenharmony_ci        if (deliveryReportSwitch === common.DELIVERY_REPORTS.DISABLED) {
191048147e0Sopenharmony_ci            return false;
192048147e0Sopenharmony_ci        }
193048147e0Sopenharmony_ci        // For MMS and SMS messages, true is returned.
194048147e0Sopenharmony_ci        if (deliveryReportSwitch === common.DELIVERY_REPORTS.SMS_AND_MMS) {
195048147e0Sopenharmony_ci            return true;
196048147e0Sopenharmony_ci        }
197048147e0Sopenharmony_ci        // A delivery report is available only when a message is sent.
198048147e0Sopenharmony_ci        if (deliveryReportSwitch == common.DELIVERY_REPORTS.SMS && !isMms) {
199048147e0Sopenharmony_ci            return true;
200048147e0Sopenharmony_ci        }
201048147e0Sopenharmony_ci        // Delivery reports are available only when MMS messages are sent.
202048147e0Sopenharmony_ci        if (deliveryReportSwitch == common.DELIVERY_REPORTS.MMS && isMms) {
203048147e0Sopenharmony_ci            return true;
204048147e0Sopenharmony_ci        }
205048147e0Sopenharmony_ci        return false;
206048147e0Sopenharmony_ci    },
207048147e0Sopenharmony_ci
208048147e0Sopenharmony_ci    /**
209048147e0Sopenharmony_ci     * Calculate Selected Values
210048147e0Sopenharmony_ci     * @param mmsList
211048147e0Sopenharmony_ci     * @param isAllSelect
212048147e0Sopenharmony_ci     */
213048147e0Sopenharmony_ci    calculateChecked(simMessageList, isAllSelect) {
214048147e0Sopenharmony_ci        let count = 0;
215048147e0Sopenharmony_ci        let checkedList = [];
216048147e0Sopenharmony_ci        let result: LooseObject = {};
217048147e0Sopenharmony_ci        let switchOff = false;
218048147e0Sopenharmony_ci        for (let item of simMessageList) {
219048147e0Sopenharmony_ci            // If you select all
220048147e0Sopenharmony_ci            if (isAllSelect || item.isCbChecked) {
221048147e0Sopenharmony_ci                switchOff = true;
222048147e0Sopenharmony_ci            }
223048147e0Sopenharmony_ci            if (switchOff) {
224048147e0Sopenharmony_ci                checkedList.push(item);
225048147e0Sopenharmony_ci                count++;
226048147e0Sopenharmony_ci            }
227048147e0Sopenharmony_ci            switchOff = false;
228048147e0Sopenharmony_ci        }
229048147e0Sopenharmony_ci        result.count = count;
230048147e0Sopenharmony_ci        result.checkedList = checkedList;
231048147e0Sopenharmony_ci        return result;
232048147e0Sopenharmony_ci    },
233048147e0Sopenharmony_ci}