Add functions for getting extra bundle 29/225029/9
authorInkyun Kil <inkyun.kil@samsung.com>
Wed, 12 Feb 2020 01:38:19 +0000 (10:38 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Wed, 4 Mar 2020 03:22:48 +0000 (03:22 +0000)
Change-Id: I0dd849514b38a4adbb7b4eb522f1b9e521d3f0f4
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
watch-holder/api/watch_holder.h
watch-holder/src/watch.cc
watch-holder/src/watch.hh
watch-holder/src/watch_holder.cc
watch-holder/src/watch_holder.hh

index 09d1dd3..62ed809 100644 (file)
@@ -18,8 +18,8 @@
 #define __WATCH_HOLDER_H__
 
 #include <app_control.h>
-#include <Evas.h>
 #include <bundle.h>
+#include <Evas.h>
 
 #include "watch.h"
 
index a83d847..5746128 100644 (file)
@@ -33,7 +33,7 @@ using namespace screen_connector;
 namespace watch_holder {
 
 Watch::Watch(string appid, Evas_Object* viewer_win, Watch::IEvent* listener)
-    : RemoteSurfaceEvas(appid, RemoteSurface::WATCH,
+  : RemoteSurfaceEvas(appid, RemoteSurface::WATCH,
         make_shared<screen_connector::EvasObject>(viewer_win, false)),
         appid_(appid), listener_(listener) {
     RemoteSurfaceEvas::SetAutoVisibility(false);
@@ -46,6 +46,20 @@ Watch::Watch(int rid, string id, string appid, Evas_Object* viewer_win, Watch::I
     RemoteSurfaceEvas::SetAutoVisibility(false);
 }
 
+Watch::Watch(string appid, Evas_Object* viewer_win, tizen_base::Bundle extra, Watch::IEvent* listener)
+  : RemoteSurfaceEvas(appid, RemoteSurface::WATCH,
+        make_shared<screen_connector::EvasObject>(viewer_win, false)),
+        appid_(appid), listener_(listener), extra_data_(extra) {
+    RemoteSurfaceEvas::SetAutoVisibility(false);
+}
+
+Watch::Watch(int rid, string id, string appid, Evas_Object* viewer_win, tizen_base::Bundle extra, Watch::IEvent* listener)
+    : RemoteSurfaceEvas(rid, id, RemoteSurface::WATCH,
+        make_shared<screen_connector::EvasObject>(viewer_win, false)),
+        appid_(appid), listener_(listener), extra_data_(extra) {
+    RemoteSurfaceEvas::SetAutoVisibility(false);
+}
+
 void Watch::Resume() {
   RemoteSurfaceEvas::NoRenderPush(200);
   RemoteSurfaceEvas::SendVisibility(true);
@@ -93,11 +107,6 @@ string Watch::GetAppId() const {
   return appid_;
 }
 
-Bundle Watch::GetExtra() {
-  Bundle b;
-  return b;
-}
-
 bool Watch::IsFaulted() {
   return false;
 }
@@ -118,6 +127,10 @@ Evas_Object* Watch::GetCurrentImage() const {
   return current_image_;
 }
 
+Bundle Watch::GetExtra() {
+  return extra_data_;
+}
+
 void Watch::OnEvasAdded(const std::string& appId, const std::string& instId,
     int pid, const screen_connector::EvasObject& image) {
   current_image_ = image.GetRaw();
index 5cde285..f4adb14 100644 (file)
@@ -38,11 +38,17 @@ class EXPORT_API Watch : private screen_connector::RemoteSurfaceEvas,
     virtual void OnUpdated(const Watch& watch) = 0;
     virtual void OnRemoved(const Watch& watch) = 0;
   };
+
   Watch(std::string appid, Evas_Object* viewer_win, IEvent* listener);
-  Watch(int rid, std::string id, std::string appid,
-      Evas_Object* viewer_win, Watch::IEvent* listener);
+  Watch(int rid, std::string id, std::string appid, Evas_Object* viewer_win,
+    Watch::IEvent* listener);
+  Watch(std::string appid, Evas_Object* viewer_win, tizen_base::Bundle extra,
+    IEvent* listener);
+  Watch(int rid, std::string id, std::string appid, Evas_Object* viewer_win,
+    tizen_base::Bundle extra, Watch::IEvent* listener);
   void Resume() override;
   void Pause() override;
+
   void Terminate();
   void Bind(Evas_Object* win);
   void Unbind();
@@ -71,6 +77,7 @@ class EXPORT_API Watch : private screen_connector::RemoteSurfaceEvas,
   IEvent* listener_;
   Evas_Object* current_image_ = nullptr;
   Evas_Object* bind_win_ = nullptr;
+  tizen_base::Bundle extra_data_;
 };
 
 }  // namespace watch_holder
index a5ce772..5b91aa6 100644 (file)
@@ -64,6 +64,7 @@ int WatchHolder::Launch(
   Evas_Coord x, y, w, h;
   evas_object_geometry_get(win_, &x, &y, &w, &h);
   Bundle data;
+
   if (extra != nullptr)
     data = Bundle(extra, true, true);
   aul_svc_set_appid(data.GetHandle(), watch_appid.c_str());
@@ -71,6 +72,10 @@ int WatchHolder::Launch(
   data.Add("WATCH_HEIGHT", std::to_string(h));
   data.Add("WATCH_BG_LAUNCH", std::to_string((int)background));
   data.Add(AUL_K_WIDGET_VIEWER, appid_);
+
+  if (extra != nullptr)
+    extra_map_[watch_appid] = Bundle(extra, true, true);
+
   int pid = appsvc_run_service(data.GetHandle(), 0, nullptr, nullptr);
   if (pid < 0) {
     LOGE("Fail to run watch (%d)", pid);
@@ -107,15 +112,21 @@ int WatchHolder::OnLaunchSignal(const char *endpoint,
     aul_app_com_result_e res, bundle *envelope, void *user_data) {
   Bundle launch_data(envelope, false, false);
   WatchHolder* holder = (WatchHolder*)user_data;
-
   string viewer_appid = launch_data.GetString(AUL_K_WIDGET_VIEWER);
   if (viewer_appid != holder->appid_) {
-    LOGE("It's not mine (%s)", viewer_appid.c_str());
+    LOGE("It's not mine (%s:%s)", viewer_appid.c_str(), holder->appid_.c_str());
     return 0;
   }
 
   string watch_appid = launch_data.GetString(AUL_K_APPID);
-  holder->stack_.push_back(make_shared<Watch>(watch_appid, holder->win_, holder));
+
+  if (holder->extra_map_.find(watch_appid) != holder->extra_map_.end()) {
+    Bundle extra(holder->extra_map_[watch_appid]);
+    holder->stack_.push_back(make_shared<Watch>(watch_appid, holder->win_, extra, holder));
+    holder->extra_map_.erase(watch_appid);
+  } else {
+    holder->stack_.push_back(make_shared<Watch>(watch_appid, holder->win_, holder));
+  }
   LOGE("LAUNCH DONE (%s)", viewer_appid.c_str());
   return 0;
 }
index cdf92a5..9be77af 100644 (file)
 
 #include <string>
 #include <list>
+#include <map>
 #include <memory>
 
 #include <Evas.h>
 #include <bundle.h>
+#include <bundle_cpp.h>
 #include <aul_app_com.h>
 
 #include "watch.hh"
@@ -53,6 +55,7 @@ class EXPORT_API WatchHolder : public Watch::IEvent, public AmbientListener {
  private:
   std::string appid_;
   Evas_Object* win_;
+  std::map<std::string, tizen_base::Bundle> extra_map_;
   std::list<std::shared_ptr<Watch>> stack_;
   aul_app_com_connection_h launch_signal_conn_ = nullptr;
   aul_app_com_connection_h dead_signal_conn_ = nullptr;