1df226684Sopenharmony_ci/*
2df226684Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3df226684Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4df226684Sopenharmony_ci * you may not use this file except in compliance with the License.
5df226684Sopenharmony_ci * You may obtain a copy of the License at
6df226684Sopenharmony_ci *
7df226684Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8df226684Sopenharmony_ci *
9df226684Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10df226684Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11df226684Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12df226684Sopenharmony_ci * See the License for the specific language governing permissions and
13df226684Sopenharmony_ci * limitations under the License.
14df226684Sopenharmony_ci */
15df226684Sopenharmony_ci
16df226684Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession';
17df226684Sopenharmony_ciimport ability from '@ohos.ability.ability';
18df226684Sopenharmony_ciimport Constants from '../common/constant';
19df226684Sopenharmony_ciimport GlobalContext from '../common/GlobalContext';
20df226684Sopenharmony_ciimport { directionStatus } from '../common/utils';
21df226684Sopenharmony_ciimport common from '@ohos.app.ability.common';
22df226684Sopenharmony_ciimport { HiLog } from '../common/HiLog';
23df226684Sopenharmony_ci
24df226684Sopenharmony_ciconst TAG = 'PermStat';
25df226684Sopenharmony_ci
26df226684Sopenharmony_cilet abilityResult: ability.AbilityResult = {
27df226684Sopenharmony_ci  'resultCode': 0,
28df226684Sopenharmony_ci  'want': {}
29df226684Sopenharmony_ci};
30df226684Sopenharmony_ci
31df226684Sopenharmony_ciclass StatusContent {
32df226684Sopenharmony_ci  public label: Resource | undefined = undefined
33df226684Sopenharmony_ci  public value: boolean = false
34df226684Sopenharmony_ci  public date?: boolean
35df226684Sopenharmony_ci}
36df226684Sopenharmony_ci
37df226684Sopenharmony_ciclass TitleContent {
38df226684Sopenharmony_ci  public title: Resource | undefined = undefined
39df226684Sopenharmony_ci  public content: StatusContent[] = []
40df226684Sopenharmony_ci}
41df226684Sopenharmony_ci
42df226684Sopenharmony_cilet storage = LocalStorage.getShared();
43df226684Sopenharmony_ci@Entry(storage)
44df226684Sopenharmony_ci@Component
45df226684Sopenharmony_cistruct PermissionStatus {
46df226684Sopenharmony_ci  @State session: UIExtensionContentSession | undefined = storage === undefined ? undefined : storage.get<UIExtensionContentSession>('session');
47df226684Sopenharmony_ci  @State directionStatus: number = 0;
48df226684Sopenharmony_ci  @State authPerm: number = Constants.PP_IMAGE_PAD;
49df226684Sopenharmony_ci  @State authPermFlag: boolean = false;
50df226684Sopenharmony_ci  @State accountId: string = '';
51df226684Sopenharmony_ci  @State validity: number = 0;
52df226684Sopenharmony_ci  private array1: TitleContent[] = [
53df226684Sopenharmony_ci    {
54df226684Sopenharmony_ci      title: ($r('app.string.perm_list_title_read_only')),
55df226684Sopenharmony_ci      content: [
56df226684Sopenharmony_ci        {
57df226684Sopenharmony_ci          label: ($r('app.string.perm_list_title_read_only')), value: true
58df226684Sopenharmony_ci        }
59df226684Sopenharmony_ci      ]
60df226684Sopenharmony_ci    },
61df226684Sopenharmony_ci    {
62df226684Sopenharmony_ci      title: ($r('app.string.header_title_edit')),
63df226684Sopenharmony_ci      content: [
64df226684Sopenharmony_ci        {
65df226684Sopenharmony_ci          label: ($r('app.string.save')), value: false
66df226684Sopenharmony_ci        },
67df226684Sopenharmony_ci        {
68df226684Sopenharmony_ci          label: ($r('app.string.save_as')), value: false
69df226684Sopenharmony_ci        },
70df226684Sopenharmony_ci        {
71df226684Sopenharmony_ci          label: ($r('app.string.header_title_edit_content')), value: false
72df226684Sopenharmony_ci        },
73df226684Sopenharmony_ci        {
74df226684Sopenharmony_ci          label: ($r('app.string.screenshot')), value: false
75df226684Sopenharmony_ci        },
76df226684Sopenharmony_ci        {
77df226684Sopenharmony_ci          label: ($r('app.string.share_the_screen')), value: false
78df226684Sopenharmony_ci        },
79df226684Sopenharmony_ci        {
80df226684Sopenharmony_ci          label: ($r('app.string.screen_recording')), value: false
81df226684Sopenharmony_ci        },
82df226684Sopenharmony_ci        {
83df226684Sopenharmony_ci          label: ($r('app.string.duplicate')), value: false
84df226684Sopenharmony_ci        },
85df226684Sopenharmony_ci        {
86df226684Sopenharmony_ci          label: ($r('app.string.print')), value: false
87df226684Sopenharmony_ci        },
88df226684Sopenharmony_ci      ]
89df226684Sopenharmony_ci    },
90df226684Sopenharmony_ci    {
91df226684Sopenharmony_ci      title: ($r('app.string.Document_valid')),
92df226684Sopenharmony_ci      content: [
93df226684Sopenharmony_ci        {
94df226684Sopenharmony_ci          label: ($r('app.string.Document_valid_until')), value: false, date: true
95df226684Sopenharmony_ci        }
96df226684Sopenharmony_ci      ]
97df226684Sopenharmony_ci    }
98df226684Sopenharmony_ci  ];
99df226684Sopenharmony_ci  private array2: TitleContent[] = [
100df226684Sopenharmony_ci    {
101df226684Sopenharmony_ci      title: ($r('app.string.perm_list_title_read_only')),
102df226684Sopenharmony_ci      content: [
103df226684Sopenharmony_ci        {
104df226684Sopenharmony_ci          label: ($r('app.string.perm_list_title_read_only')), value: true
105df226684Sopenharmony_ci        }
106df226684Sopenharmony_ci      ]
107df226684Sopenharmony_ci    },
108df226684Sopenharmony_ci    {
109df226684Sopenharmony_ci      title: ($r('app.string.header_title_edit')),
110df226684Sopenharmony_ci      content: [
111df226684Sopenharmony_ci        {
112df226684Sopenharmony_ci          label: ($r('app.string.save')), value: true
113df226684Sopenharmony_ci        },
114df226684Sopenharmony_ci        {
115df226684Sopenharmony_ci          label: ($r('app.string.save_as')), value: true
116df226684Sopenharmony_ci        },
117df226684Sopenharmony_ci        {
118df226684Sopenharmony_ci          label: ($r('app.string.header_title_edit_content')), value: true
119df226684Sopenharmony_ci        },
120df226684Sopenharmony_ci        {
121df226684Sopenharmony_ci          label: ($r('app.string.screenshot')), value: true
122df226684Sopenharmony_ci        },
123df226684Sopenharmony_ci        {
124df226684Sopenharmony_ci          label: ($r('app.string.share_the_screen')), value: true
125df226684Sopenharmony_ci        },
126df226684Sopenharmony_ci        {
127df226684Sopenharmony_ci          label: ($r('app.string.screen_recording')), value: true
128df226684Sopenharmony_ci        },
129df226684Sopenharmony_ci        {
130df226684Sopenharmony_ci          label: ($r('app.string.duplicate')), value: true
131df226684Sopenharmony_ci        },
132df226684Sopenharmony_ci        {
133df226684Sopenharmony_ci          label: ($r('app.string.print')), value: true
134df226684Sopenharmony_ci        },
135df226684Sopenharmony_ci      ]
136df226684Sopenharmony_ci    },
137df226684Sopenharmony_ci    {
138df226684Sopenharmony_ci      title: ($r('app.string.Document_valid')),
139df226684Sopenharmony_ci      content: [
140df226684Sopenharmony_ci        {
141df226684Sopenharmony_ci          label: ($r('app.string.Document_valid_until')), value: false, date: true
142df226684Sopenharmony_ci        }
143df226684Sopenharmony_ci      ]
144df226684Sopenharmony_ci    }
145df226684Sopenharmony_ci  ];
146df226684Sopenharmony_ci
147df226684Sopenharmony_ci  aboutToAppear() {
148df226684Sopenharmony_ci    HiLog.info(TAG, `aboutToAppear`);
149df226684Sopenharmony_ci    this.authPerm = AppStorage.get('authPerm') ?? 1;
150df226684Sopenharmony_ci    this.accountId = AppStorage.get('contactAccount') ?? '';
151df226684Sopenharmony_ci    this.validity = AppStorage.get('validity') ?? 0;
152df226684Sopenharmony_ci    this.directionStatus = (getContext(this) as common.UIAbilityContext).config.direction ?? -1;
153df226684Sopenharmony_ci    directionStatus((counter) => {
154df226684Sopenharmony_ci      this.directionStatus = counter;
155df226684Sopenharmony_ci    })
156df226684Sopenharmony_ci  }
157df226684Sopenharmony_ci
158df226684Sopenharmony_ci  getTime(validity: number) {
159df226684Sopenharmony_ci    if (validity === 0) {
160df226684Sopenharmony_ci      return $r('app.string.permanently');
161df226684Sopenharmony_ci    }
162df226684Sopenharmony_ci    let date: Date = new Date(validity);
163df226684Sopenharmony_ci    let year = date.getFullYear();
164df226684Sopenharmony_ci    let month = date.getMonth() + 1;
165df226684Sopenharmony_ci    let day = date.getDate();
166df226684Sopenharmony_ci    let hour = date.getHours();
167df226684Sopenharmony_ci    let minute = date.getMinutes();
168df226684Sopenharmony_ci    return `${year}/${month}/${day} ${hour}:${minute}`;
169df226684Sopenharmony_ci  }
170df226684Sopenharmony_ci
171df226684Sopenharmony_ci  @Builder
172df226684Sopenharmony_ci  itemHead(text?: string | Resource) {
173df226684Sopenharmony_ci    Text(text)
174df226684Sopenharmony_ci      .fontSize($r('sys.float.ohos_id_text_size_sub_title3'))
175df226684Sopenharmony_ci      .fontWeight(FontWeight.Medium)
176df226684Sopenharmony_ci      .fontColor($r('sys.color.ohos_id_color_text_secondary'))
177df226684Sopenharmony_ci      .width(Constants.HEADER_COLUMN_WIDTH)
178df226684Sopenharmony_ci      .constraintSize({ minHeight: Constants.SUB_HEADER_HEIGHT })
179df226684Sopenharmony_ci  }
180df226684Sopenharmony_ci
181df226684Sopenharmony_ci  build() {
182df226684Sopenharmony_ci    GridRow({
183df226684Sopenharmony_ci      columns: {
184df226684Sopenharmony_ci        xs: Constants.XS_COLUMNS,
185df226684Sopenharmony_ci        sm: Constants.SM_COLUMNS,
186df226684Sopenharmony_ci        md: Constants.MD_COLUMNS,
187df226684Sopenharmony_ci        lg: Constants.LG_COLUMNS
188df226684Sopenharmony_ci      },
189df226684Sopenharmony_ci      gutter: Constants.DIALOG_GUTTER
190df226684Sopenharmony_ci    }) {
191df226684Sopenharmony_ci      GridCol({
192df226684Sopenharmony_ci        span: {
193df226684Sopenharmony_ci          xs: Constants.XS_SPAN,
194df226684Sopenharmony_ci          sm: Constants.SM_SPAN,
195df226684Sopenharmony_ci          md: Constants.SM_SPAN,
196df226684Sopenharmony_ci          lg: Constants.SM_SPAN
197df226684Sopenharmony_ci        },
198df226684Sopenharmony_ci        offset: {
199df226684Sopenharmony_ci          xs: Constants.XS_OFFSET,
200df226684Sopenharmony_ci          sm: Constants.SM_OFFSET,
201df226684Sopenharmony_ci          md: Constants.LG_OFFSET,
202df226684Sopenharmony_ci          lg: Constants.SM_SPAN
203df226684Sopenharmony_ci        }
204df226684Sopenharmony_ci      }) {
205df226684Sopenharmony_ci        Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center,
206df226684Sopenharmony_ci          direction: FlexDirection.Column }) {
207df226684Sopenharmony_ci          Flex({ alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
208df226684Sopenharmony_ci            Column() {
209df226684Sopenharmony_ci              Row() {
210df226684Sopenharmony_ci                Text($r('app.string.header_title'))
211df226684Sopenharmony_ci                  .fontWeight(FontWeight.Bold)
212df226684Sopenharmony_ci                  .fontColor($r('sys.color.ohos_id_color_text_primary'))
213df226684Sopenharmony_ci                  .fontSize($r('sys.float.ohos_id_text_size_dialog_tittle'))
214df226684Sopenharmony_ci                  .width(Constants.HEADER_TEXT_WIDTH)
215df226684Sopenharmony_ci                  .align(Alignment.Start)
216df226684Sopenharmony_ci              }
217df226684Sopenharmony_ci              .width(Constants.HEADER_COLUMN_WIDTH)
218df226684Sopenharmony_ci              .height(Constants.HEADER_COLUMN_HEIGHT)
219df226684Sopenharmony_ci              .padding({
220df226684Sopenharmony_ci                left: Constants.HEADER_COLUMN_PADDING_LEFT,
221df226684Sopenharmony_ci                right: Constants.HEADER_COLUMN_PADDING_RIGHT
222df226684Sopenharmony_ci              })
223df226684Sopenharmony_ci              .margin({ bottom: Constants.HEADER_COLUMN_MARGIN_BOTTOM });
224df226684Sopenharmony_ci
225df226684Sopenharmony_ci              Scroll() {
226df226684Sopenharmony_ci                Column() {
227df226684Sopenharmony_ci                  Row() {
228df226684Sopenharmony_ci                    Text(this.authPerm === Constants.FOOTER_OPACITY_ONE ?
229df226684Sopenharmony_ci                      $r('app.string.permission_status_readOnly') : $r('app.string.permission_status_title'))
230df226684Sopenharmony_ci                      .fontWeight(FontWeight.Regular)
231df226684Sopenharmony_ci                      .fontColor($r('sys.color.ohos_id_color_text_secondary'))
232df226684Sopenharmony_ci                      .fontSize($r('sys.float.ohos_id_text_size_body1'))
233df226684Sopenharmony_ci                      .width(Constants.HEADER_TEXT_WIDTH)
234df226684Sopenharmony_ci                      .align(Alignment.Start)
235df226684Sopenharmony_ci                  }
236df226684Sopenharmony_ci                  .width(Constants.HEADER_COLUMN_WIDTH)
237df226684Sopenharmony_ci                  .margin({ bottom: Constants.DU_LINE_MARGIN_TOP2 })
238df226684Sopenharmony_ci
239df226684Sopenharmony_ci                  List() {
240df226684Sopenharmony_ci                    ForEach(this.authPerm === Constants.FOOTER_OPACITY_ONE ?
241df226684Sopenharmony_ci                      this.array1 : this.array2, (item: TitleContent) => {
242df226684Sopenharmony_ci                      ListItemGroup({ header: this.itemHead(item.title) }) {
243df226684Sopenharmony_ci                        ForEach(item.content, (item: StatusContent) => {
244df226684Sopenharmony_ci                          ListItem() {
245df226684Sopenharmony_ci                            Column() {
246df226684Sopenharmony_ci                              Row() {
247df226684Sopenharmony_ci                                Text(item.label)
248df226684Sopenharmony_ci                                  .constraintSize({
249df226684Sopenharmony_ci                                    minHeight: Constants.SUB_HEADER_HEIGHT,
250df226684Sopenharmony_ci                                    maxWidth: Constants.SUB_HEADER_WIDTH
251df226684Sopenharmony_ci                                  })
252df226684Sopenharmony_ci                                  .fontSize($r('sys.float.ohos_id_text_size_body1'))
253df226684Sopenharmony_ci                                  .textAlign(TextAlign.Start)
254df226684Sopenharmony_ci                                  .fontWeight(FontWeight.Medium)
255df226684Sopenharmony_ci                                Blank()
256df226684Sopenharmony_ci                                if (item.date) {
257df226684Sopenharmony_ci                                  Text(this.getTime(this.validity))
258df226684Sopenharmony_ci                                    .constraintSize({ minHeight: Constants.SUB_HEADER_HEIGHT })
259df226684Sopenharmony_ci                                    .fontSize($r('sys.float.ohos_id_text_size_body2'))
260df226684Sopenharmony_ci                                    .textAlign(TextAlign.Start)
261df226684Sopenharmony_ci                                    .fontWeight(FontWeight.Regular)
262df226684Sopenharmony_ci                                    .opacity(Constants.ENCRYPTION_STATUS_VALUE_COLOR)
263df226684Sopenharmony_ci                                } else {
264df226684Sopenharmony_ci                                  SymbolGlyph(item.value ? $r('sys.symbol.checkmark') : $r('sys.symbol.multiply'))
265df226684Sopenharmony_ci                                    .fontSize(`${Constants.PP_IMAGE_WIDTH}vp`)
266df226684Sopenharmony_ci                                    .fontColor([$r('sys.color.ohos_id_color_text_primary')])
267df226684Sopenharmony_ci                                    .opacity(Constants.ENCRYPTION_STATUS_VALUE_COLOR)
268df226684Sopenharmony_ci                                }
269df226684Sopenharmony_ci                              }
270df226684Sopenharmony_ci                              .width(Constants.HEADER_TEXT_WIDTH);
271df226684Sopenharmony_ci                              Divider()
272df226684Sopenharmony_ci                                .width(Constants.HEADER_TEXT_WIDTH)
273df226684Sopenharmony_ci                                .height(Constants.FOOTER_OPACITY_ONE)
274df226684Sopenharmony_ci                                .color($r('sys.color.comp_divider'));
275df226684Sopenharmony_ci                            }
276df226684Sopenharmony_ci                          }
277df226684Sopenharmony_ci                        }, (item: StatusContent) => JSON.stringify(item))
278df226684Sopenharmony_ci                      }
279df226684Sopenharmony_ci                    })
280df226684Sopenharmony_ci                  }
281df226684Sopenharmony_ci
282df226684Sopenharmony_ci                  Row() {
283df226684Sopenharmony_ci                    Text() {
284df226684Sopenharmony_ci                      Span($r('app.string.apply_for_the_subject'))
285df226684Sopenharmony_ci                      if (this.authPerm === Constants.FOOTER_OPACITY_ONE) {
286df226684Sopenharmony_ci                        Span($r('app.string.apply_for_the_permission', this.accountId))
287df226684Sopenharmony_ci                      }
288df226684Sopenharmony_ci                    }
289df226684Sopenharmony_ci                    .fontColor($r('sys.color.ohos_id_color_text_secondary'))
290df226684Sopenharmony_ci                    .fontSize($r('sys.float.ohos_id_text_size_body1'))
291df226684Sopenharmony_ci                    .align(Alignment.Start)
292df226684Sopenharmony_ci                    .fontWeight(FontWeight.Regular)
293df226684Sopenharmony_ci                  }
294df226684Sopenharmony_ci                  .width(Constants.HEADER_COLUMN_WIDTH)
295df226684Sopenharmony_ci                  .margin({ top: Constants.DA_MARGIN_TOP });
296df226684Sopenharmony_ci                }
297df226684Sopenharmony_ci              }.constraintSize({
298df226684Sopenharmony_ci                maxHeight: this.directionStatus ===
299df226684Sopenharmony_ci                  0 ? Constants.CHANGE_MAX_HEIGHT : Constants.ENCRYPTION_SUCCESS_MAX_HEIGHT
300df226684Sopenharmony_ci              })
301df226684Sopenharmony_ci              .padding({
302df226684Sopenharmony_ci                left: Constants.HEADER_COLUMN_PADDING_LEFT,
303df226684Sopenharmony_ci                right: Constants.HEADER_COLUMN_PADDING_RIGHT
304df226684Sopenharmony_ci              })
305df226684Sopenharmony_ci
306df226684Sopenharmony_ci              Row() {
307df226684Sopenharmony_ci                Button($r('app.string.da_button'), { type: ButtonType.Capsule, stateEffect: true })
308df226684Sopenharmony_ci                  .backgroundColor($r('sys.color.ohos_id_color_button_normal'))
309df226684Sopenharmony_ci                  .fontColor($r('sys.color.ohos_id_color_text_primary_activated'))
310df226684Sopenharmony_ci                  .width(Constants.ENCRYPTION_PERMISSION_STATUS_WIDTH)
311df226684Sopenharmony_ci                  .controlSize(ControlSize.NORMAL)
312df226684Sopenharmony_ci                  .onClick(() => {
313df226684Sopenharmony_ci                    if (this.session !== undefined) {
314df226684Sopenharmony_ci                      this.session.terminateSelfWithResult({
315df226684Sopenharmony_ci                        'resultCode': 0,
316df226684Sopenharmony_ci                        'want': {
317df226684Sopenharmony_ci                          'bundleName': Constants.DLP_MANAGER_BUNDLE_NAME,
318df226684Sopenharmony_ci                        },
319df226684Sopenharmony_ci                      });
320df226684Sopenharmony_ci                    } else {
321df226684Sopenharmony_ci                      if (GlobalContext.load('fileOpenHistoryFromMain')) {
322df226684Sopenharmony_ci                        (GlobalContext.load('fileOpenHistoryFromMain') as Map<string, Object>).delete(GlobalContext.load('uri') as string)
323df226684Sopenharmony_ci                      }
324df226684Sopenharmony_ci                      abilityResult.resultCode = 0;
325df226684Sopenharmony_ci                      (getContext(this) as common.UIAbilityContext).terminateSelfWithResult(abilityResult);
326df226684Sopenharmony_ci                    }
327df226684Sopenharmony_ci                  })
328df226684Sopenharmony_ci              }
329df226684Sopenharmony_ci              .justifyContent(FlexAlign.Center)
330df226684Sopenharmony_ci              .padding({
331df226684Sopenharmony_ci                top: Constants.FOOTER_ROW_PAD_LEFT,
332df226684Sopenharmony_ci                bottom: Constants.HEADER_COLUMN_PADDING_BOTTOM,
333df226684Sopenharmony_ci                left: Constants.FOOTER_ROW_PAD_LEFT,
334df226684Sopenharmony_ci                right: Constants.FOOTER_ROW_PAD_RIGHT
335df226684Sopenharmony_ci              })
336df226684Sopenharmony_ci            }
337df226684Sopenharmony_ci            .width(Constants.ENCRYPTION_PC_FIXING_STATUS_WIDTH)
338df226684Sopenharmony_ci            .backgroundColor($r('sys.color.ohos_id_color_dialog_bg'))
339df226684Sopenharmony_ci            .borderRadius($r('sys.float.ohos_id_corner_radius_dialog'))
340df226684Sopenharmony_ci            .shadow(ShadowStyle.OUTER_DEFAULT_MD)
341df226684Sopenharmony_ci            .constraintSize({ minWidth: Constants.ENCRYPTION_PC_FIXING_STATUS_WIDTH })
342df226684Sopenharmony_ci            .backgroundBlurStyle(BlurStyle.COMPONENT_ULTRA_THICK);
343df226684Sopenharmony_ci          }
344df226684Sopenharmony_ci        }
345df226684Sopenharmony_ci      }
346df226684Sopenharmony_ci    }
347df226684Sopenharmony_ci  }
348df226684Sopenharmony_ci}
349