• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
15import i18n from '@ohos.i18n';
16import router from '@ohos.router';
17import Logger from '../../utils/Logger';
18import LazyDataSource, { BaseData } from '../../utils/LazyDataSource';
19
20const TAG: string = 'EditPreferred';
21
22@Entry
23@Component
24struct EditPreferred {
25  @State preferredLanguages: LazyDataSource = new LazyDataSource();
26  private params = router.getParams() as Record<string, string>;
27  private localLanguage: string = this.params.language as string;
28  private deletePreferredLanguages: Array<number> = [];
29
30  aboutToAppear() {
31    let preferredLanguages: Array<BaseData> = [];
32    let preferredLanguageIds = i18n.System.getPreferredLanguageList();
33    Logger.info(TAG, `this.preferredLanguageIds = ${JSON.stringify(preferredLanguageIds)}`);
34    preferredLanguageIds.forEach(id => {
35      preferredLanguages.push({
36        id: id,
37        key: i18n.System.getDisplayLanguage(id, id),
38        value: i18n.System.getDisplayLanguage(id, this.localLanguage)
39      });
40    });
41    this.preferredLanguages.dataArray = preferredLanguages;
42    this.preferredLanguages.notifyDataReload();
43  }
44
45  @Builder
46  PreferredItem($$: Data) {
47    Column() {
48      if ($$.index !== 0) {
49        Divider()
50          .color($r('app.color.divider'))
51          .width('100%')
52          .strokeWidth(1)
53          .margin({ top: 10, bottom: 10 })
54      }
55      Row() {
56        Column() {
57          Text($$.preferred.key)
58            .fontColor($$.preferred.id === this.localLanguage ? $r('app.color.blue') : $r('app.color.black'))
59            .fontSize(22)
60            .margin({ top: 10, bottom: 10 })
61          if ($$.preferred.id !== this.localLanguage) {
62            Text($$.preferred.value)
63              .fontColor($r('app.color.gray'))
64              .fontSize(22)
65              .margin({ top: 10, bottom: 10 })
66          }
67        }
68        .alignItems(HorizontalAlign.Start)
69
70        Blank()
71        if ($$.preferred.id !== this.localLanguage) {
72          Image($r('app.media.delete'))
73            .size({ width: 40, height: 40 })
74            .objectFit(ImageFit.Contain)
75            .onClick(() => {
76              this.deletePreferredLanguages.push($$.index);
77              this.preferredLanguages.dataArray.splice($$.index, 1);
78              this.preferredLanguages.notifyDataReload();
79            })
80        }
81      }
82      .width('100%')
83    }
84    .width('100%')
85  }
86
87  @Builder
88  PreferredView() {
89    Column() {
90      List() {
91        LazyForEach(this.preferredLanguages, (item: BaseData, index: number) => {
92          ListItem() {
93            this.PreferredItem(new Data(item, index));
94          }
95        }, (item: string) => JSON.stringify(item))
96      }
97    }
98    .width('95%')
99    .padding(10)
100    .margin({ top: 20, bottom: 10 })
101    .backgroundColor($r('app.color.white'))
102    .border({ color: $r('app.color.white'), width: 1, radius: 15 })
103  }
104
105  build() {
106    Column() {
107      Row() {
108        Image($r('app.media.ic_back'))
109          .width(60).height('100%')
110          .objectFit(ImageFit.Contain)
111          .onClick(() => {
112            router.back();
113          })
114        Text($r('app.string.edit_language'))
115          .fontSize(30)
116          .layoutWeight(1)
117        Blank()
118        Image($r('app.media.check'))
119          .key('check')
120          .width(60)
121          .height('100%')
122          .objectFit(ImageFit.Contain)
123          .onClick(() => {
124            this.deletePreferredLanguages.forEach((item: number) => {
125              try {
126                i18n.System.removePreferredLanguage(item);
127              } catch (err) {
128                Logger.error(`removePreferredLanguage failed, code is ${err.code}, message is ${err.message}`);
129              }
130            });
131            router.back();
132          })
133      }
134      .width('100%')
135      .height('8%')
136      .constraintSize({ minHeight: 70 })
137      .padding({ left: 16, right: 16 })
138      .backgroundColor($r('app.color.f5f5f5'))
139
140      Scroll() {
141        this.PreferredView();
142      }
143      .layoutWeight(1)
144    }
145    .width('100%')
146    .height('100%')
147    .backgroundColor($r('app.color.f5f5f5'))
148  }
149}
150
151class Data {
152  preferred: BaseData = new BaseData();
153  index: number = 0;
154
155  constructor(preferred: BaseData, index: number) {
156    this.preferred = preferred;
157    this.index = index;
158  }
159}