From: zheng_wenlong Date: Fri, 14 Jun 2019 05:19:37 +0000 (+0900) Subject: fix first time don't have area X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=b20509dec7cca94ca4e6bd87f6d6f27320983d19;p=apps%2Fagl-service-homescreen.git fix first time don't have area --- diff --git a/src/homescreen.cpp b/src/homescreen.cpp index cff2810..403fdf2 100644 --- a/src/homescreen.cpp +++ b/src/homescreen.cpp @@ -37,6 +37,8 @@ const char _display_message[] = "display_message"; const char _reply_message[] = "reply_message"; const char _keyData[] = "data"; const char _keyId[] = "id"; +const char _parameter[] = "parameter"; +const char _area[] = "area"; struct hs_handshake { hs_handshake(int times, int sleep) : m_times(times), m_sleep(sleep) {} @@ -323,12 +325,16 @@ static void tap_shortcut (afb_req_t request) { AFB_DEBUG("called."); int ret = 0; + struct json_object *param_obj, *area_obj; const char* value = afb_req_value(request, _application_id); - if (value) { + if (value + && json_object_object_get_ex(afb_req_json(request), _parameter, ¶m_obj) + && json_object_object_get_ex(param_obj, _area, &area_obj)) { AFB_INFO("request appid = %s.", value); + const char* area = json_object_get_string(area_obj); ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); if(ret == AFB_REQ_NOT_STARTED_APPLICATION) { - g_hs_instance->client_manager->setStartupAppid(std::string(value)); + g_hs_instance->client_manager->setStartupAppidAndArea(make_pair(std::string(value), std::string(area))); std::string id = g_hs_instance->app_info->getAppProperty(value, _keyId); HS_AfmMainProxy afm_proxy; afm_proxy.start(request->api, id); @@ -482,11 +488,15 @@ static void showWindow(afb_req_t request) { AFB_DEBUG("called."); int ret = 0; + struct json_object *param_obj, *area_obj; const char* value = afb_req_value(request, _application_id); - if (value) { + if (value + && json_object_object_get_ex(afb_req_json(request), _parameter, ¶m_obj) + && json_object_object_get_ex(param_obj, _area, &area_obj)) { + const char* area = json_object_get_string(area_obj); ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); if(ret == AFB_REQ_NOT_STARTED_APPLICATION) { - g_hs_instance->client_manager->setStartupAppid(std::string(value)); + g_hs_instance->client_manager->setStartupAppidAndArea(make_pair(std::string(value), std::string(area))); std::string id = g_hs_instance->app_info->getAppProperty(value, _keyId); HS_AfmMainProxy afm_proxy; afm_proxy.start(request->api, id); diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp index 3585bea..fe1cc67 100644 --- a/src/hs-clientmanager.cpp +++ b/src/hs-clientmanager.cpp @@ -20,6 +20,8 @@ #include "hs-apprecover.h" static const char _homescreen[] = "homescreen"; +static const char _area[] = "area"; +static const char _parameter[] = "parameter"; HS_ClientManager* HS_ClientManager::me = nullptr; @@ -261,6 +263,10 @@ void HS_ClientManager::checkRegisterApp(afb_api_t api, const std::string &appid) if(startup_appid == appid) { startup_appid.clear(); - pushEvent("showWindow", nullptr, appid); +// pushEvent("showWindow", nullptr, appid); + struct json_object* json_param = json_object_new_object(); + json_object_object_add(json_param, _area, json_object_new_string(startup_area.c_str())); + pushEvent("showWindow", json_param, appid); + startup_area.clear(); } } \ No newline at end of file diff --git a/src/hs-clientmanager.h b/src/hs-clientmanager.h index 366f256..d32f9cc 100644 --- a/src/hs-clientmanager.h +++ b/src/hs-clientmanager.h @@ -48,7 +48,7 @@ public: int handleRequest(afb_req_t request, const char *verb, const char *appid = nullptr); int pushEvent(const char *event, struct json_object *param, std::string appid = ""); void removeClientCtxt(void *data); // don't use, internal only - void setStartupAppid(const std::string &appid) {startup_appid = appid;} + void setStartupAppidAndArea(const std::pair pair) {startup_appid = pair.first;startup_area = pair.second;} private: HS_ClientCtxt* createClientCtxt(afb_req_t req, std::string appid); @@ -61,7 +61,7 @@ private: std::unordered_map client_list; std::unordered_map appid2ctxt; std::mutex mtx; - std::string startup_appid; + std::string startup_appid, startup_area; }; #endif // HOMESCREEN_CLIENTMANAGER_H \ No newline at end of file