Add provider ready sequence 50/204350/2
authorhyunho <hhstark.kang@samsung.com>
Tue, 23 Apr 2019 08:06:12 +0000 (17:06 +0900)
committerhyunho <hhstark.kang@samsung.com>
Tue, 23 Apr 2019 08:10:22 +0000 (17:10 +0900)
When a watch application send update request right after
provider application launched, sometimes provider cannot
receieve data request becuase dbus subscribe process
is not finished yet. Let's add provider ready event
to make sure that send data request when the provider application
can receieve data request event.

Change-Id: Ib858e24e7c4c094c13ef7952ebc147b3ef782d19
Signed-off-by: hyunho <hhstark.kang@samsung.com>
watchface-common/watchface-util.cc
watchface-common/watchface-util.h
watchface-complication-provider/complication-provider-implementation.h
watchface-complication-provider/complication-provider.cc
watchface-complication/complication-implementation.h
watchface-complication/complication.cc

index 225a5ef..afe0f33 100644 (file)
@@ -345,6 +345,9 @@ out:
     case SetupReply :
       ret = "__SETUP_REPLY__";
       break;
+    case ProviderReady :
+      ret = "__PROVIDER_READY__";
+      break;
     default :
       break;
     }
index a24a258..1aaf0a5 100644 (file)
@@ -42,7 +42,8 @@ namespace util {
     EditableEditPreview,
     EditableEditCancel,
     EditableEditReady,
-    SetupReply
+    SetupReply,
+    ProviderReady
   };
 
   enum EncodeType {
index e4762c8..53c8491 100644 (file)
@@ -47,6 +47,7 @@ class ComplicationProvider::Impl : IGDBus::IGDBusEvent {
   void OnVanish(const std::string& name) override;
   void OnAppear(const std::string& name, const std::string& name_owner) override;
   std::list<std::string>& GetRequiredPrivileges();
+  int NotifyProviderReady();
   Impl(ComplicationProvider* parent, const std::string& provider_id, bool mock);
   class SenderInfo {
    public:
index 4fc3b29..87f5252 100644 (file)
@@ -36,6 +36,7 @@ namespace watchface_complication {
 
 ComplicationProvider::ComplicationProvider(const std::string& provider_id, bool mock)
                                        : impl_(new Impl(this, provider_id, mock)) {
+  impl_->NotifyProviderReady();
 }
 
 ComplicationProvider::~ComplicationProvider() = default;
@@ -157,6 +158,15 @@ void ComplicationProvider::Impl::OnVanish(const std::string& watch_name) {
   }
 }
 
+int ComplicationProvider::Impl::NotifyProviderReady() {
+  LOGI("notify %s", provider_id_.c_str());
+  if (!gdbus_.get()->EmitSignal(IGDBus::Complication, "",
+      provider_id_, -1, util::GetCmdStr(util::ProviderReady),
+      g_variant_new("(s)", provider_id_.c_str())))
+    return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
+  return WATCHFACE_COMPLICATION_ERROR_NONE;
+}
+
 void ComplicationProvider::Impl::OnAppear(const std::string& name,
     const std::string& name_owner) {
 }
index 16f755f..0305b03 100644 (file)
@@ -83,6 +83,7 @@ class Complication::Impl : IGDBus::IGDBusEvent, IPackageManager::IPackageEvent {
                     const std::string& sender_name);
   void UpdatedProcess(GVariant* parameters);
   void NotifyDataUpdateProcess(GVariant* parameters);
+  void ProviderReadyProcess(GVariant* parameters);
   int UpdateCurProvider(std::string new_provider_id, ComplicationType type);
 
  private:
index 5a4bcf5..278b79d 100644 (file)
@@ -175,7 +175,6 @@ void Complication::Impl::OnVanish(const std::string& name) {
 void Complication::Impl::OnAppear(const std::string& name,
     const std::string& name_owner) {
   LOGI("OnAppear %s  ", name.c_str());
-  parent_->SendDataUpdateRequest(false);
 }
 
 bool Complication::Impl::IsValidSender(GDBusConnection* connection,
@@ -238,6 +237,16 @@ void Complication::Impl::NotifyDataUpdateProcess(GVariant* parameters) {
   parent_->OnNotifyDataUpdate();
 }
 
+void Complication::Impl::ProviderReadyProcess(GVariant* parameters) {
+  char* provider_id;
+  g_variant_get(parameters, "(&s)", &provider_id);
+  if (strcmp(cur_provider_id_.c_str(), provider_id) != 0) {
+    LOGI("It's not mine %s", provider_id);
+    return;
+  }
+  parent_->SendDataUpdateRequest(false);
+}
+
 void Complication::Impl::OnSignal(GDBusConnection* connection,
                                   const std::string& sender_name,
                                   const std::string& object_path,
@@ -254,6 +263,9 @@ void Complication::Impl::OnSignal(GDBusConnection* connection,
   } else if (signal_name.compare(
       util::GetCmdStr(util::CompNotifyDataUpdate)) == 0) {
     NotifyDataUpdateProcess(parameters);
+  } else if (signal_name.compare(
+      util::GetCmdStr(util::ProviderReady)) == 0) {
+    ProviderReadyProcess(parameters);
   }
 }