Handling dead/launch process 22/226822/3
authorhyunho <hhstark.kang@samsung.com>
Thu, 5 Mar 2020 23:13:30 +0000 (08:13 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Fri, 6 Mar 2020 01:17:54 +0000 (01:17 +0000)
Change-Id: Iff7cdece000e17c0c4b47c04de8924cc62d2caa1
Signed-off-by: hyunho <hhstark.kang@samsung.com>
watch-holder/api/watch_holder.cc
watch-holder/src/watch.cc
watch-holder/src/watch.hh
watch-holder/src/watch_holder.cc
widget_viewer_sdk/src/main.c

index 9e35fe9..a4b841c 100644 (file)
@@ -33,7 +33,7 @@ struct watch_holder_s : public WatchHolder {
 
   void OnLaunched(const Watch& watch) override {
     Watch& w = const_cast<Watch&>(watch);
-    cb_.watch_holder_lifecycle_added_cb(reinterpret_cast<watch_h>(&w), cb_data_);
+    cb_.watch_holder_lifecycle_launched_cb(reinterpret_cast<watch_h>(&w), cb_data_);
   }
 
   void OnDead(const Watch& watch) override {
index 8d450eb..73e3012 100644 (file)
@@ -135,6 +135,10 @@ Bundle Watch::GetExtra() {
   return extra_data_;
 }
 
+void Watch::SetFaulted(bool faulted) {
+  is_faulted = faulted;
+}
+
 void Watch::OnEvasAdded(const std::string& appId, const std::string& instId,
     int pid, const screen_connector::EvasObject& image) {
   current_image_ = image.GetRaw();
index 9dd9b9f..366dde3 100644 (file)
@@ -64,6 +64,7 @@ class EXPORT_API Watch : private screen_connector::RemoteSurfaceEvas,
   void BlockUpdate(bool enable);
 
  private:
+  friend class WatchHolder;
   void OnEvasAdded(const std::string& appId, const std::string& instId,
     int pid, const screen_connector::EvasObject& image) override;
   void OnEvasRemoved(const std::string& appId, const std::string& instId,
@@ -71,6 +72,7 @@ class EXPORT_API Watch : private screen_connector::RemoteSurfaceEvas,
   void OnEvasChanged(const std::string& appId, const std::string& instId,
     int pid, const screen_connector::EvasObject& image) override;
   static void OnAuxMsg(void *data, Evas_Object *o, void *ev_info);
+  void SetFaulted(bool is_faulted);
 
  private:
   int pid_ = 0;
@@ -79,6 +81,7 @@ class EXPORT_API Watch : private screen_connector::RemoteSurfaceEvas,
   Evas_Object* current_image_ = nullptr;
   Evas_Object* bind_win_ = nullptr;
   tizen_base::Bundle extra_data_;
+  bool is_faulted = false;
 };
 
 }  // namespace watch_holder
index b6369b3..391a1db 100644 (file)
@@ -109,6 +109,22 @@ void WatchHolder::OnAmbientEvent(EventType ev, std::string sender,
 
 int WatchHolder::OnDeadSignal(const char *endpoint, aul_app_com_result_e e,
     bundle *envelope, void *user_data) {
+  WatchHolder* holder = (WatchHolder*)user_data;
+  Bundle data(envelope, false, false);
+  string appid = data.GetString(AUL_K_APPID);
+  string pid = data.GetString(AUL_K_PID);
+  string is_faulted = data.GetString(AUL_K_IS_FAULT);
+  list<shared_ptr<Watch>>::iterator it;
+  for (it = holder->stack_.begin(); it != holder->stack_.end(); ++it) {
+    if ((*it)->GetAppId() == appid &&
+        pid == to_string((*it)->GetPid())) {
+      (*it)->SetFaulted(is_faulted == "true");
+      holder->OnDead(**it);
+      break;
+    }
+  }
+  holder->stack_.erase(it);
+  LOGW("DEAD DONE (%s)", appid.c_str());
   return 0;
 }
 
@@ -131,7 +147,8 @@ int WatchHolder::OnLaunchSignal(const char *endpoint,
   } else {
     holder->stack_.push_back(make_shared<Watch>(watch_appid, holder->win_, holder));
   }
-  LOGE("LAUNCH DONE (%s)", viewer_appid.c_str());
+  holder->OnLaunched(*holder->GetCurrent());
+  LOGI("LAUNCH DONE (%s)", viewer_appid.c_str());
   return 0;
 }
 
index 6aba3ed..318d7a5 100644 (file)
@@ -770,11 +770,15 @@ static char *__get_pkgid_by_appid(char *appid)
 }
 
 static void __watch_launched_cb(watch_h watch, void *data) {
-       DbgPrint("watch launched");
+       char* appid = NULL;
+       watch_get_appid(watch, &appid);
+       DbgPrint("watch(%s) launched", appid);
 }
 
 static void __watch_dead_cb(watch_h watch, bool is_faulted, void *data) {
-       DbgPrint("watch dead");
+       char* appid = NULL;
+       watch_get_appid(watch, &appid);
+       DbgPrint("watch(%s) dead (%d)", appid, is_faulted);
 }
 
 static void __watch_added_cb(watch_h watch, void *data) {
@@ -874,6 +878,9 @@ static void _app_control(app_control_h service, void *data)
                lifecycle.watch_holder_lifecycle_ambient_changed_cb = __watch_ambient_changed_cb;
                lifecycle.watch_holder_lifecycle_ambient_event_cb = __watch_ambient_event_cb;
 
+               if (__watch_holder != NULL)
+                       watch_holder_destroy(__watch_holder);
+
                ret = watch_holder_create(s_info.win, lifecycle, &s_info, &__watch_holder);
                if (ret != WATCH_HOLDER_ERROR_NONE) {
                        ErrPrint("Watch Holder Error:%d", ret);