1/** 2 * Copyright (c) 2022-2024 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 16import CmAppCredAuthPresenter from '../presenter/CmAppCredAuthPresenter'; 17import router from '@ohos.router'; 18import { WidthPercent, ConfigValue } from '../common/util/ConfigData'; 19import { CredentialAbstractVo } from '../model/CertManagerVo/CredentialAbstractVo'; 20import { RouterAppUidVo } from '../model/CertManagerVo/RouterInfoVo'; 21import { CustomContentDialog } from '@ohos.arkui.advanced.Dialog'; 22 23@Entry 24@Component 25struct RadioAuth { 26 @State mAppCredAuthPresenter: CmAppCredAuthPresenter = CmAppCredAuthPresenter.getInstance(); 27 selectUri: string = ''; 28 private authScroller: Scroller = new Scroller(); 29 30 dialogController: CustomDialogController = new CustomDialogController({ 31 cancel: () => { 32 this.mAppCredAuthPresenter.cancelProcess(); 33 }, 34 builder: CustomContentDialog({ 35 contentBuilder: () => { 36 this.dialogControllerContent(); 37 }, 38 contentAreaPadding: {right: $r('app.float.wh_value_0')}, 39 buttons: [ 40 { 41 value: $r('app.string.requestAuthCancel'), 42 buttonStyle: ButtonStyleMode.TEXTUAL, 43 action: () => { 44 this.mAppCredAuthPresenter.cancelProcess(); 45 this.dialogController?.close(); 46 } 47 }, 48 { 49 value: $r('app.string.requestAuthFinish'), 50 buttonStyle: ButtonStyleMode.TEXTUAL, 51 action: () => { 52 console.debug('requestAuthorize uri: ' + this.selectUri); 53 let appUidInfo: RouterAppUidVo = router.getParams() as RouterAppUidVo; 54 if (appUidInfo !== undefined && appUidInfo.appUid != undefined) { 55 console.debug('requestAuthorize appUid: ' + appUidInfo.appUid); 56 this.mAppCredAuthPresenter.requestAuthorize(this.selectUri, appUidInfo.appUid); 57 this.dialogController?.close(); 58 } else { 59 console.info('requestAuthorize fail'); 60 } 61 } 62 } 63 ] 64 }), 65 }) 66 67 @Builder 68 dialogControllerContent(): void { 69 Column() { 70 Text($r('app.string.pickCredToAuth')) 71 .fontSize($r('sys.float.ohos_id_text_size_dialog_tittle')) 72 .height($r('app.float.wh_value_56')) 73 .fontColor($r('sys.color.ohos_id_color_text_primary')) 74 .fontWeight(FontWeight.Medium) 75 .margin({ 76 left: $r('app.float.wh_value_24'), 77 right: $r('app.float.wh_value_24') 78 }) 79 .alignSelf(ItemAlign.Start) 80 81 Text($r('app.string.requestAuthMsg', this.mAppCredAuthPresenter.appName)) 82 .fontSize($r('sys.float.ohos_id_text_size_body1')) 83 .fontColor($r('sys.color.ohos_id_color_text_primary')) 84 .fontWeight(FontWeight.Regular) 85 .margin({ 86 left: $r('app.float.wh_value_24'), 87 right: $r('app.float.wh_value_24') 88 }) 89 .alignSelf(ItemAlign.Start) 90 91 if (this.mAppCredAuthPresenter.credList.length > ConfigValue.REQUEST_AUTH_MAX_LENGTH) { 92 Stack({ alignContent: Alignment.End }) { 93 Scroll(this.authScroller) { 94 List() { 95 ForEach(this.mAppCredAuthPresenter.credList, (item: CredentialAbstractVo, index: number) => { 96 ListItem() { 97 Column() { 98 Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { 99 Column() { 100 Text(item.alias) 101 .fontSize($r('app.float.font_18')) 102 .fontColor($r('sys.color.ohos_id_color_text_primary')) 103 .fontWeight(FontWeight.Medium) 104 .textAlign(TextAlign.Start); 105 } 106 .alignItems(HorizontalAlign.Start) 107 108 Column() { 109 Radio({ value: item.alias, group: 'appCredGroup' }) 110 .checked(false) 111 .onChange((value: boolean) => { 112 console.info(item.alias + ' status is ' + value); 113 if (value) { 114 this.selectUri = item.keyUri; 115 } 116 }) 117 } 118 .alignItems(HorizontalAlign.End) 119 } 120 .width(WidthPercent.WH_100_100) 121 122 Divider() 123 .color($r('sys.color.ohos_id_color_list_separator')) 124 .margin({ 125 top: $r('app.float.distance_12') 126 }) 127 .visibility(index === (this.mAppCredAuthPresenter.credList.length - 1) 128 ? Visibility.None : Visibility.Visible) 129 } 130 } 131 .height($r('app.float.wh_value_64')) 132 }, (item: CredentialAbstractVo) => JSON.stringify(item)) 133 } 134 .scrollBar(BarState.Off) 135 .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) 136 .visibility(this.mAppCredAuthPresenter.credList.length > 0 ? Visibility.Visible : Visibility.None) 137 } 138 .scrollBar(BarState.Off) 139 .margin({ 140 left: $r('app.float.wh_value_24'), 141 right: $r('app.float.wh_value_24') 142 }) 143 144 ScrollBar({ scroller: this.authScroller, direction: ScrollBarDirection.Vertical, 145 state: BarState.Auto }) { 146 Text() 147 .width($r('app.float.wh_value_3')) 148 .height($r('app.float.wh_value_50')) 149 .borderRadius($r('app.float.wh_value_10')) 150 .backgroundColor($r('sys.color.ohos_id_color_foreground')) 151 .opacity($r('app.float.text_opacity_0_4')) 152 } 153 .width($r('app.float.wh_value_3')) 154 .margin({ 155 right: $r('app.float.wh_value_3') 156 }) 157 } 158 .height(WidthPercent.WH_50_100) 159 } else { 160 List() { 161 ForEach(this.mAppCredAuthPresenter.credList, (item: CredentialAbstractVo, index: number) => { 162 ListItem() { 163 Column() { 164 Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { 165 Column() { 166 Text(item.alias) 167 .fontSize($r('app.float.font_18')) 168 .fontColor($r('sys.color.ohos_id_color_text_primary')) 169 .fontWeight(FontWeight.Medium) 170 .textAlign(TextAlign.Start); 171 } 172 .alignItems(HorizontalAlign.Start) 173 174 Column() { 175 Radio({ value: item.alias, group: 'appCredGroup' }) 176 .checked(false) 177 .onChange((value: boolean) => { 178 console.info(item.alias + ' status is ' + value); 179 if (value) { 180 this.selectUri = item.keyUri; 181 } 182 }) 183 } 184 .alignItems(HorizontalAlign.End) 185 } 186 .width(WidthPercent.WH_100_100) 187 188 Divider() 189 .color($r('sys.color.ohos_id_color_list_separator')) 190 .margin({ 191 top: $r('app.float.distance_12') 192 }) 193 .visibility(index === (this.mAppCredAuthPresenter.credList.length - 1) 194 ? Visibility.None : Visibility.Visible) 195 } 196 } 197 .height($r('app.float.wh_value_64')) 198 }, (item: CredentialAbstractVo) => JSON.stringify(item)) 199 ListItem() { 200 Flex({ justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { 201 Column() { 202 Text() 203 } 204 .alignItems(HorizontalAlign.Start) 205 206 Column() { 207 Radio({ value: 'null', group: 'appCredGroup' }) 208 .checked(false) 209 .onChange((value: boolean) => { 210 if (value) { 211 this.selectUri = 'null'; 212 } 213 }) 214 } 215 } 216 .visibility(Visibility.None) 217 } 218 } 219 .margin({ 220 left: $r('app.float.wh_value_24'), 221 right: $r('app.float.wh_value_24') 222 }) 223 .scrollBar(BarState.Off) 224 .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) 225 .visibility(this.mAppCredAuthPresenter.credList.length > 0 ? Visibility.Visible : Visibility.None) 226 } 227 } 228 .width(WidthPercent.WH_100_100) 229 .borderRadius($r('app.float.user_list_divider_borderRadius_value')) 230 .backgroundColor($r('sys.color.ohos_id_color_dialog_bg')) 231 } 232 233 aboutToAppear() { 234 console.debug('enter requestAuth page'); 235 let appUidInfo: RouterAppUidVo = router.getParams() as RouterAppUidVo; 236 if (appUidInfo !== undefined && appUidInfo.appUid != undefined) { 237 this.mAppCredAuthPresenter.updateAppNameFromUid(appUidInfo.appUid as string); 238 this.mAppCredAuthPresenter.updateAppCredList(); 239 this.dialogController.open(); 240 } else { 241 console.error('requestAuth appear failed'); 242 router.pushUrl({ url: 'pages/certManagerFa' }); 243 } 244 } 245 246 build() { 247 248 } 249} 250