From c746d903ed859d9f3174044c835965c71c380ad3 Mon Sep 17 00:00:00 2001 From: wangsen1994 Date: Mon, 9 Jun 2025 19:33:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangsen1994 --- frameworks/ans/IAnsManager.idl | 4 +-- frameworks/ans/src/notification_helper.cpp | 8 +++--- frameworks/core/include/ans_notification.h | 4 +-- frameworks/core/src/ans_notification.cpp | 8 +++--- .../ans_notification_branch_test.cpp | 4 +-- interfaces/inner_api/notification_helper.h | 4 +-- .../include/advanced_notification_service.h | 4 +-- .../ans/include/distributed_device_status.h | 2 +- .../distributed_extension_service.h | 1 + .../advanced_notification_publish_service.cpp | 1 + ...tification_distributed_manager_service.cpp | 6 ++--- .../distributed_extension_service.cpp | 23 +++++++++++++--- ...nced_notification_publish_service_test.cpp | 8 +++--- .../advanced_notification_service_test.cpp | 4 +-- .../include/base/distributed_device_data.h | 1 + ...liveview_all_scenarios_extension_wrapper.h | 4 +-- .../soft_bus/distributed_device_service.h | 1 + .../include/soft_bus/distributed_service.h | 2 +- .../soft_bus/distributed_subscribe_service.h | 2 ++ ...veview_all_scenarios_extension_wrapper.cpp | 2 +- .../soft_bus/distributed_bundle_service.cpp | 2 +- .../soft_bus/distributed_device_service.cpp | 27 ++++++++++++++++--- .../distributed_extern_intferface.cpp | 5 ++-- .../distributed_publish_service_v2.cpp | 2 +- .../src/soft_bus/distributed_service.cpp | 26 +++++++----------- .../distributed_subscribe_service_v2.cpp | 14 +++++----- .../src/soft_bus/distributed_subscriber.cpp | 2 +- tools/test/mock/mock_ans_manager_stub.h | 4 +-- 28 files changed, 106 insertions(+), 69 deletions(-) diff --git a/frameworks/ans/IAnsManager.idl b/frameworks/ans/IAnsManager.idl index 87d8151ce..cc06a6c62 100644 --- a/frameworks/ans/IAnsManager.idl +++ b/frameworks/ans/IAnsManager.idl @@ -281,9 +281,9 @@ interface OHOS.Notification.IAnsManager { void CancelAsBundleWithAgent([in] sptr bundleOption, [in] int id); - void SetTargetDeviceStatus([in] String deviceType, [in] unsigned int status, [in] String deveiceId); + void SetTargetDeviceStatus([in] String deviceType, [in] unsigned int status, [in] String deviceId); - void SetTargetDeviceStatus([in] String deviceType, [in] unsigned int status, [in] unsigned int controlFlag, [in] String deveiceId, [in] int userId); + void SetTargetDeviceStatus([in] String deviceType, [in] unsigned int status, [in] unsigned int controlFlag, [in] String deviceId, [in] int userId); void GetDoNotDisturbProfile([in] long id, [out] sptr profile); diff --git a/frameworks/ans/src/notification_helper.cpp b/frameworks/ans/src/notification_helper.cpp index 3bd88a0ce..b605205ec 100644 --- a/frameworks/ans/src/notification_helper.cpp +++ b/frameworks/ans/src/notification_helper.cpp @@ -652,16 +652,16 @@ ErrCode NotificationHelper::SetAdditionConfig(const std::string &key, const std: } ErrCode NotificationHelper::SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, - const std::string deveiceId) + const std::string deviceId) { - return DelayedSingleton::GetInstance()->SetTargetDeviceStatus(deviceType, status, deveiceId); + return DelayedSingleton::GetInstance()->SetTargetDeviceStatus(deviceType, status, deviceId); } ErrCode NotificationHelper::SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, - const uint32_t controlFlag, const std::string deveiceId, int32_t userId) + const uint32_t controlFlag, const std::string deviceId, int32_t userId) { return DelayedSingleton::GetInstance()->SetTargetDeviceStatus(deviceType, status, controlFlag, - deveiceId, userId); + deviceId, userId); } ErrCode NotificationHelper::SetTargetDeviceBundleList(const std::string& deviceType, const std::string& deviceId, diff --git a/frameworks/core/include/ans_notification.h b/frameworks/core/include/ans_notification.h index e3caa8cab..c44995742 100644 --- a/frameworks/core/include/ans_notification.h +++ b/frameworks/core/include/ans_notification.h @@ -1230,7 +1230,7 @@ public: * @return Returns set result. */ ErrCode SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, - const std::string deveiceId = std::string()); + const std::string deviceId = std::string()); /** * @brief Set the status of the target device. @@ -1241,7 +1241,7 @@ public: * @return Returns set result. */ ErrCode SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, const uint32_t controlFlag, - const std::string deveiceId = std::string(), int32_t userId = 0); + const std::string deviceId = std::string(), int32_t userId = 0); ErrCode SetTargetDeviceBundleList(const std::string& deviceType, const std::string& deviceId, int operatorType, const std::vector& bundleList); diff --git a/frameworks/core/src/ans_notification.cpp b/frameworks/core/src/ans_notification.cpp index d91ca8db7..a02699877 100644 --- a/frameworks/core/src/ans_notification.cpp +++ b/frameworks/core/src/ans_notification.cpp @@ -2183,7 +2183,7 @@ ErrCode AnsNotification::IsSmartReminderEnabled(const std::string &deviceType, b } ErrCode AnsNotification::SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, - const std::string deveiceId) + const std::string deviceId) { ANS_LOGD("enter"); sptr proxy = GetAnsManagerProxy(); @@ -2192,11 +2192,11 @@ ErrCode AnsNotification::SetTargetDeviceStatus(const std::string &deviceType, co return ERR_ANS_SERVICE_NOT_CONNECTED; } - return proxy->SetTargetDeviceStatus(deviceType, status, deveiceId); + return proxy->SetTargetDeviceStatus(deviceType, status, deviceId); } ErrCode AnsNotification::SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, - const uint32_t controlFlag, const std::string deveiceId, int32_t userId) + const uint32_t controlFlag, const std::string deviceId, int32_t userId) { ANS_LOGD("enter"); sptr proxy = GetAnsManagerProxy(); @@ -2205,7 +2205,7 @@ ErrCode AnsNotification::SetTargetDeviceStatus(const std::string &deviceType, co return ERR_ANS_SERVICE_NOT_CONNECTED; } - return proxy->SetTargetDeviceStatus(deviceType, status, controlFlag, deveiceId, userId); + return proxy->SetTargetDeviceStatus(deviceType, status, controlFlag, deviceId, userId); } ErrCode AnsNotification::SetTargetDeviceBundleList(const std::string& deviceType, const std::string& deviceId, diff --git a/frameworks/core/test/unittest/ans_notification_branch_test/ans_notification_branch_test.cpp b/frameworks/core/test/unittest/ans_notification_branch_test/ans_notification_branch_test.cpp index 42f37eca2..7839fd314 100644 --- a/frameworks/core/test/unittest/ans_notification_branch_test/ans_notification_branch_test.cpp +++ b/frameworks/core/test/unittest/ans_notification_branch_test/ans_notification_branch_test.cpp @@ -626,13 +626,13 @@ public: } ErrCode SetTargetDeviceStatus(const std::string &deviceType, uint32_t status, - const std::string& deveiceId) override + const std::string& deviceId) override { return ERR_ANS_INVALID_PARAM; } ErrCode SetTargetDeviceStatus(const std::string &deviceType, uint32_t status, - uint32_t controlFlag, const std::string& deveiceId, int32_t userId) override + uint32_t controlFlag, const std::string& deviceId, int32_t userId) override { return ERR_ANS_INVALID_PARAM; } diff --git a/interfaces/inner_api/notification_helper.h b/interfaces/inner_api/notification_helper.h index 7696cdda5..2559b18f2 100644 --- a/interfaces/inner_api/notification_helper.h +++ b/interfaces/inner_api/notification_helper.h @@ -1217,7 +1217,7 @@ public: * @return Returns set result. */ static ErrCode SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, - const std::string deveiceId = std::string()); + const std::string deviceId = std::string()); /** * @brief Set the status of the target device. @@ -1228,7 +1228,7 @@ public: * @return Returns set result. */ static ErrCode SetTargetDeviceStatus(const std::string &deviceType, const uint32_t status, - const uint32_t controlFlag, const std::string deveiceId = std::string(), int32_t userId = 0); + const uint32_t controlFlag, const std::string deviceId = std::string(), int32_t userId = 0); /** * @brief set target device of bundle list. diff --git a/services/ans/include/advanced_notification_service.h b/services/ans/include/advanced_notification_service.h index 389b5bb24..f964f880b 100644 --- a/services/ans/include/advanced_notification_service.h +++ b/services/ans/include/advanced_notification_service.h @@ -1152,7 +1152,7 @@ public: * @return Returns set result. */ ErrCode SetTargetDeviceStatus(const std::string &deviceType, uint32_t status, - const std::string &deveiceId) override; + const std::string &deviceId) override; /** * @brief Set the status of the target device. @@ -1162,7 +1162,7 @@ public: * @return Returns set result. */ ErrCode SetTargetDeviceStatus(const std::string &deviceType, uint32_t status, - uint32_t controlFlag, const std::string &deveiceId, int32_t userId) override; + uint32_t controlFlag, const std::string &deviceId, int32_t userId) override; ErrCode SetTargetDeviceBundleList(const std::string& deviceType, const std::string& deviceId, int operatorType, const std::vector& bundleList) override; diff --git a/services/ans/include/distributed_device_status.h b/services/ans/include/distributed_device_status.h index f4f882652..61d8efc1c 100644 --- a/services/ans/include/distributed_device_status.h +++ b/services/ans/include/distributed_device_status.h @@ -43,7 +43,7 @@ public: ErrCode SetDeviceStatus(const std::string &deviceType, const uint32_t status, const uint32_t controlFlag); ErrCode SetDeviceStatus(const std::string &deviceType, const uint32_t status, - const uint32_t controlFlag, const std::string deveiceId, int32_t userId); + const uint32_t controlFlag, const std::string deviceId, int32_t userId); uint32_t GetDeviceStatus(const std::string &deviceType); diff --git a/services/ans/include/notification_extension/distributed_extension_service.h b/services/ans/include/notification_extension/distributed_extension_service.h index 292fe9633..c08eb02d2 100644 --- a/services/ans/include/notification_extension/distributed_extension_service.h +++ b/services/ans/include/notification_extension/distributed_extension_service.h @@ -62,6 +62,7 @@ public: private: DistributedExtensionService(); ~DistributedExtensionService(); + int32_t TransDeviceIdToUdid(const DmDeviceInfo &deviceInfo, std::string& udid); void SetMaxContentLength(nlohmann::json &configJson); void SetOperationReplyTimeout(nlohmann::json &configJson); diff --git a/services/ans/src/advanced_notification_publish_service.cpp b/services/ans/src/advanced_notification_publish_service.cpp index a9c54e00e..ff2ab3399 100644 --- a/services/ans/src/advanced_notification_publish_service.cpp +++ b/services/ans/src/advanced_notification_publish_service.cpp @@ -201,6 +201,7 @@ ErrCode AdvancedNotificationService::CollaborateFilter(const sptrGetSlotType(); if (slotType == NotificationConstant::SlotType::LIVE_VIEW) { result = NotificationPreferences::GetInstance()->IsDistributedEnabledBySlot( diff --git a/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp b/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp index 536c9c284..4e375f0a4 100644 --- a/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp +++ b/services/ans/src/distributed_manager/advanced_notification_distributed_manager_service.cpp @@ -414,7 +414,7 @@ ErrCode AdvancedNotificationService::ReplyDistributeOperation(const std::string& } ErrCode AdvancedNotificationService::SetTargetDeviceStatus(const std::string &deviceType, uint32_t status, - const std::string &deveiceId) + const std::string &deviceId) { ANS_LOGD("%{public}s", __FUNCTION__); uint32_t status_ = status; @@ -434,7 +434,7 @@ ErrCode AdvancedNotificationService::SetTargetDeviceStatus(const std::string &de } ErrCode AdvancedNotificationService::SetTargetDeviceStatus(const std::string &deviceType, uint32_t status, - uint32_t controlFlag, const std::string &deveiceId, int32_t userId) + uint32_t controlFlag, const std::string &deviceId, int32_t userId) { ANS_LOGD("%{public}s", __FUNCTION__); if (deviceType.empty()) { @@ -454,7 +454,7 @@ ErrCode AdvancedNotificationService::SetTargetDeviceStatus(const std::string &de if (deviceType == NotificationConstant::PAD_DEVICE_TYPE || deviceType == NotificationConstant::PC_DEVICE_TYPE) { return DelayedSingleton::GetInstance()->SetDeviceStatus(deviceType, status, - controlFlag, deveiceId, userId); + controlFlag, deviceId, userId); } DelayedSingleton::GetInstance()->SetDeviceStatus(deviceType, status, controlFlag); diff --git a/services/ans/src/notification_extension/distributed_extension_service.cpp b/services/ans/src/notification_extension/distributed_extension_service.cpp index 1b8c312fb..c9bd75ee1 100644 --- a/services/ans/src/notification_extension/distributed_extension_service.cpp +++ b/services/ans/src/notification_extension/distributed_extension_service.cpp @@ -31,8 +31,8 @@ using DeviceCallback = std::function; typedef int32_t (*INIT_LOCAL_DEVICE)(const std::string &deviceId, uint16_t deviceType, DistributedDeviceConfig config); typedef void (*RELEASE_LOCAL_DEVICE)(); -typedef void (*ADD_DEVICE)(const std::string &deviceId, uint16_t deviceType, - const std::string &networkId); +typedef void (*ADD_DEVICE)(const std::string &deviceId, const std::string &udId, + uint16_t deviceType, const std::string &networkId); typedef void (*RELEASE_DEVICE)(const std::string &deviceId, uint16_t deviceType); typedef void (*REFRESH_DEVICE)(const std::string &deviceId, uint16_t deviceType, const std::string &networkId); @@ -253,6 +253,18 @@ int32_t DistributedExtensionService::ReleaseLocalDevice() return 0; } +int32_t DistributedExtensionService::TransDeviceIdToUdid(const DmDeviceInfo &deviceInfo, std::string& udid) +{ + int32_t ret = DeviceManager::GetInstance().GetUdidByNetworkId(APP_ID, deviceInfo.networkId, udid); + if (ret != 0) { + ANS_LOGE("On line device failed, %{public}s ret:%{public}d", + StringAnonymous(deviceInfo.deviceId).c_str(), ret); + return ret; + } + ANS_LOGI("OnDeviceOnline id change %{public}s %{public}s", deviceInfo.deviceId, udid.c_str()); + return ERR_OK; +} + void DistributedExtensionService::OnDeviceOnline(const DmDeviceInfo &deviceInfo) { std::string name = TransDeviceTypeToName(deviceInfo.deviceTypeId); @@ -268,7 +280,10 @@ void DistributedExtensionService::OnDeviceOnline(const DmDeviceInfo &deviceInfo) ANS_LOGE("OnDeviceOnline init dans failed."); return; }; - + std::string udid; + if (TransDeviceIdToUdid(deviceInfo, udid) != ERR_OK) { + return; + } ADD_DEVICE handler = (ADD_DEVICE)dansHandler_->GetProxyFunc("AddDevice"); if (handler == nullptr) { ANS_LOGE("Dans handler is null ptr."); @@ -277,7 +292,7 @@ void DistributedExtensionService::OnDeviceOnline(const DmDeviceInfo &deviceInfo) std::lock_guard lock(mapLock_); DistributedDeviceDataService::GetInstance().ResetTargetDevice( DeviceTypeToTypeString(deviceInfo.deviceTypeId), deviceInfo.deviceId); - handler(deviceInfo.deviceId, deviceInfo.deviceTypeId, deviceInfo.networkId); + handler(deviceInfo.deviceId, udid, deviceInfo.deviceTypeId, deviceInfo.networkId); std::string reason = "deviceType: " + std::to_string(deviceInfo.deviceTypeId) + " ; deviceId: " + StringAnonymous(deviceInfo.deviceId) + " ; networkId: " + StringAnonymous(deviceInfo.networkId); diff --git a/services/ans/test/unittest/advanced_notification_publish_service_test.cpp b/services/ans/test/unittest/advanced_notification_publish_service_test.cpp index e1c7fdeec..24e9c5243 100644 --- a/services/ans/test/unittest/advanced_notification_publish_service_test.cpp +++ b/services/ans/test/unittest/advanced_notification_publish_service_test.cpp @@ -1950,8 +1950,8 @@ HWTEST_F(AnsPublishServiceTest, SetTargetDeviceStatus_00001, Function | SmallTes { std::string deviceType = ""; uint32_t status = 0; - std::string deveiceId = ""; - auto ret = advancedNotificationService_->SetTargetDeviceStatus(deviceType, status, deveiceId); + std::string deviceId = ""; + auto ret = advancedNotificationService_->SetTargetDeviceStatus(deviceType, status, deviceId); ASSERT_EQ(ret, ERR_ANS_INVALID_PARAM); } @@ -1971,8 +1971,8 @@ HWTEST_F(AnsPublishServiceTest, GetTargetDeviceStatus_00001, Function | SmallTes ASSERT_EQ(ret, ERR_ANS_INVALID_PARAM); uint32_t controlFlag = 0; deviceType = "testdeviceType"; - std::string deveiceId = ""; - ret = advancedNotificationService_->SetTargetDeviceStatus(deviceType, inputStatus, deveiceId); + std::string deviceId = ""; + ret = advancedNotificationService_->SetTargetDeviceStatus(deviceType, inputStatus, deviceId); ASSERT_EQ(ret, ERR_OK); ret = advancedNotificationService_->GetTargetDeviceStatus(deviceType, status); ASSERT_EQ(status, inputStatus); diff --git a/services/ans/test/unittest/advanced_notification_service_test.cpp b/services/ans/test/unittest/advanced_notification_service_test.cpp index b82f7cd7a..316ad312c 100644 --- a/services/ans/test/unittest/advanced_notification_service_test.cpp +++ b/services/ans/test/unittest/advanced_notification_service_test.cpp @@ -298,8 +298,8 @@ HWTEST_F(AdvancedNotificationServiceTest, AdvancedNotificationServiceTest_03000, { const std::string device = "current"; const uint32_t status = 1; - std::string deveiceId = ""; - ASSERT_EQ((int)advancedNotificationService_->SetTargetDeviceStatus(device, status, deveiceId), + std::string deviceId = ""; + ASSERT_EQ((int)advancedNotificationService_->SetTargetDeviceStatus(device, status, deviceId), (int)ERR_OK); } diff --git a/services/distributed/include/base/distributed_device_data.h b/services/distributed/include/base/distributed_device_data.h index 171827968..ddc9d166d 100644 --- a/services/distributed/include/base/distributed_device_data.h +++ b/services/distributed/include/base/distributed_device_data.h @@ -54,6 +54,7 @@ struct DistributedDeviceInfo { int32_t peerState_ = DeviceState::STATE_INIT; int32_t socketId_ = -1; int32_t connectedTry_ = 0; + std::string udid_; std::string deviceId_; std::string networkId_; }; diff --git a/services/distributed/include/base/distributed_liveview_all_scenarios_extension_wrapper.h b/services/distributed/include/base/distributed_liveview_all_scenarios_extension_wrapper.h index fc4be0046..dc45e89d2 100644 --- a/services/distributed/include/base/distributed_liveview_all_scenarios_extension_wrapper.h +++ b/services/distributed/include/base/distributed_liveview_all_scenarios_extension_wrapper.h @@ -36,7 +36,7 @@ public: typedef ErrCode (*TRIGGER_PUSH_WANT_AGENT)(const sptr &request, int32_t actionType, const AAFwk::WantParams extraInfo); typedef ErrCode (*SUBSCRIBE_ALL_CONNECT)(); - typedef ErrCode (*UnSUBSCRIBE_ALL_CONNECT)(); + typedef ErrCode (*UNSUBSCRIBE_ALL_CONNECT)(); ErrCode UpdateLiveviewDecodeContent(const sptr &request, std::vector &buffer); ErrCode TriggerPushWantAgent(const sptr &request, int32_t actionType, const AAFwk::WantParams extraInfo); @@ -45,7 +45,7 @@ public: private: void* ExtensionHandle_ = nullptr; SUBSCRIBE_ALL_CONNECT subscribeHandler_ = nullptr; - UnSUBSCRIBE_ALL_CONNECT unSubscribeHandler_ = nullptr; + UNSUBSCRIBE_ALL_CONNECT unSubscribeHandler_ = nullptr; TRIGGER_PUSH_WANT_AGENT triggerHandler_ = nullptr; UPDATE_LIVEVIEW_ENCODE_CONTENT updateLiveviewEncodeContent_ = nullptr; UPDATE_LIVEVIEW_DECODE_CONTENT updateLiveviewDecodeContent_ = nullptr; diff --git a/services/distributed/include/soft_bus/distributed_device_service.h b/services/distributed/include/soft_bus/distributed_device_service.h index eacf4e071..5b72b9890 100644 --- a/services/distributed/include/soft_bus/distributed_device_service.h +++ b/services/distributed/include/soft_bus/distributed_device_service.h @@ -45,6 +45,7 @@ public: bool IsSyncLiveView(const std::string& deviceId, bool forceSync); bool IsSyncIcons(const std::string& deviceId, bool forceSync); bool IsSyncInstalledBundle(const std::string& deviceId, bool forceSync); + bool GetDeviceInfoByUdid(const std::string& udid, DistributedDeviceInfo& device); bool GetDeviceInfo(const std::string& deviceId, DistributedDeviceInfo& device); void SetDeviceState(const std::string& deviceId, int32_t state); void SetDeviceSyncData(const std::string& deviceId, int32_t type, bool syncData); diff --git a/services/distributed/include/soft_bus/distributed_service.h b/services/distributed/include/soft_bus/distributed_service.h index 717e8c989..5961e672b 100644 --- a/services/distributed/include/soft_bus/distributed_service.h +++ b/services/distributed/include/soft_bus/distributed_service.h @@ -36,7 +36,7 @@ class DistributedService { public: DistributedService(); static DistributedService& GetInstance(); - void DestoryService(); + void DestroyService(); int32_t InitService(const std::string &deviceId, uint16_t deviceType); void AddDevice(DistributedDeviceInfo device); void ReleaseDevice(const std::string &deviceId, uint16_t deviceType); diff --git a/services/distributed/include/soft_bus/distributed_subscribe_service.h b/services/distributed/include/soft_bus/distributed_subscribe_service.h index 37ab4d4de..bb1691d9c 100644 --- a/services/distributed/include/soft_bus/distributed_subscribe_service.h +++ b/services/distributed/include/soft_bus/distributed_subscribe_service.h @@ -17,6 +17,7 @@ #define DISTRIBUTED_INCLUDE_SOFTBUS_DISTRIBUTED_SUBSCRIBE_SERVICE_H #include "distributed_subscriber.h" +#include #include "distributed_device_data.h" namespace OHOS { @@ -29,6 +30,7 @@ public: void SubscribeNotification(const DistributedDeviceInfo peerDevice); void UnSubscribeNotification(const std::string &deviceId, uint16_t deviceType); private: + std::mutex mapLock_; std::map> subscriberMap_; }; } diff --git a/services/distributed/src/base/distributed_liveview_all_scenarios_extension_wrapper.cpp b/services/distributed/src/base/distributed_liveview_all_scenarios_extension_wrapper.cpp index 577e864bb..993f9372c 100644 --- a/services/distributed/src/base/distributed_liveview_all_scenarios_extension_wrapper.cpp +++ b/services/distributed/src/base/distributed_liveview_all_scenarios_extension_wrapper.cpp @@ -64,7 +64,7 @@ void DistributedLiveviewAllScenariosExtensionWrapper::InitExtentionWrapper() ANS_LOGE("distributed subscribe all conncet failed, error: %{public}s", dlerror()); return; } - unSubscribeHandler_ = (UnSUBSCRIBE_ALL_CONNECT)dlsym(ExtensionHandle_, "UnSubscribeAllConnect"); + unSubscribeHandler_ = (UNSUBSCRIBE_ALL_CONNECT)dlsym(ExtensionHandle_, "UnSubscribeAllConnect"); if (unSubscribeHandler_ == nullptr) { ANS_LOGE("distributed unsubscribe all conncet failed, error: %{public}s", dlerror()); return; diff --git a/services/distributed/src/soft_bus/distributed_bundle_service.cpp b/services/distributed/src/soft_bus/distributed_bundle_service.cpp index 486655551..ef390cba5 100644 --- a/services/distributed/src/soft_bus/distributed_bundle_service.cpp +++ b/services/distributed/src/soft_bus/distributed_bundle_service.cpp @@ -295,7 +295,7 @@ void DistributedBundleService::SetDeviceBundleList(const std::shared_ptr device.deviceType_); return; } - auto ret = NotificationHelper::SetTargetDeviceBundleList(deviceType, deviceId, operatorType, bundleList); + auto ret = NotificationHelper::SetTargetDeviceBundleList(deviceType, device.udid_, operatorType, bundleList); ANS_LOGI("SetDeviceBundleList %{public}s %{public}s %{public}d %{public}zu %{public}d", deviceType.c_str(), StringAnonymous(deviceId).c_str(), operatorType, bundleList.size(), ret); } diff --git a/services/distributed/src/soft_bus/distributed_device_service.cpp b/services/distributed/src/soft_bus/distributed_device_service.cpp index 527ba1dc7..249c93626 100644 --- a/services/distributed/src/soft_bus/distributed_device_service.cpp +++ b/services/distributed/src/soft_bus/distributed_device_service.cpp @@ -112,7 +112,9 @@ bool DistributedDeviceService::IsSyncLiveView(const std::string& deviceId, bool return false; } if (iter->second.deviceType_ == DistributedHardware::DmDeviceType::DEVICE_TYPE_PAD) { - if (!iter->second.deviceUsage || iter->second.peerState_ != DeviceState::STATE_SYNC) { + if (!iter->second.deviceUsage || iter->second.peerState_ == DeviceState::STATE_SYNC) { + ANS_LOGI("Dans pad sync %{public}d %{public}d.", iter->second.peerState_, + iter->second.deviceUsage); return false; } } @@ -218,6 +220,19 @@ bool DistributedDeviceService::GetDeviceInfo(const std::string& deviceId, Distri return true; } +bool DistributedDeviceService::GetDeviceInfoByUdid(const std::string& udid, DistributedDeviceInfo& device) +{ + std::lock_guard lock(mapLock_); + for (auto deviceItem : peerDevice_) { + if (udid == deviceItem.second.udid_) { + device = deviceItem.second; + return true; + } + } + ANS_LOGI("Dans get deviceId unknonw %{public}s.", StringAnonymous(udid).c_str()); + return false; +} + bool DistributedDeviceService::CheckDeviceNeedSync(const std::string& deviceId) { std::lock_guard lock(mapLock_); @@ -304,10 +319,16 @@ void DistributedDeviceService::SetDeviceStatus(const std::shared_ptr& bo return; } + DistributedDeviceInfo device; + if (!GetDeviceInfo(deviceId, device)) { + ANS_LOGW("Dans get device failed %{public}s %{public}s.", deviceName.c_str(), + StringAnonymous(deviceId).c_str()); + return; + } int32_t status; if (stateBox.GetState(status)) { int32_t result = NotificationHelper::SetTargetDeviceStatus(deviceName, status, - DEFAULT_LOCK_SCREEN_FLAG, deviceId); + DEFAULT_LOCK_SCREEN_FLAG, device.udid_); ANS_LOGI("Dans set state %{public}s %{public}s %{public}d %{public}d.", deviceName.c_str(), StringAnonymous(deviceId).c_str(), status, result); } @@ -315,7 +336,7 @@ void DistributedDeviceService::SetDeviceStatus(const std::shared_ptr& bo bool liveViewEnable; bool notificationEnable; if (stateBox.GetLiveViewEnable(liveViewEnable) && stateBox.GetNotificationEnable(notificationEnable)) { - int32_t result = NotificationHelper::SetTargetDeviceSwitch(deviceName, deviceId, + int32_t result = NotificationHelper::SetTargetDeviceSwitch(deviceName, device.udid_, notificationEnable, liveViewEnable); ANS_LOGI("Dans set enable %{public}s %{public}s %{public}d %{public}d %{public}d.", deviceName.c_str(), StringAnonymous(deviceId).c_str(), liveViewEnable, notificationEnable, result); diff --git a/services/distributed/src/soft_bus/distributed_extern_intferface.cpp b/services/distributed/src/soft_bus/distributed_extern_intferface.cpp index 34fa2a947..61312325a 100644 --- a/services/distributed/src/soft_bus/distributed_extern_intferface.cpp +++ b/services/distributed/src/soft_bus/distributed_extern_intferface.cpp @@ -38,12 +38,13 @@ SYMBOL_EXPORT int32_t InitLocalDevice(const std::string &deviceId, uint16_t devi return DistributedService::GetInstance().InitService(deviceId, deviceType); } -SYMBOL_EXPORT void AddDevice(const std::string &deviceId, uint16_t deviceType, +SYMBOL_EXPORT void AddDevice(const std::string &deviceId, const std::string &udid, uint16_t deviceType, const std::string &networkId) { ANS_LOGI("InitLocalDevice %{public}s %{public}d %{public}s.", StringAnonymous(deviceId).c_str(), (int32_t)(deviceType), StringAnonymous(networkId).c_str()); DistributedDeviceInfo peerDevice = DistributedDeviceInfo(deviceType, deviceId, networkId); + peerDevice.udid_ = udid; DistributedClient::GetInstance().AddDevice(peerDevice); DistributedService::GetInstance().AddDevice(peerDevice); } @@ -72,7 +73,7 @@ SYMBOL_EXPORT void RefreshDevice(const std::string &deviceId, uint16_t deviceTyp SYMBOL_EXPORT void ReleaseLocalDevice() { - DistributedService::GetInstance().DestoryService(); + DistributedService::GetInstance().DestroyService(); } SYMBOL_EXPORT void InitHACallBack( diff --git a/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp b/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp index 045962bd6..f38eb26af 100644 --- a/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp +++ b/services/distributed/src/soft_bus/distributed_publish_service_v2.cpp @@ -539,11 +539,11 @@ void DistributedPublishService::MakeExtendInfo(const NotificationRequestBox& box extendInfo->SetParam(EXTENDINFO_INFO_PRE + EXTENDINFO_APP_ICON, AAFwk::String::Box(info)); } if (box.GetDeviceId(info)) { - extendInfo->SetParam(EXTENDINFO_INFO_PRE + EXTENDINFO_DEVICE_ID, AAFwk::String::Box(info)); DistributedDeviceInfo peerDevice; if (DistributedDeviceService::GetInstance().GetDeviceInfo(info, peerDevice)) { std::string deviceType = DistributedDeviceService::DeviceTypeToTypeString(peerDevice.deviceType_); extendInfo->SetParam(EXTENDINFO_INFO_PRE + EXTENDINFO_DEVICETYPE, AAFwk::String::Box(deviceType)); + extendInfo->SetParam(EXTENDINFO_INFO_PRE + EXTENDINFO_DEVICE_ID, AAFwk::String::Box(peerDevice.udid_)); } } std::string localType = DistributedDeviceService::DeviceTypeToTypeString(local.deviceType_); diff --git a/services/distributed/src/soft_bus/distributed_service.cpp b/services/distributed/src/soft_bus/distributed_service.cpp index 6df3bac0d..649d35fed 100644 --- a/services/distributed/src/soft_bus/distributed_service.cpp +++ b/services/distributed/src/soft_bus/distributed_service.cpp @@ -88,7 +88,7 @@ int32_t DistributedService::InitService(const std::string &deviceId, uint16_t de return 0; } -void DistributedService::DestoryService() +void DistributedService::DestroyService() { if (serviceQueue_ == nullptr) { ANS_LOGE("Check handler is null."); @@ -291,16 +291,17 @@ void DistributedService::HandleBundlesEvent(const std::string& bundleName, const void DistributedService::HandleDeviceUsingChange(const DeviceStatueChangeInfo& changeInfo) { - DistributedDeviceService::GetInstance().SetDeviceSyncData(changeInfo.deviceId, - DistributedDeviceService::DEVICE_USAGE, true); DistributedDeviceInfo device; - if (DistributedDeviceService::GetInstance().GetDeviceInfo(changeInfo.deviceId, device)) { - if (!DistributedDeviceService::GetInstance().IsSubscribeAllConnect()) { - DISTRIBUTED_LIVEVIEW_ALL_SCENARIOS_EXTENTION_WRAPPER->SubscribeAllConnect(); - DistributedDeviceService::GetInstance().SetSubscribeAllConnect(true); - } - DistributedPublishService::GetInstance().SyncLiveViewNotification(device, false); + if (!DistributedDeviceService::GetInstance().GetDeviceInfoByUdid(changeInfo.deviceId, device)) { + return; + } + DistributedDeviceService::GetInstance().SetDeviceSyncData(device.deviceId_, + DistributedDeviceService::DEVICE_USAGE, true); + if (!DistributedDeviceService::GetInstance().IsSubscribeAllConnect()) { + DISTRIBUTED_LIVEVIEW_ALL_SCENARIOS_EXTENTION_WRAPPER->SubscribeAllConnect(); + DistributedDeviceService::GetInstance().SetSubscribeAllConnect(true); } + DistributedPublishService::GetInstance().SyncLiveViewNotification(device, false); } #else void DistributedService::OnConsumed(const std::shared_ptr &request, @@ -368,15 +369,8 @@ void DistributedService::OnApplicationInfnChanged(const std::string& bundleName) void DistributedService::HandleMatchSync(const std::shared_ptr& boxMessage) { - int32_t type = 0; DistributedDeviceInfo peerDevice; NotifticationMatchBox matchBox = NotifticationMatchBox(boxMessage); - if (!matchBox.GetLocalDeviceType(type)) { - ANS_LOGI("Dans handle match device type failed."); - return; - } else { - peerDevice.deviceType_ = static_cast(type); - } if (!matchBox.GetLocalDeviceId(peerDevice.deviceId_)) { ANS_LOGI("Dans handle match device id failed."); return; diff --git a/services/distributed/src/soft_bus/distributed_subscribe_service_v2.cpp b/services/distributed/src/soft_bus/distributed_subscribe_service_v2.cpp index 4e355c789..7b04766ef 100644 --- a/services/distributed/src/soft_bus/distributed_subscribe_service_v2.cpp +++ b/services/distributed/src/soft_bus/distributed_subscribe_service_v2.cpp @@ -45,10 +45,11 @@ DistributedSubscribeService& DistributedSubscribeService::GetInstance() return distributedSubscribeService; } -void DistributedSubscribeService::SubscribeNotification(const DistributedDeviceInfo peerDevice) +void DistributedSubscribeService::SubscribeNotification(const DistributedDeviceInfo device) { - if (DistributedDeviceService::GetInstance().CheckDeviceExist(peerDevice.deviceId_)) { - ANS_LOGI("Local device no %{public}s .", StringAnonymous(peerDevice.deviceId_).c_str()); + DistributedDeviceInfo peerDevice; + if (!DistributedDeviceService::GetInstance().GetDeviceInfo(device.deviceId_, peerDevice)) { + ANS_LOGI("Local device no %{public}s .", StringAnonymous(device.deviceId_).c_str()); return; } @@ -63,10 +64,6 @@ void DistributedSubscribeService::SubscribeNotification(const DistributedDeviceI slotTypes.push_back(NotificationConstant::SlotType::SOCIAL_COMMUNICATION); subscribeInfo->SetSlotTypes(slotTypes); subscribeInfo->SetFilterType(FILTER_IM_TYPE); - } else if (peerDevice.deviceType_ == DistributedHardware::DmDeviceType::DEVICE_TYPE_PC || - peerDevice.deviceType_ == DistributedHardware::DmDeviceType::DEVICE_TYPE_2IN1 || - peerDevice.deviceType_ == DistributedHardware::DmDeviceType::DEVICE_TYPE_PAD) { - subscribeInfo->SetFilterType(FILTER_IM_REPLY_TYPE); } subscribeInfo->AddDeviceType(DistributedDeviceService::DeviceTypeToTypeString(peerDevice.deviceType_)); subscribeInfo->AddAppUserId(userId); @@ -74,6 +71,7 @@ void DistributedSubscribeService::SubscribeNotification(const DistributedDeviceI subscribeInfo->SetNeedNotifyResponse(true); int result = NotificationHelper::SubscribeNotification(subscriber, subscribeInfo); if (result == 0) { + std::lock_guard lock(mapLock_); auto iter = subscriberMap_.find(peerDevice.deviceId_); if (iter != subscriberMap_.end()) { NotificationHelper::UnSubscribeNotification(iter->second); @@ -91,6 +89,7 @@ void DistributedSubscribeService::SubscribeNotification(const DistributedDeviceI void DistributedSubscribeService::UnSubscribeNotification(const std::string &deviceId, uint16_t deviceType) { DistributedDeviceService::GetInstance().DeleteDeviceInfo(deviceId); + std::lock_guard lock(mapLock_); auto iter = subscriberMap_.find(deviceId); if (iter == subscriberMap_.end()) { ANS_LOGI("UnSubscribe invalid %{public}s.", StringAnonymous(deviceId).c_str()); @@ -109,6 +108,7 @@ void DistributedSubscribeService::UnSubscribeNotification(const std::string &dev void DistributedSubscribeService::UnSubscribeAllNotification() { + std::lock_guard lock(mapLock_); for (auto& subscriberInfo : subscriberMap_) { int32_t result = NotificationHelper::UnSubscribeNotification(subscriberInfo.second); ANS_LOGI("UnSubscribe %{public}s %{public}d.", subscriberInfo.first.c_str(), result); diff --git a/services/distributed/src/soft_bus/distributed_subscriber.cpp b/services/distributed/src/soft_bus/distributed_subscriber.cpp index bfec665f7..824970230 100644 --- a/services/distributed/src/soft_bus/distributed_subscriber.cpp +++ b/services/distributed/src/soft_bus/distributed_subscriber.cpp @@ -92,7 +92,7 @@ void DistribuedSubscriber::OnConsumed(const std::shared_ptr &reque } std::string deviceId = params->GetStringParam("notification_collaboration_deviceId_" + DistributedDeviceService::DeviceTypeToTypeString(peerDevice_.deviceType_)); - if (deviceId.empty() || deviceId != peerDevice_.deviceId_) { + if (deviceId.empty() || deviceId != peerDevice_.udid_) { ANS_LOGI("Dans OnConsumed invalid device %{public}s %{public}s.", StringAnonymous(deviceId).c_str(), StringAnonymous(peerDevice_.deviceId_).c_str()); return; diff --git a/tools/test/mock/mock_ans_manager_stub.h b/tools/test/mock/mock_ans_manager_stub.h index 6e602d4b5..af0e7860a 100644 --- a/tools/test/mock/mock_ans_manager_stub.h +++ b/tools/test/mock/mock_ans_manager_stub.h @@ -606,13 +606,13 @@ public: } ErrCode SetTargetDeviceStatus( - const std::string& deviceType, uint32_t status, const std::string& deveiceId) override + const std::string& deviceType, uint32_t status, const std::string& deviceId) override { return ERR_ANS_INVALID_PARAM; } ErrCode SetTargetDeviceStatus(const std::string& deviceType, uint32_t status, uint32_t controlFlag, - const std::string& deveiceId, int32_t userId) override + const std::string& deviceId, int32_t userId) override { return ERR_ANS_INVALID_PARAM; } -- Gitee