Implement resume/pause, bind/unbind
authorhyunho <hhstark.kang@samsung.com>
Wed, 29 Jan 2020 01:56:32 +0000 (10:56 +0900)
committerhyunho <hhstark.kang@samsung.com>
Wed, 29 Jan 2020 01:56:32 +0000 (10:56 +0900)
Signed-off-by: hyunho <hhstark.kang@samsung.com>
watch-holder/src/watch.cc
watch-holder/src/watch.hh
watch-holder/src/watch_holder.cc
watch-holder/src/watch_holder.hh

index 5139b4a..c329df6 100644 (file)
  * limitations under the License.
  */
 
+#include <aul.h>
+#include <dlog.h>
+
 #include "watch.hh"
 
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "WATCH_HOLDER"
+
 using namespace std;
 using namespace screen_connector;
 namespace watch_holder {
@@ -27,23 +36,45 @@ Watch::Watch(string appid, Evas_Object* viewer_win, Watch::IEvent* listener)
 }
 
 void Watch::Resume() {
-
+  SendVisibility(true);
 }
 
 void Watch::Pause() {
-
+  SendVisibility(false);
 }
 
 void Watch::Terminate() {
+  aul_terminate_pid(pid_);
+}
 
+void Watch::OnAuxMsg(void *data, Evas_Object *o, void *ev_info) {
+       Watch* wa = (Watch*)data;
+       Elm_Win_Aux_Message *msg = (Elm_Win_Aux_Message *)ev_info;
+       const char *key = elm_win_aux_msg_key_get(wa->bind_win_, msg);
+       const char *val = elm_win_aux_msg_val_get(wa->bind_win_, msg);
+
+       if (!strcmp(key, "tz_remote_surface_mng") && !strcmp(val, "prebind")) {
+               wa->listener_->OnBound(*wa);
+               LOGI("Start bind mode !!");
+               evas_object_smart_callback_del(wa->bind_win_,
+                       "aux,msg,received", OnAuxMsg);
+       }
 }
 
-void Watch::Bind(Evas_Object* win) {
+int Watch::GetRid() const {
+  return RemoteSurface::GetRid();
+}
 
+void Watch::Bind(Evas_Object* win) {
+  bind_win_ = win;
+  elm_win_aux_hint_add(win, "wm.policy.win.msg.use", "1");
+       evas_object_smart_callback_add(win, "aux,msg,received",
+                       OnAuxMsg, this);
+  RemoteSurfaceEvas::Bind(screen_connector::EvasObject(win, false));
 }
 
 void Watch::Unbind() {
-
+  RemoteSurfaceEvas::Unbind();
 }
 
 Evas_Object* Watch::GetCurrentImage() const {
@@ -53,6 +84,7 @@ Evas_Object* Watch::GetCurrentImage() const {
 void Watch::OnEvasAdded(const std::string& appId, const std::string& instId,
     int pid, const screen_connector::EvasObject& image) {
   current_image_ = image.GetRaw();
+  pid_ = pid;
   listener_->OnAdded(*this);
 }
 
index d9945af..2d71deb 100644 (file)
@@ -47,6 +47,7 @@ class EXPORT_API Watch : private screen_connector::RemoteSurfaceEvas {
   bool IsBound();
   std::string GetAppId();
   int GetPid();
+  int GetRid() const ;
   tizen_base::Bundle GetExtra();
   bool IsFaulted();
  private:
@@ -56,11 +57,14 @@ class EXPORT_API Watch : private screen_connector::RemoteSurfaceEvas {
     int pid, const screen_connector::EvasObject& image) override;
   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);
 
  private:
+  int pid_;
   std::string appid_;
   IEvent* listener_;
   Evas_Object* current_image_;
+  Evas_Object* bind_win_;
 };
 
 }  // namespace watch_holder
index 43358de..6cfdde1 100644 (file)
@@ -65,7 +65,7 @@ int WatchHolder::Launch(
     LOGE("Fail to run watch (%d)", pid);
     return -1;
   }
-  return 0;
+  return pid;
 }
 
 void WatchHolder::EnableRendering() {
@@ -80,8 +80,8 @@ const std::list<std::shared_ptr<Watch>>& WatchHolder::GetStack() {
   return stack_;
 }
 
-Watch* WatchHolder::GetCurrent() {
-  return nullptr;
+Watch& WatchHolder::GetCurrent() {
+  return *stack_.back();
 }
 
 void WatchHolder::OnDead(const Watch& watch) {
@@ -117,6 +117,7 @@ int WatchHolder::OnLaunchSignal(const char *endpoint,
 
   string watch_appid = launch_data.GetString(AUL_K_APPID);
   holder->stack_.push_back(make_shared<Watch>(watch_appid, holder->win_, holder));
+  LOGE("LAUNCH DONE (%s)", viewer_appid.c_str());
   return 0;
 }
 
index 9e470cb..27a9ae2 100644 (file)
@@ -38,7 +38,7 @@ class EXPORT_API WatchHolder : public Watch::IEvent {
   void EnableRendering();
   void DisableRendering(int timeout);
   const std::list<std::shared_ptr<Watch>>& GetStack();
-  Watch* GetCurrent();
+  Watch& GetCurrent();
   void OnDead(const Watch& watch);
   void OnBound(const Watch& watch);
   void OnAdded(const Watch& watch) override;