#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"
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) {
}
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