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 dlpPermission from '@ohos.dlpPermission';
19df226684Sopenharmony_ciimport hiSysEvent from '@ohos.hiSysEvent';
20df226684Sopenharmony_ciimport router from '@ohos.router';
21df226684Sopenharmony_ciimport picker from '@ohos.file.picker';
22df226684Sopenharmony_ciimport fileUri from '@ohos.file.fileuri';
23df226684Sopenharmony_ciimport fs from '@ohos.file.fs';
24df226684Sopenharmony_ciimport osAccount from '@ohos.account.osAccount';
25df226684Sopenharmony_ciimport { BusinessError } from '@ohos.base';
26df226684Sopenharmony_ciimport common from '@ohos.app.ability.common';
27df226684Sopenharmony_ciimport { EncryptingPanel } from '../common/encryptionComponents/encrypting';
28df226684Sopenharmony_ciimport { DlpAlertDialog } from '../common/components/dlp_alert_dialog';
29df226684Sopenharmony_ciimport {
30df226684Sopenharmony_ci  PermissionType,
31df226684Sopenharmony_ci  getOsAccountInfo,
32df226684Sopenharmony_ci  checkDomainAccountInfo,
33df226684Sopenharmony_ci  getUserId,
34df226684Sopenharmony_ci  removeDuplicate,
35df226684Sopenharmony_ci  directionStatus,
36df226684Sopenharmony_ci  AuthAccount,
37df226684Sopenharmony_ci  getFileUriByPath,
38df226684Sopenharmony_ci  sendDlpFileCreateProperties,
39df226684Sopenharmony_ci  sendDlpManagerFileConfiguration,
40df226684Sopenharmony_ci  getFileSizeByUri
41df226684Sopenharmony_ci} from '../common/utils';
42df226684Sopenharmony_ciimport Constants from '../common/constant';
43df226684Sopenharmony_ciimport {
44df226684Sopenharmony_ci  permissionTypeSelect,
45df226684Sopenharmony_ci  validDateTypeMenu,
46df226684Sopenharmony_ci  validDateTypeMenuItem
47df226684Sopenharmony_ci} from '../common/encryptionComponents/permission_type_select';
48df226684Sopenharmony_ciimport { AddStaff } from '../common/encryptionComponents/AddStaff';
49df226684Sopenharmony_ciimport GlobalContext from '../common/GlobalContext';
50df226684Sopenharmony_ciimport IDLDLPProperty from '../serviceExtensionAbility/sequenceable/dlpClass';
51df226684Sopenharmony_ciimport { IAuthUser } from '../serviceExtensionAbility/sequenceable/dlpClass';
52df226684Sopenharmony_ciimport HomeFeature from '../feature/HomeFeature';
53df226684Sopenharmony_ciimport { GetAlertMessage } from '../common/GetAlertMessage';
54df226684Sopenharmony_ciimport { HiLog } from '../common/HiLog';
55df226684Sopenharmony_ciimport FileUtils, { FileMsg } from '../common/FileUtils';
56df226684Sopenharmony_ciimport { SystemUtils } from '../common/systemUtils';
57df226684Sopenharmony_ci
58df226684Sopenharmony_ciconst TAG = 'Encrypt';
59df226684Sopenharmony_cilet abilityResult: ability.AbilityResult = {
60df226684Sopenharmony_ci  'resultCode': 0,
61df226684Sopenharmony_ci  'want': {}
62df226684Sopenharmony_ci};
63df226684Sopenharmony_ci
64df226684Sopenharmony_ciinterface dlpDataType {
65df226684Sopenharmony_ci  ownerAccount: string;
66df226684Sopenharmony_ci  ownerAccountID: string;
67df226684Sopenharmony_ci  ownerAccountType: number;
68df226684Sopenharmony_ci  authUserList: Array<dlpPermission.AuthUser>;
69df226684Sopenharmony_ci  contactAccount: string;
70df226684Sopenharmony_ci  offlineAccess: boolean;
71df226684Sopenharmony_ci  everyoneAccessList: Array<dlpPermission.DLPFileAccess>;
72df226684Sopenharmony_ci}
73df226684Sopenharmony_cilet defaultDlpProperty: dlpPermission.DLPProperty = {
74df226684Sopenharmony_ci  ownerAccount: '',
75df226684Sopenharmony_ci  ownerAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT,
76df226684Sopenharmony_ci  authUserList: [],
77df226684Sopenharmony_ci  contactAccount: '',
78df226684Sopenharmony_ci  offlineAccess: true,
79df226684Sopenharmony_ci  ownerAccountID: '',
80df226684Sopenharmony_ci  everyoneAccessList: []
81df226684Sopenharmony_ci};
82df226684Sopenharmony_ci
83df226684Sopenharmony_ci@Component
84df226684Sopenharmony_cistruct DlpDialog {
85df226684Sopenharmony_ci  @State dlpProperty: dlpDataType =
86df226684Sopenharmony_ci    GlobalContext.load('dlpProperty') !== undefined ? GlobalContext.load('dlpProperty') : defaultDlpProperty;
87df226684Sopenharmony_ci  private homeFeature: HomeFeature = GlobalContext.load('homeFeature');
88df226684Sopenharmony_ci  @State session: UIExtensionContentSession | undefined =
89df226684Sopenharmony_ci    storage === undefined ? undefined : storage.get<UIExtensionContentSession>('session');
90df226684Sopenharmony_ci  srcFileName: string = '';
91df226684Sopenharmony_ci  isDlpFile: boolean = false;
92df226684Sopenharmony_ci  linkFileName: string = '';
93df226684Sopenharmony_ci  dlpAlertDialog?: CustomDialogController;
94df226684Sopenharmony_ci  @State directionStatus: number = 0;
95df226684Sopenharmony_ci  @State authPerm: number = 2;
96df226684Sopenharmony_ci  @State handlePopupReadOnly: boolean = false;
97df226684Sopenharmony_ci  @State handlePopupEdit: boolean = false;
98df226684Sopenharmony_ci  @State processing: boolean = false;
99df226684Sopenharmony_ci  @State prepareData: boolean = false;
100df226684Sopenharmony_ci  @State validity: Date = AppStorage.get('validity') || new Date();
101df226684Sopenharmony_ci  @State selectedIndex: number = AppStorage.get('permanent') === false ? 1 : 0;
102df226684Sopenharmony_ci  @State permissionDict: PermissionType[] = [
103df226684Sopenharmony_ci    {
104df226684Sopenharmony_ci      value: $r('app.string.PERMISSION_TYPE_SELECT_TARGET'), data: 'target', index: 0
105df226684Sopenharmony_ci    } as PermissionType,
106df226684Sopenharmony_ci    {
107df226684Sopenharmony_ci      value: $r('app.string.PERMISSION_TYPE_SELECT_ALL'), data: 'all', index: 1
108df226684Sopenharmony_ci    } as PermissionType,
109df226684Sopenharmony_ci    {
110df226684Sopenharmony_ci      value: $r('app.string.PERMISSION_TYPE_SELECT_SELF'), data: 'self', index: 2
111df226684Sopenharmony_ci    } as PermissionType
112df226684Sopenharmony_ci  ];
113df226684Sopenharmony_ci  @State isAccountCheckSuccess: boolean = true;
114df226684Sopenharmony_ci  @State staffDataArrayReadOnly: AuthAccount[] = [];
115df226684Sopenharmony_ci  @State staffDataArrayEdit: AuthAccount[] = [];
116df226684Sopenharmony_ci  @State selectedPermissionTypeReadOnly: PermissionType =
117df226684Sopenharmony_ci    { data: '', value: { id: 0, type: 0, params: [], bundleName: '', moduleName: '' }, index: -1 };
118df226684Sopenharmony_ci  @State selectedPermissionTypeEdit: PermissionType =
119df226684Sopenharmony_ci    { data: '', value: { id: 0, type: 0, params: [], bundleName: '', moduleName: '' }, index: -1 };
120df226684Sopenharmony_ci
121df226684Sopenharmony_ci  @Builder popupBuilderReadOnly() {
122df226684Sopenharmony_ci    Row() {
123df226684Sopenharmony_ci      Text($r('app.string.header_title_readonly_tips'))
124df226684Sopenharmony_ci        .fontFamily('HarmonyHeiTi')
125df226684Sopenharmony_ci        .fontSize($r('sys.float.ohos_id_text_size_body2'))
126df226684Sopenharmony_ci        .fontColor($r('sys.color.ohos_id_color_text_primary'))
127df226684Sopenharmony_ci    }
128df226684Sopenharmony_ci    .width(Constants.HEADER_COLUMN_MESSAGE_TIPS)
129df226684Sopenharmony_ci    .padding({
130df226684Sopenharmony_ci      left: Constants.ROW_FONT_SIZE,
131df226684Sopenharmony_ci      right: Constants.ROW_FONT_SIZE,
132df226684Sopenharmony_ci      top: Constants.DA_MARGIN_TOP,
133df226684Sopenharmony_ci      bottom: Constants.DA_MARGIN_TOP
134df226684Sopenharmony_ci    })
135df226684Sopenharmony_ci  }
136df226684Sopenharmony_ci
137df226684Sopenharmony_ci  @Builder popupBuilderEdit() {
138df226684Sopenharmony_ci    Row() {
139df226684Sopenharmony_ci      Text($r('app.string.header_title_edit_tips'))
140df226684Sopenharmony_ci        .fontSize($r('sys.float.ohos_id_text_size_body2'))
141df226684Sopenharmony_ci        .fontColor($r('sys.color.ohos_id_color_text_primary'))
142df226684Sopenharmony_ci    }
143df226684Sopenharmony_ci    .width(Constants.HEADER_COLUMN_MESSAGE_TIPS)
144df226684Sopenharmony_ci    .padding({
145df226684Sopenharmony_ci      left: Constants.ROW_FONT_SIZE,
146df226684Sopenharmony_ci      right: Constants.ROW_FONT_SIZE,
147df226684Sopenharmony_ci      top: Constants.DA_MARGIN_TOP,
148df226684Sopenharmony_ci      bottom: Constants.DA_MARGIN_TOP
149df226684Sopenharmony_ci    })
150df226684Sopenharmony_ci  }
151df226684Sopenharmony_ci
152df226684Sopenharmony_ci  @Builder
153df226684Sopenharmony_ci  MenuBuilder() {
154df226684Sopenharmony_ci    validDateTypeMenuItem({ selectedIndex: $selectedIndex });
155df226684Sopenharmony_ci  }
156df226684Sopenharmony_ci
157df226684Sopenharmony_ci  showErrorDialog(title: string | Resource, message: string | Resource) {
158df226684Sopenharmony_ci    this.dlpAlertDialog = new CustomDialogController({
159df226684Sopenharmony_ci      builder: DlpAlertDialog({
160df226684Sopenharmony_ci        title: title,
161df226684Sopenharmony_ci        message: message,
162df226684Sopenharmony_ci        action: () => {
163df226684Sopenharmony_ci        }
164df226684Sopenharmony_ci      }),
165df226684Sopenharmony_ci      autoCancel: false,
166df226684Sopenharmony_ci      customStyle: true,
167df226684Sopenharmony_ci      maskColor: Constants.TRANSPARENT_BACKGROUND_COLOR
168df226684Sopenharmony_ci    })
169df226684Sopenharmony_ci    this.dlpAlertDialog.open();
170df226684Sopenharmony_ci  }
171df226684Sopenharmony_ci
172df226684Sopenharmony_ci  showErrorDialogNoTitle(message: Resource) {
173df226684Sopenharmony_ci    this.dlpAlertDialog = new CustomDialogController({
174df226684Sopenharmony_ci      builder: DlpAlertDialog({
175df226684Sopenharmony_ci        message: message,
176df226684Sopenharmony_ci        action: () => {
177df226684Sopenharmony_ci        }
178df226684Sopenharmony_ci      }),
179df226684Sopenharmony_ci      autoCancel: false,
180df226684Sopenharmony_ci      customStyle: true,
181df226684Sopenharmony_ci      maskColor: Constants.TRANSPARENT_BACKGROUND_COLOR
182df226684Sopenharmony_ci    })
183df226684Sopenharmony_ci    this.dlpAlertDialog.open();
184df226684Sopenharmony_ci  }
185df226684Sopenharmony_ci
186df226684Sopenharmony_ci  async sendDlpFileCreateFault(code: number, reason?: string) {
187df226684Sopenharmony_ci    let event: hiSysEvent.SysEventInfo = {
188df226684Sopenharmony_ci      domain: 'DLP',
189df226684Sopenharmony_ci      name: 'DLP_FILE_CREATE',
190df226684Sopenharmony_ci      eventType: hiSysEvent.EventType.FAULT,
191df226684Sopenharmony_ci      params: {
192df226684Sopenharmony_ci        'CODE': code,
193df226684Sopenharmony_ci        'REASON': reason
194df226684Sopenharmony_ci      } as Record<string, number | string>
195df226684Sopenharmony_ci    };
196df226684Sopenharmony_ci
197df226684Sopenharmony_ci    try {
198df226684Sopenharmony_ci      let userId = await getUserId();
199df226684Sopenharmony_ci      if (event.params) {
200df226684Sopenharmony_ci        event.params['USER_ID'] = userId;
201df226684Sopenharmony_ci        await hiSysEvent.write(event);
202df226684Sopenharmony_ci      }
203df226684Sopenharmony_ci    } catch (err) {
204df226684Sopenharmony_ci      HiLog.error(TAG, `sendDlpFileCreateFault failed, err: ${JSON.stringify(err)}`);
205df226684Sopenharmony_ci    }
206df226684Sopenharmony_ci  }
207df226684Sopenharmony_ci
208df226684Sopenharmony_ci  async sendDlpFileCreateEvent(code: number) {
209df226684Sopenharmony_ci    let event: hiSysEvent.SysEventInfo = {
210df226684Sopenharmony_ci      domain: 'DLP',
211df226684Sopenharmony_ci      name: 'DLP_FILE_CREATE_EVENT',
212df226684Sopenharmony_ci      eventType: hiSysEvent.EventType.BEHAVIOR,
213df226684Sopenharmony_ci      params: {
214df226684Sopenharmony_ci        'CODE': code,
215df226684Sopenharmony_ci      } as Record<string, number>
216df226684Sopenharmony_ci    };
217df226684Sopenharmony_ci    try {
218df226684Sopenharmony_ci      let userId = await getUserId();
219df226684Sopenharmony_ci      if (event.params) {
220df226684Sopenharmony_ci        event.params['USER_ID'] = userId;
221df226684Sopenharmony_ci        await hiSysEvent.write(event);
222df226684Sopenharmony_ci      }
223df226684Sopenharmony_ci    } catch (err) {
224df226684Sopenharmony_ci      HiLog.error(TAG, `sendDlpFileCreateEvent, err: ${JSON.stringify(err)}`);
225df226684Sopenharmony_ci    }
226df226684Sopenharmony_ci  }
227df226684Sopenharmony_ci
228df226684Sopenharmony_ci  async catchProcess() {
229df226684Sopenharmony_ci    this.processing = false;
230df226684Sopenharmony_ci    if (GlobalContext.load('requestIsFromSandBox') as boolean) {
231df226684Sopenharmony_ci      HiLog.info(TAG, `resumeFuseLink: ${this.srcFileName}`);
232df226684Sopenharmony_ci      this.homeFeature.resumeFuseLinkHome(GlobalContext.load('uri'), (err: number) => {
233df226684Sopenharmony_ci        if (err !== 0) {
234df226684Sopenharmony_ci          HiLog.error(TAG, `resumeFuseLink failed: ${err}`);
235df226684Sopenharmony_ci        }
236df226684Sopenharmony_ci      });
237df226684Sopenharmony_ci    }
238df226684Sopenharmony_ci  }
239df226684Sopenharmony_ci
240df226684Sopenharmony_ci  async setUserStat() {
241df226684Sopenharmony_ci    if (this.selectedPermissionTypeReadOnly.index === 0) {
242df226684Sopenharmony_ci      AppStorage.setOrCreate('hiReadScope', 'User');
243df226684Sopenharmony_ci    } else if (this.selectedPermissionTypeReadOnly.index === 1) {
244df226684Sopenharmony_ci      AppStorage.setOrCreate('hiReadScope', 'Everyone');
245df226684Sopenharmony_ci    }
246df226684Sopenharmony_ci    if (this.selectedPermissionTypeEdit.index === 0) {
247df226684Sopenharmony_ci      AppStorage.setOrCreate('hiWriteScope', 'User');
248df226684Sopenharmony_ci    } else if (this.selectedPermissionTypeEdit.index === 1) {
249df226684Sopenharmony_ci      AppStorage.setOrCreate('hiWriteScope', 'Everyone');
250df226684Sopenharmony_ci    } else {
251df226684Sopenharmony_ci      AppStorage.setOrCreate('hiWriteScope', 'Onlyme');
252df226684Sopenharmony_ci    }
253df226684Sopenharmony_ci  }
254df226684Sopenharmony_ci
255df226684Sopenharmony_ci  async changeEncrypt() {
256df226684Sopenharmony_ci    this.processing = true;
257df226684Sopenharmony_ci    await this.setUserStat();
258df226684Sopenharmony_ci    if (GlobalContext.load('requestIsFromSandBox') as boolean) {
259df226684Sopenharmony_ci      try {
260df226684Sopenharmony_ci        await this.stopFuseLinkHome();
261df226684Sopenharmony_ci      } catch {
262df226684Sopenharmony_ci        return;
263df226684Sopenharmony_ci      }
264df226684Sopenharmony_ci    }
265df226684Sopenharmony_ci    let filePath = getContext(this).filesDir + '/' + (new Date().getTime());
266df226684Sopenharmony_ci    let file: fs.File | undefined;
267df226684Sopenharmony_ci    try {
268df226684Sopenharmony_ci      file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
269df226684Sopenharmony_ci      HiLog.info(TAG, `open temp file`);
270df226684Sopenharmony_ci    } catch (err) {
271df226684Sopenharmony_ci      HiLog.error(TAG, `open temp failed: ${JSON.stringify(err)}`);
272df226684Sopenharmony_ci      this.showErrorDialog($r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR'));
273df226684Sopenharmony_ci      await this.catchProcess();
274df226684Sopenharmony_ci      return;
275df226684Sopenharmony_ci    } finally {
276df226684Sopenharmony_ci      if (file) {
277df226684Sopenharmony_ci        fs.closeSync(file);
278df226684Sopenharmony_ci      }
279df226684Sopenharmony_ci    };
280df226684Sopenharmony_ci    let filePathUri = getFileUriByPath(filePath);
281df226684Sopenharmony_ci    try {
282df226684Sopenharmony_ci      await new Promise<void>((resolve, reject) => {
283df226684Sopenharmony_ci        this.homeFeature.recoverDLPFileHome(GlobalContext.load('uri'), filePathUri, async (err: number) => {
284df226684Sopenharmony_ci          if (err !== 0) {
285df226684Sopenharmony_ci            fs.unlinkSync(filePath);
286df226684Sopenharmony_ci            HiLog.error(TAG, `recoverDLPFile: ${this.srcFileName}, failed: ${err}`);
287df226684Sopenharmony_ci            let errorInfo =
288df226684Sopenharmony_ci              {'title': '', 'msg': $r('app.string.MESSAGE_RECOVER_DLP_ERROR') } as Record<string, string | Resource>;
289df226684Sopenharmony_ci            this.showErrorDialog(errorInfo.title, errorInfo.msg);
290df226684Sopenharmony_ci            await this.catchProcess();
291df226684Sopenharmony_ci            reject();
292df226684Sopenharmony_ci          }
293df226684Sopenharmony_ci          resolve();
294df226684Sopenharmony_ci        });
295df226684Sopenharmony_ci      })
296df226684Sopenharmony_ci    } catch {
297df226684Sopenharmony_ci      return;
298df226684Sopenharmony_ci    }
299df226684Sopenharmony_ci    this.changeToGenDlpFileHome(filePathUri, filePath);
300df226684Sopenharmony_ci  }
301df226684Sopenharmony_ci
302df226684Sopenharmony_ci  stopFuseLinkHome() {
303df226684Sopenharmony_ci    return new Promise<void>((resolve, reject) => {
304df226684Sopenharmony_ci      this.homeFeature.stopFuseLinkHome(GlobalContext.load('uri'), (err: number) => {
305df226684Sopenharmony_ci        if (err !== 0) {
306df226684Sopenharmony_ci          HiLog.error(TAG, `stopFuseLink failed: ${err}`);
307df226684Sopenharmony_ci          this.showErrorDialog($r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR'));
308df226684Sopenharmony_ci          this.processing = false;
309df226684Sopenharmony_ci          reject();
310df226684Sopenharmony_ci        }
311df226684Sopenharmony_ci        resolve();
312df226684Sopenharmony_ci      });
313df226684Sopenharmony_ci    })
314df226684Sopenharmony_ci  }
315df226684Sopenharmony_ci
316df226684Sopenharmony_ci  changeToGenDlpFileHome(filePathUri: string, filePath: string) {
317df226684Sopenharmony_ci    let _dlp = this.tempData();
318df226684Sopenharmony_ci    this.homeFeature.genDlpFileHome(filePathUri, GlobalContext.load('uri'), _dlp, async(err: number) => {
319df226684Sopenharmony_ci      if (err !== 0) {
320df226684Sopenharmony_ci        HiLog.error(TAG, `generateDLPFile failed: ${err}`);
321df226684Sopenharmony_ci        fs.unlinkSync(filePath);
322df226684Sopenharmony_ci        let errorInfo =
323df226684Sopenharmony_ci          {'title': '', 'msg': $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR') } as Record<string, string | Resource>;
324df226684Sopenharmony_ci        this.showErrorDialog(errorInfo.title, errorInfo.msg);
325df226684Sopenharmony_ci        await this.catchProcess();
326df226684Sopenharmony_ci      } else {
327df226684Sopenharmony_ci        if (GlobalContext.load('requestIsFromSandBox') as boolean) {
328df226684Sopenharmony_ci          this.homeFeature.replaceDLPLinkFileHome(GlobalContext.load('uri'), this.linkFileName, (err: number) => {
329df226684Sopenharmony_ci            if (err !== 0) {
330df226684Sopenharmony_ci              HiLog.error(TAG, `replaceDLPLinkFile failed: ${err}`);
331df226684Sopenharmony_ci            }
332df226684Sopenharmony_ci          });
333df226684Sopenharmony_ci        }
334df226684Sopenharmony_ci        fs.unlinkSync(filePath);
335df226684Sopenharmony_ci        await this.catchProcess();
336df226684Sopenharmony_ci        this.processing = false;
337df226684Sopenharmony_ci        GlobalContext.store('dlpFileName', this.srcFileName);
338df226684Sopenharmony_ci        GlobalContext.store('dlpProperty', _dlp);
339df226684Sopenharmony_ci        sendDlpManagerFileConfiguration();
340df226684Sopenharmony_ci        router.replaceUrl({
341df226684Sopenharmony_ci          url: 'pages/encryptionSuccess',
342df226684Sopenharmony_ci          params: {
343df226684Sopenharmony_ci            staffDataArrayReadOnly: this.staffDataArrayReadOnly,
344df226684Sopenharmony_ci            staffDataArrayEdit: this.staffDataArrayEdit,
345df226684Sopenharmony_ci            selectedPermissionTypeReadOnly: this.selectedPermissionTypeReadOnly,
346df226684Sopenharmony_ci            selectedPermissionTypeEdit: this.selectedPermissionTypeEdit,
347df226684Sopenharmony_ci          }
348df226684Sopenharmony_ci        })
349df226684Sopenharmony_ci      }
350df226684Sopenharmony_ci    });
351df226684Sopenharmony_ci  }
352df226684Sopenharmony_ci
353df226684Sopenharmony_ci  async beginEncrypt() {
354df226684Sopenharmony_ci    this.processing = true;
355df226684Sopenharmony_ci    HiLog.info(TAG, `begin encryption for: ${this.srcFileName}`);
356df226684Sopenharmony_ci    let uri: string = '';
357df226684Sopenharmony_ci    let displayName: string = this.srcFileName;
358df226684Sopenharmony_ci    await this.setUserStat();
359df226684Sopenharmony_ci    try {
360df226684Sopenharmony_ci      let srcFileUri: string = GlobalContext.load('uri');
361df226684Sopenharmony_ci      let srcFileMsg: FileMsg = FileUtils.getSuffixFileMsgByUri(srcFileUri);
362df226684Sopenharmony_ci      let srcFileSize: number = await getFileSizeByUri(srcFileUri);
363df226684Sopenharmony_ci      AppStorage.setOrCreate('hiFileSize', srcFileSize);
364df226684Sopenharmony_ci      AppStorage.setOrCreate('hiFileType', srcFileMsg.fileType);
365df226684Sopenharmony_ci      let documentSaveOptions = new picker.DocumentSaveOptions();
366df226684Sopenharmony_ci      displayName = displayName + '.dlp';
367df226684Sopenharmony_ci      documentSaveOptions.newFileNames = [decodeURIComponent(srcFileMsg.fileName)];
368df226684Sopenharmony_ci      documentSaveOptions.fileSuffixChoices = [srcFileMsg.fileType + '.dlp'];
369df226684Sopenharmony_ci      documentSaveOptions.defaultFilePathUri = srcFileUri.substring(0,
370df226684Sopenharmony_ci        srcFileUri.length - srcFileMsg.fileType.length - srcFileMsg.fileName.length);
371df226684Sopenharmony_ci      let documentPicker = new picker.DocumentViewPicker();
372df226684Sopenharmony_ci      documentPicker.save(documentSaveOptions).then(async (saveRes) => {
373df226684Sopenharmony_ci        if (saveRes === undefined || saveRes.length === 0) {
374df226684Sopenharmony_ci          HiLog.error(TAG, `fail to get uri`);
375df226684Sopenharmony_ci          this.processing = false;
376df226684Sopenharmony_ci          return;
377df226684Sopenharmony_ci        }
378df226684Sopenharmony_ci        HiLog.info(TAG, `get uri success`);
379df226684Sopenharmony_ci        uri = saveRes[0];
380df226684Sopenharmony_ci        let uriInfo: fileUri.FileUri = new fileUri.FileUri('');
381df226684Sopenharmony_ci        try {
382df226684Sopenharmony_ci          uriInfo = new fileUri.FileUri(uri);
383df226684Sopenharmony_ci        } catch (err) {
384df226684Sopenharmony_ci          HiLog.info(TAG, `fileUri fail: ${JSON.stringify(err)}`);
385df226684Sopenharmony_ci        }
386df226684Sopenharmony_ci        this.beginToGenDlpFileHome(srcFileUri, uri, uriInfo);
387df226684Sopenharmony_ci      }).catch((err: BusinessError) => {
388df226684Sopenharmony_ci        HiLog.error(TAG, `DocumentViewPicker save failed: ${JSON.stringify(err)}`);
389df226684Sopenharmony_ci        let errorInfo = GetAlertMessage.getAlertMessage(err, $r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR'));
390df226684Sopenharmony_ci        this.showErrorDialog(errorInfo.title, errorInfo.msg);
391df226684Sopenharmony_ci        this.processing = false;
392df226684Sopenharmony_ci        return;
393df226684Sopenharmony_ci      });
394df226684Sopenharmony_ci    } catch (err) {
395df226684Sopenharmony_ci      HiLog.error(TAG, `DocumentViewPicker failed: ${JSON.stringify(err)}`);
396df226684Sopenharmony_ci      this.processing = false;
397df226684Sopenharmony_ci      return;
398df226684Sopenharmony_ci    }
399df226684Sopenharmony_ci  }
400df226684Sopenharmony_ci
401df226684Sopenharmony_ci  beginToGenDlpFileHome(srcFileUri: string, uri: string, uriInfo: fileUri.FileUri) {
402df226684Sopenharmony_ci    let _dlp = this.tempData();
403df226684Sopenharmony_ci    this.homeFeature.genDlpFileHome(srcFileUri, uri, _dlp, async (err: number) => {
404df226684Sopenharmony_ci      if (err !== 0) {
405df226684Sopenharmony_ci        if (err === 100) {
406df226684Sopenharmony_ci          this.showErrorDialog($r('app.string.TITLE_APP_ERROR'), $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR'));
407df226684Sopenharmony_ci          this.processing = false;
408df226684Sopenharmony_ci          return;
409df226684Sopenharmony_ci        }
410df226684Sopenharmony_ci        try {
411df226684Sopenharmony_ci          await fs.unlink(uriInfo.path);
412df226684Sopenharmony_ci        } catch (err) {
413df226684Sopenharmony_ci          HiLog.info(TAG, `unlink fail: ${JSON.stringify(err)}`);
414df226684Sopenharmony_ci        }
415df226684Sopenharmony_ci        await this.sendDlpFileCreateFault(102, (err.toString())); // 102: DLP_FILE_CREATE_ERROR
416df226684Sopenharmony_ci        let errorInfo =
417df226684Sopenharmony_ci          {'title': '', 'msg': $r('app.string.MESSAGE_SERVICE_INSIDE_ERROR') } as Record<string, string | Resource>;
418df226684Sopenharmony_ci        this.showErrorDialog(errorInfo.title, errorInfo.msg);
419df226684Sopenharmony_ci        this.processing = false;
420df226684Sopenharmony_ci        return;
421df226684Sopenharmony_ci      } else {
422df226684Sopenharmony_ci        await this.sendDlpFileCreateEvent(201); // 201: DLP_FILE_CREATE_SUCCESS
423df226684Sopenharmony_ci        let dstFileSize: number = await getFileSizeByUri(uri);
424df226684Sopenharmony_ci        AppStorage.setOrCreate('hiPolicySizeEnc', dstFileSize);
425df226684Sopenharmony_ci        AppStorage.setOrCreate('hiCode', 201);
426df226684Sopenharmony_ci        sendDlpFileCreateProperties(dlpPermission.AccountType.DOMAIN_ACCOUNT); // 201: DLP_FILE_CREATE_SUCCESS
427df226684Sopenharmony_ci        GlobalContext.store('dlpFileName', uriInfo.name);
428df226684Sopenharmony_ci        GlobalContext.store('dlpProperty', _dlp);
429df226684Sopenharmony_ci        GlobalContext.store('uri', uri);
430df226684Sopenharmony_ci        this.processing = false;
431df226684Sopenharmony_ci        sendDlpManagerFileConfiguration();
432df226684Sopenharmony_ci        router.replaceUrl({
433df226684Sopenharmony_ci          url: 'pages/encryptionSuccess',
434df226684Sopenharmony_ci          params: {
435df226684Sopenharmony_ci            staffDataArrayReadOnly: this.staffDataArrayReadOnly,
436df226684Sopenharmony_ci            staffDataArrayEdit: this.staffDataArrayEdit,
437df226684Sopenharmony_ci            selectedPermissionTypeReadOnly: this.selectedPermissionTypeReadOnly,
438df226684Sopenharmony_ci            selectedPermissionTypeEdit: this.selectedPermissionTypeEdit,
439df226684Sopenharmony_ci          }
440df226684Sopenharmony_ci        })
441df226684Sopenharmony_ci      }
442df226684Sopenharmony_ci    });
443df226684Sopenharmony_ci  }
444df226684Sopenharmony_ci
445df226684Sopenharmony_ci  tempData() {
446df226684Sopenharmony_ci    let accountInfo: osAccount.OsAccountInfo = GlobalContext.load('accountInfo');
447df226684Sopenharmony_ci    let property: dlpPermission.DLPProperty = GlobalContext.load('dlpProperty') !==
448df226684Sopenharmony_ci      undefined ? GlobalContext.load('dlpProperty') : defaultDlpProperty;
449df226684Sopenharmony_ci    this.staffDataArrayReadOnly = removeDuplicate(this.staffDataArrayReadOnly, 'authAccount');
450df226684Sopenharmony_ci    this.staffDataArrayEdit = removeDuplicate(this.staffDataArrayEdit, 'authAccount');
451df226684Sopenharmony_ci    this.staffDataArrayReadOnly = this.staffDataArrayReadOnly.filter((item) => 
452df226684Sopenharmony_ci      !this.staffDataArrayEdit.some((ele) => ele.authAccount === item.authAccount)
453df226684Sopenharmony_ci    );
454df226684Sopenharmony_ci    property.ownerAccount = accountInfo.domainInfo.accountName;
455df226684Sopenharmony_ci    property.ownerAccountID = accountInfo.domainInfo.accountId ?? '';
456df226684Sopenharmony_ci    property.authUserList = [];
457df226684Sopenharmony_ci    property.everyoneAccessList = [];
458df226684Sopenharmony_ci    property.offlineAccess = this.selectedIndex === 0 ? true : false;
459df226684Sopenharmony_ci    property.expireTime = this.selectedIndex === 0 ? 0 : this.reconfigurationTime(new Date(this.validity)).getTime();
460df226684Sopenharmony_ci    if (this.selectedPermissionTypeEdit.data === 'all') {
461df226684Sopenharmony_ci      property.everyoneAccessList = [dlpPermission.DLPFileAccess.CONTENT_EDIT];
462df226684Sopenharmony_ci      this.staffDataArrayReadOnly = [];
463df226684Sopenharmony_ci      this.staffDataArrayEdit = [];
464df226684Sopenharmony_ci    } else {
465df226684Sopenharmony_ci      this.propertyAddData(property);
466df226684Sopenharmony_ci    }
467df226684Sopenharmony_ci    let authUserListNew: IAuthUser[] = [];
468df226684Sopenharmony_ci    property.authUserList.forEach(item => {
469df226684Sopenharmony_ci      authUserListNew.push(
470df226684Sopenharmony_ci        new IAuthUser(
471df226684Sopenharmony_ci          item.authAccount,
472df226684Sopenharmony_ci          item.authAccountType,
473df226684Sopenharmony_ci          item.dlpFileAccess,
474df226684Sopenharmony_ci          item.permExpiryTime
475df226684Sopenharmony_ci        )
476df226684Sopenharmony_ci      )
477df226684Sopenharmony_ci    })
478df226684Sopenharmony_ci    let _dlp = new IDLDLPProperty(
479df226684Sopenharmony_ci      property.ownerAccount,
480df226684Sopenharmony_ci      property.ownerAccountID,
481df226684Sopenharmony_ci      property.ownerAccountType,
482df226684Sopenharmony_ci      authUserListNew,
483df226684Sopenharmony_ci      property.contactAccount,
484df226684Sopenharmony_ci      property.offlineAccess,
485df226684Sopenharmony_ci      property.everyoneAccessList,
486df226684Sopenharmony_ci      property.expireTime
487df226684Sopenharmony_ci    );
488df226684Sopenharmony_ci    return _dlp;
489df226684Sopenharmony_ci  }
490df226684Sopenharmony_ci
491df226684Sopenharmony_ci  propertyAddData(property: dlpPermission.DLPProperty) {
492df226684Sopenharmony_ci    let isReadyOnlyAll = this.selectedPermissionTypeReadOnly.data === 'all';
493df226684Sopenharmony_ci    if (isReadyOnlyAll) {
494df226684Sopenharmony_ci      property.everyoneAccessList = [dlpPermission.DLPFileAccess.READ_ONLY];
495df226684Sopenharmony_ci    }
496df226684Sopenharmony_ci    if (this.selectedPermissionTypeReadOnly.data === 'all') {
497df226684Sopenharmony_ci      this.staffDataArrayReadOnly = []
498df226684Sopenharmony_ci    }
499df226684Sopenharmony_ci    if (['all', 'self'].includes(this.selectedPermissionTypeEdit.data)) {
500df226684Sopenharmony_ci      this.staffDataArrayEdit = [];
501df226684Sopenharmony_ci    }
502df226684Sopenharmony_ci    this.staffDataArrayReadOnly && this.staffDataArrayReadOnly.forEach(item => {
503df226684Sopenharmony_ci      property.authUserList?.push({
504df226684Sopenharmony_ci        authAccount: item.authAccount,
505df226684Sopenharmony_ci        dlpFileAccess: dlpPermission.DLPFileAccess.READ_ONLY,
506df226684Sopenharmony_ci        permExpiryTime: Date.UTC(9999, 1, 1),
507df226684Sopenharmony_ci        authAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT,
508df226684Sopenharmony_ci      })
509df226684Sopenharmony_ci    })
510df226684Sopenharmony_ci    this.staffDataArrayEdit && this.staffDataArrayEdit.forEach(item => {
511df226684Sopenharmony_ci      property.authUserList?.push({
512df226684Sopenharmony_ci        authAccount: item.authAccount,
513df226684Sopenharmony_ci        dlpFileAccess: dlpPermission.DLPFileAccess.CONTENT_EDIT,
514df226684Sopenharmony_ci        permExpiryTime: Date.UTC(9999, 1, 1),
515df226684Sopenharmony_ci        authAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT,
516df226684Sopenharmony_ci      })
517df226684Sopenharmony_ci    })
518df226684Sopenharmony_ci  }
519df226684Sopenharmony_ci
520df226684Sopenharmony_ci  async prepareDlpProperty() {
521df226684Sopenharmony_ci    let accountInfo: osAccount.OsAccountInfo = GlobalContext.load('accountInfo') as osAccount.OsAccountInfo;
522df226684Sopenharmony_ci    this.dlpProperty.ownerAccount = accountInfo.domainInfo.accountName;
523df226684Sopenharmony_ci    this.dlpProperty.contactAccount = accountInfo.domainInfo.accountName;
524df226684Sopenharmony_ci    this.dlpProperty.ownerAccountID = accountInfo.domainInfo.accountId ?? '';
525df226684Sopenharmony_ci    let ownerAccount: dlpPermission.AuthUser = {
526df226684Sopenharmony_ci      authAccount: this.dlpProperty.ownerAccount,
527df226684Sopenharmony_ci      dlpFileAccess: dlpPermission.DLPFileAccess.FULL_CONTROL,
528df226684Sopenharmony_ci      permExpiryTime: Date.UTC(9999, 1, 1),
529df226684Sopenharmony_ci      authAccountType: dlpPermission.AccountType.DOMAIN_ACCOUNT,
530df226684Sopenharmony_ci    }
531df226684Sopenharmony_ci    this.dlpProperty.authUserList?.push(ownerAccount)
532df226684Sopenharmony_ci    return
533df226684Sopenharmony_ci  }
534df226684Sopenharmony_ci
535df226684Sopenharmony_ci  async showData(defaultDlpProperty: dlpPermission.DLPProperty) {
536df226684Sopenharmony_ci    let routerParams: Record<string, AuthAccount[]> = router.getParams() as Record<string, AuthAccount[]>;
537df226684Sopenharmony_ci    this.permissionDict.forEach(async (item, index) => {
538df226684Sopenharmony_ci      this.permissionDict[index].value =
539df226684Sopenharmony_ci        $r(await getContext(this).resourceManager.getStringValue(item.value.id))
540df226684Sopenharmony_ci    })
541df226684Sopenharmony_ci    let readOnlyData: dlpPermission.AuthUser[] =
542df226684Sopenharmony_ci      defaultDlpProperty.authUserList?.filter((item: dlpPermission.AuthUser) => {
543df226684Sopenharmony_ci      return item.dlpFileAccess === 1;
544df226684Sopenharmony_ci    }) ?? []
545df226684Sopenharmony_ci    let editData: dlpPermission.AuthUser[] = defaultDlpProperty.authUserList?.filter((item: dlpPermission.AuthUser) => {
546df226684Sopenharmony_ci      return item.dlpFileAccess === 2;
547df226684Sopenharmony_ci    }) ?? []
548df226684Sopenharmony_ci    const filterEditFilter = () => {
549df226684Sopenharmony_ci      if (editData.length === 0) {
550df226684Sopenharmony_ci        this.selectedPermissionTypeEdit = this.permissionDict[2];
551df226684Sopenharmony_ci      } else {
552df226684Sopenharmony_ci        this.staffDataArrayEdit = routerParams.staffDataArrayEdit as AuthAccount[];
553df226684Sopenharmony_ci      }
554df226684Sopenharmony_ci    }
555df226684Sopenharmony_ci    if ((defaultDlpProperty.everyoneAccessList !== undefined) && (defaultDlpProperty.everyoneAccessList.length > 0)) {
556df226684Sopenharmony_ci      let perm = Math.max(...defaultDlpProperty.everyoneAccessList);
557df226684Sopenharmony_ci      if (perm === dlpPermission.DLPFileAccess.CONTENT_EDIT) {
558df226684Sopenharmony_ci        this.selectedPermissionTypeEdit = this.permissionDict[1];
559df226684Sopenharmony_ci        this.staffDataArrayReadOnly = readOnlyData;
560df226684Sopenharmony_ci      } else if (perm === dlpPermission.DLPFileAccess.READ_ONLY) {
561df226684Sopenharmony_ci        this.selectedPermissionTypeReadOnly = this.permissionDict[1];
562df226684Sopenharmony_ci        this.staffDataArrayReadOnly = [];
563df226684Sopenharmony_ci        filterEditFilter()
564df226684Sopenharmony_ci      }
565df226684Sopenharmony_ci    } else {
566df226684Sopenharmony_ci      this.staffDataArrayReadOnly = routerParams.staffDataArrayReadOnly as AuthAccount[];
567df226684Sopenharmony_ci      filterEditFilter()
568df226684Sopenharmony_ci    }
569df226684Sopenharmony_ci  }
570df226684Sopenharmony_ci
571df226684Sopenharmony_ci  async checkAccount() {
572df226684Sopenharmony_ci    try {
573df226684Sopenharmony_ci      GlobalContext.store('accountInfo', await getOsAccountInfo());
574df226684Sopenharmony_ci    } catch (err) {
575df226684Sopenharmony_ci      HiLog.error(TAG, `getOsAccountInfo failed: ${JSON.stringify(err)}`);
576df226684Sopenharmony_ci      if (this.session !== undefined) {
577df226684Sopenharmony_ci        let errorInfo = GetAlertMessage.getAlertMessage({ code: Constants.ERR_JS_GET_ACCOUNT_ERROR } as BusinessError);
578df226684Sopenharmony_ci        this.showErrorDialog(errorInfo.title, errorInfo.msg);
579df226684Sopenharmony_ci      }
580df226684Sopenharmony_ci      return;
581df226684Sopenharmony_ci    }
582df226684Sopenharmony_ci    let codeMessage = checkDomainAccountInfo(GlobalContext.load('accountInfo') as osAccount.OsAccountInfo);
583df226684Sopenharmony_ci    if (codeMessage) {
584df226684Sopenharmony_ci      if (this.session !== undefined) {
585df226684Sopenharmony_ci        let errorInfo = GetAlertMessage.getAlertMessage(
586df226684Sopenharmony_ci          { code: codeMessage } as BusinessError);
587df226684Sopenharmony_ci        this.showErrorDialog(errorInfo.title, errorInfo.msg);
588df226684Sopenharmony_ci      }
589df226684Sopenharmony_ci      return;
590df226684Sopenharmony_ci    }
591df226684Sopenharmony_ci  }
592df226684Sopenharmony_ci
593df226684Sopenharmony_ci  reconfigurationTime(date: Date) {
594df226684Sopenharmony_ci    let year = date.getFullYear();
595df226684Sopenharmony_ci    let month = date.getMonth();
596df226684Sopenharmony_ci    let day = date.getDate();
597df226684Sopenharmony_ci    return new Date(year, month, day, 23, 59, 59);
598df226684Sopenharmony_ci  }
599df226684Sopenharmony_ci
600df226684Sopenharmony_ci  async aboutToAppear() {
601df226684Sopenharmony_ci    this.prepareData = true;
602df226684Sopenharmony_ci    await this.checkAccount();
603df226684Sopenharmony_ci    AppStorage.setOrCreate('hiAccountVerifySucc', 0);
604df226684Sopenharmony_ci    AppStorage.setOrCreate('hiAccountVerifyFail', 0);
605df226684Sopenharmony_ci    if (GlobalContext.load('requestIsFromSandBox') as boolean) {
606df226684Sopenharmony_ci      HiLog.info(TAG, `encryption request from sandbox`);
607df226684Sopenharmony_ci      this.linkFileName = GlobalContext.load('linkFileName') as string;
608df226684Sopenharmony_ci      this.srcFileName = GlobalContext.load('dlpFileName') as string;
609df226684Sopenharmony_ci      setTimeout(() => {
610df226684Sopenharmony_ci        this.showData(GlobalContext.load('dlpProperty'));
611df226684Sopenharmony_ci      }, Constants.ENCRYPTION_SET_TIMEOUT_TIME)
612df226684Sopenharmony_ci      this.isDlpFile = true;
613df226684Sopenharmony_ci      setTimeout(() => {
614df226684Sopenharmony_ci        this.prepareData = false;
615df226684Sopenharmony_ci      }, Constants.ENCRYPTION_SET_TIMEOUT_TIME)
616df226684Sopenharmony_ci      return
617df226684Sopenharmony_ci    } else {
618df226684Sopenharmony_ci      let routerParams = router.getParams();
619df226684Sopenharmony_ci      if (routerParams !== undefined) { // is a dlp file
620df226684Sopenharmony_ci        HiLog.info(TAG, `encryption request from router`);
621df226684Sopenharmony_ci        this.srcFileName = GlobalContext.load('dlpFileName') as string;
622df226684Sopenharmony_ci      } else { // not a dlp file
623df226684Sopenharmony_ci        HiLog.info(TAG, `encryption request from ability`);
624df226684Sopenharmony_ci        this.srcFileName = GlobalContext.load('originFileName') as string;
625df226684Sopenharmony_ci      }
626df226684Sopenharmony_ci    }
627df226684Sopenharmony_ci
628df226684Sopenharmony_ci    let isDlpSuffix: boolean = this.srcFileName.endsWith('.dlp');
629df226684Sopenharmony_ci    if (!isDlpSuffix) {
630df226684Sopenharmony_ci      await this.prepareDlpProperty();
631df226684Sopenharmony_ci      this.isDlpFile = false;
632df226684Sopenharmony_ci    } else {
633df226684Sopenharmony_ci      setTimeout(() => {
634df226684Sopenharmony_ci        this.showData(GlobalContext.load('dlpProperty'));
635df226684Sopenharmony_ci      }, Constants.ENCRYPTION_SET_TIMEOUT_TIME)
636df226684Sopenharmony_ci      this.isDlpFile = true;
637df226684Sopenharmony_ci    }
638df226684Sopenharmony_ci    setTimeout(() => {
639df226684Sopenharmony_ci      this.prepareData = false;
640df226684Sopenharmony_ci    }, Constants.ENCRYPTION_SET_TIMEOUT_TIME)
641df226684Sopenharmony_ci
642df226684Sopenharmony_ci    this.directionStatus = (getContext(this) as common.UIAbilityContext).config.direction ?? -1;
643df226684Sopenharmony_ci    directionStatus((counter) => {
644df226684Sopenharmony_ci      this.directionStatus = counter;
645df226684Sopenharmony_ci    })
646df226684Sopenharmony_ci  }
647df226684Sopenharmony_ci
648df226684Sopenharmony_ci  build() {
649df226684Sopenharmony_ci    Flex({ alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
650df226684Sopenharmony_ci      EncryptingPanel({ processing: $processing })
651df226684Sopenharmony_ci      if (!this.processing) {
652df226684Sopenharmony_ci        Column() {
653df226684Sopenharmony_ci          Row() {
654df226684Sopenharmony_ci            Text($r('app.string.header_title'))
655df226684Sopenharmony_ci              .fontWeight(FontWeight.Bold)
656df226684Sopenharmony_ci              .fontFamily($r('app.string.typeface'))
657df226684Sopenharmony_ci              .fontColor($r('sys.color.ohos_id_color_text_primary'))
658df226684Sopenharmony_ci              .fontSize($r('sys.float.ohos_id_text_size_dialog_tittle'))
659df226684Sopenharmony_ci              .width(Constants.HEADER_TEXT_WIDTH)
660df226684Sopenharmony_ci              .align(Alignment.Start)
661df226684Sopenharmony_ci          }
662df226684Sopenharmony_ci          .width(Constants.HEADER_COLUMN_WIDTH)
663df226684Sopenharmony_ci          .height(Constants.HEADER_COLUMN_HEIGHT)
664df226684Sopenharmony_ci          .padding({
665df226684Sopenharmony_ci            left: Constants.HEADER_COLUMN_PADDING_LEFT,
666df226684Sopenharmony_ci            right: Constants.HEADER_COLUMN_PADDING_RIGHT
667df226684Sopenharmony_ci          })
668df226684Sopenharmony_ci          .margin({ bottom: Constants.HEADER_COLUMN_MARGIN_BOTTOM });
669df226684Sopenharmony_ci
670df226684Sopenharmony_ci          Scroll() {
671df226684Sopenharmony_ci            Column() {
672df226684Sopenharmony_ci              Row() {
673df226684Sopenharmony_ci                Text($r('app.string.header_title_list'))
674df226684Sopenharmony_ci                  .fontWeight(FontWeight.Regular)
675df226684Sopenharmony_ci                  .fontColor($r('sys.color.ohos_id_color_text_secondary'))
676df226684Sopenharmony_ci                  .fontSize($r('sys.float.ohos_id_text_size_body1'))
677df226684Sopenharmony_ci                  .width(Constants.HEADER_TEXT_WIDTH)
678df226684Sopenharmony_ci                  .align(Alignment.Start)
679df226684Sopenharmony_ci              }
680df226684Sopenharmony_ci              .width(Constants.HEADER_COLUMN_WIDTH)
681df226684Sopenharmony_ci              .margin({ bottom: Constants.ENCRYPTION_CHANGE_TIPS_MARGIN_BOTTOM })
682df226684Sopenharmony_ci
683df226684Sopenharmony_ci              Row() {
684df226684Sopenharmony_ci                Text($r('app.string.header_title_readonly'))
685df226684Sopenharmony_ci                  .fontWeight(FontWeight.Medium)
686df226684Sopenharmony_ci                  .fontColor($r('sys.color.ohos_id_color_text_primary'))
687df226684Sopenharmony_ci                  .fontSize($r('sys.float.ohos_id_text_size_body1'))
688df226684Sopenharmony_ci                SymbolGlyph($r('sys.symbol.info_circle'))
689df226684Sopenharmony_ci                  .fontSize(`${Constants.FOOTER_ROW_PAD_RIGHT}vp`)
690df226684Sopenharmony_ci                  .fontColor([$r('sys.color.icon_secondary')])
691df226684Sopenharmony_ci                  .margin({
692df226684Sopenharmony_ci                    right: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_RIGHT : Constants.AP_TEXT_PAD_LEFT,
693df226684Sopenharmony_ci                    left: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_LEFT : Constants.AP_TEXT_PAD_RIGHT,
694df226684Sopenharmony_ci                  })
695df226684Sopenharmony_ci                  .onClick(() => {
696df226684Sopenharmony_ci                    this.handlePopupReadOnly = !this.handlePopupReadOnly
697df226684Sopenharmony_ci                  })
698df226684Sopenharmony_ci                  .draggable(false)
699df226684Sopenharmony_ci                  .bindPopup(this.handlePopupReadOnly, {
700df226684Sopenharmony_ci                    builder: this.popupBuilderReadOnly,
701df226684Sopenharmony_ci                    placement: SystemUtils.isRTL() ? Placement.BottomRight : Placement.BottomLeft,
702df226684Sopenharmony_ci                    offset: { x: SystemUtils.isRTL() ? Constants.POPUP_OFFSET_RTL_X : Constants.POPUP_OFFSET_X },
703df226684Sopenharmony_ci                    enableArrow: true,
704df226684Sopenharmony_ci                    showInSubWindow: false,
705df226684Sopenharmony_ci                    onStateChange: (e) => {
706df226684Sopenharmony_ci                      if (!e.isVisible) {
707df226684Sopenharmony_ci                        this.handlePopupReadOnly = false
708df226684Sopenharmony_ci                      }
709df226684Sopenharmony_ci                    }
710df226684Sopenharmony_ci                  })
711df226684Sopenharmony_ci                Blank()
712df226684Sopenharmony_ci                permissionTypeSelect({
713df226684Sopenharmony_ci                  selectedItem: $selectedPermissionTypeReadOnly,
714df226684Sopenharmony_ci                  staffArray: $staffDataArrayReadOnly,
715df226684Sopenharmony_ci                  isDisable: this.selectedPermissionTypeEdit?.data === 'all',
716df226684Sopenharmony_ci                  isReadType: true
717df226684Sopenharmony_ci                })
718df226684Sopenharmony_ci              }
719df226684Sopenharmony_ci              .width(Constants.FOOTER_ROW_WIDTH)
720df226684Sopenharmony_ci              .margin({
721df226684Sopenharmony_ci                top: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_TOP,
722df226684Sopenharmony_ci                bottom: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_BOTTOM
723df226684Sopenharmony_ci              })
724df226684Sopenharmony_ci
725df226684Sopenharmony_ci              Row() {
726df226684Sopenharmony_ci                if (!['all', 'self'].includes(this.selectedPermissionTypeReadOnly?.data ?? '')) {
727df226684Sopenharmony_ci                  AddStaff({
728df226684Sopenharmony_ci                    isAccountCheckSuccess: $isAccountCheckSuccess,
729df226684Sopenharmony_ci                    staffArray: $staffDataArrayReadOnly,
730df226684Sopenharmony_ci                    isDisable: this.selectedPermissionTypeEdit?.data === 'all',
731df226684Sopenharmony_ci                  })
732df226684Sopenharmony_ci                }
733df226684Sopenharmony_ci              }
734df226684Sopenharmony_ci              .margin({ bottom: Constants.ENCRYPTION_STAFF_ITEM_MARGIN_BOTTOM })
735df226684Sopenharmony_ci
736df226684Sopenharmony_ci              Row() {
737df226684Sopenharmony_ci                Text($r('app.string.header_title_edit'))
738df226684Sopenharmony_ci                  .fontWeight(FontWeight.Medium)
739df226684Sopenharmony_ci                  .fontColor($r('sys.color.ohos_id_color_text_primary'))
740df226684Sopenharmony_ci                  .fontSize($r('sys.float.ohos_id_text_size_body1'))
741df226684Sopenharmony_ci                SymbolGlyph($r('sys.symbol.info_circle'))
742df226684Sopenharmony_ci                  .fontSize(`${Constants.FOOTER_ROW_PAD_RIGHT}vp`)
743df226684Sopenharmony_ci                  .fontColor([$r('sys.color.icon_secondary')])
744df226684Sopenharmony_ci                  .margin({
745df226684Sopenharmony_ci                    right: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_RIGHT : Constants.AP_TEXT_PAD_LEFT,
746df226684Sopenharmony_ci                    left: SystemUtils.isRTL() ? Constants.AP_TEXT_PAD_LEFT : Constants.AP_TEXT_PAD_RIGHT,
747df226684Sopenharmony_ci                  })
748df226684Sopenharmony_ci                  .onClick(() => {
749df226684Sopenharmony_ci                    this.handlePopupEdit = !this.handlePopupEdit
750df226684Sopenharmony_ci                  })
751df226684Sopenharmony_ci                  .draggable(false)
752df226684Sopenharmony_ci                  .bindPopup(this.handlePopupEdit, {
753df226684Sopenharmony_ci                    builder: this.popupBuilderEdit,
754df226684Sopenharmony_ci                    placement: SystemUtils.isRTL() ? Placement.BottomRight : Placement.BottomLeft,
755df226684Sopenharmony_ci                    offset: { x: SystemUtils.isRTL() ? Constants.POPUP_OFFSET_RTL_X : Constants.POPUP_OFFSET_X },
756df226684Sopenharmony_ci                    enableArrow: true,
757df226684Sopenharmony_ci                    showInSubWindow: false,
758df226684Sopenharmony_ci                    onStateChange: (e) => {
759df226684Sopenharmony_ci                      if (!e.isVisible) {
760df226684Sopenharmony_ci                        this.handlePopupEdit = false
761df226684Sopenharmony_ci                      }
762df226684Sopenharmony_ci                    }
763df226684Sopenharmony_ci                  })
764df226684Sopenharmony_ci                Blank()
765df226684Sopenharmony_ci                permissionTypeSelect({
766df226684Sopenharmony_ci                  selectedItem: $selectedPermissionTypeEdit,
767df226684Sopenharmony_ci                  staffArray: $staffDataArrayEdit,
768df226684Sopenharmony_ci                  isDisable: false,
769df226684Sopenharmony_ci                  isReadType: false
770df226684Sopenharmony_ci                })
771df226684Sopenharmony_ci              }
772df226684Sopenharmony_ci              .width(Constants.FOOTER_ROW_WIDTH)
773df226684Sopenharmony_ci              .margin({
774df226684Sopenharmony_ci                top: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_TOP,
775df226684Sopenharmony_ci                bottom: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_BOTTOM
776df226684Sopenharmony_ci              })
777df226684Sopenharmony_ci
778df226684Sopenharmony_ci              Row() {
779df226684Sopenharmony_ci                if (!['all', 'self'].includes(this.selectedPermissionTypeEdit?.data ?? '')) {
780df226684Sopenharmony_ci                  AddStaff({
781df226684Sopenharmony_ci                    isAccountCheckSuccess: $isAccountCheckSuccess,
782df226684Sopenharmony_ci                    staffArray: $staffDataArrayEdit,
783df226684Sopenharmony_ci                    isDisable: false
784df226684Sopenharmony_ci                  })
785df226684Sopenharmony_ci                }
786df226684Sopenharmony_ci              }
787df226684Sopenharmony_ci              .margin({ bottom: Constants.ENCRYPTION_STAFF_ITEM_MARGIN_BOTTOM })
788df226684Sopenharmony_ci
789df226684Sopenharmony_ci              Row() {
790df226684Sopenharmony_ci                Text($r('app.string.Document_valid_until'))
791df226684Sopenharmony_ci                  .fontWeight(FontWeight.Medium)
792df226684Sopenharmony_ci                  .fontColor($r('sys.color.ohos_id_color_text_primary'))
793df226684Sopenharmony_ci                  .fontSize($r('sys.float.ohos_id_text_size_body1'))
794df226684Sopenharmony_ci                Blank()
795df226684Sopenharmony_ci                if (this.selectedIndex === 1) {
796df226684Sopenharmony_ci                  CalendarPicker({ selected: new Date(this.validity) })
797df226684Sopenharmony_ci                    .onChange((value) => {
798df226684Sopenharmony_ci                      this.validity = value;
799df226684Sopenharmony_ci                    })
800df226684Sopenharmony_ci                  Row() {
801df226684Sopenharmony_ci                    SymbolGlyph($r('sys.symbol.arrowtriangle_down_fill'))
802df226684Sopenharmony_ci                      .fontSize(`${Constants.VALIDITY_IMAGE_WIDTH}vp`)
803df226684Sopenharmony_ci                      .fontColor([$r('sys.color.ohos_id_color_tertiary')])
804df226684Sopenharmony_ci                  }
805df226684Sopenharmony_ci                  .height(Constants.VALIDITY_IMAGE_HEIGHT)
806df226684Sopenharmony_ci                  .padding({
807df226684Sopenharmony_ci                    right: Constants.VALIDITY_IMAGE_PADDING_RIGHT,
808df226684Sopenharmony_ci                    left: Constants.VALIDITY_IMAGE_PADDING_LEFT
809df226684Sopenharmony_ci                  })
810df226684Sopenharmony_ci                  .bindMenu(this.MenuBuilder, { placement: Placement.BottomRight, showInSubWindow: false })
811df226684Sopenharmony_ci                } else {
812df226684Sopenharmony_ci                  validDateTypeMenu({
813df226684Sopenharmony_ci                    selectedIndex: $selectedIndex,
814df226684Sopenharmony_ci                    isDisable: false,
815df226684Sopenharmony_ci                  })
816df226684Sopenharmony_ci                }
817df226684Sopenharmony_ci              }
818df226684Sopenharmony_ci              .width(Constants.FOOTER_ROW_WIDTH)
819df226684Sopenharmony_ci              .margin({
820df226684Sopenharmony_ci                top: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_TOP,
821df226684Sopenharmony_ci                bottom: Constants.ENCRYPTION_SUCCESS_ADD_STAFF_MARGIN_BOTTOM
822df226684Sopenharmony_ci              })
823df226684Sopenharmony_ci            }
824df226684Sopenharmony_ci          }.constraintSize({
825df226684Sopenharmony_ci            maxHeight: this.directionStatus ===
826df226684Sopenharmony_ci              0 ? Constants.CHANGE_MAX_HEIGHT : Constants.ENCRYPTION_SUCCESS_MAX_HEIGHT
827df226684Sopenharmony_ci          })
828df226684Sopenharmony_ci          .padding({
829df226684Sopenharmony_ci            left: Constants.HEADER_COLUMN_PADDING_LEFT,
830df226684Sopenharmony_ci            right: Constants.HEADER_COLUMN_PADDING_RIGHT
831df226684Sopenharmony_ci          })
832df226684Sopenharmony_ci
833df226684Sopenharmony_ci          Flex({ direction: FlexDirection.Row }) {
834df226684Sopenharmony_ci            Button($r('app.string.ban'), { type: ButtonType.Capsule, stateEffect: true })
835df226684Sopenharmony_ci              .backgroundColor($r('sys.color.ohos_id_color_button_normal'))
836df226684Sopenharmony_ci              .width(Constants.HEADER_TEXT_WIDTH)
837df226684Sopenharmony_ci              .focusable(true)
838df226684Sopenharmony_ci              .fontColor($r('sys.color.ohos_id_color_text_primary_activated'))
839df226684Sopenharmony_ci              .controlSize(ControlSize.NORMAL)
840df226684Sopenharmony_ci              .onClick(async (event) => {
841df226684Sopenharmony_ci                if (this.isDlpFile && !(GlobalContext.load('requestIsFromSandBox') as boolean)) {
842df226684Sopenharmony_ci                  this.homeFeature.closeDLPFileHome(GlobalContext.load('uri'), (err: number) => {
843df226684Sopenharmony_ci                    if (err !== 0) {
844df226684Sopenharmony_ci                      HiLog.error(TAG, `closeDLPFile failed: ${err}`);
845df226684Sopenharmony_ci                    }
846df226684Sopenharmony_ci                  });
847df226684Sopenharmony_ci                }
848df226684Sopenharmony_ci                if (this.session !== undefined) {
849df226684Sopenharmony_ci                  this.session.terminateSelfWithResult({
850df226684Sopenharmony_ci                    'resultCode': 0,
851df226684Sopenharmony_ci                    'want': {
852df226684Sopenharmony_ci                      'bundleName': Constants.DLP_MANAGER_BUNDLE_NAME,
853df226684Sopenharmony_ci                    },
854df226684Sopenharmony_ci                  });
855df226684Sopenharmony_ci                } else {
856df226684Sopenharmony_ci                  if (GlobalContext.load('fileOpenHistoryFromMain')) {
857df226684Sopenharmony_ci                    (GlobalContext.load('fileOpenHistoryFromMain') as Map<string, Object>).delete(GlobalContext.load('uri') as string)
858df226684Sopenharmony_ci                  }
859df226684Sopenharmony_ci                  abilityResult.resultCode = 0;
860df226684Sopenharmony_ci                  (getContext(this) as common.UIAbilityContext).terminateSelfWithResult(abilityResult);
861df226684Sopenharmony_ci                }
862df226684Sopenharmony_ci              })
863df226684Sopenharmony_ci              .margin({
864df226684Sopenharmony_ci                right: SystemUtils.isRTL() ?
865df226684Sopenharmony_ci                  Constants.ADD_STAFF_ITEM_MARGIN_LEFT : Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN,
866df226684Sopenharmony_ci                left: SystemUtils.isRTL() ?
867df226684Sopenharmony_ci                  Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN : Constants.ADD_STAFF_ITEM_MARGIN_LEFT,
868df226684Sopenharmony_ci              })
869df226684Sopenharmony_ci            Button($r('app.string.sure'), { type: ButtonType.Capsule, stateEffect: true })
870df226684Sopenharmony_ci              .backgroundColor($r('sys.color.ohos_id_color_button_normal'))
871df226684Sopenharmony_ci              .width(Constants.HEADER_TEXT_WIDTH)
872df226684Sopenharmony_ci              .focusable(true)
873df226684Sopenharmony_ci              .fontColor($r('sys.color.ohos_id_color_text_primary_activated'))
874df226684Sopenharmony_ci              .enabled(
875df226684Sopenharmony_ci                this.isAccountCheckSuccess &&
876df226684Sopenharmony_ci                (this.staffDataArrayReadOnly.length > 0 ||
877df226684Sopenharmony_ci                this.staffDataArrayEdit.length > 0 ||
878df226684Sopenharmony_ci                ['all', 'self'].includes(this.selectedPermissionTypeReadOnly.data ?? '') ||
879df226684Sopenharmony_ci                ['all', 'self'].includes(this.selectedPermissionTypeEdit.data ?? ''))
880df226684Sopenharmony_ci              )
881df226684Sopenharmony_ci              .controlSize(ControlSize.NORMAL)
882df226684Sopenharmony_ci              .onClick(async (event) => {
883df226684Sopenharmony_ci                AppStorage.setOrCreate('hiValidDate', false);
884df226684Sopenharmony_ci                if (this.selectedIndex === 1) {
885df226684Sopenharmony_ci                  let currentTime = new Date().getTime();
886df226684Sopenharmony_ci                  let validity = this.reconfigurationTime(new Date(this.validity)).getTime();
887df226684Sopenharmony_ci                  if (currentTime >= validity) {
888df226684Sopenharmony_ci                    this.showErrorDialogNoTitle($r('app.string.Timeout_is_not_supported'));
889df226684Sopenharmony_ci                    return;
890df226684Sopenharmony_ci                  }
891df226684Sopenharmony_ci                  AppStorage.setOrCreate('validity', this.reconfigurationTime(new Date(this.validity)));
892df226684Sopenharmony_ci                  AppStorage.setOrCreate('hiValidDate', true);
893df226684Sopenharmony_ci                }
894df226684Sopenharmony_ci                AppStorage.setOrCreate('permanent', this.selectedIndex ? false : true);
895df226684Sopenharmony_ci                AppStorage.setOrCreate('hiAdvancedSettings', false);
896df226684Sopenharmony_ci                AppStorage.setOrCreate('hiStorePath', false);
897df226684Sopenharmony_ci                if (this.isDlpFile) {
898df226684Sopenharmony_ci                  AppStorage.setOrCreate('hiOperation', 'Change_policy');
899df226684Sopenharmony_ci                  await this.changeEncrypt();
900df226684Sopenharmony_ci                } else {
901df226684Sopenharmony_ci                  AppStorage.setOrCreate('hiOperation', 'Pack_policy');
902df226684Sopenharmony_ci                  await this.beginEncrypt();
903df226684Sopenharmony_ci                }
904df226684Sopenharmony_ci              })
905df226684Sopenharmony_ci              .margin({
906df226684Sopenharmony_ci                right: SystemUtils.isRTL() ?
907df226684Sopenharmony_ci                  Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN : Constants.ADD_STAFF_ITEM_MARGIN_LEFT,
908df226684Sopenharmony_ci                left: SystemUtils.isRTL() ?
909df226684Sopenharmony_ci                  Constants.ADD_STAFF_ITEM_MARGIN_LEFT : Constants.ENCRYPTION_PROTECTION_BUTTON_MARGIN,
910df226684Sopenharmony_ci              })
911df226684Sopenharmony_ci          }
912df226684Sopenharmony_ci          .margin({
913df226684Sopenharmony_ci            left: Constants.ENCRYPTION_BUTTON_TO_BUTTON_WIDTH,
914df226684Sopenharmony_ci            right: Constants.ENCRYPTION_BUTTON_TO_BUTTON_WIDTH,
915df226684Sopenharmony_ci            bottom: Constants.ENCRYPTION_BUTTON_MARGIN_BOTTOM,
916df226684Sopenharmony_ci            top: Constants.ENCRYPTION_BUTTON_TO_BUTTON_WIDTH
917df226684Sopenharmony_ci          })
918df226684Sopenharmony_ci        }
919df226684Sopenharmony_ci        .visibility(this.processing ? Visibility.Hidden : Visibility.Visible)
920df226684Sopenharmony_ci        .width(Constants.ENCRYPTION_PC_FIXING_WIDTH)
921df226684Sopenharmony_ci        .backgroundColor($r('sys.color.ohos_id_color_dialog_bg'))
922df226684Sopenharmony_ci        .borderRadius($r('sys.float.ohos_id_corner_radius_dialog'))
923df226684Sopenharmony_ci        .constraintSize({minWidth: Constants.ENCRYPTION_PC_FIXING_WIDTH})
924df226684Sopenharmony_ci        .backgroundBlurStyle(BlurStyle.COMPONENT_ULTRA_THICK);
925df226684Sopenharmony_ci      }
926df226684Sopenharmony_ci    }
927df226684Sopenharmony_ci  }
928df226684Sopenharmony_ci}
929df226684Sopenharmony_ci
930df226684Sopenharmony_cilet storage = LocalStorage.getShared();
931df226684Sopenharmony_ci@Entry(storage)
932df226684Sopenharmony_ci@Component
933df226684Sopenharmony_cistruct encryptionProtection {
934df226684Sopenharmony_ci  aboutToAppear() {
935df226684Sopenharmony_ci  }
936df226684Sopenharmony_ci
937df226684Sopenharmony_ci  build() {
938df226684Sopenharmony_ci    GridRow({
939df226684Sopenharmony_ci      columns: {
940df226684Sopenharmony_ci        xs: Constants.XS_COLUMNS,
941df226684Sopenharmony_ci        sm: Constants.SM_COLUMNS,
942df226684Sopenharmony_ci        md: Constants.MD_COLUMNS,
943df226684Sopenharmony_ci        lg: Constants.LG_COLUMNS
944df226684Sopenharmony_ci      },
945df226684Sopenharmony_ci      gutter: Constants.DIALOG_GUTTER
946df226684Sopenharmony_ci    }) {
947df226684Sopenharmony_ci      GridCol({
948df226684Sopenharmony_ci        span: {
949df226684Sopenharmony_ci          xs: Constants.XS_SPAN,
950df226684Sopenharmony_ci          sm: Constants.SM_SPAN,
951df226684Sopenharmony_ci          md: Constants.DIALOG_MD_SPAN,
952df226684Sopenharmony_ci          lg: Constants.DIALOG_LG_SPAN
953df226684Sopenharmony_ci        },
954df226684Sopenharmony_ci        offset: {
955df226684Sopenharmony_ci          xs: Constants.XS_OFFSET,
956df226684Sopenharmony_ci          sm: Constants.SM_OFFSET,
957df226684Sopenharmony_ci          md: Constants.DIALOG_MD_OFFSET,
958df226684Sopenharmony_ci          lg: Constants.DIALOG_LG_OFFSET
959df226684Sopenharmony_ci        }
960df226684Sopenharmony_ci      }) {
961df226684Sopenharmony_ci        Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center,
962df226684Sopenharmony_ci          direction: FlexDirection.Column }) {
963df226684Sopenharmony_ci          DlpDialog()
964df226684Sopenharmony_ci        }
965df226684Sopenharmony_ci      }
966df226684Sopenharmony_ci    }
967df226684Sopenharmony_ci    .backgroundColor($r('sys.color.mask_fourth'))
968df226684Sopenharmony_ci  }
969df226684Sopenharmony_ci}
970