1/* 2 * Copyright (c) 2023 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 { BusinessError } from '@ohos.base'; 17import common from '@ohos.app.ability.common'; 18import IDLDLPProperty from '../serviceExtensionAbility/sequenceable/dlpClass'; 19import GlobalContext from '../common/GlobalContext'; 20import { 21 closeDlpFileCallback, 22 sandBoxLinkFileCallback, 23 fileOpenHistoryCallback, 24 linkSetCallback, 25 genDlpFileCallback, 26 openDlpFileCallback, 27 recoverDlpFileCallback, 28 replaceDlpLinkFileCallback, 29 resumeFuseLinkCallback, 30 stopFuseLinkCallback 31} from '../MainAbility/data/IIdlDlpRpcServiceTs/i_id_dlpRpc_service'; 32import IdDlpRpcServiceProxy from '../MainAbility/data/IIdlDlpRpcServiceTs/id_dlpRpc_service_proxy'; 33import Constants from '../common/constant'; 34import { HiLog } from '../common/HiLog'; 35 36const SERVICE_EXTENSION_ABILITY_NAME = 'ServiceExtAbility'; 37const ERROR_CODE = -1; 38const SUCCESS_CODE = 0; 39const TAG = 'HomeFeature'; 40 41export default class HomeFeature { 42 private connection = -1; 43 private remoteCallback!: () => void; 44 private context: ESObject; 45 private options: common.ConnectOptions; 46 private dlpRpcProxy?: IdDlpRpcServiceProxy = undefined; 47 48 constructor(context: ESObject) { 49 this.context = context; 50 this.options = { 51 onConnect: (elementName, proxy) => { 52 HiLog.info(TAG, `onConnect success`); 53 this.dlpRpcProxy = new IdDlpRpcServiceProxy(proxy); 54 GlobalContext.store('dlpRpcProxy', this.dlpRpcProxy); 55 HiLog.info(TAG, `DLPManager IDL onConnect success: ${JSON.stringify(this.dlpRpcProxy)}`); 56 this.remoteCallback(); 57 }, 58 onDisconnect: () => { 59 HiLog.info(TAG, `onDisconnect`); 60 }, 61 onFailed: () => { 62 HiLog.info(TAG, `onFailed`); 63 } 64 } 65 } 66 67 connectServiceExtAbility(callback: () => void) { 68 HiLog.info(TAG, `connectServiceExtAbility`); 69 if (this.dlpRpcProxy !== undefined) { 70 return; 71 } 72 this.remoteCallback = callback; 73 let want = { 74 'bundleName': Constants.DLP_MANAGER_BUNDLE_NAME, 75 'abilityName': SERVICE_EXTENSION_ABILITY_NAME 76 } as Record<string, string>; 77 if (this.dlpRpcProxy === undefined) { 78 HiLog.info(TAG, `try connect`); 79 try { 80 this.connection = this.context.connectServiceExtensionAbility(want, this.options); 81 } catch (err) { 82 HiLog.error(TAG, `connectServiceExtensionAbility failed: ${JSON.stringify(err)}`); 83 } 84 } 85 HiLog.info(TAG, `connectServiceExtAbility result: ${this.connection}`); 86 } 87 88 async genDlpFileHome(src:string, des:string, pop:IDLDLPProperty, callback: genDlpFileCallback) { 89 HiLog.info(TAG, `genDlpFileHome start`); 90 await GlobalContext.load('dlpRpcProxy').genDlpFile(src, des, pop, callback); 91 } 92 93 async openDlpFileHome(src:string, callerAppId: string, callback: openDlpFileCallback) { 94 HiLog.info(TAG, `openDlpFileHome start`); 95 await GlobalContext.load('dlpRpcProxy').openDlpFile(src, callerAppId, callback); 96 } 97 98 replaceDLPLinkFileHome(src:string, linkFileName:string, callback: replaceDlpLinkFileCallback) { 99 HiLog.info(TAG, `replaceDLPLinkFileHome start`); 100 GlobalContext.load('dlpRpcProxy').replaceDlpLinkFile(src, linkFileName, callback); 101 } 102 103 async closeDLPFileHome(src:string, callback: closeDlpFileCallback) { 104 HiLog.info(TAG, `closeDLPFileHome start`); 105 await GlobalContext.load('dlpRpcProxy').closeDlpFile(src, callback); 106 } 107 108 resumeFuseLinkHome(src:string, callback: resumeFuseLinkCallback) { 109 HiLog.info(TAG, `resumeFuseLinkHome start`); 110 GlobalContext.load('dlpRpcProxy').resumeFuseLink(src, callback); 111 } 112 113 stopFuseLinkHome(src:string, callback: stopFuseLinkCallback) { 114 HiLog.info(TAG, `stopFuseLinkHome start`); 115 GlobalContext.load('dlpRpcProxy').stopFuseLink(src, callback); 116 } 117 118 async recoverDLPFileHome(src:string, pathUri: string, callback: recoverDlpFileCallback) { 119 HiLog.info(TAG, `recoverDLPFileHome start`); 120 await GlobalContext.load('dlpRpcProxy').recoverDlpFile(src, pathUri, callback); 121 } 122 123 async sandBoxLinkFileHome(linkFileName: string, callerToken: number, callback: sandBoxLinkFileCallback) { 124 HiLog.info(TAG, `sandBoxLinkFileHome start`); 125 await GlobalContext.load('dlpRpcProxy').sandBoxLinkFile(linkFileName, callerToken, callback); 126 } 127 128 async fileOpenHistoryHome(src:string, callback: fileOpenHistoryCallback) { 129 HiLog.info(TAG, `fileOpenHistoryHome start: ${src}`); 130 await GlobalContext.load('dlpRpcProxy').fileOpenHistory(src, callback); 131 } 132 133 async linkSetHome(src:string, callback: linkSetCallback) { 134 HiLog.info(TAG, `linkSetHome start: ${src}`); 135 await GlobalContext.load('dlpRpcProxy').linkSet(src, callback); 136 } 137 138 disconnectServiceExtAbility(callback: (ans:number) => void) { 139 HiLog.info(TAG, `disconnectServiceExtAbility`); 140 if (this.context) { 141 this.context.disconnectServiceExtensionAbility(this.connection).then(() => { 142 callback(SUCCESS_CODE); 143 }).catch((error: BusinessError) => { 144 HiLog.error(TAG, `disconnectAbility failed: ${JSON.stringify(error)}`); 145 callback(ERROR_CODE); 146 }) 147 } 148 }; 149}