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}