From dece17891e42e5c1d9fa7bb8e5dfb520228ad437 Mon Sep 17 00:00:00 2001 From: Justin_Hu Date: Fri, 31 Mar 2023 01:07:43 +0000 Subject: [PATCH 1/5] add udKey interface Signed-off-by: Justin_Hu Change-Id: I16e0b656e3ddd0a431c8bbb6cca9d5bcf7f20918 --- .../interaction/include/drag_manager_impl.h | 2 ++ .../include/interaction_manager_impl.h | 1 + .../interaction/src/drag_manager_impl.cpp | 6 ++++ .../interaction/src/interaction_manager.cpp | 5 +++ .../src/interaction_manager_impl.cpp | 6 ++++ frameworks/native/src/devicestatus_client.cpp | 7 +++++ .../innerkits/include/devicestatus_client.h | 2 ++ .../innerkits/interaction/include/drag_data.h | 1 + .../interaction/include/interaction_manager.h | 7 +++++ services/communication/base/idevicestatus.h | 4 ++- .../client/include/devicestatus_srv_proxy.h | 1 + .../client/src/devicestatus_srv_proxy.cpp | 22 +++++++++++++ .../service/include/devicestatus_srv_stub.h | 1 + .../service/src/devicestatus_srv_stub.cpp | 15 +++++++++ services/interaction/drag/BUILD.gn | 4 +++ .../interaction/drag/include/drag_manager.h | 3 ++ .../interaction/drag/src/drag_manager.cpp | 31 +++++++++++++++++++ .../native/include/devicestatus_service.h | 2 ++ services/native/src/devicestatus_service.cpp | 17 ++++++++++ 19 files changed, 136 insertions(+), 1 deletion(-) diff --git a/frameworks/native/interaction/include/drag_manager_impl.h b/frameworks/native/interaction/include/drag_manager_impl.h index 472e9c047..c480647dc 100644 --- a/frameworks/native/interaction/include/drag_manager_impl.h +++ b/frameworks/native/interaction/include/drag_manager_impl.h @@ -36,6 +36,8 @@ public: ~DragManagerImpl() = default; int32_t UpdateDragStyle(DragCursorStyle style); int32_t GetDragTargetPid(); + int32_t GetUdKey(std::string &udKey); + int32_t StartDrag(const DragData &dragData, std::function callback); int32_t StopDrag(DragResult result, bool hasCustomAnimation); int32_t OnNotifyResult(const StreamClient& client, NetPacket& pkt); diff --git a/frameworks/native/interaction/include/interaction_manager_impl.h b/frameworks/native/interaction/include/interaction_manager_impl.h index 28a17cb67..9cff01bbd 100644 --- a/frameworks/native/interaction/include/interaction_manager_impl.h +++ b/frameworks/native/interaction/include/interaction_manager_impl.h @@ -44,6 +44,7 @@ public: int32_t StartDrag(const DragData &dragData, std::function callback); int32_t StopDrag(DragResult result, bool hasCustomAnimation); int32_t GetDragTargetPid(); + int32_t GetUdKey(std::string &udKey); int32_t AddDraglistener(DragListenerPtr listener); int32_t RemoveDraglistener(DragListenerPtr listener); int32_t SetDragWindowVisible(bool visible); diff --git a/frameworks/native/interaction/src/drag_manager_impl.cpp b/frameworks/native/interaction/src/drag_manager_impl.cpp index 997f4a121..9f992aa6d 100644 --- a/frameworks/native/interaction/src/drag_manager_impl.cpp +++ b/frameworks/native/interaction/src/drag_manager_impl.cpp @@ -74,6 +74,12 @@ int32_t DragManagerImpl::GetDragTargetPid() return DeviceStatusClient::GetInstance().GetDragTargetPid(); } +int32_t DragManagerImpl::GetUdKey(std::string &udKey) +{ + CALL_DEBUG_ENTER; + return DeviceStatusClient::GetInstance().GetUdKey(udKey); +} + int32_t DragManagerImpl::OnNotifyResult(const StreamClient& client, NetPacket& pkt) { CALL_DEBUG_ENTER; diff --git a/frameworks/native/interaction/src/interaction_manager.cpp b/frameworks/native/interaction/src/interaction_manager.cpp index 03fc1fbeb..b470c0c41 100644 --- a/frameworks/native/interaction/src/interaction_manager.cpp +++ b/frameworks/native/interaction/src/interaction_manager.cpp @@ -85,6 +85,11 @@ int32_t InteractionManager::GetDragTargetPid() return InteractionMgrImpl.GetDragTargetPid(); } +int32_t GetUdKey(std::string &udKey) +{ + return InteractionMgrImpl.GetUdKey(udKey); +} + int32_t InteractionManager::AddDraglistener(DragListenerPtr listener) { return InteractionMgrImpl.AddDraglistener(listener); diff --git a/frameworks/native/interaction/src/interaction_manager_impl.cpp b/frameworks/native/interaction/src/interaction_manager_impl.cpp index 3aa167716..c15ea58d5 100644 --- a/frameworks/native/interaction/src/interaction_manager_impl.cpp +++ b/frameworks/native/interaction/src/interaction_manager_impl.cpp @@ -209,6 +209,12 @@ int32_t InteractionManagerImpl::GetDragTargetPid() return dragManagerImpl_.GetDragTargetPid(); } +int32_t InteractionManagerImpl::GetUdKey(std::string &udKey) +{ + CALL_DEBUG_ENTER; + return dragManagerImpl_.GetUdKey(udKey); +} + int32_t InteractionManagerImpl::AddDraglistener(DragListenerPtr listener) { CALL_DEBUG_ENTER; diff --git a/frameworks/native/src/devicestatus_client.cpp b/frameworks/native/src/devicestatus_client.cpp index 4d16b62a8..c17bf87d4 100644 --- a/frameworks/native/src/devicestatus_client.cpp +++ b/frameworks/native/src/devicestatus_client.cpp @@ -246,6 +246,13 @@ int32_t DeviceStatusClient::GetDragTargetPid() return devicestatusProxy_->GetDragTargetPid(); } +int32_t DeviceStatusClient::GetUdKey(std::string &udKey) +{ + CALL_DEBUG_ENTER; + DEV_RET_IF_NULL_WITH_RET((Connect() != RET_OK), RET_ERR); + return devicestatusProxy_->GetUdKey(udKey); +} + int32_t DeviceStatusClient::AllocSocketPair(const int32_t moduleType) { CALL_DEBUG_ENTER; diff --git a/interfaces/innerkits/include/devicestatus_client.h b/interfaces/innerkits/include/devicestatus_client.h index 57542a662..1dd0d0753 100644 --- a/interfaces/innerkits/include/devicestatus_client.h +++ b/interfaces/innerkits/include/devicestatus_client.h @@ -58,6 +58,8 @@ public: int32_t StopDrag(DragResult result, bool hasCustomAnimation); int32_t UpdateDragStyle(DragCursorStyle style); int32_t GetDragTargetPid(); + int32_t GetUdKey(std::string &udKey); + int32_t AddDraglistener(); int32_t RemoveDraglistener(); int32_t SetDragWindowVisible(bool visible); diff --git a/interfaces/innerkits/interaction/include/drag_data.h b/interfaces/innerkits/interaction/include/drag_data.h index 08812b116..51627a664 100644 --- a/interfaces/innerkits/interaction/include/drag_data.h +++ b/interfaces/innerkits/interaction/include/drag_data.h @@ -37,6 +37,7 @@ struct ShadowInfo { struct DragData { ShadowInfo shadowInfo; std::vector buffer; + std::string udKey; int32_t sourceType { -1 }; int32_t dragNum { -1 }; int32_t pointerId { -1 }; diff --git a/interfaces/innerkits/interaction/include/interaction_manager.h b/interfaces/innerkits/interaction/include/interaction_manager.h index b7daaa7c5..0eb69fee1 100644 --- a/interfaces/innerkits/interaction/include/interaction_manager.h +++ b/interfaces/innerkits/interaction/include/interaction_manager.h @@ -121,6 +121,13 @@ public: */ int32_t GetDragTargetPid(); + /** + * @brief 获取拖拽目标窗口UdKey + * @return 返回值如果是-1则是无效值,为大于等于0的值为正确值 + * @since 10 + */ + int32_t GetUdKey(std::string &udKey); + /** * @brief 注册拖拽状态监听。。 * @param listener 拖拽状态监听。 diff --git a/services/communication/base/idevicestatus.h b/services/communication/base/idevicestatus.h index 35cf08f62..356218e10 100644 --- a/services/communication/base/idevicestatus.h +++ b/services/communication/base/idevicestatus.h @@ -46,7 +46,8 @@ public: UNREGISTER_DRAG_MONITOR, SET_DRAG_WINDOW_VISIBLE, GET_SHADOW_OFFSET, - ALLOC_SOCKET_FD = 40 + ALLOC_SOCKET_FD = 40, + GET_DRAG_TARGET_UDKEY }; virtual void Subscribe(Type type, @@ -69,6 +70,7 @@ public: virtual int32_t StopDrag(DragResult result, bool hasCustomAnimation) = 0; virtual int32_t UpdateDragStyle(DragCursorStyle style) = 0; virtual int32_t GetDragTargetPid() = 0; + virtual int32_t GetUdKey(std::string &udKey) = 0; virtual int32_t AddDraglistener() = 0; virtual int32_t RemoveDraglistener() = 0; virtual int32_t AllocSocketFd(const std::string &programName, const int32_t moduleType, diff --git a/services/communication/client/include/devicestatus_srv_proxy.h b/services/communication/client/include/devicestatus_srv_proxy.h index 7b90e7991..75995e97d 100644 --- a/services/communication/client/include/devicestatus_srv_proxy.h +++ b/services/communication/client/include/devicestatus_srv_proxy.h @@ -52,6 +52,7 @@ public: virtual int32_t StopDrag(DragResult result, bool hasCustomAnimation) override; virtual int32_t UpdateDragStyle(DragCursorStyle style) override; virtual int32_t GetDragTargetPid() override; + virtual int32_t GetUdKey(std::string &udKey) override; virtual int32_t AddDraglistener() override; virtual int32_t RemoveDraglistener() override; virtual int32_t SetDragWindowVisible(bool visible) override; diff --git a/services/communication/client/src/devicestatus_srv_proxy.cpp b/services/communication/client/src/devicestatus_srv_proxy.cpp index 8b0f7ddf8..9150105d0 100644 --- a/services/communication/client/src/devicestatus_srv_proxy.cpp +++ b/services/communication/client/src/devicestatus_srv_proxy.cpp @@ -273,6 +273,27 @@ int32_t DeviceStatusSrvProxy::GetDragTargetPid() return pid; } +int32_t DeviceStatusSrvProxy::GetUdKey(std::string &udKey) +{ + CALL_DEBUG_ENTER; + MessageParcel data; + if (!data.WriteInterfaceToken(DeviceStatusSrvProxy::GetDescriptor())) { + FI_HILOGE("Failed to write descriptor"); + return ERR_INVALID_VALUE; + } + MessageParcel reply; + MessageOption option; + sptr remote = Remote(); + CHKPR(remote, RET_ERR); + int32_t ret = remote->SendRequest(GET_DRAG_TARGET_UDKEY, data, reply, option); + if (ret != RET_OK) { + FI_HILOGE("Send request fail, ret:%{public}d", ret); + return RET_ERR; + } + READSTRING(reply, udKey, IPC_PROXY_DEAD_OBJECT_ERR); + return RET_OK; +} + int32_t DeviceStatusSrvProxy::GetCoordinationState(int32_t userData, const std::string &deviceId) { CALL_DEBUG_ENTER; @@ -310,6 +331,7 @@ int32_t DeviceStatusSrvProxy::StartDrag(const DragData &dragData) WRITEINT32(data, dragData.shadowInfo.x, ERR_INVALID_VALUE); WRITEINT32(data, dragData.shadowInfo.y, ERR_INVALID_VALUE); WRITEUINT8VECTOR(data, dragData.buffer, ERR_INVALID_VALUE); + WRITESTRING(data, dragData.udKey, ERR_INVALID_VALUE); WRITEINT32(data, dragData.sourceType, ERR_INVALID_VALUE); WRITEINT32(data, dragData.dragNum, ERR_INVALID_VALUE); WRITEINT32(data, dragData.pointerId, ERR_INVALID_VALUE); diff --git a/services/communication/service/include/devicestatus_srv_stub.h b/services/communication/service/include/devicestatus_srv_stub.h index 0a82ac1cc..4ee68693b 100644 --- a/services/communication/service/include/devicestatus_srv_stub.h +++ b/services/communication/service/include/devicestatus_srv_stub.h @@ -50,6 +50,7 @@ private: int32_t StopDragStub(MessageParcel& data, MessageParcel& reply); int32_t UpdateDragStyleStub(MessageParcel& data, MessageParcel& reply); int32_t GetDragTargetPidStub(MessageParcel& data, MessageParcel& reply); + int32_t GetUdKeyStub(MessageParcel& data, MessageParcel& reply); int32_t AddDraglistenerStub(MessageParcel& data, MessageParcel& reply); int32_t RemoveDraglistenerStub(MessageParcel& data, MessageParcel& reply); int32_t SetDragWindowVisibleStub(MessageParcel& data, MessageParcel& reply); diff --git a/services/communication/service/src/devicestatus_srv_stub.cpp b/services/communication/service/src/devicestatus_srv_stub.cpp index a218283cb..bfd66b0ad 100644 --- a/services/communication/service/src/devicestatus_srv_stub.cpp +++ b/services/communication/service/src/devicestatus_srv_stub.cpp @@ -61,6 +61,7 @@ int32_t DeviceStatusSrvStub::OnRemoteRequest(uint32_t code, MessageParcel &data, {Idevicestatus::STOP_DRAG, &DeviceStatusSrvStub::StopDragStub}, {Idevicestatus::UPDATED_DRAG_STYLE, &DeviceStatusSrvStub::UpdateDragStyleStub}, {Idevicestatus::GET_DRAG_TARGET_PID, &DeviceStatusSrvStub::GetDragTargetPidStub}, + {Idevicestatus::GET_DRAG_TARGET_UDKEY, &DeviceStatusSrvStub::GetUdKeyStub}, {Idevicestatus::REGISTER_DRAG_MONITOR, &DeviceStatusSrvStub::AddDraglistenerStub}, {Idevicestatus::UNREGISTER_DRAG_MONITOR, &DeviceStatusSrvStub::RemoveDraglistenerStub}, {Idevicestatus::SET_DRAG_WINDOW_VISIBLE, &DeviceStatusSrvStub::SetDragWindowVisibleStub}, @@ -223,6 +224,19 @@ int32_t DeviceStatusSrvStub::GetDragTargetPidStub(MessageParcel& data, MessagePa return RET_OK; } +int32_t DeviceStatusSrvStub::GetUdKeyStub(MessageParcel& data, MessageParcel& reply) +{ + CALL_DEBUG_ENTER; + std::string udKey; + int32_t ret = GetUdKey(udKey); + if (ret != RET_OK) { + FI_HILOGE("Get udKey failed ret:%{public}d", ret); + } + WRITESTRING(reply, udKey, IPC_STUB_WRITE_PARCEL_ERR); + FI_HILOGD("Target udKey:%{public}s", udKey.c_str()); + return RET_OK; +} + int32_t DeviceStatusSrvStub::HandleAllocSocketFdStub(MessageParcel& data, MessageParcel& reply) { int32_t pid = GetCallingPid(); @@ -275,6 +289,7 @@ int32_t DeviceStatusSrvStub::StartDragStub(MessageParcel& data, MessageParcel& r READINT32(data, dragData.shadowInfo.x, E_DEVICESTATUS_READ_PARCEL_ERROR); READINT32(data, dragData.shadowInfo.y, E_DEVICESTATUS_READ_PARCEL_ERROR); READUINT8VECTOR(data, dragData.buffer, E_DEVICESTATUS_READ_PARCEL_ERROR); + READSTRING(data, dragData.udKey, E_DEVICESTATUS_READ_PARCEL_ERROR); READINT32(data, dragData.sourceType, E_DEVICESTATUS_READ_PARCEL_ERROR); READINT32(data, dragData.dragNum, E_DEVICESTATUS_READ_PARCEL_ERROR); READINT32(data, dragData.pointerId, E_DEVICESTATUS_READ_PARCEL_ERROR); diff --git a/services/interaction/drag/BUILD.gn b/services/interaction/drag/BUILD.gn index 747511a7c..8beeb1c03 100644 --- a/services/interaction/drag/BUILD.gn +++ b/services/interaction/drag/BUILD.gn @@ -59,6 +59,10 @@ ohos_shared_library("interaction_drag") { "window_manager:libwm", ] + if (fusion_interaction_coordination) { + external_deps += [ "udmf:udmf_client" ] + } + subsystem_name = "msdp" part_name = "${device_status_part_name}" } diff --git a/services/interaction/drag/include/drag_manager.h b/services/interaction/drag/include/drag_manager.h index d6f5189b1..6be310188 100644 --- a/services/interaction/drag/include/drag_manager.h +++ b/services/interaction/drag/include/drag_manager.h @@ -47,7 +47,9 @@ public: int32_t StartDrag(const DragData &dragData, SessionPtr sess); int32_t StopDrag(DragResult result, bool hasCustomAnimation); int32_t GetDragTargetPid() const; + std::string GetUdKey() const; void SetDragTargetPid(int32_t dragTargetPid); + void SetUdKey(const std::string &udKey); int32_t UpdateDragStyle(DragCursorStyle style); void DragCallback(std::shared_ptr pointerEvent); void OnDragUp(std::shared_ptr pointerEvent); @@ -79,6 +81,7 @@ private: DragMessage dragState_ { DragMessage::MSG_DRAG_STATE_STOP }; int32_t interceptorId_ { -1 }; int32_t dragTargetPid_ { -1 }; + std::string udKey_; SessionPtr dragOutSession_ { nullptr }; DragDrawing dragDrawing_; IContext* context_ { nullptr }; diff --git a/services/interaction/drag/src/drag_manager.cpp b/services/interaction/drag/src/drag_manager.cpp index bfd87f580..7fb7e1e43 100644 --- a/services/interaction/drag/src/drag_manager.cpp +++ b/services/interaction/drag/src/drag_manager.cpp @@ -27,6 +27,11 @@ #include "fi_log.h" #include "proto.h" +#ifdef OHOS_BUILD_ENABLE_COORDINATION +#include "udmf_client.h" +#include "unified_types.h" +#endif // OHOS_BUILD_ENABLE_COORDINATION + namespace OHOS { namespace Msdp { namespace DeviceStatus { @@ -125,12 +130,24 @@ int32_t DragManager::GetDragTargetPid() const return dragTargetPid_; } +std::string DragManager::GetUdKey() const +{ + CALL_DEBUG_ENTER; + return udKey_; +} + void DragManager::SetDragTargetPid(int32_t dragTargetPid) { CALL_DEBUG_ENTER; dragTargetPid_ = dragTargetPid; } +void DragManager::SetUdKey(const std::string &udKey) +{ + CALL_DEBUG_ENTER; + udKey_ = udKey; +} + int32_t DragManager::UpdateDragStyle(DragCursorStyle style) { CALL_DEBUG_ENTER; @@ -210,6 +227,20 @@ void DragManager::OnDragUp(std::shared_ptr pointerEvent) dragDrawing_.EraseMouseIcon(); INPUT_MANAGER->SetPointerVisible(true); } + + SetUdKey(dragData.udKey); +#ifdef OHOS_BUILD_ENABLE_COORDINATION + UDMF::UDQueryOption option; + option.udKey_ = dragData.udKey; + UDMF::UDPrivilege privilege; + privilege.pid_ = pid; + FI_HILOGD("AddPrivilege enter"); + int32_t ret = UDMF::UdmfClient::GetInstance().AddPrivilege(option, privilege); + if (ret != RET_OK) { + FI_HILOGD("Failed to send pid to Udmf client"); + } + FI_HILOGD("AddPrivilege end"); +#endif // OHOS_BUILD_ENABLE_COORDINATION CHKPV(context_); context_->GetTimerManager().AddTimer(TIMEOUT_MS, 1, [this]() { this->StopDrag(DragResult::DRAG_EXCEPTION, false); diff --git a/services/native/include/devicestatus_service.h b/services/native/include/devicestatus_service.h index a13947ab1..4d4f67d6c 100644 --- a/services/native/include/devicestatus_service.h +++ b/services/native/include/devicestatus_service.h @@ -76,6 +76,8 @@ public: int32_t StopDrag(DragResult result, bool hasCustomAnimation) override; int32_t UpdateDragStyle(DragCursorStyle style) override; int32_t GetDragTargetPid() override; + int32_t GetUdKey(std::string &udKey) override; + int32_t ReadUdKey(std::string &udKey); int32_t AddDraglistener() override; int32_t RemoveDraglistener() override; int32_t SetDragWindowVisible(bool visible) override; diff --git a/services/native/src/devicestatus_service.cpp b/services/native/src/devicestatus_service.cpp index 4975ecf6f..870c9271a 100644 --- a/services/native/src/devicestatus_service.cpp +++ b/services/native/src/devicestatus_service.cpp @@ -757,6 +757,23 @@ int32_t DeviceStatusService::UpdateDragStyle(DragCursorStyle style) return ret; } +int32_t DeviceStatusService::ReadUdKey(std::string &udKey) +{ + udKey = dragMgr_.GetUdKey(); + return RET_OK; +} + +int32_t DeviceStatusService::GetUdKey(std::string &udKey) +{ + CALL_DEBUG_ENTER; + int32_t ret = delegateTasks_.PostSyncTask( + std::bind(&DeviceStatusService::ReadUdKey, this, udKey)); + if (ret != RET_OK) { + FI_HILOGE("Get target udKey failed, ret:%{public}d", ret); + } + return ret; +} + int32_t DeviceStatusService::GetDragTargetPid() { CALL_DEBUG_ENTER; -- Gitee From 71e462623be594cdedf5ed5348105f0ee9dcf314 Mon Sep 17 00:00:00 2001 From: Justin_Hu Date: Fri, 31 Mar 2023 03:30:37 +0000 Subject: [PATCH 2/5] add resetDragData interface Signed-off-by: Justin_Hu Change-Id: I0f9cb9efbe74403a5907da918981180f1273d345 --- .../interaction/include/interaction_manager.h | 2 +- .../drag/include/drag_data_adapter.h | 1 + .../interaction/drag/include/drag_manager.h | 4 +--- .../interaction/drag/src/drag_data_adapter.cpp | 8 ++++++++ services/interaction/drag/src/drag_manager.cpp | 18 +++++++++--------- services/native/include/devicestatus_service.h | 1 - services/native/src/devicestatus_service.cpp | 13 +------------ 7 files changed, 21 insertions(+), 26 deletions(-) diff --git a/interfaces/innerkits/interaction/include/interaction_manager.h b/interfaces/innerkits/interaction/include/interaction_manager.h index 0eb69fee1..00465699d 100644 --- a/interfaces/innerkits/interaction/include/interaction_manager.h +++ b/interfaces/innerkits/interaction/include/interaction_manager.h @@ -126,7 +126,7 @@ public: * @return 返回值如果是-1则是无效值,为大于等于0的值为正确值 * @since 10 */ - int32_t GetUdKey(std::string &udKey); + int32_t GetUdKey(std::string &udKey); /** * @brief 注册拖拽状态监听。。 diff --git a/services/interaction/drag/include/drag_data_adapter.h b/services/interaction/drag/include/drag_data_adapter.h index 1015f05fe..44596d086 100644 --- a/services/interaction/drag/include/drag_data_adapter.h +++ b/services/interaction/drag/include/drag_data_adapter.h @@ -41,6 +41,7 @@ public: void SetDragWindowVisible(bool visible); bool GetDragWindowVisible() const; int32_t GetShadowOffset(int32_t& offsetX, int32_t& offsetY, int32_t& width, int32_t& height) const; + void ResetDragData(); private: DragData dragData_; diff --git a/services/interaction/drag/include/drag_manager.h b/services/interaction/drag/include/drag_manager.h index 6be310188..de94a73c8 100644 --- a/services/interaction/drag/include/drag_manager.h +++ b/services/interaction/drag/include/drag_manager.h @@ -47,9 +47,8 @@ public: int32_t StartDrag(const DragData &dragData, SessionPtr sess); int32_t StopDrag(DragResult result, bool hasCustomAnimation); int32_t GetDragTargetPid() const; - std::string GetUdKey() const; + int32_t GetUdKey(std::string &udKey) const; void SetDragTargetPid(int32_t dragTargetPid); - void SetUdKey(const std::string &udKey); int32_t UpdateDragStyle(DragCursorStyle style); void DragCallback(std::shared_ptr pointerEvent); void OnDragUp(std::shared_ptr pointerEvent); @@ -81,7 +80,6 @@ private: DragMessage dragState_ { DragMessage::MSG_DRAG_STATE_STOP }; int32_t interceptorId_ { -1 }; int32_t dragTargetPid_ { -1 }; - std::string udKey_; SessionPtr dragOutSession_ { nullptr }; DragDrawing dragDrawing_; IContext* context_ { nullptr }; diff --git a/services/interaction/drag/src/drag_data_adapter.cpp b/services/interaction/drag/src/drag_data_adapter.cpp index 75ab638b7..f39ec045f 100644 --- a/services/interaction/drag/src/drag_data_adapter.cpp +++ b/services/interaction/drag/src/drag_data_adapter.cpp @@ -81,6 +81,14 @@ int32_t DragDataAdapter::GetShadowOffset(int32_t& offsetX, int32_t& offsetY, int offsetX, offsetY, width, height); return RET_OK; } + +void DragDataAdapter::ResetDragData() +{ + CALL_DEBUG_ENTER; + ShadowInfo shadowInfo; + std::vector buffer; + dragData_ = { shadowInfo, buffer, "", -1, -1, -1, -1, -1, -1, false }; +} } // namespace DeviceStatus } // namespace Msdp } // namespace OHOS \ No newline at end of file diff --git a/services/interaction/drag/src/drag_manager.cpp b/services/interaction/drag/src/drag_manager.cpp index 7fb7e1e43..b1fb47a5a 100644 --- a/services/interaction/drag/src/drag_manager.cpp +++ b/services/interaction/drag/src/drag_manager.cpp @@ -118,6 +118,7 @@ int32_t DragManager::StopDrag(DragResult result, bool hasCustomAnimation) } dragState_ = DragMessage::MSG_DRAG_STATE_STOP; stateNotify_.StateChangedNotify(DragMessage::MSG_DRAG_STATE_STOP); + DataAdapter.ResetDragData(); if (NotifyDragResult(result) != RET_OK) { FI_HILOGE("NotifyDragResult failed"); return RET_ERR; @@ -130,10 +131,16 @@ int32_t DragManager::GetDragTargetPid() const return dragTargetPid_; } -std::string DragManager::GetUdKey() const +int32_t DragManager::GetUdKey(std::string &udKey) const { CALL_DEBUG_ENTER; - return udKey_; + DragData dragData = DataAdapter.GetDragData(); + if (dragData.udKey.empty()) { + FI_HILOGD("Target udKey is empty"); + return RET_ERR; + } + udKey = dragData.udKey; + return RET_OK; } void DragManager::SetDragTargetPid(int32_t dragTargetPid) @@ -142,12 +149,6 @@ void DragManager::SetDragTargetPid(int32_t dragTargetPid) dragTargetPid_ = dragTargetPid; } -void DragManager::SetUdKey(const std::string &udKey) -{ - CALL_DEBUG_ENTER; - udKey_ = udKey; -} - int32_t DragManager::UpdateDragStyle(DragCursorStyle style) { CALL_DEBUG_ENTER; @@ -228,7 +229,6 @@ void DragManager::OnDragUp(std::shared_ptr pointerEvent) INPUT_MANAGER->SetPointerVisible(true); } - SetUdKey(dragData.udKey); #ifdef OHOS_BUILD_ENABLE_COORDINATION UDMF::UDQueryOption option; option.udKey_ = dragData.udKey; diff --git a/services/native/include/devicestatus_service.h b/services/native/include/devicestatus_service.h index 4d4f67d6c..c0b8a414a 100644 --- a/services/native/include/devicestatus_service.h +++ b/services/native/include/devicestatus_service.h @@ -77,7 +77,6 @@ public: int32_t UpdateDragStyle(DragCursorStyle style) override; int32_t GetDragTargetPid() override; int32_t GetUdKey(std::string &udKey) override; - int32_t ReadUdKey(std::string &udKey); int32_t AddDraglistener() override; int32_t RemoveDraglistener() override; int32_t SetDragWindowVisible(bool visible) override; diff --git a/services/native/src/devicestatus_service.cpp b/services/native/src/devicestatus_service.cpp index 870c9271a..5adfbf7cb 100644 --- a/services/native/src/devicestatus_service.cpp +++ b/services/native/src/devicestatus_service.cpp @@ -757,21 +757,10 @@ int32_t DeviceStatusService::UpdateDragStyle(DragCursorStyle style) return ret; } -int32_t DeviceStatusService::ReadUdKey(std::string &udKey) -{ - udKey = dragMgr_.GetUdKey(); - return RET_OK; -} - int32_t DeviceStatusService::GetUdKey(std::string &udKey) { CALL_DEBUG_ENTER; - int32_t ret = delegateTasks_.PostSyncTask( - std::bind(&DeviceStatusService::ReadUdKey, this, udKey)); - if (ret != RET_OK) { - FI_HILOGE("Get target udKey failed, ret:%{public}d", ret); - } - return ret; + return dragMgr_.GetUdKey(udKey); } int32_t DeviceStatusService::GetDragTargetPid() -- Gitee From addd8bbc0ef1ba1de6eb6176b25e00a44cf328e8 Mon Sep 17 00:00:00 2001 From: Justin_Hu Date: Fri, 31 Mar 2023 07:26:49 +0000 Subject: [PATCH 3/5] review Signed-off-by: Justin_Hu Change-Id: I827d1130ac115d7f8bc8740a2d367092affd4d4c --- frameworks/native/src/devicestatus_client.cpp | 5 ++++- .../interaction/include/interaction_manager.h | 1 + services/communication/base/idevicestatus.h | 4 ++-- services/interaction/drag/include/drag_manager.h | 2 +- services/interaction/drag/src/drag_manager.cpp | 13 ++++++------- services/native/src/devicestatus_service.cpp | 7 ++++++- 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/frameworks/native/src/devicestatus_client.cpp b/frameworks/native/src/devicestatus_client.cpp index c17bf87d4..10b47ebd8 100644 --- a/frameworks/native/src/devicestatus_client.cpp +++ b/frameworks/native/src/devicestatus_client.cpp @@ -249,7 +249,10 @@ int32_t DeviceStatusClient::GetDragTargetPid() int32_t DeviceStatusClient::GetUdKey(std::string &udKey) { CALL_DEBUG_ENTER; - DEV_RET_IF_NULL_WITH_RET((Connect() != RET_OK), RET_ERR); + if (devicestatusProxy_ == nullptr) { + DEV_HILOGE(SERVICE, "devicestatusProxy_ is nullptr"); + return RET_ERR; + } return devicestatusProxy_->GetUdKey(udKey); } diff --git a/interfaces/innerkits/interaction/include/interaction_manager.h b/interfaces/innerkits/interaction/include/interaction_manager.h index 00465699d..ee97804e0 100644 --- a/interfaces/innerkits/interaction/include/interaction_manager.h +++ b/interfaces/innerkits/interaction/include/interaction_manager.h @@ -123,6 +123,7 @@ public: /** * @brief 获取拖拽目标窗口UdKey + * @param UdKey 拖拽目标窗口统一数据密钥。 * @return 返回值如果是-1则是无效值,为大于等于0的值为正确值 * @since 10 */ diff --git a/services/communication/base/idevicestatus.h b/services/communication/base/idevicestatus.h index 356218e10..76cc7fdeb 100644 --- a/services/communication/base/idevicestatus.h +++ b/services/communication/base/idevicestatus.h @@ -42,12 +42,12 @@ public: START_DRAG, STOP_DRAG, GET_DRAG_TARGET_PID, + GET_DRAG_TARGET_UDKEY, REGISTER_DRAG_MONITOR, UNREGISTER_DRAG_MONITOR, SET_DRAG_WINDOW_VISIBLE, GET_SHADOW_OFFSET, - ALLOC_SOCKET_FD = 40, - GET_DRAG_TARGET_UDKEY + ALLOC_SOCKET_FD = 40 }; virtual void Subscribe(Type type, diff --git a/services/interaction/drag/include/drag_manager.h b/services/interaction/drag/include/drag_manager.h index de94a73c8..7dfa36cae 100644 --- a/services/interaction/drag/include/drag_manager.h +++ b/services/interaction/drag/include/drag_manager.h @@ -47,7 +47,7 @@ public: int32_t StartDrag(const DragData &dragData, SessionPtr sess); int32_t StopDrag(DragResult result, bool hasCustomAnimation); int32_t GetDragTargetPid() const; - int32_t GetUdKey(std::string &udKey) const; + int32_t GetUdKey(std::string &udKey); void SetDragTargetPid(int32_t dragTargetPid); int32_t UpdateDragStyle(DragCursorStyle style); void DragCallback(std::shared_ptr pointerEvent); diff --git a/services/interaction/drag/src/drag_manager.cpp b/services/interaction/drag/src/drag_manager.cpp index b1fb47a5a..c4f133fcc 100644 --- a/services/interaction/drag/src/drag_manager.cpp +++ b/services/interaction/drag/src/drag_manager.cpp @@ -131,12 +131,12 @@ int32_t DragManager::GetDragTargetPid() const return dragTargetPid_; } -int32_t DragManager::GetUdKey(std::string &udKey) const +int32_t DragManager::GetUdKey(std::string &udKey) { CALL_DEBUG_ENTER; DragData dragData = DataAdapter.GetDragData(); if (dragData.udKey.empty()) { - FI_HILOGD("Target udKey is empty"); + FI_HILOGE("Target udKey is empty"); return RET_ERR; } udKey = dragData.udKey; @@ -230,16 +230,15 @@ void DragManager::OnDragUp(std::shared_ptr pointerEvent) } #ifdef OHOS_BUILD_ENABLE_COORDINATION - UDMF::UDQueryOption option; - option.udKey_ = dragData.udKey; - UDMF::UDPrivilege privilege; + UDMF::QueryOption option; + option.key_ = dragData.udKey; + UDMF::Privilege privilege; privilege.pid_ = pid; FI_HILOGD("AddPrivilege enter"); int32_t ret = UDMF::UdmfClient::GetInstance().AddPrivilege(option, privilege); if (ret != RET_OK) { - FI_HILOGD("Failed to send pid to Udmf client"); + FI_HILOGE("Failed to send pid to Udmf client"); } - FI_HILOGD("AddPrivilege end"); #endif // OHOS_BUILD_ENABLE_COORDINATION CHKPV(context_); context_->GetTimerManager().AddTimer(TIMEOUT_MS, 1, [this]() { diff --git a/services/native/src/devicestatus_service.cpp b/services/native/src/devicestatus_service.cpp index 5adfbf7cb..a1fb37794 100644 --- a/services/native/src/devicestatus_service.cpp +++ b/services/native/src/devicestatus_service.cpp @@ -760,7 +760,12 @@ int32_t DeviceStatusService::UpdateDragStyle(DragCursorStyle style) int32_t DeviceStatusService::GetUdKey(std::string &udKey) { CALL_DEBUG_ENTER; - return dragMgr_.GetUdKey(udKey); + int32_t ret = delegateTasks_.PostSyncTask( + std::bind(&DragManager::GetUdKey, &dragMgr_, udKey)); + if (ret != RET_OK) { + FI_HILOGE("UpdateDragStyle failed, ret:%{public}d", ret); + } + return ret; } int32_t DeviceStatusService::GetDragTargetPid() -- Gitee From e1e271429800436f349cf5f9ca3258ac1eea0bc4 Mon Sep 17 00:00:00 2001 From: Justin_Hu Date: Fri, 31 Mar 2023 09:19:29 +0000 Subject: [PATCH 4/5] review Signed-off-by: Justin_Hu Change-Id: I1ee6133e6366d6e4492c229f1904d89b9b2bde9e --- .../interaction/src/interaction_manager.cpp | 2 +- .../interaction/drag/include/drag_manager.h | 1 + .../interaction/drag/src/drag_manager.cpp | 31 ++++++++++++------- services/native/src/devicestatus_service.cpp | 9 ++++-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/frameworks/native/interaction/src/interaction_manager.cpp b/frameworks/native/interaction/src/interaction_manager.cpp index b470c0c41..90e88658a 100644 --- a/frameworks/native/interaction/src/interaction_manager.cpp +++ b/frameworks/native/interaction/src/interaction_manager.cpp @@ -85,7 +85,7 @@ int32_t InteractionManager::GetDragTargetPid() return InteractionMgrImpl.GetDragTargetPid(); } -int32_t GetUdKey(std::string &udKey) +int32_t InteractionManager::GetUdKey(std::string &udKey) { return InteractionMgrImpl.GetUdKey(udKey); } diff --git a/services/interaction/drag/include/drag_manager.h b/services/interaction/drag/include/drag_manager.h index 7dfa36cae..798d3ae73 100644 --- a/services/interaction/drag/include/drag_manager.h +++ b/services/interaction/drag/include/drag_manager.h @@ -49,6 +49,7 @@ public: int32_t GetDragTargetPid() const; int32_t GetUdKey(std::string &udKey); void SetDragTargetPid(int32_t dragTargetPid); + void SendDragData(int32_t targetPid, const std::string &udKey); int32_t UpdateDragStyle(DragCursorStyle style); void DragCallback(std::shared_ptr pointerEvent); void OnDragUp(std::shared_ptr pointerEvent); diff --git a/services/interaction/drag/src/drag_manager.cpp b/services/interaction/drag/src/drag_manager.cpp index c4f133fcc..33c6b9c42 100644 --- a/services/interaction/drag/src/drag_manager.cpp +++ b/services/interaction/drag/src/drag_manager.cpp @@ -212,6 +212,25 @@ void DragManager::OnDragMove(std::shared_ptr pointerEvent) dragDrawing_.Draw(pointerEvent->GetTargetDisplayId(), pointerItem.GetDisplayX(), pointerItem.GetDisplayY()); } +void DragManager::SendDragData(int32_t targetPid, const std::string &udKey) +{ + CALL_DEBUG_ENTER; +#ifdef OHOS_BUILD_ENABLE_COORDINATION + UDMF::QueryOption option; + option.key = udKey; + UDMF::Privilege privilege; + privilege.pid = targetPid; + FI_HILOGD("AddPrivilege enter"); + int32_t ret = UDMF::UdmfClient::GetInstance().AddPrivilege(option, privilege); + if (ret != RET_OK) { + FI_HILOGE("Failed to send pid to Udmf client"); + } +#else + (void)(targetPid); + (void)(udKey); +#endif // OHOS_BUILD_ENABLE_COORDINATION +} + void DragManager::OnDragUp(std::shared_ptr pointerEvent) { CALL_DEBUG_ENTER; @@ -229,17 +248,7 @@ void DragManager::OnDragUp(std::shared_ptr pointerEvent) INPUT_MANAGER->SetPointerVisible(true); } -#ifdef OHOS_BUILD_ENABLE_COORDINATION - UDMF::QueryOption option; - option.key_ = dragData.udKey; - UDMF::Privilege privilege; - privilege.pid_ = pid; - FI_HILOGD("AddPrivilege enter"); - int32_t ret = UDMF::UdmfClient::GetInstance().AddPrivilege(option, privilege); - if (ret != RET_OK) { - FI_HILOGE("Failed to send pid to Udmf client"); - } -#endif // OHOS_BUILD_ENABLE_COORDINATION + SendDragData(pid, dragData.udKey); CHKPV(context_); context_->GetTimerManager().AddTimer(TIMEOUT_MS, 1, [this]() { this->StopDrag(DragResult::DRAG_EXCEPTION, false); diff --git a/services/native/src/devicestatus_service.cpp b/services/native/src/devicestatus_service.cpp index a1fb37794..f4b71270c 100644 --- a/services/native/src/devicestatus_service.cpp +++ b/services/native/src/devicestatus_service.cpp @@ -763,7 +763,7 @@ int32_t DeviceStatusService::GetUdKey(std::string &udKey) int32_t ret = delegateTasks_.PostSyncTask( std::bind(&DragManager::GetUdKey, &dragMgr_, udKey)); if (ret != RET_OK) { - FI_HILOGE("UpdateDragStyle failed, ret:%{public}d", ret); + FI_HILOGE("GetUdKey failed, ret:%{public}d", ret); } return ret; } @@ -771,7 +771,12 @@ int32_t DeviceStatusService::GetUdKey(std::string &udKey) int32_t DeviceStatusService::GetDragTargetPid() { CALL_DEBUG_ENTER; - return dragMgr_.GetDragTargetPid(); + int32_t ret = delegateTasks_.PostSyncTask( + std::bind(&DragManager::GetDragTargetPid, &dragMgr_)); + if (ret == RET_ERR) { + FI_HILOGE("GetDragTargetPid failed, ret:%{public}d", ret); + } + return ret; } #ifdef OHOS_BUILD_ENABLE_COORDINATION -- Gitee From ecb996661c10192ca49cca58d92229d6c86029ba Mon Sep 17 00:00:00 2001 From: Justin_Hu Date: Sat, 1 Apr 2023 02:02:55 +0000 Subject: [PATCH 5/5] review Signed-off-by: Justin_Hu Change-Id: I02ff2e23866b6788b204fd3033edd2ee2f81e4ef --- services/interaction/drag/src/drag_manager.cpp | 2 +- services/native/src/devicestatus_service.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/interaction/drag/src/drag_manager.cpp b/services/interaction/drag/src/drag_manager.cpp index 33c6b9c42..db76c9185 100644 --- a/services/interaction/drag/src/drag_manager.cpp +++ b/services/interaction/drag/src/drag_manager.cpp @@ -37,7 +37,7 @@ namespace Msdp { namespace DeviceStatus { namespace { constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, MSDP_DOMAIN_ID, "DragManager" }; -constexpr int32_t TIMEOUT_MS = 1000; +constexpr int32_t TIMEOUT_MS = 2000; constexpr int32_t DRAG_PRIORITY = 500; } // namespace diff --git a/services/native/src/devicestatus_service.cpp b/services/native/src/devicestatus_service.cpp index f4b71270c..9527ad583 100644 --- a/services/native/src/devicestatus_service.cpp +++ b/services/native/src/devicestatus_service.cpp @@ -761,7 +761,7 @@ int32_t DeviceStatusService::GetUdKey(std::string &udKey) { CALL_DEBUG_ENTER; int32_t ret = delegateTasks_.PostSyncTask( - std::bind(&DragManager::GetUdKey, &dragMgr_, udKey)); + std::bind(&DragManager::GetUdKey, &dragMgr_, std::ref(udKey))); if (ret != RET_OK) { FI_HILOGE("GetUdKey failed, ret:%{public}d", ret); } -- Gitee