• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}