1/* 2 * Copyright (c) 2023-2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import AppStorageConstant from '../common/AppStorageConstant'; 17import Constants from '../common/constant'; 18import { HiLog } from '../common/HiLog'; 19import hiTraceMeter from '@ohos.hiTraceMeter'; 20import { OpenDlpFileProcessor } from '../OpenDlpFile/ViewProcessor/ViewProcessor'; 21import OpeningDialogManager from '../OpenDlpFile/manager/OpeningDialogManager'; 22import rpc from '@ohos.rpc'; 23import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility'; 24import { systemDateTime } from '@kit.BasicServicesKit'; 25import ViewAbilityStub from '../rpc/ViewAbility/stub/ViewAbilityStub'; 26import Want from '@ohos.app.ability.Want'; 27import TerminateView from '../OpenDlpFile/TerminateView/TerminateView'; 28import ViewAbilityService from '../rpc/ViewAbility/service/ViewAbilityService'; 29import { StartFileManager } from '../OpenDlpFile/manager/StartFileManager'; 30 31const TAG = 'View'; 32 33export default class ViewAbility extends ServiceExtensionAbility { 34 private serviceImpl: ViewAbilityStub = new ViewAbilityStub(TAG); 35 36 onCreate(want: Want): void { 37 HiLog.info(TAG, 'ViewAbility onCreate'); 38 } 39 40 onConnect(want: Want): rpc.RemoteObject { 41 HiLog.info(TAG, 'ViewAbility onConnect'); 42 return this.serviceImpl; 43 } 44 45 onDisconnect(want: Want): void { 46 HiLog.info(TAG, 'ViewAbility onDisconnect'); 47 } 48 49 async onRequest(want: Want, startId: number): Promise<void> { 50 HiLog.info(TAG, `enter onRequest startId: ${startId}`); 51 AppStorage.setOrCreate('viewContext', this.context); 52 const callerBundleName: string = want.parameters?.[Constants.PARAMS_CALLER_BUNDLE_NAME] as string; 53 if (callerBundleName === Constants.SHARE_BUNDLE) { 54 const startRet = await StartFileManager.startFileManager(want.uri); 55 if (startRet.errcode === Constants.ERR_CODE_SUCCESS) { 56 HiLog.error(TAG, 'ViewAbility start fileManager success'); 57 return; 58 } 59 } 60 hiTraceMeter.startTrace('DlpOpenFileJs', startId); 61 if (OpeningDialogManager.getInstance().getIsChargeDecrypting() || 62 OpeningDialogManager.getInstance().getIsTerminalSelf()) { 63 HiLog.error(TAG, 'ViewAbility isChargeDecrypting or isTerminalSelf'); 64 hiTraceMeter.finishTrace('DlpOpenFileJs', startId); 65 return; 66 } 67 OpeningDialogManager.getInstance().setIsChargeDecrypting(true); 68 OpeningDialogManager.getInstance().setIsTerminalSelf(false); 69 AppStorage.setOrCreate(AppStorageConstant.DECRYPTION_START_TIME, systemDateTime.getTime(false)); 70 const processor = new OpenDlpFileProcessor(); 71 let processRet = await processor.process(want, startId, this.context); 72 if (processRet.errcode !== Constants.ERR_CODE_SUCCESS) { 73 HiLog.error(TAG, 'process error'); 74 } 75 hiTraceMeter.finishTrace('DlpOpenFileJs', startId); 76 await OpeningDialogManager.getInstance().unLoadOpeningDialogNormal(); 77 if (!OpeningDialogManager.getInstance().getIsWaitingShowToast()) { 78 await ViewAbilityService.getInstance().sendDisconnectMsgWithTimeout(); 79 await TerminateView.terminate(); 80 } 81 } 82 83 async onDestroy(): Promise<void> { 84 HiLog.info(TAG, 'ViewAbility onDestroy'); 85 OpeningDialogManager.getInstance().unRegisterEmitEvent(); 86 await OpeningDialogManager.getInstance().unLoadOpeningDialogAbnormal(); 87 } 88} 89