Add ambient event 26/226626/12
authorhyunho <hhstark.kang@samsung.com>
Wed, 4 Mar 2020 07:35:04 +0000 (16:35 +0900)
committerhyunho <hhstark.kang@samsung.com>
Thu, 5 Mar 2020 08:20:19 +0000 (17:20 +0900)
Change-Id: Ic0f4442eadce503fa1c526ecf950e6051269fe3c
Signed-off-by: hyunho <hhstark.kang@samsung.com>
ambient-viewer/src/ambient-viewer.cc
watch-holder/api/watch_holder.cc
watch-holder/api/watch_holder.h
watch-holder/src/ambient_listener.cc
watch-holder/src/ambient_listener.hh
watch-holder/src/watch_holder.cc
watch-holder/src/watch_holder.hh
watch-holder/src/watch_mirror.cc
watch-holder/src/watch_mirror.hh
widget_viewer_sdk/src/main.c

index 1d99bfe25ad8a56fe622d3c6ef16d5075b770024..aab64fb00661a94d82c00bcfd0bfd854c8e8812e 100644 (file)
@@ -40,16 +40,7 @@ namespace ambient_viewer {
 
 AmbientViewer::AmbientViewer(Evas_Object* win)
     : win_(win) {
-  char appid_buf[512] = {0, };
-  if (aul_app_get_appid_bypid(
-      getpid(), appid_buf, sizeof(appid_buf)) != AUL_R_OK) {
-    LOGE("Failed to get appid (%d)", getpid());
-  }
-
-  char endpoint[530];
-  snprintf(endpoint, sizeof(endpoint), "send_extra_data:%s", appid_buf);
-
-  if (aul_app_com_create(endpoint, nullptr, OnReceiveSignal,
+  if (aul_app_com_create("aod.ambientevent", nullptr, OnReceiveSignal,
       this, &receive_signal_conn_) != AUL_R_OK) {
     LOGE("Failed to listen sendextra signal");
   }
@@ -167,8 +158,7 @@ const ISurface& AmbientViewer::GetTopAppSurface() const {
 }
 
 int AmbientViewer::OnReceiveSignal(const char* endpoint, aul_app_com_result_e e,
-    bundle* envelope, void* user_data)
-{
+    bundle* envelope, void* user_data) {
   AmbientViewer* av = (AmbientViewer*)user_data;
   LOGD("OnReceiveSignal");
 
index f0128c88e200ad32753c9a537deca74de4b1b959..9e35fe9bbe937fab68cdf02cf22dccbb70f9c3b6 100644 (file)
@@ -65,6 +65,11 @@ struct watch_holder_s : public WatchHolder {
     cb_.watch_holder_lifecycle_ambient_changed_cb(enter, extra.GetHandle(), cb_data_);
   }
 
+  void OnAmbientEvent(EventType ev, std::string sender, tizen_base::Bundle extra) override {
+    cb_.watch_holder_lifecycle_ambient_event_cb(
+        (watch_holder_ambient_event_e)ev, sender.c_str(), extra.GetHandle(), cb_data_);
+  }
+
   watch_holder_lifecycle_st cb_;
   void* cb_data_;
 };
index 2f8d9670e57ea0b327b8cbeb1be6fd549b31bf40..2dfed3a757461c5fccace9684a7bb7f0ed6870a2 100644 (file)
@@ -34,6 +34,15 @@ extern "C" {
  */
 typedef struct watch_holder_s *watch_holder_h;
 
+/**
+ * @brief The ambient events.
+ * @remarks These events are only for internal applications.
+ */
+typedef enum {
+       WATCH_HOLDER_AMBIENT_EVENT_PREPARE, /**< This event represents preparing state of aod applications or watch applications. */
+       WATCH_HOLDER_AMBIENT_EVENT_READY /**< This event represents every step to display AOD is ready by aod applications or watch applications. */
+} watch_holder_ambient_event_e;
+
 /**
  * @brief The structure type containing the set of callback functions for watch events handle.
  * @remarks This structure only for internal applications.
@@ -46,6 +55,8 @@ typedef struct {
        void (*watch_holder_lifecycle_updated_cb)(watch_h watch, Evas_Object *image, void *data); /**< This callback function is called after the watch is updated. */
        void (*watch_holder_lifecycle_bound_cb)(watch_h watch, void *data); /**< This callback function is called after the watch is bound. */
        void (*watch_holder_lifecycle_ambient_changed_cb)(bool enter, bundle *extra, void *data); /**< This callback function is called when the device enters or exits ambient mode. */
+       void (*watch_holder_lifecycle_ambient_event_cb)(
+               watch_holder_ambient_event_e event, const char *sender, bundle *extra, void *data); /**< This callback function is called when the aod application or watch application sent an ambient event. */
 } watch_holder_lifecycle_st;
 
 /**
index 48bf595201921adf0361851b0555b9b6ac04a9a7..c69dd4d9010f3fe0dfea722e4ca87db55bede3e5 100644 (file)
@@ -36,8 +36,53 @@ namespace watch_holder {
   AmbientListener::AmbientListener() {
     if (aul_app_com_create("watch.ambientchange", nullptr, OnAmbientChangedSignal,
         this, &ambient_changed_signal_conn_) != AUL_R_OK) {
-      LOGE("Failed to listen watch.launch signal");
+      LOGE("Failed to listen watch.ambientchange signal");
     }
+
+    if (aul_app_com_create("aod.ambientevent", nullptr, OnReceiveSignal,
+        this, &ambient_event_signal_conn_) != AUL_R_OK) {
+      LOGE("Failed to listen aod.ambientevent signal");
+    }
+  }
+
+  int AmbientListener::OnReceiveSignal(const char* endpoint, aul_app_com_result_e e,
+      bundle* envelope, void* user_data) {
+    LOGI("Receive aod ambient event");
+    AmbientListener* listener = (AmbientListener*)user_data;
+    tizen_base::Bundle b = tizen_base::Bundle(envelope, false, false);
+    std::string event_type= b.GetString("__APP_AMBIENT_EVENT__");
+    int type = stoi(event_type);
+    std::string sender = b.GetString("__APP_AMBIENT_SENDER__");
+    b.Delete("__APP_AMBIENT_EVENT__");
+    b.Delete("__APP_AMBIENT_SENDER__");
+    listener->OnAmbientEvent((EventType)type, sender, b);
+    LOGI("Handling AOD ambient event(%d) from (%s) done",
+        type, sender.c_str());
+    return 0;
+  }
+
+  int AmbientListener::OnAmbientChangedSignal(const char *endpoint,
+      aul_app_com_result_e e, bundle *envelope, void *user_data) {
+    LOGI("Receive ambient change event");
+    tizen_base::Bundle data(envelope, false, false);
+    AmbientListener* listener = (AmbientListener*)user_data;
+    std::string mode = data.GetString("__AMBIENT_MODE__");
+    std::string extra = data.GetString("__AMBIENT_EXTRA__");
+    if (mode.empty())
+      return 0;
+
+    tizen_base::Bundle extra_data;
+    bool enter;
+    try {
+      extra_data = tizen_base::Bundle(extra);
+      enter = (bool)stoi(mode);
+    } catch (const std::exception& e) {
+      LOGE("Exception (%s)", e.what());
+      return 0;
+    }
+    listener->OnAmbientChanged(enter, extra_data);
+    LOGI("Handling AOD ambient changed(%d) done", (int)enter);
+    return 0;
   }
 
   AmbientListener::~AmbientListener() {
index bb73255dabded41a5310d6373fc15854a15bc96b..134ac87e835018752f8506767dd3f86a5cfd92c5 100644 (file)
@@ -26,33 +26,23 @@ namespace watch_holder {
 
 class AmbientListener {
  public:
+  enum EventType {
+    EVENT_AOD_PREPARE,
+    EVENT_AOD_READY
+  };
   AmbientListener();
   ~AmbientListener();
   static int OnAmbientChangedSignal(const char *endpoint,
-      aul_app_com_result_e e, bundle *envelope, void *user_data) {
-    tizen_base::Bundle data(envelope, false, false);
-    AmbientListener* listener = (AmbientListener*)user_data;
-    std::string mode = data.GetString("__AMBIENT_MODE__");
-    std::string extra = data.GetString("__AMBIENT_EXTRA__");
-    if (mode.empty())
-      return 0;
-
-    tizen_base::Bundle extra_data;
-    bool enter;
-    try {
-      extra_data = tizen_base::Bundle(extra);
-      enter = (bool)stoi(mode);
-    } catch (const std::exception& e) {
-      return 0;
-    }
-    listener->OnAmbientChanged(enter, extra_data);
-    return 0;
-  }
+      aul_app_com_result_e e, bundle *envelope, void *user_data);
+  static int OnReceiveSignal(const char* endpoint, aul_app_com_result_e e,
+      bundle* envelope, void* user_data);
 
   virtual void OnAmbientChanged(bool enter, tizen_base::Bundle& extra) = 0;
+  virtual void OnAmbientEvent(EventType ev, std::string sender, tizen_base::Bundle extra) = 0;
 
  private:
-  aul_app_com_connection_h ambient_changed_signal_conn_;
+  aul_app_com_connection_h ambient_changed_signal_conn_ = nullptr;
+  aul_app_com_connection_h ambient_event_signal_conn_ = nullptr;
 };
 
 }  // namespace watch_holder
index 5b91aa64b137b9a353399823de85902a4f0d92b1..b6369b3d564b2810159f675c918e5695ee4e6927 100644 (file)
@@ -103,6 +103,10 @@ std::shared_ptr<Watch> WatchHolder::GetCurrent() const {
 void WatchHolder::OnAmbientChanged(bool enter, Bundle& extra) {
 }
 
+void WatchHolder::OnAmbientEvent(EventType ev, std::string sender,
+    tizen_base::Bundle extra) {
+}
+
 int WatchHolder::OnDeadSignal(const char *endpoint, aul_app_com_result_e e,
     bundle *envelope, void *user_data) {
   return 0;
index 9be77af04da448f9b34fc03d90a1bd9621925a69..9107e7f22e828491e5881dd968afb870b2aefb77 100644 (file)
@@ -45,12 +45,14 @@ class EXPORT_API WatchHolder : public Watch::IEvent, public AmbientListener {
   virtual void OnLaunched(const Watch& watch) = 0;
   virtual void OnDead(const Watch& watch) = 0;
   virtual void OnAmbientChanged(bool enter, tizen_base::Bundle& extra) override;
+  virtual void OnAmbientEvent(EventType ev, std::string sender,
+      tizen_base::Bundle extra) override;
 
  private:
   static int OnDeadSignal(const char *endpoint, aul_app_com_result_e e,
-               bundle *envelope, void *user_data);
+    bundle *envelope, void *user_data);
   static int OnLaunchSignal(const char *endpoint,
-               aul_app_com_result_e res, bundle *envelope, void *user_data);
+    aul_app_com_result_e res, bundle *envelope, void *user_data);
 
  private:
   std::string appid_;
index bccfeed0420bdfa1ae05f6b09bb21ea871f6402b..24f19ee033050420323e5916bc578bdaf933b8f5 100644 (file)
@@ -82,6 +82,10 @@ std::shared_ptr<ISharableWatch> WatchMirror::GetCurrent() const {
 void WatchMirror::OnAmbientChanged(bool enter, Bundle& extra) {
 }
 
+void WatchMirror::OnAmbientEvent(EventType ev, std::string sender,
+    tizen_base::Bundle extra) {
+}
+
 void WatchMirror::OnChanged(const ISharableWatch& watch) {
 }
 
index adbd12b0a5f3608978a23279fbf626a9eb5cf601..3c7b44bbed5cd579e3ad740296396a5d76cc57d8 100644 (file)
@@ -44,6 +44,8 @@ class EXPORT_API WatchMirror : public Watch::IEvent, public AmbientListener {
   virtual void OnUpdated(const ISharableWatch& watch);
   virtual void OnRemoved(const ISharableWatch& watch);
   virtual void OnAmbientChanged(bool enter, tizen_base::Bundle& extra) override;
+  virtual void OnAmbientEvent(EventType ev, std::string sender,
+      tizen_base::Bundle extra) override;
 
  private:
   std::string GetUUID(std::string rid) const;
index ad8ee356ef93426c8eb94ce6e6ad63ea39a92b48..6aba3ed290e6a6940881eefeb3ee5c7e42bbe20f 100644 (file)
@@ -816,6 +816,11 @@ static void __watch_ambient_changed_cb(bool enter, bundle *extra, void *data) {
        DbgPrint("watch ambient changed (%d)", enter);
 }
 
+static void __watch_ambient_event_cb(
+               watch_holder_ambient_event_e event, const char *sender, bundle *extra, void *data) {
+       DbgPrint("watch ambient event (%d) from (%s)", event, sender);
+}
+
 static void _app_control(app_control_h service, void *data)
 {
        char *widget_id = NULL;
@@ -867,6 +872,7 @@ static void _app_control(app_control_h service, void *data)
                lifecycle.watch_holder_lifecycle_updated_cb = __watch_updated_cb;
                lifecycle.watch_holder_lifecycle_bound_cb = __watch_bound_cb;
                lifecycle.watch_holder_lifecycle_ambient_changed_cb = __watch_ambient_changed_cb;
+               lifecycle.watch_holder_lifecycle_ambient_event_cb = __watch_ambient_event_cb;
 
                ret = watch_holder_create(s_info.win, lifecycle, &s_info, &__watch_holder);
                if (ret != WATCH_HOLDER_ERROR_NONE) {