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");
}
}
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");
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_;
};
*/
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.
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;
/**
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() {
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
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;
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_;
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) {
}
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;
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;
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) {