Fix apply allowed list bug 21/192021/3
authorhyunho <hhstark.kang@samsung.com>
Mon, 29 Oct 2018 02:27:47 +0000 (11:27 +0900)
committerhyunho <hhstark.kang@samsung.com>
Mon, 29 Oct 2018 10:02:44 +0000 (19:02 +0900)
If apply list failed, current provider info should be cleared(select nothing).
Also clear apply list should update provider info too.

Change-Id: If9b70806ad59fb7459400fa40264bd3be80507b6
Signed-off-by: hyunho <hhstark.kang@samsung.com>
unittest/src/test-complication.cc
watchface-complication/complication.cc

index a24e800..7292ff7 100644 (file)
@@ -251,4 +251,30 @@ TEST_F(WC, GetLastContext)
   char* value;
   bundle_get_str(ctx.get()->GetRaw(), "TEST_KEY", &value);
   EXPECT_STREQ(value, "TEST_VALUE");
+}
+
+TEST_F(WC, ApplyAllowedList)
+{
+  std::list<std::unique_ptr<Complication::ProviderInfo>> allowed_list;
+  allowed_list.emplace_back(std::unique_ptr<Complication::ProviderInfo>(
+        new Complication::ProviderInfo(providerId, ShortText)));
+
+  int ret = WC::complication->ApplyAllowedList(std::move(allowed_list));
+  EXPECT_EQ(ret, WATCHFACE_COMPLICATION_ERROR_NONE);
+
+  std::list<std::unique_ptr<Bundle>> const& list = complication->GetCandidates();
+  EXPECT_EQ(1, list.size());
+}
+
+TEST_F(WC, ClearAllowedList)
+{
+  std::list<std::unique_ptr<Complication::ProviderInfo>> allowed_list;
+  allowed_list.emplace_back(std::unique_ptr<Complication::ProviderInfo>(
+        new Complication::ProviderInfo(providerId, ShortText)));
+
+  int ret = WC::complication->ClearAllowedList();
+  EXPECT_EQ(ret, WATCHFACE_COMPLICATION_ERROR_NONE);
+
+  std::list<std::unique_ptr<Bundle>> const& list = complication->GetCandidates();
+  EXPECT_EQ(true, list.size() > 0);
 }
\ No newline at end of file
index 24c76cb..fa94aa7 100644 (file)
@@ -437,11 +437,16 @@ int Complication::Impl::UpdateProviderInfo() {
   if (ret != WATCHFACE_COMPLICATION_ERROR_NONE)
     return ret;
 
-  subscribe_id_ = gdbus_.get()->SubscribeSignal(
-      IGDBus::Complication, cur_provider_id_, -1, this);
-  if (subscribe_id_ == 0)
-    return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
-  LOGI("subscribe signal %d %d ", subscribe_id_, cur_type_);
+  gdbus_.get()->UnSubscribeSignal(subscribe_id_);
+  if (cur_type_ == NoData) {
+    subscribe_id_ = 0;
+  } else {
+    subscribe_id_ = gdbus_.get()->SubscribeSignal(
+        IGDBus::Complication, cur_provider_id_, -1, this);
+    if (subscribe_id_ == 0)
+      return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
+    LOGI("subscribe signal %d %d ", subscribe_id_, cur_type_);
+  }
 
   return ret;
 }
@@ -566,15 +571,7 @@ int Complication::SetCurDataIdx(int cur_data_idx) {
 
   LOGI("cur idx %d, cur provider %s, cur type %d", impl_->cur_data_idx_,
     impl_->cur_provider_id_.c_str(), impl_->cur_type_);
-  impl_->gdbus_.get()->UnSubscribeSignal(impl_->subscribe_id_);
-  if (impl_->cur_type_ == NoData) {
-    impl_->subscribe_id_ = 0;
-  } else {
-    ret = impl_->UpdateProviderInfo();
-    LOGI("subscribe signal %d", impl_->subscribe_id_);
-  }
-
-  return ret;
+  return impl_->UpdateProviderInfo();
 }
 
 const char* Complication::GetCurProviderId() {
@@ -700,7 +697,8 @@ int Complication::SendDataUpdateRequest() {
   std::string provider_appid = DBManager::GetProviderAppId(
       impl_->cur_provider_id_.c_str());
   if (provider_appid.empty()) {
-    LOGE("Can not find provider info from DB");
+    LOGE("Can not find provider info from DB : provider_id(%s)",
+        impl_->cur_provider_id_.c_str());
     return WATCHFACE_COMPLICATION_ERROR_PROVIDER_NOT_AVAILABLE;
   }
 
@@ -1044,24 +1042,35 @@ int Complication::Impl::UpdateCandidatesInfo() {
           && strtol(temp_type, NULL, 10) == cur_type_) {
         cur_data_idx_ = idx;
         LOGI("find cur idx %d", idx);
-        break;
+        return WATCHFACE_COMPLICATION_ERROR_NONE;
       }
     }
     idx++;
   }
 
-  return ret;
+  return WATCHFACE_COMPLICATION_ERROR_NOT_EXIST;
 }
 
 int Complication::ApplyAllowedList(
       std::list<std::unique_ptr<ProviderInfo>> allowed_list) {
   impl_->allowed_list_ = std::move(allowed_list);
   impl_->candidates_list_.clear();
-  return impl_->UpdateProviderInfo();
+  int ret = impl_->UpdateProviderInfo();
+
+  /*
+  * If current selected provider id is not included in allowed list,
+  * clear all selected provider info
+  */
+  if (ret == WATCHFACE_COMPLICATION_ERROR_NOT_EXIST) {
+    impl_->cur_data_idx_ = -1;
+    return WATCHFACE_COMPLICATION_ERROR_NONE;
+  }
+  return ret;
 }
 
 int Complication::ClearAllowedList() {
   impl_->allowed_list_.clear();
+  impl_->UpdateProviderInfo();
   return WATCHFACE_COMPLICATION_ERROR_NONE;
 }