1c5c2eed7Sopenharmony_ci/* 2c5c2eed7Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3c5c2eed7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c5c2eed7Sopenharmony_ci * you may not use this file except in compliance with the License. 5c5c2eed7Sopenharmony_ci * You may obtain a copy of the License at 6c5c2eed7Sopenharmony_ci * 7c5c2eed7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c5c2eed7Sopenharmony_ci * 9c5c2eed7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c5c2eed7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c5c2eed7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c5c2eed7Sopenharmony_ci * See the License for the specific language governing permissions and 13c5c2eed7Sopenharmony_ci * limitations under the License. 14c5c2eed7Sopenharmony_ci */ 15c5c2eed7Sopenharmony_ci 16c5c2eed7Sopenharmony_ciimport { backBar } from '../common/components/backBar'; 17c5c2eed7Sopenharmony_ciimport router from '@ohos.router'; 18c5c2eed7Sopenharmony_ciimport common from '@ohos.app.ability.common'; 19c5c2eed7Sopenharmony_ciimport abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; 20c5c2eed7Sopenharmony_ciimport bundleManager from '@ohos.bundle.bundleManager'; 21c5c2eed7Sopenharmony_ciimport { BusinessError } from '@ohos.base'; 22c5c2eed7Sopenharmony_ciimport { groups, userGrantPermissions } from '../common/model/permissionGroup'; 23c5c2eed7Sopenharmony_ciimport Constants from '../common/utils/constant'; 24c5c2eed7Sopenharmony_ciimport { Log, verifyAccessToken, getGroupIdByPermission } from '../common/utils/utils'; 25c5c2eed7Sopenharmony_ciimport { PermissionObj, AppInfo } from '../common/model/typedef'; 26c5c2eed7Sopenharmony_ciimport { GlobalContext } from '../common/utils/globalContext'; 27c5c2eed7Sopenharmony_ci 28c5c2eed7Sopenharmony_ciconst FUZZY_LOCATION_PERMISSION = 'ohos.permission.APPROXIMATELY_LOCATION'; 29c5c2eed7Sopenharmony_ciconst PRECISE_LOCATION_PERMISSION = 'ohos.permission.LOCATION'; 30c5c2eed7Sopenharmony_ciconst BACKGROUND_LOCATION_PERMISSION = 'ohos.permission.LOCATION_IN_BACKGROUND'; 31c5c2eed7Sopenharmony_ciconst DOWNLOAD_PERMISSION = 'ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY'; 32c5c2eed7Sopenharmony_ciconst DESKTOP_PERMISSION = 'ohos.permission.READ_WRITE_DESKTOP_DIRECTORY'; 33c5c2eed7Sopenharmony_ciconst DOCUMENTS_PERMISSION = 'ohos.permission.READ_WRITE_DOCUMENTS_DIRECTORY'; 34c5c2eed7Sopenharmony_ci 35c5c2eed7Sopenharmony_ci@Entry 36c5c2eed7Sopenharmony_ci@Component 37c5c2eed7Sopenharmony_cistruct appNamePlusPage { 38c5c2eed7Sopenharmony_ci private context = getContext(this) as common.UIAbilityContext; 39c5c2eed7Sopenharmony_ci @State allowedListItem: PermissionObj[] = []; // Array of allowed permissions 40c5c2eed7Sopenharmony_ci @State bannedListItem: PermissionObj[] = []; // array of forbidden permissions 41c5c2eed7Sopenharmony_ci @State applicationInfo: AppInfo = GlobalContext.load('applicationInfo'); // Routing jump data 42c5c2eed7Sopenharmony_ci @State bundleName: string = GlobalContext.load('bundleName'); 43c5c2eed7Sopenharmony_ci @State label: string = ''; 44c5c2eed7Sopenharmony_ci @State isTouch: string = ''; 45c5c2eed7Sopenharmony_ci @State isGranted: number = Constants.PERMISSION_ALLOW; 46c5c2eed7Sopenharmony_ci @State folderStatus: boolean[] = [false, false, false]; 47c5c2eed7Sopenharmony_ci @State reqUserPermissions: Permissions[] = []; 48c5c2eed7Sopenharmony_ci 49c5c2eed7Sopenharmony_ci @Builder ListItemLayout(item: PermissionObj, status: number) { 50c5c2eed7Sopenharmony_ci ListItem() { 51c5c2eed7Sopenharmony_ci Row() { 52c5c2eed7Sopenharmony_ci Column() { 53c5c2eed7Sopenharmony_ci Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { 54c5c2eed7Sopenharmony_ci Row() { 55c5c2eed7Sopenharmony_ci Text(item.groupName) 56c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) 57c5c2eed7Sopenharmony_ci .fontColor($r('sys.color.font_primary')) 58c5c2eed7Sopenharmony_ci .fontWeight(FontWeight.Medium) 59c5c2eed7Sopenharmony_ci .flexGrow(Constants.FLEX_GROW) 60c5c2eed7Sopenharmony_ci SymbolGlyph($r('sys.symbol.chevron_forward')) 61c5c2eed7Sopenharmony_ci .width(Constants.IMAGE_WIDTH) 62c5c2eed7Sopenharmony_ci .height(Constants.IMAGE_HEIGHT) 63c5c2eed7Sopenharmony_ci .fontSize(Constants.FONT_SIZE_18_vp) 64c5c2eed7Sopenharmony_ci .fontColor([$r('sys.color.icon_tertiary')]) 65c5c2eed7Sopenharmony_ci .fontWeight(FontWeight.Medium) 66c5c2eed7Sopenharmony_ci } 67c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 68c5c2eed7Sopenharmony_ci .height(Constants.LISTITEM_ROW_HEIGHT) 69c5c2eed7Sopenharmony_ci } 70c5c2eed7Sopenharmony_ci }.onClick(() => { 71c5c2eed7Sopenharmony_ci GlobalContext.store('currentPermissionGroup', item.group); 72c5c2eed7Sopenharmony_ci router.pushUrl({ 73c5c2eed7Sopenharmony_ci url: item.group == 'OTHER' ? 'pages/other-permissions' : 'pages/application-tertiary', 74c5c2eed7Sopenharmony_ci params: { 75c5c2eed7Sopenharmony_ci bundleName: this.applicationInfo.bundleName, 76c5c2eed7Sopenharmony_ci backTitle: item.groupName, 77c5c2eed7Sopenharmony_ci permission: item.permission, 78c5c2eed7Sopenharmony_ci status, 79c5c2eed7Sopenharmony_ci tokenId: this.applicationInfo.tokenId 80c5c2eed7Sopenharmony_ci } 81c5c2eed7Sopenharmony_ci }); 82c5c2eed7Sopenharmony_ci }) 83c5c2eed7Sopenharmony_ci } 84c5c2eed7Sopenharmony_ci }.padding({ left: $r('sys.float.ohos_id_card_margin_start'), right: $r('sys.float.ohos_id_card_margin_end') }) 85c5c2eed7Sopenharmony_ci .borderRadius($r('sys.float.ohos_id_corner_radius_default_l')) 86c5c2eed7Sopenharmony_ci .linearGradient((this.isTouch === item.group) ? { 87c5c2eed7Sopenharmony_ci angle: 90, 88c5c2eed7Sopenharmony_ci direction: GradientDirection.Right, 89c5c2eed7Sopenharmony_ci colors: [['#DCEAF9', 0.0], ['#FAFAFA', 1.0]] 90c5c2eed7Sopenharmony_ci } : { 91c5c2eed7Sopenharmony_ci angle: 90, 92c5c2eed7Sopenharmony_ci direction: GradientDirection.Right, 93c5c2eed7Sopenharmony_ci colors: [[$r('sys.color.comp_background_list_card'), 1], [$r('sys.color.comp_background_list_card'), 1]] 94c5c2eed7Sopenharmony_ci }) 95c5c2eed7Sopenharmony_ci .onTouch(event => { 96c5c2eed7Sopenharmony_ci if (event === undefined) { 97c5c2eed7Sopenharmony_ci return; 98c5c2eed7Sopenharmony_ci } 99c5c2eed7Sopenharmony_ci if (event.type === TouchType.Down) { 100c5c2eed7Sopenharmony_ci this.isTouch = item.group; 101c5c2eed7Sopenharmony_ci } 102c5c2eed7Sopenharmony_ci if (event.type === TouchType.Up) { 103c5c2eed7Sopenharmony_ci this.isTouch = ''; 104c5c2eed7Sopenharmony_ci } 105c5c2eed7Sopenharmony_ci }) 106c5c2eed7Sopenharmony_ci } 107c5c2eed7Sopenharmony_ci 108c5c2eed7Sopenharmony_ci async getReqUserPermissions(info: AppInfo) { 109c5c2eed7Sopenharmony_ci let acManager = abilityAccessCtrl.createAtManager(); 110c5c2eed7Sopenharmony_ci if (info.permissions.length > 0) { 111c5c2eed7Sopenharmony_ci for (let j = 0; j < info.permissions.length; j++) { 112c5c2eed7Sopenharmony_ci let permission = info.permissions[j]; 113c5c2eed7Sopenharmony_ci if (userGrantPermissions.indexOf(permission) == -1) { 114c5c2eed7Sopenharmony_ci continue; 115c5c2eed7Sopenharmony_ci } 116c5c2eed7Sopenharmony_ci try { 117c5c2eed7Sopenharmony_ci let flag = await acManager.getPermissionFlags(info.tokenId, permission); 118c5c2eed7Sopenharmony_ci if (flag == Constants.PERMISSION_SYSTEM_FIXED) { 119c5c2eed7Sopenharmony_ci continue; 120c5c2eed7Sopenharmony_ci } 121c5c2eed7Sopenharmony_ci } catch (err) { 122c5c2eed7Sopenharmony_ci Log.error('getPermissionFlags error: ' + JSON.stringify(err)); 123c5c2eed7Sopenharmony_ci } 124c5c2eed7Sopenharmony_ci this.reqUserPermissions.push(permission); 125c5c2eed7Sopenharmony_ci } 126c5c2eed7Sopenharmony_ci } 127c5c2eed7Sopenharmony_ci } 128c5c2eed7Sopenharmony_ci 129c5c2eed7Sopenharmony_ci async initApplicationInfo(info: AppInfo) { 130c5c2eed7Sopenharmony_ci Log.info(`labelResource: ` + JSON.stringify(info.labelResource)); 131c5c2eed7Sopenharmony_ci let resourceManager = this.context.createBundleContext(info.bundleName).resourceManager; 132c5c2eed7Sopenharmony_ci 133c5c2eed7Sopenharmony_ci if (info.labelResource.id !== 0) { 134c5c2eed7Sopenharmony_ci info.label = await this.context.resourceManager.getStringValue(info.labelResource); 135c5c2eed7Sopenharmony_ci } else { 136c5c2eed7Sopenharmony_ci info.label = await resourceManager.getStringValue(info.labelId); 137c5c2eed7Sopenharmony_ci } 138c5c2eed7Sopenharmony_ci 139c5c2eed7Sopenharmony_ci try { 140c5c2eed7Sopenharmony_ci if (info.iconResource.id !== 0) { 141c5c2eed7Sopenharmony_ci let iconDescriptor = this.context.resourceManager.getDrawableDescriptor(info.iconResource); 142c5c2eed7Sopenharmony_ci info.icon = iconDescriptor?.getPixelMap(); 143c5c2eed7Sopenharmony_ci } else { 144c5c2eed7Sopenharmony_ci let iconDescriptor = resourceManager.getDrawableDescriptor(info.iconId); 145c5c2eed7Sopenharmony_ci info.icon = iconDescriptor?.getPixelMap(); 146c5c2eed7Sopenharmony_ci } 147c5c2eed7Sopenharmony_ci } catch (error) { 148c5c2eed7Sopenharmony_ci Log.error(`getDrawableDescriptor failed, error code: ${error.code}, message: ${error.message}.`); 149c5c2eed7Sopenharmony_ci } 150c5c2eed7Sopenharmony_ci 151c5c2eed7Sopenharmony_ci if (!info.icon) { 152c5c2eed7Sopenharmony_ci info.icon = $r('app.media.icon'); 153c5c2eed7Sopenharmony_ci } 154c5c2eed7Sopenharmony_ci 155c5c2eed7Sopenharmony_ci this.reqUserPermissions = []; 156c5c2eed7Sopenharmony_ci await this.getReqUserPermissions(info); 157c5c2eed7Sopenharmony_ci let groupIds: number[] = []; 158c5c2eed7Sopenharmony_ci for (let i = 0; i < this.reqUserPermissions.length; i++) { 159c5c2eed7Sopenharmony_ci let groupId = getGroupIdByPermission(this.reqUserPermissions[i]) 160c5c2eed7Sopenharmony_ci if (groupIds.indexOf(groupId) == -1) { 161c5c2eed7Sopenharmony_ci groupIds.push(groupId); 162c5c2eed7Sopenharmony_ci } 163c5c2eed7Sopenharmony_ci } 164c5c2eed7Sopenharmony_ci info.permissions = this.reqUserPermissions; 165c5c2eed7Sopenharmony_ci info.groupId = groupIds; 166c5c2eed7Sopenharmony_ci } 167c5c2eed7Sopenharmony_ci 168c5c2eed7Sopenharmony_ci /** 169c5c2eed7Sopenharmony_ci * Initialize permission status information and group permission information 170c5c2eed7Sopenharmony_ci */ 171c5c2eed7Sopenharmony_ci async initialPermissions() { 172c5c2eed7Sopenharmony_ci if (this.bundleName && !this.applicationInfo.groupId.length) { 173c5c2eed7Sopenharmony_ci await this.initApplicationInfo(this.applicationInfo); 174c5c2eed7Sopenharmony_ci } 175c5c2eed7Sopenharmony_ci let reqPermissions = this.applicationInfo.permissions; 176c5c2eed7Sopenharmony_ci let reqGroupIds = this.applicationInfo.groupId; 177c5c2eed7Sopenharmony_ci 178c5c2eed7Sopenharmony_ci this.allowedListItem = []; 179c5c2eed7Sopenharmony_ci this.bannedListItem = []; 180c5c2eed7Sopenharmony_ci 181c5c2eed7Sopenharmony_ci for (let i = 0; i < reqGroupIds.length; i++) { 182c5c2eed7Sopenharmony_ci let id = reqGroupIds[i]; 183c5c2eed7Sopenharmony_ci let groupName = groups[id].groupName; 184c5c2eed7Sopenharmony_ci let group = groups[id].name; 185c5c2eed7Sopenharmony_ci let groupReqPermissions: Permissions[] = []; 186c5c2eed7Sopenharmony_ci for (let j = 0; j < reqPermissions.length; j++) { 187c5c2eed7Sopenharmony_ci let permission = reqPermissions[j]; 188c5c2eed7Sopenharmony_ci if (groups[id].permissions.indexOf(permission) != -1) { 189c5c2eed7Sopenharmony_ci groupReqPermissions.push(permission); 190c5c2eed7Sopenharmony_ci } 191c5c2eed7Sopenharmony_ci } 192c5c2eed7Sopenharmony_ci this.isGranted = group === 'LOCATION' ? Constants.PERMISSION_BAN : Constants.PERMISSION_ALLOW; 193c5c2eed7Sopenharmony_ci this.folderStatus = [false, false, false]; 194c5c2eed7Sopenharmony_ci await this.getStatus(groupReqPermissions, group); 195c5c2eed7Sopenharmony_ci 196c5c2eed7Sopenharmony_ci if ( 197c5c2eed7Sopenharmony_ci this.isGranted === Constants.PERMISSION_ALLOW || this.isGranted === Constants.PERMISSION_ALLOWED_ONLY_DURING_USE 198c5c2eed7Sopenharmony_ci ) { 199c5c2eed7Sopenharmony_ci this.allowedListItem.push(new PermissionObj(groupName, groupReqPermissions, group)); 200c5c2eed7Sopenharmony_ci } else { 201c5c2eed7Sopenharmony_ci if (group === 'FOLDER' && this.folderStatus.includes(true)) { 202c5c2eed7Sopenharmony_ci this.allowedListItem.push(new PermissionObj(groupName, groupReqPermissions, group)); 203c5c2eed7Sopenharmony_ci } else { 204c5c2eed7Sopenharmony_ci this.bannedListItem.push(new PermissionObj(groupName, groupReqPermissions, group)); 205c5c2eed7Sopenharmony_ci } 206c5c2eed7Sopenharmony_ci } 207c5c2eed7Sopenharmony_ci 208c5c2eed7Sopenharmony_ci GlobalContext.store('folderStatus', this.folderStatus); 209c5c2eed7Sopenharmony_ci } 210c5c2eed7Sopenharmony_ci } 211c5c2eed7Sopenharmony_ci 212c5c2eed7Sopenharmony_ci async getStatus(groupReqPermissions: Permissions[], group: string) { 213c5c2eed7Sopenharmony_ci if (group === 'LOCATION') { 214c5c2eed7Sopenharmony_ci try { 215c5c2eed7Sopenharmony_ci let acManager = abilityAccessCtrl.createAtManager(); 216c5c2eed7Sopenharmony_ci let fuzzyState = acManager.verifyAccessTokenSync(this.applicationInfo.tokenId, FUZZY_LOCATION_PERMISSION); 217c5c2eed7Sopenharmony_ci fuzzyState === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED ? 218c5c2eed7Sopenharmony_ci this.isGranted = Constants.PERMISSION_ALLOWED_ONLY_DURING_USE : null; 219c5c2eed7Sopenharmony_ci let backgroundState = 220c5c2eed7Sopenharmony_ci acManager.verifyAccessTokenSync(this.applicationInfo.tokenId, BACKGROUND_LOCATION_PERMISSION); 221c5c2eed7Sopenharmony_ci backgroundState === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED ? 222c5c2eed7Sopenharmony_ci this.isGranted = Constants.PERMISSION_ALLOW : null; 223c5c2eed7Sopenharmony_ci await acManager.getPermissionFlags(this.applicationInfo.tokenId, FUZZY_LOCATION_PERMISSION ).then(flag => { 224c5c2eed7Sopenharmony_ci flag === Constants.PERMISSION_ALLOW_THIS_TIME ? this.isGranted = Constants.PERMISSION_ONLY_THIS_TIME : null; 225c5c2eed7Sopenharmony_ci }) 226c5c2eed7Sopenharmony_ci } catch (err) { 227c5c2eed7Sopenharmony_ci Log.error('change location status error: ' + JSON.stringify(err)); 228c5c2eed7Sopenharmony_ci } 229c5c2eed7Sopenharmony_ci GlobalContext.store('locationStatus', this.isGranted); 230c5c2eed7Sopenharmony_ci return true; 231c5c2eed7Sopenharmony_ci } 232c5c2eed7Sopenharmony_ci for (let i = 0; i < groupReqPermissions.length; i++) { 233c5c2eed7Sopenharmony_ci let permission = groupReqPermissions[i]; 234c5c2eed7Sopenharmony_ci let res = await verifyAccessToken(this.applicationInfo.tokenId, permission); 235c5c2eed7Sopenharmony_ci if (res != abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { 236c5c2eed7Sopenharmony_ci this.isGranted = Constants.PERMISSION_BAN; 237c5c2eed7Sopenharmony_ci } 238c5c2eed7Sopenharmony_ci if (group === 'FOLDER' && res === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { 239c5c2eed7Sopenharmony_ci switch (permission) { 240c5c2eed7Sopenharmony_ci case DOWNLOAD_PERMISSION: 241c5c2eed7Sopenharmony_ci this.folderStatus[0] = true; 242c5c2eed7Sopenharmony_ci break; 243c5c2eed7Sopenharmony_ci case DESKTOP_PERMISSION: 244c5c2eed7Sopenharmony_ci this.folderStatus[1] = true; 245c5c2eed7Sopenharmony_ci break; 246c5c2eed7Sopenharmony_ci case DOCUMENTS_PERMISSION: 247c5c2eed7Sopenharmony_ci this.folderStatus[2] = true; 248c5c2eed7Sopenharmony_ci break; 249c5c2eed7Sopenharmony_ci } 250c5c2eed7Sopenharmony_ci } 251c5c2eed7Sopenharmony_ci } 252c5c2eed7Sopenharmony_ci return true; 253c5c2eed7Sopenharmony_ci } 254c5c2eed7Sopenharmony_ci 255c5c2eed7Sopenharmony_ci /** 256c5c2eed7Sopenharmony_ci * Lifecycle function, triggered once when this page is displayed 257c5c2eed7Sopenharmony_ci */ 258c5c2eed7Sopenharmony_ci onPageShow() { 259c5c2eed7Sopenharmony_ci this.initialPermissions(); 260c5c2eed7Sopenharmony_ci bundleManager.getApplicationInfo( 261c5c2eed7Sopenharmony_ci this.applicationInfo.bundleName, bundleManager.ApplicationFlag.GET_APPLICATION_INFO_DEFAULT 262c5c2eed7Sopenharmony_ci ).then(appInfo => { 263c5c2eed7Sopenharmony_ci let bundleContext = this.context.createBundleContext(this.applicationInfo.bundleName) 264c5c2eed7Sopenharmony_ci bundleContext.resourceManager.getStringValue(appInfo.labelId, (error, value) => { 265c5c2eed7Sopenharmony_ci if (value) { 266c5c2eed7Sopenharmony_ci this.applicationInfo.label = value; 267c5c2eed7Sopenharmony_ci GlobalContext.store('applicationInfo', this.applicationInfo); 268c5c2eed7Sopenharmony_ci this.label = value 269c5c2eed7Sopenharmony_ci } 270c5c2eed7Sopenharmony_ci }) 271c5c2eed7Sopenharmony_ci }).catch((error: BusinessError) => { 272c5c2eed7Sopenharmony_ci Log.error('getApplicationInfo error: ' + JSON.stringify(error)); 273c5c2eed7Sopenharmony_ci }) 274c5c2eed7Sopenharmony_ci } 275c5c2eed7Sopenharmony_ci 276c5c2eed7Sopenharmony_ci build() { 277c5c2eed7Sopenharmony_ci Column() { 278c5c2eed7Sopenharmony_ci GridRow({ gutter: Constants.GUTTER, columns: { 279c5c2eed7Sopenharmony_ci xs: Constants.XS_COLUMNS, sm: Constants.SM_COLUMNS, md: Constants.MD_COLUMNS, lg: Constants.LG_COLUMNS } }) { 280c5c2eed7Sopenharmony_ci GridCol({ 281c5c2eed7Sopenharmony_ci span: { xs: Constants.XS_SPAN, sm: Constants.SM_SPAN, md: Constants.MD_SPAN, lg: Constants.LG_SPAN }, 282c5c2eed7Sopenharmony_ci offset: { xs: Constants.XS_OFFSET, sm: Constants.SM_OFFSET, md: Constants.MD_OFFSET, lg: Constants.LG_OFFSET } 283c5c2eed7Sopenharmony_ci }) { 284c5c2eed7Sopenharmony_ci Row() { 285c5c2eed7Sopenharmony_ci Column() { 286c5c2eed7Sopenharmony_ci Row() { 287c5c2eed7Sopenharmony_ci backBar({ title: JSON.stringify(this.label || this.applicationInfo.label), recordable: false }) 288c5c2eed7Sopenharmony_ci } 289c5c2eed7Sopenharmony_ci Row() { 290c5c2eed7Sopenharmony_ci Column() { 291c5c2eed7Sopenharmony_ci if (!this.allowedListItem.length && !this.bannedListItem.length) { 292c5c2eed7Sopenharmony_ci Row() { 293c5c2eed7Sopenharmony_ci List() { 294c5c2eed7Sopenharmony_ci ListItem() { 295c5c2eed7Sopenharmony_ci Row() { 296c5c2eed7Sopenharmony_ci Column() { 297c5c2eed7Sopenharmony_ci Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { 298c5c2eed7Sopenharmony_ci Row() { 299c5c2eed7Sopenharmony_ci Column() { 300c5c2eed7Sopenharmony_ci Row() { 301c5c2eed7Sopenharmony_ci Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { 302c5c2eed7Sopenharmony_ci Text($r('app.string.no_permission')) 303c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) 304c5c2eed7Sopenharmony_ci .fontColor($r('sys.color.font_primary')) 305c5c2eed7Sopenharmony_ci }.margin({ top: Constants.FLEX_MARGIN_TOP, bottom: Constants.FLEX_MARGIN_BOTTOM }) 306c5c2eed7Sopenharmony_ci }.height(Constants.FULL_HEIGHT) 307c5c2eed7Sopenharmony_ci }.flexGrow(Constants.FLEX_GROW) 308c5c2eed7Sopenharmony_ci .constraintSize({minHeight: Constants.CONSTRAINTSIZE_MINHEIGHT }) 309c5c2eed7Sopenharmony_ci } 310c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 311c5c2eed7Sopenharmony_ci .height(Constants.LISTITEM_ROW_HEIGHT) 312c5c2eed7Sopenharmony_ci } 313c5c2eed7Sopenharmony_ci } 314c5c2eed7Sopenharmony_ci } 315c5c2eed7Sopenharmony_ci }.padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) 316c5c2eed7Sopenharmony_ci } 317c5c2eed7Sopenharmony_ci .backgroundColor($r('sys.color.comp_background_list_card')) 318c5c2eed7Sopenharmony_ci .borderRadius($r('sys.float.ohos_id_corner_radius_card')) 319c5c2eed7Sopenharmony_ci .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) 320c5c2eed7Sopenharmony_ci }.margin({ top: Constants.ROW_MARGIN_TOP }) 321c5c2eed7Sopenharmony_ci .padding({ 322c5c2eed7Sopenharmony_ci left: Constants.SECONDARY_LIST_PADDING_LEFT, 323c5c2eed7Sopenharmony_ci right: Constants.SECONDARY_LIST_PADDING_RIGHT 324c5c2eed7Sopenharmony_ci }) 325c5c2eed7Sopenharmony_ci } else { 326c5c2eed7Sopenharmony_ci Scroll() { 327c5c2eed7Sopenharmony_ci List() { 328c5c2eed7Sopenharmony_ci if (this.allowedListItem.length) { 329c5c2eed7Sopenharmony_ci ListItem() { 330c5c2eed7Sopenharmony_ci Row() { 331c5c2eed7Sopenharmony_ci Text($r('app.string.allowed')) 332c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_SMALL_FONT_SIZE) 333c5c2eed7Sopenharmony_ci .fontColor($r('sys.color.font_secondary')) 334c5c2eed7Sopenharmony_ci .fontWeight(FontWeight.Medium) 335c5c2eed7Sopenharmony_ci .lineHeight(Constants.SUBTITLE_LINE_HEIGHT) 336c5c2eed7Sopenharmony_ci }.constraintSize({ minHeight: Constants.SUBTITLE_MIN_HEIGHT }) 337c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 338c5c2eed7Sopenharmony_ci .padding({ top: Constants.SUBTITLE_PADDING_TOP, bottom: Constants.SUBTITLE_PADDING_BOTTOM, 339c5c2eed7Sopenharmony_ci left: Constants.SECONDARY_TEXT_MARGIN_LEFT}) 340c5c2eed7Sopenharmony_ci } 341c5c2eed7Sopenharmony_ci 342c5c2eed7Sopenharmony_ci ListItem() { 343c5c2eed7Sopenharmony_ci Row() { 344c5c2eed7Sopenharmony_ci List() { 345c5c2eed7Sopenharmony_ci ForEach(this.allowedListItem, (item: PermissionObj) => { 346c5c2eed7Sopenharmony_ci this.ListItemLayout(item, Constants.PERMISSION_ALLOW) 347c5c2eed7Sopenharmony_ci }, (item: PermissionObj) => JSON.stringify(item)) 348c5c2eed7Sopenharmony_ci } 349c5c2eed7Sopenharmony_ci .backgroundColor($r('sys.color.comp_background_list_card')) 350c5c2eed7Sopenharmony_ci .borderRadius($r('sys.float.ohos_id_corner_radius_card')) 351c5c2eed7Sopenharmony_ci .padding(Constants.LIST_PADDING_TOP) 352c5c2eed7Sopenharmony_ci .divider({ 353c5c2eed7Sopenharmony_ci strokeWidth: Constants.DIVIDER, 354c5c2eed7Sopenharmony_ci color: $r('sys.color.comp_divider'), 355c5c2eed7Sopenharmony_ci startMargin: Constants.DEFAULT_MARGIN_START, 356c5c2eed7Sopenharmony_ci endMargin: Constants.DEFAULT_MARGIN_END 357c5c2eed7Sopenharmony_ci }) 358c5c2eed7Sopenharmony_ci }.margin({ top: Constants.ROW_MARGIN_TOP }) 359c5c2eed7Sopenharmony_ci .padding({ 360c5c2eed7Sopenharmony_ci left: Constants.SECONDARY_LIST_PADDING_LEFT, 361c5c2eed7Sopenharmony_ci right: Constants.SECONDARY_LIST_PADDING_RIGHT 362c5c2eed7Sopenharmony_ci }) 363c5c2eed7Sopenharmony_ci } 364c5c2eed7Sopenharmony_ci } 365c5c2eed7Sopenharmony_ci if (this.bannedListItem.length) { 366c5c2eed7Sopenharmony_ci ListItem() { 367c5c2eed7Sopenharmony_ci Row() { 368c5c2eed7Sopenharmony_ci Text($r('app.string.banned')) 369c5c2eed7Sopenharmony_ci .fontSize(Constants.TEXT_SMALL_FONT_SIZE) 370c5c2eed7Sopenharmony_ci .fontColor($r('sys.color.font_secondary')) 371c5c2eed7Sopenharmony_ci .fontWeight(FontWeight.Medium) 372c5c2eed7Sopenharmony_ci .lineHeight(Constants.SUBTITLE_LINE_HEIGHT) 373c5c2eed7Sopenharmony_ci }.constraintSize({ minHeight: Constants.SUBTITLE_MIN_HEIGHT }) 374c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 375c5c2eed7Sopenharmony_ci .padding({ top: Constants.SUBTITLE_PADDING_TOP, bottom: Constants.SUBTITLE_PADDING_BOTTOM, 376c5c2eed7Sopenharmony_ci left: Constants.SECONDARY_TEXT_MARGIN_LEFT}) 377c5c2eed7Sopenharmony_ci } 378c5c2eed7Sopenharmony_ci 379c5c2eed7Sopenharmony_ci ListItem() { 380c5c2eed7Sopenharmony_ci Row() { 381c5c2eed7Sopenharmony_ci List() { 382c5c2eed7Sopenharmony_ci ForEach(this.bannedListItem, (item: PermissionObj) => { 383c5c2eed7Sopenharmony_ci this.ListItemLayout(item, Constants.PERMISSION_BAN) 384c5c2eed7Sopenharmony_ci }, (item: PermissionObj) => JSON.stringify(item)) 385c5c2eed7Sopenharmony_ci } 386c5c2eed7Sopenharmony_ci .backgroundColor($r('sys.color.comp_background_list_card')) 387c5c2eed7Sopenharmony_ci .borderRadius($r('sys.float.ohos_id_corner_radius_card')) 388c5c2eed7Sopenharmony_ci .padding(Constants.LIST_PADDING_TOP) 389c5c2eed7Sopenharmony_ci .divider({ 390c5c2eed7Sopenharmony_ci strokeWidth: Constants.DIVIDER, 391c5c2eed7Sopenharmony_ci color: $r('sys.color.comp_divider'), 392c5c2eed7Sopenharmony_ci startMargin: Constants.DEFAULT_MARGIN_START, 393c5c2eed7Sopenharmony_ci endMargin: Constants.DEFAULT_MARGIN_END 394c5c2eed7Sopenharmony_ci }) 395c5c2eed7Sopenharmony_ci }.margin({ top: Constants.ROW_MARGIN_TOP }) 396c5c2eed7Sopenharmony_ci .padding({ 397c5c2eed7Sopenharmony_ci left: Constants.SECONDARY_LIST_PADDING_LEFT, 398c5c2eed7Sopenharmony_ci right: Constants.SECONDARY_LIST_PADDING_RIGHT 399c5c2eed7Sopenharmony_ci }) 400c5c2eed7Sopenharmony_ci } 401c5c2eed7Sopenharmony_ci } 402c5c2eed7Sopenharmony_ci } 403c5c2eed7Sopenharmony_ci }.scrollBar(BarState.Off) 404c5c2eed7Sopenharmony_ci } 405c5c2eed7Sopenharmony_ci } 406c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 407c5c2eed7Sopenharmony_ci .height(Constants.FULL_HEIGHT) 408c5c2eed7Sopenharmony_ci } 409c5c2eed7Sopenharmony_ci .layoutWeight(Constants.LAYOUT_WEIGHT) 410c5c2eed7Sopenharmony_ci } 411c5c2eed7Sopenharmony_ci } 412c5c2eed7Sopenharmony_ci .height(Constants.FULL_HEIGHT) 413c5c2eed7Sopenharmony_ci .width(Constants.FULL_WIDTH) 414c5c2eed7Sopenharmony_ci .backgroundColor($r('sys.color.background_secondary')) 415c5c2eed7Sopenharmony_ci } 416c5c2eed7Sopenharmony_ci }.backgroundColor($r('sys.color.background_secondary')) 417c5c2eed7Sopenharmony_ci } 418c5c2eed7Sopenharmony_ci } 419c5c2eed7Sopenharmony_ci} 420