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 Constants from '../common/utils/constant';
19c5c2eed7Sopenharmony_ciimport { permissionGroups } from '../common/model/permissionGroup';
20c5c2eed7Sopenharmony_ciimport { verifyAccessToken } from '../common/utils/utils';
21c5c2eed7Sopenharmony_ciimport { OtherPermission, RouterParams3 } from '../common/model/typedef';
22c5c2eed7Sopenharmony_ciimport { Permissions } from '@ohos.abilityAccessCtrl';
23c5c2eed7Sopenharmony_ci
24c5c2eed7Sopenharmony_cilet status: number = (router.getParams() as RouterParams3).status; // Status: Allowed, Forbidden
25c5c2eed7Sopenharmony_cilet permissions: Permissions[] = (router.getParams() as RouterParams3).permission; // permissions name
26c5c2eed7Sopenharmony_cilet otherPermissionList: OtherPermission[] = []; // otherPermission List
27c5c2eed7Sopenharmony_cifor (let i = 0; i < permissions.length; i++) {
28c5c2eed7Sopenharmony_ci  otherPermissionList.push(
29c5c2eed7Sopenharmony_ci    new OtherPermission(permissionGroups.filter(item => item.permissionName == permissions[i])[0].label, permissions[i])
30c5c2eed7Sopenharmony_ci  );
31c5c2eed7Sopenharmony_ci}
32c5c2eed7Sopenharmony_ci
33c5c2eed7Sopenharmony_ci@Entry
34c5c2eed7Sopenharmony_ci@Component
35c5c2eed7Sopenharmony_cistruct appNamePage {
36c5c2eed7Sopenharmony_ci  private backTitle: ResourceStr = (router.getParams() as RouterParams3).backTitle;
37c5c2eed7Sopenharmony_ci  private tokenId: number = (router.getParams() as RouterParams3).tokenId;
38c5c2eed7Sopenharmony_ci
39c5c2eed7Sopenharmony_ci  build() {
40c5c2eed7Sopenharmony_ci    GridRow({ gutter: Constants.GUTTER, columns: {
41c5c2eed7Sopenharmony_ci      xs: Constants.XS_COLUMNS, sm: Constants.SM_COLUMNS, md: Constants.MD_COLUMNS, lg: Constants.LG_COLUMNS } }) {
42c5c2eed7Sopenharmony_ci      GridCol({
43c5c2eed7Sopenharmony_ci        span: { xs: Constants.XS_SPAN, sm: Constants.SM_SPAN, md: Constants.MD_SPAN, lg: Constants.LG_SPAN },
44c5c2eed7Sopenharmony_ci        offset: { xs: Constants.XS_OFFSET, sm: Constants.SM_OFFSET, md: Constants.MD_OFFSET, lg: Constants.LG_OFFSET }
45c5c2eed7Sopenharmony_ci      }) {
46c5c2eed7Sopenharmony_ci        Row() {
47c5c2eed7Sopenharmony_ci          Column() {
48c5c2eed7Sopenharmony_ci            Row() {
49c5c2eed7Sopenharmony_ci              backBar({ title: JSON.stringify(this.backTitle), recordable: false })
50c5c2eed7Sopenharmony_ci            }
51c5c2eed7Sopenharmony_ci            Row() {
52c5c2eed7Sopenharmony_ci              Column() {
53c5c2eed7Sopenharmony_ci                Scroll() {
54c5c2eed7Sopenharmony_ci                  appNameItem()
55c5c2eed7Sopenharmony_ci                }
56c5c2eed7Sopenharmony_ci              }
57c5c2eed7Sopenharmony_ci            }.layoutWeight(Constants.LAYOUT_WEIGHT)
58c5c2eed7Sopenharmony_ci          }
59c5c2eed7Sopenharmony_ci        }
60c5c2eed7Sopenharmony_ci        .height(Constants.FULL_HEIGHT)
61c5c2eed7Sopenharmony_ci        .width(Constants.FULL_WIDTH)
62c5c2eed7Sopenharmony_ci        .backgroundColor($r('sys.color.background_secondary'))
63c5c2eed7Sopenharmony_ci      }
64c5c2eed7Sopenharmony_ci    }.backgroundColor($r('sys.color.background_secondary'))
65c5c2eed7Sopenharmony_ci  }
66c5c2eed7Sopenharmony_ci
67c5c2eed7Sopenharmony_ci/**
68c5c2eed7Sopenharmony_ci   * Lifecycle function, triggered once when this page is displayed
69c5c2eed7Sopenharmony_ci   */
70c5c2eed7Sopenharmony_ci  onPageShow() {
71c5c2eed7Sopenharmony_ci    permissions.forEach(permission => {
72c5c2eed7Sopenharmony_ci      verifyAccessToken(this.tokenId, permission).then((data): void => {
73c5c2eed7Sopenharmony_ci        status = data;
74c5c2eed7Sopenharmony_ci      });
75c5c2eed7Sopenharmony_ci    })
76c5c2eed7Sopenharmony_ci  }
77c5c2eed7Sopenharmony_ci}
78c5c2eed7Sopenharmony_ci
79c5c2eed7Sopenharmony_ci@Component
80c5c2eed7Sopenharmony_cistruct appNameItem {
81c5c2eed7Sopenharmony_ci  private bundleName: string = (router.getParams() as RouterParams3).bundleName;
82c5c2eed7Sopenharmony_ci  private tokenId: number = (router.getParams() as RouterParams3).tokenId;
83c5c2eed7Sopenharmony_ci  @State otherPermissionListItem: OtherPermission[] = otherPermissionList; // Other permission interface data array
84c5c2eed7Sopenharmony_ci  @State isTouch: string = '';
85c5c2eed7Sopenharmony_ci
86c5c2eed7Sopenharmony_ci  @Builder ListItemLayout(item: OtherPermission) {
87c5c2eed7Sopenharmony_ci    ListItem() {
88c5c2eed7Sopenharmony_ci      Row() {
89c5c2eed7Sopenharmony_ci        Column() {
90c5c2eed7Sopenharmony_ci          Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {
91c5c2eed7Sopenharmony_ci            Row() {
92c5c2eed7Sopenharmony_ci              Text(item.permissionLabel)
93c5c2eed7Sopenharmony_ci                .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE)
94c5c2eed7Sopenharmony_ci                .fontColor($r('sys.color.font_primary'))
95c5c2eed7Sopenharmony_ci                .flexGrow(Constants.FLEX_GROW)
96c5c2eed7Sopenharmony_ci              SymbolGlyph($r('sys.symbol.chevron_forward'))
97c5c2eed7Sopenharmony_ci                .width(Constants.IMAGE_WIDTH)
98c5c2eed7Sopenharmony_ci                .height(Constants.IMAGE_HEIGHT)
99c5c2eed7Sopenharmony_ci                .fontSize(Constants.FONT_SIZE_18_vp)
100c5c2eed7Sopenharmony_ci                .fontColor([$r('sys.color.icon_tertiary')])
101c5c2eed7Sopenharmony_ci                .fontWeight(FontWeight.Medium)
102c5c2eed7Sopenharmony_ci            }
103c5c2eed7Sopenharmony_ci            .width(Constants.FULL_WIDTH)
104c5c2eed7Sopenharmony_ci            .height(Constants.LISTITEM_ROW_HEIGHT)
105c5c2eed7Sopenharmony_ci          }
106c5c2eed7Sopenharmony_ci        }.onClick(() => {
107c5c2eed7Sopenharmony_ci            router.pushUrl({
108c5c2eed7Sopenharmony_ci              url: 'pages/application-tertiary',
109c5c2eed7Sopenharmony_ci              params: {
110c5c2eed7Sopenharmony_ci                bundleName: this.bundleName,
111c5c2eed7Sopenharmony_ci                backTitle: item.permissionLabel,
112c5c2eed7Sopenharmony_ci                permission: [item.permission],
113c5c2eed7Sopenharmony_ci                status,
114c5c2eed7Sopenharmony_ci                tokenId: this.tokenId
115c5c2eed7Sopenharmony_ci              }
116c5c2eed7Sopenharmony_ci            });
117c5c2eed7Sopenharmony_ci        })
118c5c2eed7Sopenharmony_ci      }
119c5c2eed7Sopenharmony_ci    }.padding({ left: $r('sys.float.ohos_id_card_margin_start'), right: $r('sys.float.ohos_id_card_margin_end') })
120c5c2eed7Sopenharmony_ci    .borderRadius($r('sys.float.ohos_id_corner_radius_default_l'))
121c5c2eed7Sopenharmony_ci    .linearGradient((this.isTouch === item.permission) ? {
122c5c2eed7Sopenharmony_ci        angle: 90,
123c5c2eed7Sopenharmony_ci        direction: GradientDirection.Right,
124c5c2eed7Sopenharmony_ci        colors: [['#DCEAF9', 0.0], ['#FAFAFA', 1.0]]
125c5c2eed7Sopenharmony_ci      } : {
126c5c2eed7Sopenharmony_ci        angle: 90,
127c5c2eed7Sopenharmony_ci        direction: GradientDirection.Right,
128c5c2eed7Sopenharmony_ci        colors: [[$r('sys.color.comp_background_list_card'), 1], [$r('sys.color.comp_background_list_card'), 1]]
129c5c2eed7Sopenharmony_ci      })
130c5c2eed7Sopenharmony_ci    .onTouch(event => {
131c5c2eed7Sopenharmony_ci      if (event === undefined) {
132c5c2eed7Sopenharmony_ci        return;
133c5c2eed7Sopenharmony_ci      }
134c5c2eed7Sopenharmony_ci      if (event.type === TouchType.Down) {
135c5c2eed7Sopenharmony_ci        this.isTouch = item.permission;
136c5c2eed7Sopenharmony_ci      }
137c5c2eed7Sopenharmony_ci      if (event.type === TouchType.Up) {
138c5c2eed7Sopenharmony_ci        this.isTouch = '';
139c5c2eed7Sopenharmony_ci      }
140c5c2eed7Sopenharmony_ci    })
141c5c2eed7Sopenharmony_ci  }
142c5c2eed7Sopenharmony_ci
143c5c2eed7Sopenharmony_ci  build() {
144c5c2eed7Sopenharmony_ci    Row() {
145c5c2eed7Sopenharmony_ci      Column() {
146c5c2eed7Sopenharmony_ci        Row() {
147c5c2eed7Sopenharmony_ci          List() {
148c5c2eed7Sopenharmony_ci            ForEach(this.otherPermissionListItem, (item: OtherPermission) => {
149c5c2eed7Sopenharmony_ci              this.ListItemLayout(item)
150c5c2eed7Sopenharmony_ci            }, (item: OtherPermission) => JSON.stringify(item))
151c5c2eed7Sopenharmony_ci          }.backgroundColor($r('sys.color.comp_background_list_card'))
152c5c2eed7Sopenharmony_ci          .borderRadius($r('sys.float.ohos_id_corner_radius_card'))
153c5c2eed7Sopenharmony_ci          .padding(Constants.LIST_PADDING_TOP)
154c5c2eed7Sopenharmony_ci          .divider({
155c5c2eed7Sopenharmony_ci            strokeWidth: Constants.DIVIDER,
156c5c2eed7Sopenharmony_ci            color: $r('sys.color.comp_divider'),
157c5c2eed7Sopenharmony_ci            startMargin: Constants.DEFAULT_MARGIN_START,
158c5c2eed7Sopenharmony_ci            endMargin: Constants.DEFAULT_MARGIN_END
159c5c2eed7Sopenharmony_ci          })
160c5c2eed7Sopenharmony_ci        }.margin({ top: Constants.ROW_MARGIN_TOP })
161c5c2eed7Sopenharmony_ci         .padding({ left: Constants.LIST_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT })
162c5c2eed7Sopenharmony_ci      }
163c5c2eed7Sopenharmony_ci      .width(Constants.FULL_WIDTH)
164c5c2eed7Sopenharmony_ci      .height(Constants.FULL_HEIGHT)
165c5c2eed7Sopenharmony_ci    }
166c5c2eed7Sopenharmony_ci  }
167c5c2eed7Sopenharmony_ci}
168