From d0a1a384a1c6a8df3a94363f96c171aaee4d596a Mon Sep 17 00:00:00 2001 From: caochunlei Date: Fri, 1 Apr 2022 14:30:37 +0800 Subject: [PATCH 1/2] caochunlei1@huawei.com Signed-off-by: caochunlei --- .../include/mission_listener_controller.h | 15 +++++-- .../src/mission_listener_controller.cpp | 41 ++++--------------- 2 files changed, 20 insertions(+), 36 deletions(-) diff --git a/services/abilitymgr/include/mission_listener_controller.h b/services/abilitymgr/include/mission_listener_controller.h index ee003f2b378..ae56f35c7e6 100644 --- a/services/abilitymgr/include/mission_listener_controller.h +++ b/services/abilitymgr/include/mission_listener_controller.h @@ -85,9 +85,19 @@ public: void HandleUnInstallApp(const std::list &missions); private: - void NotifyListeners(int32_t missionId, IMissionListener::MissionListenerCmd cmd); void OnListenerDied(const wptr &remote); + template + void CallListeners(F func, Args&&... args) + { + std::lock_guard guard(listenerLock_); + for (auto listener : missionListeners_) { + if (listener) { + (listener->*func)(std::forward(agrs)...); + } + } + } + class ListenerDeathRecipient : public IRemoteObject::DeathRecipient { public: using ListenerDiedHandler = std::function &)>; @@ -104,9 +114,6 @@ private: std::shared_ptr handler_; std::vector> missionListeners_; sptr listenerDeathRecipient_; - - using ListenerFun = void (IMissionListener::*)(int); - std::unordered_map listenerFunMap_; }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/mission_listener_controller.cpp b/services/abilitymgr/src/mission_listener_controller.cpp index c53591d8e05..5f3a5ed44d5 100644 --- a/services/abilitymgr/src/mission_listener_controller.cpp +++ b/services/abilitymgr/src/mission_listener_controller.cpp @@ -27,10 +27,6 @@ using Cmd = IMissionListener::MissionListenerCmd; MissionListenerController::MissionListenerController() { - listenerFunMap_[Cmd::ON_MISSION_CREATED] = &IMissionListener::OnMissionCreated; - listenerFunMap_[Cmd::ON_MISSION_DESTROYED] = &IMissionListener::OnMissionDestroyed; - listenerFunMap_[Cmd::ON_MISSION_SNAPSHOT_CHANGED] = &IMissionListener::OnMissionSnapshotChanged; - listenerFunMap_[Cmd::ON_MISSION_MOVED_TO_FRONT] = &IMissionListener::OnMissionMovedToFront; } MissionListenerController::~MissionListenerController() @@ -111,7 +107,8 @@ void MissionListenerController::NotifyMissionCreated(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionCreated failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_CREATED); + HILOG_INFO("notify listeners mission is created, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionCreated, missionId); }; handler_->PostTask(task); } @@ -128,7 +125,8 @@ void MissionListenerController::NotifyMissionDestroyed(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionDestroyed failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_DESTROYED); + HILOG_INFO("notify listeners mission is destroyed, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionDestroyed, missionId); }; handler_->PostTask(task); } @@ -151,7 +149,7 @@ void MissionListenerController::HandleUnInstallApp(const std::list &mis return; } for (auto id : missions) { - self->NotifyListeners(id, Cmd::ON_MISSION_DESTROYED); + self->CallListeners(&IMissionListener::OnMissionDestroyed, id); } }; handler_->PostTask(task); @@ -171,7 +169,8 @@ void MissionListenerController::NotifyMissionSnapshotChanged(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionSnapshotChanged failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_SNAPSHOT_CHANGED); + HILOG_INFO("notify listeners mission snapshot changed, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionSnapshotChanged, missionId); }; handler_->PostTask(task); } @@ -189,34 +188,12 @@ void MissionListenerController::NotifyMissionMovedToFront(int32_t missionId) HILOG_ERROR("self is nullptr, NotifyMissionSnapshotChanged failed."); return; } - self->NotifyListeners(missionId, Cmd::ON_MISSION_MOVED_TO_FRONT); + HILOG_INFO("notify listeners mission is moved to front, missionId:%{public}d.", missionId); + self->CallListeners(&IMissionListener::OnMissionMovedToFront, missionId); }; handler_->PostTask(task); } -void MissionListenerController::NotifyListeners(int32_t missionId, IMissionListener::MissionListenerCmd cmd) -{ - HILOG_INFO("notify mission listeners begin, cmd:%{public}d", cmd); - auto it = listenerFunMap_.find(cmd); - if (it == listenerFunMap_.end()) { - HILOG_ERROR("invalid cmd:%{public}d", cmd); - return; - } - auto fun = it->second; - if (!fun) { - HILOG_ERROR("find fun failed, cmd:%{public}d", cmd); - return; - } - - std::lock_guard guard(listenerLock_); - for (auto listener : missionListeners_) { - if (listener) { - (listener->*fun)(missionId); - } - } - HILOG_INFO("notify mission listeners end, cmd:%{public}d", cmd); -} - void MissionListenerController::OnListenerDied(const wptr &remote) { HILOG_DEBUG("On mission listener died."); -- Gitee From 11d31b96b56708bc70b41ef6603dff0be05d60da Mon Sep 17 00:00:00 2001 From: caochunlei Date: Sat, 2 Apr 2022 10:36:24 +0800 Subject: [PATCH 2/2] caochunlei1@huawei.com Signed-off-by: caochunlei --- services/abilitymgr/include/mission_listener_controller.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/abilitymgr/include/mission_listener_controller.h b/services/abilitymgr/include/mission_listener_controller.h index ae56f35c7e6..508926d2711 100644 --- a/services/abilitymgr/include/mission_listener_controller.h +++ b/services/abilitymgr/include/mission_listener_controller.h @@ -93,7 +93,7 @@ private: std::lock_guard guard(listenerLock_); for (auto listener : missionListeners_) { if (listener) { - (listener->*func)(std::forward(agrs)...); + (listener->*func)(std::forward(args)...); } } } -- Gitee