• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2022 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 */
15import AdvancedSettingsController from "./advancedSettingsController";
16import DeviceUtil from "../../../utils/DeviceUtil";
17import { MmsSimpleDialog } from "../../../views/MmsDialogs";
18import { MoreMenu } from "../../../views/MmsMenu";
19import router from "@system.router";
20import { SettingItemJump } from "../../../views/SettingItem";
21import WantUtil from "../../../utils/WantUtil";
22import SettingsController from  "../settingsController"
23
24@Entry
25@Component
26struct AdvancedSettings {
27    @StorageLink("AdvancedSettingsController") @Watch("changeSelectState") mAdvancedSettingsCtrl:
28        AdvancedSettingsController = AdvancedSettingsController.getInstance();
29    @StorageLink("SettingsController") @Watch("changeSelectState") mSettingsCtrl:
30        SettingsController = SettingsController.getInstance()
31    private gridColumns: GridRowColumnOption = { sm: 4, md: 8, lg: 12 };
32    private girdSpan: GridColColumnOption = { sm: 4, md: 6, lg: 8 };
33    private gridColOffset: GridColColumnOption = { md: 1, lg: 2 };
34    private gridGutter: string = "12vp";
35    private dialogGridCount: number = 4;
36    dialogAlignment: DialogAlignment = DeviceUtil.isTablet() ? DialogAlignment.Center : DialogAlignment.Bottom;
37    dialogOffset: Offset = DeviceUtil.isTablet() ? { dx: 0, dy: 0 } : { dx: 0, dy: -16 };
38    private restoreDialog = new MmsSimpleDialog({
39        message: $r("app.string.restore_all_default_settings"),
40        primaryButton: {
41            value: $r("app.string.cancel"),
42            action: () => {
43            }
44        },
45        secondaryButton: {
46            value: $r("app.string.restore"),
47            action: () => {
48                this.mAdvancedSettingsCtrl.restoreSettingPageSwitchValue();
49                this.mSettingsCtrl.restoreSettingsPageSwitchValue();
50            }
51        }
52    });
53    @Provide menuItems: Array<any> = [
54        {
55            value: $r("app.string.restore_default_settings"),
56            action: () => {
57                this.restoreDialog.show();
58            },
59            enabled: true
60        }
61    ];
62    @Provide statusTitle: Resource = this.mAdvancedSettingsCtrl.deliveryReportSwitchInText;
63    changeSelectState(){
64        this.statusTitle = this.mAdvancedSettingsCtrl.deliveryReportSwitchInText
65    }
66    deliveryReportsDialogCtrl: CustomDialogController = new CustomDialogController({
67        builder: DeliveryReportsDialog({
68            cancel: () => {
69                this.mAdvancedSettingsCtrl.cancelRestore();
70            },
71            confirm: (isOnOfSms: boolean, isOnOfMms: boolean) => {
72                this.mAdvancedSettingsCtrl.setRestore(isOnOfSms, isOnOfMms);
73            },
74            isOnOfSms: this.mAdvancedSettingsCtrl.checkedValueOfSms,
75            isOnOfMms: this.mAdvancedSettingsCtrl.checkedValueOfMms
76        }),
77        autoCancel: false,
78        alignment: this.dialogAlignment,
79        offset: this.dialogOffset,
80        gridCount: this.dialogGridCount
81    })
82
83    /**
84     * The function executes after a new instance of the custom component is created and before its build function
85     * is executed.
86     * Allows state variables to be changed in the aboutToAppear function, and these changes will take effect in
87     * subsequent executions of the build function.
88     */
89    aboutToAppear() {
90        this.mAdvancedSettingsCtrl.onInit();
91    }
92    /**
93     * Triggers once when this page is displayed. In scenarios such as routing and application access to the foreground
94     * and background, only customized components modified by @Entry take effect.
95     */
96    onPageShow() {
97        this.mAdvancedSettingsCtrl.onShow();
98        WantUtil.getWant();
99    }
100    /**
101     * Triggers once when this page disappears. In scenarios such as routing and application access to the foreground
102     * and background, only customized components modified by @Entry take effect.
103     */
104    onPageHide() {
105    }
106    /**
107     * Function executes before custom component destructor consumption.
108     * Changing state variables in the aboutToDisappear function is not allowed, especially changes to the @Link
109     * variable may cause unstable application behavior.
110     */
111    aboutToDisappear() {
112        this.deliveryReportsDialogCtrl = null;
113    }
114    /**
115     * Triggered when a user clicks the back button. Only the customized component modified by @Entry takes effect.
116     * If true is returned, the page processes the return logic and does not route the page.
117     * If false is returned, the default return logic is used.
118     * If no value is returned, the value is treated as false.
119     */
120    onBackPress() {
121    }
122
123    build() {
124        Column() {
125            // Top Device Title
126            Row() {
127                Image($rawfile("icon/ic_message_back.svg"))
128                    .width($r("app.float.icon_side_length_medium"))
129                    .height($r("app.float.icon_side_length_medium"))
130                    .margin({
131                        left: $r("app.float.action_bar_margin_left")
132                    })
133                    .onClick(() => {
134                        router.back()
135                    })
136
137                Row().width($r("app.float.space_16"))
138
139                Text($r("app.string.advanced"))
140                    .fontSize($r("app.float.action_bar_text_size"))
141                    .fontColor(Color.Black)
142                    .fontWeight(FontWeight.Bold)
143
144                Row().width("100%").flexShrink(1)
145
146                Column() {
147                    MoreMenu()
148                }
149                .margin({ right: $r("app.float.action_bar_margin_right") })
150            }
151            .width("100%")
152            .height($r("app.float.action_bar_height"))
153
154            Scroll() {
155                GridRow({ columns: this.gridColumns, gutter: this.gridGutter }) {
156                    GridCol({ span: this.girdSpan, offset: this.gridColOffset }) {
157                        // All settings
158                        Column({ space: 12 }) {
159                            // Setting items of the first group
160                            Column() {
161                                // Delivery Report
162                                SettingItemJump({
163                                    primaryTitle: $r("app.string.delivery_reports"),
164                                    secondaryTitle: $r("app.string.delivery_reports_hint"),
165                                    showBottomDivider: false,
166                                    OnClick: (event?: ClickEvent) => {
167                                        this.deliveryReportsDialogCtrl.open();
168                                    }
169                                })
170                                // Automatically downloading MMs
171                                SettingItemJump({
172                                    primaryTitle: $r("app.string.auto_retrieve_mms"),
173//                                    statusTitle: this.mAdvancedSettingsCtrl.autoRetrieveMmsSwitchInText,
174                                    visibilityShow: Visibility.None,
175                                    OnClick: (event?: ClickEvent) => {
176                                        this.mAdvancedSettingsCtrl.showAutoRetrieveMmsDialog();
177                                    }
178                                })
179                            }
180                            .width("100%")
181                            .padding({
182                                top: $r("app.float.settings_item_padding_top"),
183                                bottom: $r("app.float.settings_item_padding_bottom"),
184                                left: $r("app.float.settings_item_padding_left"),
185                                right: $r("app.float.settings_item_padding_right")
186                            })
187                            .border({
188                                radius: $r("app.float.settings_items_radius"),
189                                color: $r("sys.color.ohos_id_color_text_field_bg")
190                            })
191                            .backgroundColor($r("sys.color.ohos_id_color_text_field_bg"))
192
193                            // Setting items of the second group
194                            Column() {
195                            }
196                            .width("100%")
197                            .padding({
198                                top: $r("app.float.settings_item_padding_top"),
199                                bottom: $r("app.float.settings_item_padding_bottom"),
200                                left: $r("app.float.settings_item_padding_left"),
201                                right: $r("app.float.settings_item_padding_right")
202                            })
203                            .border({
204                                radius: $r("app.float.settings_items_radius"),
205                                color: $r("sys.color.ohos_id_color_text_field_bg")
206                            })
207                            .backgroundColor($r("sys.color.ohos_id_color_text_field_bg"))
208                            .visibility(Visibility.None)
209
210                            // Setting items of the third group
211                            Column() {
212                                // SMSC
213                                SettingItemJump({
214                                    primaryTitle: $r("app.string.sms_center"),
215                                    showBottomDivider: true,
216                                    OnClick: (event?: ClickEvent) => {
217                                        this.mAdvancedSettingsCtrl.jumpToSmsCenterPage(1);
218                                    }
219                                })
220                                // Managing SIM Card Information
221                                SettingItemJump({
222                                    primaryTitle: $r("app.string.manage_sim_card_messages"),
223                                    OnClick: (event?: ClickEvent) => {
224                                        this.mAdvancedSettingsCtrl.jumpToManageSimPage(1);
225                                    }
226                                })
227                            }
228                            .width("100%")
229                            .padding({
230                                top: $r("app.float.settings_item_padding_top"),
231                                bottom: $r("app.float.settings_item_padding_bottom"),
232                                left: $r("app.float.settings_item_padding_left"),
233                                right: $r("app.float.settings_item_padding_right")
234                            })
235                            .border({
236                                radius: $r("app.float.settings_items_radius"),
237                                color: $r("sys.color.ohos_id_color_text_field_bg")
238                            })
239                            .backgroundColor($r("sys.color.ohos_id_color_text_field_bg"))
240                            .visibility(Visibility.None)
241                        }
242                        .margin({
243                            top: $r("app.float.settings_items_margin_top"),
244                            bottom: $r("app.float.settings_items_margin_bottom")
245                        })
246                    }
247                }
248            }
249            .layoutWeight(1)
250            .align(Alignment.Top)
251        }
252        .width("100%")
253        .height("100%")
254        .padding({ left: $r("app.float.page_padding_left"), right: $r("app.float.page_padding_right") })
255        .backgroundColor($r("sys.color.ohos_id_color_sub_background"))
256    }
257}
258
259/**
260 * Delivery report selection box
261 */
262@CustomDialog
263struct DeliveryReportsDialog {
264    controller: CustomDialogController;
265    cancel: () => void;
266    confirm: (isOnOfSms: boolean, isOnOfMms: boolean) => void;
267    private isOnOfSms: boolean = false;
268    private isOnOfMms: boolean = false;
269
270    build() {
271        Column() {
272            Column() {
273                Text($r("app.string.delivery_reports"))
274                    .width("100%")
275                    .height(56)
276                    .textAlign(TextAlign.Start)
277                    .fontSize(20)
278                    .fontColor($r("sys.color.ohos_id_color_foreground"))
279                    .lineHeight(28)
280                    .fontWeight(FontWeight.Medium)
281                    .fontFamily("HarmonyHeiTi")
282                Stack() {
283                    Text($r("app.string.sms"))
284                        .fontSize(16)
285                        .fontColor($r("sys.color.ohos_id_color_foreground"))
286                        .lineHeight(22)
287                        .fontWeight(FontWeight.Medium)
288                        .fontFamily("HarmonyHeiTi")
289                        .align(Alignment.Start)
290                        .width('100%')
291                    Toggle({ type: ToggleType.Checkbox, isOn: this.isOnOfSms })
292                        .width("100%")
293                        .height(20)
294                        .selectedColor($r("sys.color.ohos_id_color_activated"))
295                        .align(Alignment.End)
296                        .onChange((isOn: boolean) => {
297                            this.isOnOfSms = isOn
298                        })
299                }.margin({ bottom: 5 })
300
301                Divider()
302                    .vertical(false)
303                    .strokeWidth(0.5)
304                    .width("100%")
305                    .color($r("sys.color.ohos_id_color_list_separator"))
306
307                Stack() {
308                    Text($r("app.string.mms"))
309                        .fontSize(16)
310                        .fontColor($r("sys.color.ohos_id_color_foreground"))
311                        .lineHeight(22)
312                        .fontWeight(FontWeight.Medium)
313                        .fontFamily("HarmonyHeiTi")
314                        .align(Alignment.Start)
315                        .width('100%')
316                    Toggle({ type: ToggleType.Checkbox, isOn: this.isOnOfMms })
317                        .width("100%")
318                        .height(20)
319                        .selectedColor($r("sys.color.ohos_id_color_activated"))
320                        .align(Alignment.End)
321                        .onChange((isOn: boolean) => {
322                            this.isOnOfMms = isOn
323                        })
324                }.margin({ top: 5 })
325
326            }
327            .padding({ left: 24, right: 24, bottom: 9 })
328
329            Flex({
330                direction: FlexDirection.Row,
331                justifyContent: FlexAlign.SpaceEvenly,
332                alignItems: ItemAlign.Center
333            }) {
334                Button() {
335                    Text($r("app.string.cancel"))
336                        .textAlign(TextAlign.Center)
337                        .fontSize(16)
338                        .fontColor($r("sys.color.ohos_id_color_activated"))
339                        .fontWeight(FontWeight.Medium)
340                        .fontFamily("HarmonyHeiTi")
341                        .lineHeight(22)
342                }
343                .backgroundColor($r("sys.color.ohos_id_color_background_transparent"))
344                .layoutWeight(1)
345                .height(40)
346                .onClick(() => {
347                    this.controller.close();
348                    this.cancel();
349                })
350
351                Divider().vertical(true).strokeWidth(0.5).height(24).color($r("sys.color.ohos_id_color_list_separator"))
352                Button() {
353                    Text($r("app.string.ok"))
354                        .textAlign(TextAlign.Center)
355                        .fontSize(16)
356                        .fontColor($r("sys.color.ohos_id_color_activated"))
357                        .fontWeight(FontWeight.Medium)
358                        .fontFamily("HarmonyHeiTi")
359                        .lineHeight(22)
360                }
361                .backgroundColor($r("sys.color.ohos_id_color_background_transparent"))
362                .layoutWeight(1)
363                .height(40)
364                .onClick(() => {
365                    this.controller.close();
366                    this.confirm(this.isOnOfSms, this.isOnOfMms);
367                })
368            }
369            .width("100%")
370            .height(56)
371            .padding({ left: 16, right: 16, bottom: 16 })
372        }
373        .width("100%")
374        .borderRadius(16)  // Customdialog need to set borderRadius
375        .backgroundColor($r("sys.color.ohos_id_color_dialog_bg"))
376    }
377}
378