1bea4f105Sopenharmony_ci/* 2bea4f105Sopenharmony_ci * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. 3bea4f105Sopenharmony_ci */ 4bea4f105Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; 5bea4f105Sopenharmony_ciimport { ability, wantConstant } from '@kit.AbilityKit'; 6bea4f105Sopenharmony_ciimport bundleManager from '@ohos.bundle.bundleManager'; 7bea4f105Sopenharmony_ciimport { DownloadDialog } from './component/dialog/DownloadDialog'; 8bea4f105Sopenharmony_ciimport { StartModeOptions } from '../base/model/StartModeOptions'; 9bea4f105Sopenharmony_ciimport { FilePickerUtil } from '../base/utils/FilePickerUtil'; 10bea4f105Sopenharmony_ciimport Logger from '../base/log/Logger'; 11bea4f105Sopenharmony_ciimport { VirtualUri } from '../base/constants/FolderRecord'; 12bea4f105Sopenharmony_ciimport { FsUtil } from '../base/utils/FsUtil'; 13bea4f105Sopenharmony_ciimport { FileUtil } from '../base/utils/FileUtil'; 14bea4f105Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit'; 15bea4f105Sopenharmony_ciimport uriPermissionManager from '@ohos.application.uriPermissionManager'; 16bea4f105Sopenharmony_ciimport AbilityCommonUtil from '../base/utils/AbilityCommonUtil'; 17bea4f105Sopenharmony_ci 18bea4f105Sopenharmony_ci 19bea4f105Sopenharmony_ciconst TAG = 'DownloadAuth'; 20bea4f105Sopenharmony_ciconst DOWNLOAD_PATH = '/storage/Users/currentUser/Download'; 21bea4f105Sopenharmony_cilet storage = LocalStorage.getShared(); 22bea4f105Sopenharmony_ci 23bea4f105Sopenharmony_ci@Component 24bea4f105Sopenharmony_ci@Entry(storage) 25bea4f105Sopenharmony_cistruct DownloadAuth { 26bea4f105Sopenharmony_ci private downloadNewUri: string = ''; 27bea4f105Sopenharmony_ci private startModeOptions: StartModeOptions = FilePickerUtil.getStartOptionsFromStorage(); 28bea4f105Sopenharmony_ci private session: UIExtensionContentSession = this.startModeOptions.session; 29bea4f105Sopenharmony_ci // 存储当前从bms查询到的所有应用的bundle信息 30bea4f105Sopenharmony_ci public bundleArray: Array<bundleManager.BundleInfo> = []; 31bea4f105Sopenharmony_ci private appName: string | undefined = storage.get<string>('appName'); 32bea4f105Sopenharmony_ci private appIcon: string | undefined = storage.get<string>('appIcon'); 33bea4f105Sopenharmony_ci private confirm: Function = () => { 34bea4f105Sopenharmony_ci }; 35bea4f105Sopenharmony_ci // 弹窗关联取消 36bea4f105Sopenharmony_ci private cancel: Function = () => { 37bea4f105Sopenharmony_ci }; 38bea4f105Sopenharmony_ci 39bea4f105Sopenharmony_ci aboutToAppear(): void { 40bea4f105Sopenharmony_ci Logger.i(TAG, 'DownloadAuth aboutToAppear'); 41bea4f105Sopenharmony_ci } 42bea4f105Sopenharmony_ci 43bea4f105Sopenharmony_ci onPageShow() { 44bea4f105Sopenharmony_ci Logger.i(TAG, 'DownloadAuth onPageShow appName: ' + this.appName + ', appIcon: ' + this.appIcon); 45bea4f105Sopenharmony_ci this.downloadDialogOpen(); 46bea4f105Sopenharmony_ci } 47bea4f105Sopenharmony_ci 48bea4f105Sopenharmony_ci downloadDialogOpen(): void { 49bea4f105Sopenharmony_ci this.confirm = async () => { 50bea4f105Sopenharmony_ci this.downloadDialogConfirm(); 51bea4f105Sopenharmony_ci this.externalDownloadDialog.close(); 52bea4f105Sopenharmony_ci }; 53bea4f105Sopenharmony_ci this.cancel = () => { 54bea4f105Sopenharmony_ci this.externalDownloadDialog.close(); 55bea4f105Sopenharmony_ci if (this.session != undefined) { 56bea4f105Sopenharmony_ci this.session.terminateSelf(); 57bea4f105Sopenharmony_ci } 58bea4f105Sopenharmony_ci }; 59bea4f105Sopenharmony_ci this.externalDownloadDialog.open(); 60bea4f105Sopenharmony_ci } 61bea4f105Sopenharmony_ci 62bea4f105Sopenharmony_ci async downloadDialogConfirm(): Promise<void> { 63bea4f105Sopenharmony_ci const bundleName: string = this.startModeOptions.callerBundleName; 64bea4f105Sopenharmony_ci Logger.i(TAG, 'Download Dialog confirm.'); 65bea4f105Sopenharmony_ci this.downloadNewUri = VirtualUri.DOWNLOAD + '/' + bundleName; 66bea4f105Sopenharmony_ci let isExist: boolean = FsUtil.accessSync(DOWNLOAD_PATH + '/' + bundleName); 67bea4f105Sopenharmony_ci if (!isExist) { 68bea4f105Sopenharmony_ci this.downloadNewUri = FileUtil.createFolderByFs(VirtualUri.DOWNLOAD, bundleName); 69bea4f105Sopenharmony_ci } 70bea4f105Sopenharmony_ci Logger.i(TAG, 'Download Dialog return uri is: ' + this.downloadNewUri); 71bea4f105Sopenharmony_ci AbilityCommonUtil.grantUriPermission([this.downloadNewUri], bundleName); 72bea4f105Sopenharmony_ci this.externalDownloadDialog.close(); 73bea4f105Sopenharmony_ci if (this.session === undefined) { 74bea4f105Sopenharmony_ci Logger.i(TAG, `this.session is undefined`) 75bea4f105Sopenharmony_ci return; 76bea4f105Sopenharmony_ci } 77bea4f105Sopenharmony_ci Logger.i(TAG, 'Download Dialog exist close.'); 78bea4f105Sopenharmony_ci let abilityResult: ability.AbilityResult = { 79bea4f105Sopenharmony_ci resultCode: (this.downloadNewUri === undefined) ? -1 : 0, 80bea4f105Sopenharmony_ci want: { 81bea4f105Sopenharmony_ci parameters: { 82bea4f105Sopenharmony_ci 'downloadNewUri': this.downloadNewUri 83bea4f105Sopenharmony_ci } 84bea4f105Sopenharmony_ci } 85bea4f105Sopenharmony_ci }; 86bea4f105Sopenharmony_ci this.session.terminateSelfWithResult(abilityResult, (error) => { 87bea4f105Sopenharmony_ci Logger.i(TAG, 'terminateSelfWithResult is called = ' + error?.code); 88bea4f105Sopenharmony_ci }); 89bea4f105Sopenharmony_ci } 90bea4f105Sopenharmony_ci 91bea4f105Sopenharmony_ci build() { 92bea4f105Sopenharmony_ci } 93bea4f105Sopenharmony_ci 94bea4f105Sopenharmony_ci //外部调用下载弹窗 95bea4f105Sopenharmony_ci externalDownloadDialog: CustomDialogController = new CustomDialogController({ 96bea4f105Sopenharmony_ci builder: DownloadDialog({ 97bea4f105Sopenharmony_ci appName: this.appName, 98bea4f105Sopenharmony_ci appIcon: this.appIcon, 99bea4f105Sopenharmony_ci confirm: this.confirm, 100bea4f105Sopenharmony_ci cancel: this.cancel 101bea4f105Sopenharmony_ci }), 102bea4f105Sopenharmony_ci autoCancel: false, 103bea4f105Sopenharmony_ci customStyle: true, 104bea4f105Sopenharmony_ci alignment: DialogAlignment.Center, // 可设置dialog的对齐方式,设定显示在底部或中间等,默认为底部显示 105bea4f105Sopenharmony_ci }) 106bea4f105Sopenharmony_ci}