Implements WatchBase
[platform/core/appfw/widget-viewer.git] / watch-holder / src / watch.cc
index 13212b2..546eed1 100644 (file)
 
 #include <aul.h>
 #include <dlog.h>
+#include <glib.h>
 #include <aul_app_com.h>
 #include <vconf.h>
+#include <screen_connector_remote_surface_evas/util.h>
 
 #include "watch.hh"
 
@@ -32,51 +34,40 @@ using namespace tizen_base;
 using namespace screen_connector;
 namespace watch_holder {
 
-Watch::Watch(string appid, Evas_Object* viewer_win, Watch::IEvent* listener, bool mock)
-  : RemoteSurfaceEvas(appid, RemoteSurface::WATCH,
-        make_shared<screen_connector::EvasObject>(viewer_win, false), mock),
-        appid_(appid), listener_(listener) {
-    RemoteSurfaceEvas::SetAutoVisibility(false);
+Watch::Watch(std::string appid, Evas_Object* viewer_win,
+    tizen_base::Bundle extra, IEvent* listener, bool mock)
+    : WatchBase(appid, screen_connector::util::GetWlSurface(viewer_win),
+        extra, listener, mock),
+      viewer_win_(make_shared<EvasObject>(viewer_win, false)),
+          image_event_listner_(make_shared<ImageEventListener>(this)) {
 }
 
-Watch::Watch(int rid, string id, string appid, Evas_Object* viewer_win, Watch::IEvent* listener, bool mock)
-    : RemoteSurfaceEvas(rid, id, RemoteSurface::WATCH,
-        make_shared<screen_connector::EvasObject>(viewer_win, false), mock),
-        appid_(appid), listener_(listener) {
-    RemoteSurfaceEvas::SetAutoVisibility(false);
+Watch::Watch(int rid, std::string id, std::string appid,
+    Evas_Object* viewer_win, tizen_base::Bundle extra,
+    WatchBase::IEvent* listener, bool mock)
+    : WatchBase(rid, id, appid,
+      screen_connector::util::GetWlSurface(viewer_win), extra, listener, mock),
+      viewer_win_(make_shared<EvasObject>(viewer_win, false)),
+      image_event_listner_(make_shared<ImageEventListener>(this)) {
 }
 
-Watch::Watch(string appid, Evas_Object* viewer_win, tizen_base::Bundle extra, Watch::IEvent* listener, bool mock)
-  : RemoteSurfaceEvas(appid, RemoteSurface::WATCH,
-        make_shared<screen_connector::EvasObject>(viewer_win, false), mock),
-        appid_(appid), listener_(listener), extra_data_(extra) {
-    RemoteSurfaceEvas::SetAutoVisibility(false);
+Watch::Watch(std::string appid, Evas_Object* viewer_win,
+    IEvent* listener, bool mock)
+    : WatchBase(appid, screen_connector::util::GetWlSurface(viewer_win),
+        listener, mock),
+      viewer_win_(make_shared<EvasObject>(viewer_win, false)),
+          image_event_listner_(make_shared<ImageEventListener>(this)) {
 }
 
-Watch::Watch(int rid, string id, string appid, Evas_Object* viewer_win, tizen_base::Bundle extra, Watch::IEvent* listener, bool mock)
-    : RemoteSurfaceEvas(rid, id, RemoteSurface::WATCH,
-        make_shared<screen_connector::EvasObject>(viewer_win, false), mock),
-        appid_(appid), listener_(listener), extra_data_(extra) {
-    RemoteSurfaceEvas::SetAutoVisibility(false);
-}
-
-void Watch::Resume() {
-  RemoteSurfaceEvas::NoRenderPush(300);
-  RemoteSurfaceEvas::SendVisibility(true);
-}
-
-void Watch::Pause() {
-  RemoteSurfaceEvas::SendVisibility(false);
-}
-
-int Watch::Terminate() {
-  return aul_terminate_pid(pid_);
-}
-
-void Watch::BlockUpdate(bool enable) {
-  RemoteSurface::SetBlock(enable);
+Watch::Watch(int rid, std::string id, std::string appid,
+    Evas_Object* viewer_win, WatchBase::IEvent* listener, bool mock)
+    : WatchBase(rid, id, appid,
+      screen_connector::util::GetWlSurface(viewer_win), listener, mock),
+      viewer_win_(make_shared<EvasObject>(viewer_win, false)),
+      image_event_listner_(make_shared<ImageEventListener>(this)) {
 }
 
+Watch::~Watch() = default;
 void Watch::OnAuxMsg(void *data, Evas_Object *o, void *ev_info) {
   Watch* wa = (Watch*)data;
   if (wa->bind_win_ == nullptr) {
@@ -94,93 +85,61 @@ void Watch::OnAuxMsg(void *data, Evas_Object *o, void *ev_info) {
   }
 
   if (!strcmp(key, "tz_remote_surface_mng") && !strcmp(val, "prebind")) {
-    wa->is_bound_ = true;
-    wa->listener_->OnBound(*wa);
+    wa->GetListener()->OnBound(*wa);
     LOGI("Start bind mode !!");
     evas_object_smart_callback_del(wa->bind_win_,
       "aux,msg,received", OnAuxMsg);
   }
 }
 
-void Watch::CancelTouch() {
-  RemoteSurface::SendTouchCancel();
-}
-
-int Watch::GetRid() const {
-  return RemoteSurface::GetRid();
-}
-
-int Watch::GetPid() const {
-  return pid_;
-}
-
-bool Watch::IsBound() const {
-  return is_bound_;
-}
-
-string Watch::GetAppId() const {
-  return appid_;
-}
-
-bool Watch::IsFaulted() const {
-  return is_faulted_;
-}
-
 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();
-  is_bound_ = false;
+  WatchBase::Bind(screen_connector::util::GetWlSurface(win));
 }
 
-Evas_Object* Watch::GetCurrentImage() const {
-  return current_image_;
+void Watch::NoRenderPush(int timeout) {
+  LOGI("No render push start");
+  elm_win_norender_push(evas_object_evas_get(viewer_win_->GetRaw()));
+  no_render_timer_ = g_timeout_add(timeout,
+      [](gpointer user_data)->gboolean {
+    Watch* wa = static_cast<Watch*>(user_data);
+    elm_win_norender_pop(evas_object_evas_get(wa->viewer_win_->GetRaw()));
+    wa->no_render_timer_ = 0;
+    LOGW("No render push timeout!");
+    return G_SOURCE_REMOVE;
+  }, this);
 }
 
-Bundle Watch::GetExtra() const {
-  return extra_data_;
+void Watch::Resume() {
+  NoRenderPush(200);
+  WatchBase::Resume();
 }
 
-void Watch::SetFaulted(bool faulted) {
-  is_faulted_ = faulted;
+Evas_Object* Watch::GetCurrentImageEvas() const {
+  return current_image_->GetRaw();
 }
 
-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);
+void Watch::OnAdded(const string& appid, const string& inst_id,
+    int pid, shared_ptr<WlBuffer> tbm) {
+  current_image_.reset(new Image(evas_object_image_filled_add(
+            evas_object_evas_get(viewer_win_->GetRaw())),
+            image_event_listner_.get(), inst_id, pid, this));
+  WatchBase::OnAdded(appid, inst_id, pid, tbm);
 }
 
-void Watch::OnEvasRemoved(const std::string& appId, const std::string& instId,
-    int pid, const screen_connector::EvasObject& image) {
-  listener_->OnRemoved(*this);
+void Watch::OnRemoved(const string& appid, const string& inst_id,
+      int pid, shared_ptr<WlBuffer> tbm) {
+  WatchBase::OnRemoved(appid, inst_id, pid, tbm);
   current_image_ = nullptr;
 }
 
-void Watch::OnEvasChanged(const std::string& appId, const std::string& instId,
-    int pid, const screen_connector::EvasObject& image) {
-  listener_->OnUpdated(*this);
+void Watch::OnChanged(const string& appid, const string& inst_id,
+      int pid, shared_ptr<WlBuffer> tbm) {
+  current_image_->Update(tbm);
+  WatchBase::OnChanged(appid, inst_id, pid, tbm);
 }
 
-int Watch::NotifyChangedEvent() const {
-  tizen_base::Bundle b;
-  b.Add(NOTIFY_CHANGED_EVENT_APPID_KEY, appid_);
-  b.Add(NOTIFY_CHANGED_EVENT_RID_KEY, to_string(GetRid()));
-  LOGW("Notify Changed(%s)", appid_.c_str());
-  int ret = vconf_set_str(
-      VCONFKEY_WATCH_CURRENT_WATCH_INFO, (const char*)b.ToRaw().first.get());
-  if (ret != 0) {
-    LOGE("Fail to send noti (%d)", ret);
-    return -1;
-  }
-  return 0;
 }
-
-}  // namespace watch_holder