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}