From 882798c6d0fdd2b9ae35762eb34412a27b9c9027 Mon Sep 17 00:00:00 2001 From: hwyml Date: Fri, 28 Jun 2024 20:23:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=B9=E7=AA=97=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hwyml Change-Id: Ife11b206fd1fcfdc63410b7774e75cf98e65e257 --- .../include/usb_function_switch_window.h | 5 ++- .../native/src/usb_function_switch_window.cpp | 37 ++++++++++++++----- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/services/native/include/usb_function_switch_window.h b/services/native/include/usb_function_switch_window.h index 6173355c..1d883bdf 100644 --- a/services/native/include/usb_function_switch_window.h +++ b/services/native/include/usb_function_switch_window.h @@ -58,7 +58,10 @@ private: void OnAbilityConnectDone(const AppExecFwk::ElementName &element, const sptr &remoteObject, int32_t resultCode) override; void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int32_t resultCode) override; - public: + public: + void CloseDialog(); + private: + sptr remoteObject_ = nullptr; }; bool ShowFunctionSwitchWindow(); bool UnShowFunctionSwitchWindow(); diff --git a/services/native/src/usb_function_switch_window.cpp b/services/native/src/usb_function_switch_window.cpp index 71bf60a5..5e89c3de 100644 --- a/services/native/src/usb_function_switch_window.cpp +++ b/services/native/src/usb_function_switch_window.cpp @@ -155,7 +155,7 @@ void UsbFunctionSwitchWindow::UsbFuncAbilityConn::OnAbilityConnectDone(const App USB_HILOGI(MODULE_USB_SERVICE, "show dialog is failed: %{public}d", ret); return; } - + remoteObject_ = remoteObject; return; } @@ -163,9 +163,30 @@ void UsbFunctionSwitchWindow::UsbFuncAbilityConn::OnAbilityDisconnectDone( const AppExecFwk::ElementName& element, int resultCode) { USB_HILOGI(MODULE_USB_SERVICE, "OnAbilityDisconnectDone"); + remoteObject_ = nullptr; return; } +void UsbFunctionSwitchWindow::UsbFuncAbilityConn::CloseDialog() +{ + if (remoteObject_ == nullptr) { + USB_HILOGW(MODULE_USB_SERVICE, "CloseDialog: disconnected"); + return; + } + + MessageParcel data; + MessageParcel reply; + MessageOption option; + const uint32_t cmdCode = 3; + int32_t ret = remoteObject_->SendRequest(cmdCode, data, reply, option); + int32_t replyCode = -1; + bool success = false; + if (ret == ERR_OK) { + success = reply.ReadInt32(replyCode); + } + USB_HILOGI(MODULE_USB_SERVICE, "CloseDialog: ret=%{public}d, %{public}d, %{public}d", ret, success, replyCode); +} + bool UsbFunctionSwitchWindow::ShowFunctionSwitchWindow() { USB_HILOGI(MODULE_USB_SERVICE, "show function switch window right now, installed: %{public}d", isDialogInstalled_); @@ -211,16 +232,12 @@ bool UsbFunctionSwitchWindow::UnShowFunctionSwitchWindow() return false; } USB_HILOGI(MODULE_USB_SERVICE, "unshow function switch window"); - AAFwk::Want want; - want.SetElementName(functionSwitchBundleName_, functionSwitchExtAbility_); - auto ret = abmc->StopServiceAbility(want); + usbFuncAbilityConn->CloseDialog(); + + auto ret = abmc->DisconnectAbility(usbFuncAbilityConn); if (ret != UEC_OK) { - USB_HILOGE(MODULE_SERVICE, "StopServiceAbility failed %{public}d", ret); - ret = abmc->DisconnectAbility(usbFuncAbilityConn); - if (ret != UEC_OK) { - USB_HILOGE(MODULE_SERVICE, "DisconnectAbility failed %{public}d", ret); - return false; - } + USB_HILOGE(MODULE_SERVICE, "DisconnectAbility failed %{public}d", ret); + return false; } USB_HILOGD(MODULE_USB_SERVICE, "unshow function switch window success"); return true; -- Gitee