1c36cf2e9Sopenharmony_ci/*
2c36cf2e9Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3c36cf2e9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c36cf2e9Sopenharmony_ci * you may not use this file except in compliance with the License.
5c36cf2e9Sopenharmony_ci * You may obtain a copy of the License at
6c36cf2e9Sopenharmony_ci *
7c36cf2e9Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8c36cf2e9Sopenharmony_ci *
9c36cf2e9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c36cf2e9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c36cf2e9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c36cf2e9Sopenharmony_ci * See the License for the specific language governing permissions and
13c36cf2e9Sopenharmony_ci * limitations under the License.
14c36cf2e9Sopenharmony_ci */
15c36cf2e9Sopenharmony_ci
16c36cf2e9Sopenharmony_ciimport type Want from '@ohos.application.Want';
17c36cf2e9Sopenharmony_ci// @ts-ignore
18c36cf2e9Sopenharmony_ciimport PrintExtensionAbility from '@ohos.app.ability.PrintExtensionAbility';
19c36cf2e9Sopenharmony_ciimport {LocalDiscoverySession} from '@ohos/ippprint';
20c36cf2e9Sopenharmony_ciimport { P2PDiscovery } from '@ohos/ippprint';
21c36cf2e9Sopenharmony_ciimport { P2PMonitor } from '@ohos/ippprint';
22c36cf2e9Sopenharmony_ciimport { MdnsDiscovery } from '@ohos/ippprint';
23c36cf2e9Sopenharmony_ciimport {PrintServiceAdapter} from '@ohos/ippprint';
24c36cf2e9Sopenharmony_ciimport { Backend } from '@ohos/ippprint';
25c36cf2e9Sopenharmony_ciimport { CapabilitiesCache } from '@ohos/ippprint';
26c36cf2e9Sopenharmony_ciimport { Log, MediaSizeHelper } from '@ohos/common';
27c36cf2e9Sopenharmony_ciimport { WifiModel } from '@ohos/ippprint';
28c36cf2e9Sopenharmony_ciimport type { PrintJob } from '@ohos/common';
29c36cf2e9Sopenharmony_ciimport { SERVICE_IPP } from '@ohos/common';
30c36cf2e9Sopenharmony_ciimport { checkWifiEnable } from '@ohos/common';
31c36cf2e9Sopenharmony_ciimport { GlobalThisHelper, GlobalThisStorageKey} from '@ohos/common';
32c36cf2e9Sopenharmony_ciimport print from '@ohos.print';
33c36cf2e9Sopenharmony_ci
34c36cf2e9Sopenharmony_ciconst TAG = 'PrintExtension';
35c36cf2e9Sopenharmony_ci
36c36cf2e9Sopenharmony_ciexport default class PrintExtension extends PrintExtensionAbility {
37c36cf2e9Sopenharmony_ci  private mPrintServiceAdapter: PrintServiceAdapter;
38c36cf2e9Sopenharmony_ci  private mLocalDiscoverySession: LocalDiscoverySession;
39c36cf2e9Sopenharmony_ci
40c36cf2e9Sopenharmony_ci  onCreate(want: Want): void {
41c36cf2e9Sopenharmony_ci    // @ts-ignore
42c36cf2e9Sopenharmony_ci    GlobalThisHelper.createValue(this.context, GlobalThisStorageKey.KEY_ABILITY_CONTEXT);
43c36cf2e9Sopenharmony_ci    // @ts-ignore
44c36cf2e9Sopenharmony_ci    GlobalThisHelper.createValue<string>(<string> this.context.filesDir, GlobalThisStorageKey.KEY_FILES_DIR);
45c36cf2e9Sopenharmony_ci    this.init();
46c36cf2e9Sopenharmony_ci  }
47c36cf2e9Sopenharmony_ci
48c36cf2e9Sopenharmony_ci  /**
49c36cf2e9Sopenharmony_ci   * init
50c36cf2e9Sopenharmony_ci   */
51c36cf2e9Sopenharmony_ci  init(): void {
52c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter = <PrintServiceAdapter>PrintServiceAdapter.getInstance();
53c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter.backend = <Backend> new Backend();
54c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter.wifiModel = <WifiModel> new WifiModel();
55c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter.capabilitiesCache = <CapabilitiesCache> new CapabilitiesCache(this.mPrintServiceAdapter);
56c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter.p2pDiscovery = <P2PDiscovery> new P2PDiscovery(this.mPrintServiceAdapter);
57c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter.p2pMonitor = <P2PMonitor> new P2PMonitor();
58c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter.mdnsDiscovery = <MdnsDiscovery> new MdnsDiscovery(SERVICE_IPP);
59c36cf2e9Sopenharmony_ci    this.mPrintServiceAdapter.localDiscoverySession = <LocalDiscoverySession> new LocalDiscoverySession(this.mPrintServiceAdapter);
60c36cf2e9Sopenharmony_ci    // @ts-ignore
61c36cf2e9Sopenharmony_ci    MediaSizeHelper.init(this.context);
62c36cf2e9Sopenharmony_ci  }
63c36cf2e9Sopenharmony_ci
64c36cf2e9Sopenharmony_ci  /**
65c36cf2e9Sopenharmony_ci   * start discovery printer
66c36cf2e9Sopenharmony_ci   */
67c36cf2e9Sopenharmony_ci  onStartDiscoverPrinter(): void {
68c36cf2e9Sopenharmony_ci    Log.info(TAG, 'onStartDiscoverPrinter enter');
69c36cf2e9Sopenharmony_ci    this.mLocalDiscoverySession = <LocalDiscoverySession> this.mPrintServiceAdapter.localDiscoverySession;
70c36cf2e9Sopenharmony_ci    if (this.mLocalDiscoverySession === undefined) {
71c36cf2e9Sopenharmony_ci      return;
72c36cf2e9Sopenharmony_ci    }
73c36cf2e9Sopenharmony_ci    if (!checkWifiEnable()) {
74c36cf2e9Sopenharmony_ci      Log.error(TAG, 'wifi is inactive');
75c36cf2e9Sopenharmony_ci      return;
76c36cf2e9Sopenharmony_ci    }
77c36cf2e9Sopenharmony_ci    this.mLocalDiscoverySession.startPrinterDiscovery();
78c36cf2e9Sopenharmony_ci  }
79c36cf2e9Sopenharmony_ci
80c36cf2e9Sopenharmony_ci  /**
81c36cf2e9Sopenharmony_ci   * stop discovery printer
82c36cf2e9Sopenharmony_ci   */
83c36cf2e9Sopenharmony_ci  onStopDiscoverPrinter(): void {
84c36cf2e9Sopenharmony_ci    Log.info(TAG, 'onStopDiscoverPrinter enter');
85c36cf2e9Sopenharmony_ci    if (this.mLocalDiscoverySession === undefined) {
86c36cf2e9Sopenharmony_ci      Log.error(TAG, 'mLocalDiscoverySession is null');
87c36cf2e9Sopenharmony_ci      return;
88c36cf2e9Sopenharmony_ci    }
89c36cf2e9Sopenharmony_ci    this.mLocalDiscoverySession.stopPrinterDiscovery();
90c36cf2e9Sopenharmony_ci  }
91c36cf2e9Sopenharmony_ci
92c36cf2e9Sopenharmony_ci  /**
93c36cf2e9Sopenharmony_ci   * connect to printer
94c36cf2e9Sopenharmony_ci   */
95c36cf2e9Sopenharmony_ci  onConnectPrinter(printerId: string | number): void {
96c36cf2e9Sopenharmony_ci    Log.info(TAG, 'onConnectPrinter enter');
97c36cf2e9Sopenharmony_ci    if (printerId === undefined || printerId === null) {
98c36cf2e9Sopenharmony_ci      Log.error(TAG, 'printerId is undefined');
99c36cf2e9Sopenharmony_ci      return;
100c36cf2e9Sopenharmony_ci    }
101c36cf2e9Sopenharmony_ci    if (typeof printerId === 'number') {
102c36cf2e9Sopenharmony_ci      printerId = printerId.toString();
103c36cf2e9Sopenharmony_ci    }
104c36cf2e9Sopenharmony_ci    if (this.mLocalDiscoverySession === undefined) {
105c36cf2e9Sopenharmony_ci      Log.error(TAG, 'mLocalDiscoverySession is undefined');
106c36cf2e9Sopenharmony_ci      return;
107c36cf2e9Sopenharmony_ci    }
108c36cf2e9Sopenharmony_ci    this.mLocalDiscoverySession.startConnectPrinter(printerId);
109c36cf2e9Sopenharmony_ci  }
110c36cf2e9Sopenharmony_ci
111c36cf2e9Sopenharmony_ci  /**
112c36cf2e9Sopenharmony_ci   * disconnect to printer
113c36cf2e9Sopenharmony_ci   */
114c36cf2e9Sopenharmony_ci  onDisconnectPrinter(printerId: string | number): void {
115c36cf2e9Sopenharmony_ci    Log.info(TAG, 'onDisconnectPrinter enter');
116c36cf2e9Sopenharmony_ci    if (printerId === undefined || printerId === null) {
117c36cf2e9Sopenharmony_ci      Log.error(TAG, 'printerId is undefined');
118c36cf2e9Sopenharmony_ci      return;
119c36cf2e9Sopenharmony_ci    }
120c36cf2e9Sopenharmony_ci    if (typeof printerId === 'number') {
121c36cf2e9Sopenharmony_ci      printerId = printerId.toString();
122c36cf2e9Sopenharmony_ci    }
123c36cf2e9Sopenharmony_ci    if (this.mLocalDiscoverySession === undefined) {
124c36cf2e9Sopenharmony_ci      Log.error(TAG, 'mLocalDiscoverySession is undefined');
125c36cf2e9Sopenharmony_ci      return;
126c36cf2e9Sopenharmony_ci    }
127c36cf2e9Sopenharmony_ci    this.mLocalDiscoverySession.stopConnectPrinter(printerId);
128c36cf2e9Sopenharmony_ci  }
129c36cf2e9Sopenharmony_ci
130c36cf2e9Sopenharmony_ci  /**
131c36cf2e9Sopenharmony_ci   * start job
132c36cf2e9Sopenharmony_ci   *
133c36cf2e9Sopenharmony_ci   * @param printJob
134c36cf2e9Sopenharmony_ci   */
135c36cf2e9Sopenharmony_ci  onStartPrintJob(printJob: PrintJob): void {
136c36cf2e9Sopenharmony_ci    Log.debug(TAG, 'onStartPrintJob');
137c36cf2e9Sopenharmony_ci  }
138c36cf2e9Sopenharmony_ci
139c36cf2e9Sopenharmony_ci  /**
140c36cf2e9Sopenharmony_ci   * cancel job
141c36cf2e9Sopenharmony_ci   *
142c36cf2e9Sopenharmony_ci   * @param PrintJob
143c36cf2e9Sopenharmony_ci   */
144c36cf2e9Sopenharmony_ci  onCancelPrintJob(printJob: PrintJob): void {
145c36cf2e9Sopenharmony_ci    Log.info(TAG, 'onCancelPrintJob');
146c36cf2e9Sopenharmony_ci  }
147c36cf2e9Sopenharmony_ci
148c36cf2e9Sopenharmony_ci
149c36cf2e9Sopenharmony_ci  /**
150c36cf2e9Sopenharmony_ci   * request printer caps
151c36cf2e9Sopenharmony_ci   *
152c36cf2e9Sopenharmony_ci   * @param printerId
153c36cf2e9Sopenharmony_ci   */
154c36cf2e9Sopenharmony_ci  onRequestPrinterCapability(printerId: string | number): print.PrinterCapability {
155c36cf2e9Sopenharmony_ci    Log.info(TAG, 'onRequestPrinterCapability enter');
156c36cf2e9Sopenharmony_ci    if (printerId === undefined || printerId === null) {
157c36cf2e9Sopenharmony_ci      Log.error(TAG, 'printerId is undefined');
158c36cf2e9Sopenharmony_ci      return;
159c36cf2e9Sopenharmony_ci    }
160c36cf2e9Sopenharmony_ci    if (typeof printerId === 'number') {
161c36cf2e9Sopenharmony_ci      printerId = printerId.toString();
162c36cf2e9Sopenharmony_ci    }
163c36cf2e9Sopenharmony_ci    if (this.mLocalDiscoverySession === undefined) {
164c36cf2e9Sopenharmony_ci      Log.error(TAG, 'mLocalDiscoverySession is undefined');
165c36cf2e9Sopenharmony_ci      return;
166c36cf2e9Sopenharmony_ci    }
167c36cf2e9Sopenharmony_ci    this.mLocalDiscoverySession.getCapabilities(printerId);
168c36cf2e9Sopenharmony_ci  }
169c36cf2e9Sopenharmony_ci
170c36cf2e9Sopenharmony_ci  onDestroy(): void {
171c36cf2e9Sopenharmony_ci    Log.info(TAG, 'onDestroy');
172c36cf2e9Sopenharmony_ci  }
173c36cf2e9Sopenharmony_ci}