X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain.cpp;fp=src%2Fmain.cpp;h=ac3050b75264eeae998b56b8312b709c5ed80ff7;hb=7a4a02d048910615cb15c26fc5534ad471a8d5ac;hp=8e37d104153837b4ca826b455d6bf983d40c3a37;hpb=e35c4bf9b16927829e1741b9d9c08294f0cbed29;p=apps%2Fagl-service-windowmanager.git diff --git a/src/main.cpp b/src/main.cpp index 8e37d10..ac3050b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,10 +31,16 @@ typedef struct WMClientCtxt { std::string name; std::string role; + void* lcm_obs_ctx; // POI: LCM + WMClientCtxt(const char *appName, const char* appRole) + : name(appName), role(appRole), lcm_obs_ctx(nullptr) {}; + WMClientCtxt() : lcm_obs_ctx(nullptr) {}; + + void set_name_role(const char *appName, const char* appRole) { - name = appName; - role = appRole; + name = appName; + role = appRole; } } WMClientCtxt; @@ -98,28 +104,45 @@ static void cbRemoveClientCtxt(void *data) { return; } - HMI_DEBUG("remove app %s", ctxt->name.c_str()); - // Policy Manager does not know this app was killed, - // so notify it by deactivate request. - g_afb_instance->wmgr.api_deactivate_window( - ctxt->name.c_str(), ctxt->role.c_str(), - [](const char *) {}); + if (!ctxt->name.empty()) { + HMI_DEBUG("remove app %s", ctxt->name.c_str()); + + // Policy Manager does not know this app was killed, + // so notify it by deactivate request. + g_afb_instance->wmgr.api_deactivate_window( + ctxt->name.c_str(), ctxt->role.c_str(), + [](const char *) {}); + + g_afb_instance->wmgr.removeClient(ctxt->name); + } + + // POI: LCM + g_afb_instance->wmgr.amgr.lcm_clear_context(ctxt->lcm_obs_ctx); - g_afb_instance->wmgr.removeClient(ctxt->name); delete ctxt; } -static void createSecurityContext(afb_req_t req, const char* appid, const char* role) +static WMClientCtxt* getWMClientContext(afb_req_t req) { - WMClientCtxt *ctxt = (WMClientCtxt *)afb_req_context_get(req); - if (!ctxt) - { + WMClientCtxt *ctx = static_cast(afb_req_context_get(req)); + if (!ctx) { // Create Security Context at first time - WMClientCtxt *ctxt = new WMClientCtxt(appid, role); - HMI_DEBUG("create session for %s", ctxt->name.c_str()); + ctx = new WMClientCtxt(); + HMI_DEBUG("create session without name & role"); afb_req_session_set_LOA(req, 1); - afb_req_context_set(req, ctxt, cbRemoveClientCtxt); + afb_req_context_set(req, ctx, cbRemoveClientCtxt); + } + return ctx; +} + +static void createSecurityContext(afb_req_t req, const char* appid, const char* role) +{ + WMClientCtxt *ctx = getWMClientContext(req); + if (ctx && ctx->name.empty()) + { + HMI_DEBUG("create session for name=\"%s\" & role=\"role\"", appid, role); + ctx->set_name_role(appid, role); } } @@ -499,15 +522,19 @@ static void lcm_register_activity_observer (afb_req_t req) 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"); + WMClientCtxt* wc_ctx = getWMClientContext(req); + if (wc_ctx == nullptr) { + afb_req_fail(req, "failed", "WMClientCtxt cannot create."); + } else { + // 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, wc_ctx->lcm_obs_ctx); + afb_req_success(req, NULL, "success"); + } } static void lcm_unregister_activity_observer (afb_req_t req) @@ -519,11 +546,17 @@ static void lcm_unregister_activity_observer (afb_req_t req) return; } + WMClientCtxt* wc_ctx = getWMClientContext(req); + if (wc_ctx == nullptr) { + afb_req_fail(req, "failed", "WMClientCtxt not exsit."); + return; + } + // unregister activity observer // { // id: "uniq id of observer" // } - g_afb_instance->wmgr.amgr.api_unregister_activity_observer(req); + g_afb_instance->wmgr.amgr.api_unregister_activity_observer(req, wc_ctx->lcm_obs_ctx); afb_req_success(req, NULL, "success"); }