diff --git a/services/native/include/usb_function_switch_window.h b/services/native/include/usb_function_switch_window.h index 6173355c5550abd390cb4f889a68a859b8b6a1c6..1d883bdf71c0073addc449e1a0a50c3ea3b651e5 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 71bf60a5034ad19085a19afb61492c94f14b7980..5e89c3deca5535e07033dedff35cc8b707c6cc8a 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;