diff --git a/services/param/watcher/agent/watcher_manager_kits.cpp b/services/param/watcher/agent/watcher_manager_kits.cpp index 634db59f8f06e8905083b86b2016a2e8baa129ea..47c011b69dc770ccfa78f5267fb546db108e59a3 100644 --- a/services/param/watcher/agent/watcher_manager_kits.cpp +++ b/services/param/watcher/agent/watcher_manager_kits.cpp @@ -297,7 +297,7 @@ void WatcherManagerKits::ParamWatcher::OnParameterChange(const std::string &name uint32_t index = 0; ParameterChangeListener *listener = GetParameterListener(&index); while (listener != nullptr) { - if (!listener->CheckValueChange(value)) { + if (!listener->CheckValueChange(name, value)) { listener->OnParameterChange(name, value); } index++; diff --git a/services/param/watcher/agent/watcher_manager_kits.h b/services/param/watcher/agent/watcher_manager_kits.h index 2f25d3dec54efc262ef93a264768479e2b931a5e..9450187a46d4f6e901728c882597ed9a6f05723a 100644 --- a/services/param/watcher/agent/watcher_manager_kits.h +++ b/services/param/watcher/agent/watcher_manager_kits.h @@ -53,14 +53,16 @@ private: return (callback == callback_ && context == context_); } void OnParameterChange(const std::string &name, const std::string &value); - bool CheckValueChange(const std::string &value) + bool CheckValueChange(const std::string &name, const std::string &value) { - bool ret = (value_ == value); + bool ret = (value_ == value && name_ == name); value_ = value; + name_ = name; return ret; } private: std::string value_ {}; + std::string name_ {}; ParameterChangePtr callback_ { nullptr }; void *context_ { nullptr }; }; diff --git a/test/unittest/param/watcher_agent_unittest.cpp b/test/unittest/param/watcher_agent_unittest.cpp index 44d4ce28d063c6175dc9b32812d3f2a0351156f5..4e3dec24423c8608dcce2fbb810d3832eaf3d719 100644 --- a/test/unittest/param/watcher_agent_unittest.cpp +++ b/test/unittest/param/watcher_agent_unittest.cpp @@ -34,9 +34,11 @@ using namespace std; using namespace OHOS; using namespace OHOS::init_param; +int g_callbackCount = 0; static void TestParameterChange(const char *key, const char *value, void *context) { - printf("TestParameterChange key:%s %s", key, value); + printf("TestParameterChange key:%s %s \n", key, value); + g_callbackCount++; } static void TestWatcherCallBack(const char *key, ServiceStatus status) @@ -140,6 +142,7 @@ public: data.WriteString(name); data.WriteString(name); data.WriteString("watcherId"); + g_callbackCount = 0; int ret = SystemWatchParameter(name.c_str(), TestParameterChange, nullptr); EXPECT_EQ(ret, 0); WatcherManagerKits &instance = OHOS::init_param::WatcherManagerKits::GetInstance(); @@ -147,7 +150,13 @@ public: instance.remoteWatcher_->OnRemoteRequest(IWatcher::PARAM_CHANGE, data, reply, option); instance.remoteWatcher_->OnRemoteRequest(IWatcher::PARAM_CHANGE + 1, data, reply, option); instance.remoteWatcher_->OnParameterChange(name.c_str(), "testname", "testvalue"); + EXPECT_EQ(g_callbackCount, 2); + instance.remoteWatcher_->OnParameterChange(name.c_str(), "testname.2", "testvalue"); + EXPECT_EQ(g_callbackCount, 3); + instance.remoteWatcher_->OnParameterChange(name.c_str(), "testname.2", "testvalue"); + EXPECT_EQ(g_callbackCount, 3); } + EXPECT_EQ(g_callbackCount, 3); return 0; }