[Preference] Improved behaviour on removing key 53/79153/2
authorPiotr Kosko <p.kosko@samsung.com>
Fri, 8 Jul 2016 10:46:53 +0000 (12:46 +0200)
committerPiotr Kosko <p.kosko@samsung.com>
Fri, 8 Jul 2016 10:50:11 +0000 (12:50 +0200)
[Feature] Removing listener also when key was removed.

[Verification] Code compiles without errors.
  TCT passrate is 100%.

Change-Id: I4aa9c6f4ffea08b526dad26e39fe67c8fd076fb0
Signed-off-by: Piotr Kosko <p.kosko@samsung.com>
src/preference/preference_manager.cc

index 2461f3f..e24be80 100644 (file)
@@ -214,8 +214,14 @@ common::TizenResult PreferenceManager::GetValue(const std::string& key) {
 common::TizenResult PreferenceManager::Remove(const std::string& key) {
   ScopeLogger();
 
-  int ret = preference_remove(key.c_str());
+  // unsetting listener if it is registered for key to be removed
+  auto res = UnsetChangeListener(key);
+  if (!res) {
+    //only log an error - listener could not be set
+    LoggerD("unsetting listener for given key failed, ignore error");
+  }
 
+  int ret = preference_remove(key.c_str());
   if (ret == PREFERENCE_ERROR_NONE) {
     return common::TizenSuccess();
   } else {
@@ -227,8 +233,9 @@ common::TizenResult PreferenceManager::RemoveAll() {
   ScopeLogger();
 
   int ret = preference_remove_all();
-
   if (ret == PREFERENCE_ERROR_NONE) {
+    //only clear vector (listeners are removed natively in preference_remove_all function)
+    key_listeners_.clear();
     return common::TizenSuccess();
   } else {
     return MakeErrResult(ret, "preference_remove_all function error");