From: wang_zhiqiang Date: Mon, 14 Jan 2019 05:50:55 +0000 (+0800) Subject: merge improvement X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=d6140dad95f7884f8a7a666a125c1b24065d2c60;p=apps%2Fagl-service-homescreen.git merge improvement Change-Id: I555f0e48ff96564695af60e8d2dbbc1379a8bc95 --- d6140dad95f7884f8a7a666a125c1b24065d2c60 diff --cc src/homescreen.cpp index 0f6a10d,e921feb..a6eee8f --- a/src/homescreen.cpp +++ b/src/homescreen.cpp @@@ -96,17 -58,25 +96,25 @@@ static void pingSample(afb_req_t reques static void tap_shortcut (afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - int ret = g_hs_instance->client_manager->tap_shortcut(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { + HMI_NOTICE("homescreen-service","request appid = %s.", value); - ret = g_client_manager->handleRequest(request, __FUNCTION__, value); ++ ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [tap_shortcut]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [tap_shortcut]"); + } } /** @@@ -123,18 -93,16 +131,16 @@@ static void on_screen_message (afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->on_screen_message(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; - int ret = g_client_manager->handleRequest(request, __FUNCTION__); ++ int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [on_screen_message]"); } - - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [on_screen_message]"); } /** @@@ -151,18 -119,16 +157,16 @@@ static void on_screen_reply (afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->on_screen_reply(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; - int ret = g_client_manager->handleRequest(request, __FUNCTION__); ++ int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [on_screen_reply]"); } - - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [on_screen_reply]"); } /** @@@ -178,18 -144,24 +182,24 @@@ static void subscribe(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); + int ret = 0; + std::string req_appid = std::move(get_application_id(request)); + if(!req_appid.empty()) { - ret = g_client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str()); ++ ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str()); + } + else { + ret = AFB_EVENT_BAD_REQUEST; + } - int ret = g_hs_instance->client_manager->subscribe(request); if(ret) { - afb_req_fail_f(request, "afb_req_subscribe failed", "called %s.", __FUNCTION__); - return; + afb_req_fail_f(request, "afb_req_subscribe failed", "called %s.", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success_f(request, res, "homescreen binder subscribe."); } - - /*create response json object*/ - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success_f(request, res, "homescreen binder subscribe."); } /** @@@ -205,18 -177,24 +215,24 @@@ static void unsubscribe(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); + int ret = 0; + std::string req_appid = std::move(get_application_id(request)); + if(!req_appid.empty()) { - ret = g_client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str()); ++ ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, req_appid.c_str()); + } + else { + ret = AFB_EVENT_BAD_REQUEST; + } - int ret = g_hs_instance->client_manager->unsubscribe(request); if(ret) { - afb_req_fail_f(request, "afb_req_unsubscribe failed", "called %s.", __FUNCTION__); - return; + afb_req_fail_f(request, "afb_req_unsubscribe failed", "called %s.", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success_f(request, res, "homescreen binder unsubscribe success."); } - - /*create response json object*/ - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success_f(request, res, "homescreen binder unsubscribe success."); } /** @@@ -232,18 -210,24 +248,24 @@@ static void showWindow(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->showWindow(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { - ret = g_client_manager->handleRequest(request, __FUNCTION__, value); ++ ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [showWindow]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [showWindow]"); + } } /** @@@ -259,18 -243,24 +281,24 @@@ static void hideWindow(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->hideWindow(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { - ret = g_client_manager->handleRequest(request, __FUNCTION__, value); ++ ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [hideWindow]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [hideWindow]"); + } } /** @@@ -286,18 -276,24 +314,24 @@@ static void replyShowWindow(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->replyShowWindow(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; + int ret = 0; + const char* value = afb_req_value(request, _application_id); + if (value) { - ret = g_client_manager->handleRequest(request, __FUNCTION__, value); ++ ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value); + } + else { + ret = AFB_EVENT_BAD_REQUEST; } - // response to HomeScreen - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [replyShowWindow]"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [replyShowWindow]"); + } } /** @@@ -315,18 -311,16 +349,16 @@@ static void showNotification(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->showNotification(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; - int ret = g_client_manager->handleRequest(request, __FUNCTION__, "homescreen"); ++ int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, "homescreen"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [showNotification]"); } - - // response to Application - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [showNotification]"); } /** @@@ -344,18 -338,16 +376,16 @@@ static void showInformation(afb_req_t request) { HMI_NOTICE("homescreen-service","called."); - - int ret = g_hs_instance->client_manager->showInformation(request); - if (ret != 0) { - afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); - return; - int ret = g_client_manager->handleRequest(request, __FUNCTION__, "homescreen"); ++ int ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, "homescreen"); + if (ret) { + afb_req_fail_f(request, "failed", "called %s, Unknown parameter", __FUNCTION__); + } + else { + struct json_object *res = json_object_new_object(); + hs_add_object_to_json_object_func(res, __FUNCTION__, 2, + _error, ret); + afb_req_success(request, res, "afb_event_push event [showInformation]"); } - - // response to Application - struct json_object *res = json_object_new_object(); - hs_add_object_to_json_object_func(res, __FUNCTION__, 2, - _error, ret); - afb_req_success(request, res, "afb_event_push event [showInformation]"); } /* diff --cc src/hs-client.cpp index 41be426,dd91e10..5ecc23b --- a/src/hs-client.cpp +++ b/src/hs-client.cpp @@@ -389,27 -390,69 +390,93 @@@ int HS_Client::showInformation(afb_req_ return ret; } +/** + * push event + * + * #### Parameters + * - event : the event want to push + * - param : the parameter contents of event + * + * #### Return + * 0 : success + * others : fail + * + */ +int HS_Client::pushEvent(const char *event, struct json_object *param) +{ + if(!checkEvent(event)) + return 0; + + struct json_object* push_obj = json_object_new_object(); + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, event); + if(param != nullptr) + json_object_object_add(push_obj, _parameter, param); + afb_event_push(my_event, push_obj); + return 0; ++} + /** + * check if client subscribe event + * + * #### Parameters + * - event: homescreen event, tap_shortcut etc. + * + * #### Return + * true: found + * false: not found + * + */ + bool HS_Client::checkEvent(const char* event) + { + auto ip = event_list.find(std::string(event)); + if(ip == event_list.end()) + return false; + else + return true; + } + + /** + * check if event is supporting + * + * #### Parameters + * - event: homescreen event, tap_shortcut etc. + * + * #### Return + * true: support + * false: not fosupportund + * + */ + bool HS_Client::isSupportEvent(const char* event) + { + auto ip = func_list.find(std::string(event)); + if(ip == func_list.end()) + return false; + else + return true; + } + + /** + * handle homescreen event + * + * #### Parameters + * - request : the request + * - verb: request verb name + * + * #### Return + * 0: success + * others: fail + * + */ + int HS_Client::handleRequest(afb_req_t request, const char *verb) + { + HMI_NOTICE("homescreen-service","called."); + if((strcasecmp(verb, "subscribe") && strcasecmp(verb, "unsubscribe")) && !checkEvent(verb)) + return 0; + + int ret = AFB_EVENT_BAD_REQUEST; + auto ip = func_list.find(std::string(verb)); + if(ip != func_list.end()) { + HMI_NOTICE("homescreen-service","[%s]verb found", verb); + ret = (this->*(ip->second))(request); + } + return ret; } diff --cc src/hs-client.h index 32756b2,5b384b1..791c4cd --- a/src/hs-client.h +++ b/src/hs-client.h @@@ -30,20 -31,35 +31,36 @@@ public HS_Client &operator=(HS_Client&) = delete; ~HS_Client(); - int tap_shortcut(const char* appid); - int showWindow(afb_req_t request, const char* appid); + int handleRequest(afb_req_t request, const char *verb); ++ int pushEvent(const char *event, struct json_object *param); + + private: + int tap_shortcut(afb_req_t request); + int on_screen_message (afb_req_t request); + int on_screen_reply (afb_req_t request); + int showWindow(afb_req_t request); int hideWindow(afb_req_t request); - int replyShowWindow(afb_req_t request, const char* appid); - int on_screen_message (afb_req_t request, const char* message); - int on_screen_reply (afb_req_t request, const char* message); - int subscribe(afb_req_t request, const char* event); - int unsubscribe(afb_req_t request, const char* event); + int replyShowWindow(afb_req_t request); + int subscribe(afb_req_t request); + int unsubscribe(afb_req_t request); int showNotification(afb_req_t request); int showInformation(afb_req_t request); - int pushEvent(const char *event, struct json_object *param); - private: + typedef int (HS_Client::*func_handler)(afb_req_t); + const std::unordered_map func_list { + {"tap_shortcut", &HS_Client::tap_shortcut}, + {"showWindow", &HS_Client::showWindow}, + {"hideWindow", &HS_Client::hideWindow}, + {"replyShowWindow", &HS_Client::replyShowWindow}, + {"on_screen_message", &HS_Client::on_screen_message}, + {"on_screen_reply", &HS_Client::on_screen_reply}, + {"subscribe", &HS_Client::subscribe}, + {"unsubscribe", &HS_Client::unsubscribe}, + {"showNotification", &HS_Client::showNotification}, + {"showInformation", &HS_Client::showInformation} + }; bool checkEvent(const char* event); + bool isSupportEvent(const char* event); private: std::string my_id; diff --cc src/hs-clientmanager.cpp index 9fe8b96,7d658e4..ce9ad6c --- a/src/hs-clientmanager.cpp +++ b/src/hs-clientmanager.cpp @@@ -344,159 -177,21 +177,58 @@@ int HS_ClientManager::handleRequest(afb } } else { - HMI_NOTICE("homescreen-service","Please input application_id"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; - } - - /** - * hideWindow event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ - int HS_ClientManager::hideWindow(afb_req_t request) - { - int ret = 0; - const char* value = afb_req_value(request, _application_id); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard lock(this->mtx); - auto ip = client_list.find(std::string(value)); + auto ip = client_list.find(std::string(appid)); if(ip != client_list.end()) { - ret = ip->second->hideWindow(request); + ret = ip->second->handleRequest(request, verb); } - } - else { - HMI_NOTICE("homescreen-service","Please input application_id"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; - } - - /** - * replyShowWindow event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ - int HS_ClientManager::replyShowWindow(afb_req_t request) - { - int ret = 0; - const char* value = afb_req_value(request, _application_id); - if (value) { - HMI_NOTICE("homescreen-service","request params = %s.", value); - std::lock_guard lock(this->mtx); - auto ip = client_list.find(std::string(value)); - if(ip != client_list.end()) { - ret = ip->second->replyShowWindow(request, value); + else { + if(!strcasecmp(verb, "subscribe")) { + appid2ctxt[appid] = createClientCtxt(request, appid); + HS_Client* client = addClient(request, appid); + ret = client->handleRequest(request, "subscribe"); + } + else { + HMI_NOTICE("homescreen-service","not exist session"); + ret = AFB_EVENT_BAD_REQUEST; + } } } - else { - HMI_NOTICE("homescreen-service","Please input application_id"); - ret = AFB_EVENT_BAD_REQUEST; - } - return ret; - } - - /** - * showNotification event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ - int HS_ClientManager::showNotification(afb_req_t request) - { - int ret = 0; - std::lock_guard lock(this->mtx); - auto ip = client_list.find(_homescreen); - if(ip != client_list.end()) { - ret = ip->second->showNotification(request); - } - else { - HMI_NOTICE("homescreen-service","not exist sessiion with homescreen"); - ret = AFB_REQ_SHOWNOTIFICATION_ERROR; - } - - return ret; - } - - /** - * showInformation event - * - * #### Parameters - * - request : the request - * - * #### Return - * 0 : success - * others : fail - * - */ - int HS_ClientManager::showInformation(afb_req_t request) - { - int ret = 0; - std::lock_guard lock(this->mtx); - auto ip = client_list.find(_homescreen); - if(ip != client_list.end()) { - ret = ip->second->showInformation(request); - } - else { - HMI_NOTICE("homescreen-service","not exist sessiion with homescreen"); - ret = AFB_REQ_SHOWINFORMATION_ERROR; - } - return ret; +} + +/** + * push event + * + * #### Parameters + * - event : the event want to push + * - param : the parameter contents of event + * - appid : the destination application's id + * + * #### Return + * 0 : success + * others : fail + * + */ +int HS_ClientManager::pushEvent(const char *event, struct json_object *param, std::string appid) +{ + if(event == nullptr) { + HMI_ERROR("homescreen-service","event name is null."); + return -1; + } + + if(appid.empty()) { // broadcast event to clients who subscribed this event + std::lock_guard lock(this->mtx); + for(auto m : client_list) { + m.second->pushEvent(event, param); + } + } + else { // push event to specific client + std::lock_guard lock(this->mtx); + auto ip = client_list.find(appid); + if(ip != client_list.end()) { + ip->second->pushEvent(event, param); + } + } + + return 0; - } + } diff --cc src/hs-clientmanager.h index a568298,d485ea8..efc36de --- a/src/hs-clientmanager.h +++ b/src/hs-clientmanager.h @@@ -45,19 -45,8 +45,9 @@@ public static HS_ClientManager* instance(void); int init(void); - void removeClientCtxt(void *data); - - int tap_shortcut(afb_req_t request); - int showWindow(afb_req_t request); - int hideWindow(afb_req_t request); - int replyShowWindow(afb_req_t request); - int on_screen_message(afb_req_t request); - int on_screen_reply(afb_req_t request); - int subscribe(afb_req_t request); - int unsubscribe(afb_req_t request); - int showNotification(afb_req_t request); - int showInformation(afb_req_t request); + 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 private: HS_ClientCtxt* createClientCtxt(afb_req_t req, std::string appid); diff --cc src/hs-periphery.cpp index a629ead,0000000..06e95ea mode 100644,000000..100644 --- a/src/hs-periphery.cpp +++ b/src/hs-periphery.cpp @@@ -1,165 -1,0 +1,174 @@@ +/* + * Copyright (c) 2019 TOYOTA MOTOR CORPORATION + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "hs-periphery.h" +#include "hs-proxy.h" +#include "hmi-debug.h" +#include "hs-clientmanager.h" + +static const char _restriction_on[] = "RestrictionOn"; +static const char _restriction_off[] = "RestrictionOff"; + +/* -------------------------------------HS_PeripheryManager------------------------------------------ */ + +HS_PeripheryManager* HS_PeripheryManager::me = nullptr; + +/** + * HS_PeripheryManager init function + * + * #### Parameters + * - Nothing + * + * #### Return + * init result + * + */ +int HS_PeripheryManager::init(afb_api_t api) +{ - return m_restriction.init(api); ++ HS_Restriction* restriction = new HS_Restriction(); ++ int ret = restriction->init(api); ++ if(ret) { ++ HMI_ERROR("homescreen-service","restriction init failed."); ++ } ++ else { ++ periphery_list[std::string("restriction")] = restriction; ++ } ++ return ret; +} + +/** + * get instance + * + * #### Parameters + * - Nothing + * + * #### Return + * HS_PeripheryManager instance pointer + * + */ +HS_PeripheryManager* HS_PeripheryManager::instance(void) +{ + if(me == nullptr) + me = new HS_PeripheryManager(); + return me; +} + +/** + * event function + * + * #### Parameters + * - api : the api serving the request + * - event : event name + * - object : event json object + * + * #### Return + * None + * + */ +void HS_PeripheryManager::onEvent(afb_api_t api, const char *event, struct json_object *object) +{ - m_restriction.onEvent(api, event, object); ++ for(auto m : periphery_list) ++ m.second->onEvent(api, event, object); +} + +/* -------------------------------------HS_Restriction------------------------------------------ */ + +/** + * HS_Restriction init function + * + * #### Parameters + * - Nothing + * + * #### Return + * init result + * + */ +int HS_Restriction::init(afb_api_t api) +{ + HS_WmProxy wm_proxy; + // TBD + wm_proxy.subscribe(api, HS_WmProxy::Event_ScreenUpdated); + return 0; +} + +/** + * event function + * + * #### Parameters + * - api : the api serving the request + * - event : event name + * - object : event json object + * + * #### Return + * None + * + */ +void HS_Restriction::onEvent(afb_api_t api, const char *event, struct json_object *object) +{ + if(!isConcernedEvent(event)) + return; + + std::string ev = event; + std::size_t pos = ev.find("/"); + if(pos != std::string::npos) { + ev = ev.substr(pos + 1); + } + else { + HMI_ERROR("homescreen-service","received event is error."); + return; + } + + if(ev == _restriction_on) { + restrictionOn(api, object); + } + else if(ev == _restriction_off) { + restrictionOff(api, object); + } + else { + } +} + +/** + * restriction on function + * + * #### Parameters + * - api : the api serving the request + * - object : event json object + * + * #### Return + * None + * + */ +void HS_Restriction::restrictionOn(afb_api_t api, struct json_object *object) +{ + +} + +/** + * restriction off function + * + * #### Parameters + * - api : the api serving the request + * - object : event json object + * + * #### Return + * None + * + */ +void HS_Restriction::restrictionOff(afb_api_t api, struct json_object *object) +{ + +} diff --cc src/hs-periphery.h index f551db3,0000000..d2da39e mode 100644,000000..100644 --- a/src/hs-periphery.h +++ b/src/hs-periphery.h @@@ -1,70 -1,0 +1,78 @@@ +/* + * Copyright (c) 2019 TOYOTA MOTOR CORPORATION + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef HOMESCREEN_PERIPHERY_H +#define HOMESCREEN_PERIPHERY_H + +#include ++#include +#include "hs-helper.h" + - class HS_Restriction { ++class HS_Periphery { ++public: ++ virtual int init(afb_api_t api) = 0; ++ virtual void onEvent(afb_api_t api, const char *event, struct json_object *object) = 0; ++}; ++ ++class HS_Restriction : public HS_Periphery { +public: + HS_Restriction() = default; + ~HS_Restriction() = default; + + int init(afb_api_t api); + void onEvent(afb_api_t api, const char *event, struct json_object *object); + +private: + const std::unordered_set concerned_event_list { + "windowmanager/RestrictionOn", + "windowmanager/RestrictionOff" + }; + inline bool isConcernedEvent(const char* event) const { + return (concerned_event_list.find(event) != concerned_event_list.end()) ? true : false; + } + + void restrictionOn(afb_api_t api, struct json_object *object); + void restrictionOff(afb_api_t api, struct json_object *object); + + std::string m_appid = "restriction"; +}; + +class HS_PeripheryManager { +public: + HS_PeripheryManager() = default; + ~HS_PeripheryManager() = default; + + int init(afb_api_t api); + static HS_PeripheryManager* instance(void); + void onEvent(afb_api_t api, const char *event, struct json_object *object); + + inline bool isPeripheryApp(const char* name) const { + return (periphery_app_list.find(name) != periphery_app_list.end()) ? true : false; + } + +private: + const std::unordered_set periphery_app_list { + "launcher", + "homescreen", + "onscreenapp", + "restriction" + }; + + static HS_PeripheryManager* me; - HS_Restriction m_restriction; ++ std::unordered_map periphery_list; ++ // HS_Restriction m_restriction; +}; + +#endif // HOMESCREEN_PERIPHERY_H