From: hyunho Date: Wed, 4 Mar 2020 07:35:04 +0000 (+0900) Subject: Add ambient event X-Git-Tag: submit/tizen_5.5/20200306.033842~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e96d9a856e7a1bb448bded01118896ee0e44a6e;p=platform%2Fcore%2Fappfw%2Fwidget-viewer.git Add ambient event Change-Id: Ic0f4442eadce503fa1c526ecf950e6051269fe3c Signed-off-by: hyunho --- diff --git a/ambient-viewer/src/ambient-viewer.cc b/ambient-viewer/src/ambient-viewer.cc index 1d99bfe2..aab64fb0 100644 --- a/ambient-viewer/src/ambient-viewer.cc +++ b/ambient-viewer/src/ambient-viewer.cc @@ -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"); diff --git a/watch-holder/api/watch_holder.cc b/watch-holder/api/watch_holder.cc index f0128c88..9e35fe9b 100644 --- a/watch-holder/api/watch_holder.cc +++ b/watch-holder/api/watch_holder.cc @@ -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_; }; diff --git a/watch-holder/api/watch_holder.h b/watch-holder/api/watch_holder.h index 2f8d9670..2dfed3a7 100644 --- a/watch-holder/api/watch_holder.h +++ b/watch-holder/api/watch_holder.h @@ -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; /** diff --git a/watch-holder/src/ambient_listener.cc b/watch-holder/src/ambient_listener.cc index 48bf5952..c69dd4d9 100644 --- a/watch-holder/src/ambient_listener.cc +++ b/watch-holder/src/ambient_listener.cc @@ -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() { diff --git a/watch-holder/src/ambient_listener.hh b/watch-holder/src/ambient_listener.hh index bb73255d..134ac87e 100644 --- a/watch-holder/src/ambient_listener.hh +++ b/watch-holder/src/ambient_listener.hh @@ -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 diff --git a/watch-holder/src/watch_holder.cc b/watch-holder/src/watch_holder.cc index 5b91aa64..b6369b3d 100644 --- a/watch-holder/src/watch_holder.cc +++ b/watch-holder/src/watch_holder.cc @@ -103,6 +103,10 @@ std::shared_ptr 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; diff --git a/watch-holder/src/watch_holder.hh b/watch-holder/src/watch_holder.hh index 9be77af0..9107e7f2 100644 --- a/watch-holder/src/watch_holder.hh +++ b/watch-holder/src/watch_holder.hh @@ -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_; diff --git a/watch-holder/src/watch_mirror.cc b/watch-holder/src/watch_mirror.cc index bccfeed0..24f19ee0 100644 --- a/watch-holder/src/watch_mirror.cc +++ b/watch-holder/src/watch_mirror.cc @@ -82,6 +82,10 @@ std::shared_ptr 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) { } diff --git a/watch-holder/src/watch_mirror.hh b/watch-holder/src/watch_mirror.hh index adbd12b0..3c7b44bb 100644 --- a/watch-holder/src/watch_mirror.hh +++ b/watch-holder/src/watch_mirror.hh @@ -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; diff --git a/widget_viewer_sdk/src/main.c b/widget_viewer_sdk/src/main.c index ad8ee356..6aba3ed2 100644 --- a/widget_viewer_sdk/src/main.c +++ b/widget_viewer_sdk/src/main.c @@ -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) {