1 /* 2 * Copyright (c) 2022 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 16 #ifndef PRINT_MANAGER_CLIENT_H 17 #define PRINT_MANAGER_CLIENT_H 18 19 #include <condition_variable> 20 #include <map> 21 #include <mutex> 22 23 #include "want.h" 24 #include "iprint_callback.h" 25 #include "iprint_service.h" 26 #include "iremote_object.h" 27 #include "print_extension_callback_stub.h" 28 #include "print_extension_info.h" 29 #include "print_job.h" 30 #include "print_sa_death_recipient.h" 31 #include "printer_info.h" 32 #include "printer_preferences.h" 33 #include "refbase.h" 34 #ifdef PDFIUM_ENABLE 35 #include "fpdfview.h" 36 #endif // PDFIUM_ENABLE 37 38 namespace OHOS::Print { 39 class PrintManagerClient : public RefBase { 40 public: 41 PrintManagerClient(); 42 ~PrintManagerClient(); 43 static PrintManagerClient* GetInstance(); 44 45 void OnRemoteSaDied(const wptr<IRemoteObject> &object); 46 47 int32_t Init(); 48 int32_t Release(); 49 int32_t StartPrint(const std::vector<std::string> &fileList, 50 const std::vector<uint32_t> &fdList, std::string &taskId); 51 int32_t StopPrint(const std::string &taskId); 52 int32_t QueryAllExtension(std::vector<PrintExtensionInfo> &extensionInfos); 53 int32_t StartDiscoverPrinter(const std::vector<std::string> &extensionList); 54 int32_t StopDiscoverPrinter(); 55 int32_t AddPrinters(const std::vector<PrinterInfo> &printerInfos); 56 int32_t RemovePrinters(const std::vector<std::string> &printerIds); 57 int32_t UpdatePrinters(const std::vector<PrinterInfo> &printerInfos); 58 int32_t ConnectPrinter(const std::string &printerId); 59 int32_t DisconnectPrinter(const std::string &printerId); 60 int32_t StartPrintJob(PrintJob &jobinfo); 61 int32_t CancelPrintJob(const std::string &jobId); 62 int32_t RestartPrintJob(const std::string &jobId); 63 int32_t UpdatePrinterState(const std::string &printerId, uint32_t state); 64 int32_t UpdatePrintJobStateForNormalApp(const std::string &jobId, uint32_t state, uint32_t subState); 65 int32_t UpdatePrintJobStateOnlyForSystemApp(const std::string &jobId, uint32_t state, uint32_t subState); 66 int32_t UpdateExtensionInfo(const std::string &extensionId); 67 int32_t RequestPreview(const PrintJob &jobinfo, std::string &previewResult); 68 int32_t QueryPrinterCapability(const std::string &printerId); 69 int32_t QueryAllActivePrintJob(std::vector<PrintJob> &printJobs); 70 int32_t QueryAllPrintJob(std::vector<PrintJob> &printJobs); 71 int32_t QueryPrintJobById(std::string &printJobId, PrintJob &printjob); 72 int32_t AddPrinterToCups(const std::string &printerUri, const std::string &printerName, 73 const std::string &printerMake); 74 int32_t QueryPrinterCapabilityByUri(const std::string &printerUri, const std::string &printerId, 75 PrinterCapability &printerCaps); 76 int32_t NotifyPrintServiceEvent(std::string &jobId, uint32_t event); 77 int32_t SetDefaultPrinter(const std::string &printerId, uint32_t type); 78 int32_t DeletePrinterFromCups(const std::string &printerName); 79 int32_t QueryPrinterInfoByPrinterId(const std::string &printerId, PrinterInfo &info); 80 int32_t QueryAddedPrinter(std::vector<std::string> &printerNameList); 81 int32_t QueryPrinterProperties(const std::string &printerId, const std::vector<std::string> &keyList, 82 std::vector<std::string> &valueList); 83 int32_t StartNativePrintJob(PrintJob &printJob); 84 int32_t SetPrinterPreference(const std::string &printerId, const PrinterPreferences &printerPreference); 85 int32_t DiscoverUsbPrinters(std::vector<PrinterInfo> &printers); 86 int32_t AddPrinterToDiscovery(const PrinterInfo &printerInfo); 87 int32_t UpdatePrinterInDiscovery(const PrinterInfo &printerInfo); 88 int32_t RemovePrinterFromDiscovery(const std::string &printerId); 89 int32_t UpdatePrinterInSystem(const PrinterInfo &printerInfo); 90 91 int32_t On(const std::string &taskId, const std::string &type, const sptr<IPrintCallback> &listener); 92 int32_t Off(const std::string &taskId, const std::string &type); 93 int32_t Print(const std::string &printJobName, const sptr<IPrintCallback> &listener, 94 const std::shared_ptr<PrintAttributes> &printAttributes); 95 int32_t Print(const std::string &printJobName, const sptr<IPrintCallback> &listener, 96 const std::shared_ptr<PrintAttributes> &printAttributes, void* contextToken); 97 int32_t Print(const std::string &printJobName, const sptr<IPrintCallback> &listener, 98 const PrintAttributes &printAttributes); 99 int32_t Print(const std::string &printJobName, const sptr<IPrintCallback> &listener, 100 const PrintAttributes &printAttributes, void* contextToken); 101 int32_t Print(const std::string &printJobName, const sptr<IPrintCallback> &listener, 102 const PrintAttributes &printAttributes, std::string &taskId); 103 int32_t Print(const std::string &printJobName, const sptr<IPrintCallback> &listener, 104 const PrintAttributes &printAttributes, std::string &taskId, void* contextToken); 105 int32_t StartGetPrintFile(const std::string &jobId, const PrintAttributes &printAttributes, 106 const uint32_t fd); 107 int32_t NotifyPrintService(const std::string &jobId, const std::string &type); 108 109 int32_t RegisterExtCallback(const std::string &extensionId, uint32_t callbackId, PrintExtCallback cb); 110 int32_t RegisterExtCallback(const std::string &extensionId, uint32_t callbackId, PrintJobCallback cb); 111 int32_t RegisterExtCallback(const std::string &extensionId, uint32_t callbackId, PrinterCallback cb); 112 int32_t RegisterExtCallback(const std::string &extensionId, uint32_t callbackId, PrinterCapabilityCallback cb); 113 int32_t UnregisterAllExtCallback(const std::string &extensionId); 114 int32_t LoadExtSuccess(const std::string &extensionId); 115 116 int32_t SetNativePrinterChangeCallback(const std::string &type, NativePrinterChangeCallback cb); 117 118 void LoadServerSuccess(); 119 void LoadServerFail(); 120 void SetProxy(const sptr<IRemoteObject> &obj); 121 void ResetProxy(); 122 123 private: 124 void SetWantParam(AAFwk::Want &want, std::string &taskId); 125 bool LoadServer(); 126 bool GetPrintServiceProxy(); 127 int32_t runBase(const char* callerFunName, std::function<int32_t(sptr<IPrintService>)> func); 128 #define CALL_COMMON_CLIENT(func) runBase(__func__, func) 129 130 private: 131 std::recursive_mutex proxyLock_; 132 sptr<IPrintService> printServiceProxy_; 133 sptr<PrintSaDeathRecipient> deathRecipient_; 134 135 std::map<std::string, sptr<PrintExtensionCallbackStub>> extCallbackMap_; 136 137 std::mutex loadMutex_; 138 std::mutex conditionMutex_; 139 std::condition_variable syncCon_; 140 bool ready_ = false; 141 static constexpr int LOAD_SA_TIMEOUT_MS = 15000; 142 }; 143 } // namespace OHOS::Print 144 #endif // PRINT_MANAGER_CLIENT_H 145