X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain.cpp;fp=src%2Fmain.cpp;h=8e37d104153837b4ca826b455d6bf983d40c3a37;hb=e35c4bf9b16927829e1741b9d9c08294f0cbed29;hp=333df702646faa4f6da7f958acb03b40a61b659d;hpb=2b1bf85afe0a8b24f75386f7c24df85f9b785bd3;p=apps%2Fagl-service-windowmanager.git diff --git a/src/main.cpp b/src/main.cpp index 333df70..8e37d10 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -490,6 +490,70 @@ void windowmanager_debug_terminate(afb_req_t req) noexcept } } +/* AGL Lifecycle Management API */ +static void lcm_register_activity_observer (afb_req_t req) +{ + std::lock_guard guard(binding_m); + if (g_afb_instance == nullptr) { + afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); + return; + } + + // register new activity observer + // { + // id: "app id of target to observe", + // type: "type of lifecycle, APP, HMI or GUI to observe", + // filter: { states which observer wants to know } + // } + g_afb_instance->wmgr.amgr.api_register_activity_observer(req); + + afb_req_success(req, NULL, "success"); +} + +static void lcm_unregister_activity_observer (afb_req_t req) +{ + std::lock_guard guard(binding_m); + if (g_afb_instance == nullptr) + { + afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); + return; + } + + // unregister activity observer + // { + // id: "uniq id of observer" + // } + g_afb_instance->wmgr.amgr.api_unregister_activity_observer(req); + + afb_req_success(req, NULL, "success"); +} + +static void lcm_get_activity_status(afb_req_t req) +{ + std::lock_guard guard(binding_m); + + if (g_afb_instance == nullptr) { + afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?"); + } else { + json_object *object = afb_req_json(req); + json_object *j_target = nullptr; + if (!json_object_object_get_ex(object, "target", &j_target)) { + afb_req_fail(req, "failed", "Need const char* argument target"); + return; + } + + const char *target_id = json_object_get_string(j_target); + + auto ret = g_afb_instance->wmgr.amgr.api_get_activity_status(target_id); + + if (ret.is_err()) { + afb_req_fail(req, "failed", ret.unwrap_err()); + } else { + afb_req_success(req, ret.unwrap(), "success"); + } + } +} + const afb_verb_t windowmanager_verbs[] = { { .verb = "requestSurface", .callback = windowmanager_requestsurface }, { .verb = "requestSurfaceXDG", .callback = windowmanager_requestsurfacexdg }, @@ -501,6 +565,10 @@ const afb_verb_t windowmanager_verbs[] = { { .verb = "wm_subscribe", .callback = windowmanager_wm_subscribe }, { .verb = "ping", .callback = windowmanager_ping }, { .verb = "debug_terminate", .callback = windowmanager_debug_terminate }, + /* AGL Lifecycle Management API */ + { .verb = "registerActivityObserver", .callback = lcm_register_activity_observer }, + { .verb = "unregisterActivityObserver", .callback = lcm_unregister_activity_observer }, + { .verb = "getActivityStatus", .callback = lcm_get_activity_status }, {} }; extern "C" const afb_binding_t afbBindingExport = {