X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=app%2Feventhandler.cpp;fp=app%2Feventhandler.cpp;h=39db933df723948e8d0347fb83c101070c480d4c;hb=5ba4327b148f81852c6e2a53bc51ab07b238602e;hp=044eec6f0dd1b3f356d37ad7155b5e2211bcf14f;hpb=e79d82c88e350e6b882158624363b82fe3e2d91a;p=apps%2Fonscreenapp.git diff --git a/app/eventhandler.cpp b/app/eventhandler.cpp index 044eec6..39db933 100644 --- a/app/eventhandler.cpp +++ b/app/eventhandler.cpp @@ -19,31 +19,42 @@ #include #include #include -#include +#include +#include #include +#include #include "eventhandler.h" +const char _parameter[] = "parameter"; +const char _replyto[] = "replyto"; +const char _data[] = "data"; +const char _file[] = "file"; +const char _area[] = "area"; +const char _suffix[] = ".qml"; +const char _button_name[] = "buttonName"; +const char _button_press_mode[] = "buttonPressMode"; +const char _button_press_state[] = "buttonPressState"; +const char _drawing_name[] = "drawing_name"; +const char _application_id[] = "application_id"; + void* EventHandler::myThis = 0; EventHandler::EventHandler(QObject *parent) : QObject(parent), - mp_hs(NULL), - mp_wm(NULL), - mp_qw(NULL) + mp_hs(nullptr), + mp_wm(nullptr) { m_dspreq = QString(""); - my_id = QString(APP_ID); - my_role = QString(ROLE_NAME); m_req.clear(); } EventHandler::~EventHandler() { - if (mp_hs != NULL) { + if (mp_hs != nullptr) { delete mp_hs; } - if (mp_wm != NULL) { + if (mp_wm != nullptr) { delete mp_wm; } } @@ -57,67 +68,78 @@ void EventHandler::init(int port, const char *token) mp_hs = new LibHomeScreen(); mp_hs->init(port, token); -// my_id = QString(std::strtok(std::getenv("AFM_ID"), "@")); mp_hs->registerCallback(nullptr, EventHandler::onRep_static); mp_hs->set_event_handler(LibHomeScreen::Event_ShowWindow, [this](json_object *object){ - // {"id": "onscreenXXX", "parameter": {"replyid": "app's id", "file": "onsreen file path", "data": {"key": "value", ...}}} - struct json_object *appid; - json_object_object_get_ex(object, "application_id", &appid); - const char *id = json_object_get_string(appid); - if(my_id != QString(id)) { - HMI_DEBUG(APP_ID, "Event_ShowWindow id = %s", id); - return; - } - else - HMI_DEBUG(APP_ID, "recived json message is[%s]", json_object_get_string(object)); + // {"id": "onscreenXXX", "parameter": {"file": "onsreen file path", "data": {"key": "value", ...}}, "replyto": "app's id"} + HMI_DEBUG(APP_ID, "recived json message is[%s]", json_object_get_string(object)); struct json_object *param; - json_object_object_get_ex(object, "parameter", ¶m); + json_object_object_get_ex(object, _parameter, ¶m); if(json_object_get_type(param) != json_type_object ) { HMI_DEBUG(APP_ID, "parameter error!"); return; } + struct json_object *qml_path; + const char *file = nullptr; + if(json_object_object_get_ex(param, _file, &qml_path)) + file = json_object_get_string(qml_path); + if(file == nullptr) { + HMI_DEBUG(APP_ID, "received qml file is null!"); + return; + } + + QFileInfo file_info(file); + if(!file_info.isFile() || !QString(file).contains(QString(_suffix), Qt::CaseSensitive)) { + HMI_DEBUG(APP_ID, "received qml file error! file=%s.", file); + return; + } + struct json_object *replyid; - json_object_object_get_ex(param, "replyid", &replyid); - const char *_replyid = json_object_get_string(replyid); - - struct json_object *path; - json_object_object_get_ex(param, "file", &path); - const char *_path = json_object_get_string(path); - - struct json_object *data; - json_bool rtn = json_object_object_get_ex(param, "data", &data); - const char* _data = ""; - if(rtn) { - _data = json_object_to_json_string(data); + const char *replyto = nullptr; + if(json_object_object_get_ex(param, _replyto, &replyid)) + replyto = json_object_get_string(replyid); + if(replyto == nullptr) { + HMI_DEBUG(APP_ID, "received replyto is null!"); + return; } - m_dspreq = QString(_replyid); + struct json_object *display_area; + const char *area = nullptr; + if(json_object_object_get_ex(param, _area, &display_area)) + area = json_object_get_string(display_area); + + struct json_object *param_data; + const char* data = nullptr; + if(json_object_object_get_ex(param, _data, ¶m_data)) + data = json_object_to_json_string(param_data); + + m_dspreq = QString(replyto); if(m_req.contains(m_dspreq)) { - m_req[m_dspreq] = qMakePair(QString(_path), QString(_data)); + m_req[m_dspreq] = qMakePair(QString(file), QString(data)); } else - m_req.insert(QString(m_dspreq), qMakePair(QString(_path), QString(_data))); + m_req.insert(QString(m_dspreq), qMakePair(QString(file), QString(data))); + + if(area == nullptr) + this->activateWindow(ROLE_NAME); + else + this->activateWindow(ROLE_NAME, area); - this->mp_wm->activateWindow(ROLE_NAME); HMI_DEBUG(APP_ID, "received showWindow event, end!, line=%d", __LINE__); }); mp_hs->set_event_handler(LibHomeScreen::Event_HideWindow, [this](json_object *object){ struct json_object *value; - json_object_object_get_ex(object, "application_id", &value); + json_object_object_get_ex(object, _application_id, &value); const char *appid = json_object_get_string(value); + HMI_DEBUG(APP_ID, "request release onScreen application is %s!", appid); - HMI_DEBUG(APP_ID, "release onScreen is %s!", appid); - - if (appid == my_id) { - emit this->signalLoader(QVariant("")); - this->mp_wm->deactivateWindow(ROLE_NAME); - } - else { - HMI_DEBUG(APP_ID, "!!!!releaseOnScreen is not displaying!!!!!"); - } + // onscreenapp only can release by application which request show + if (appid == m_dspreq) + this->deactivateWindow(); + else + HMI_DEBUG(APP_ID, "request hideWindow application isn't request displaying application, m_dspreq=%s", m_dspreq.toStdString().c_str()); }); if (mp_wm->requestSurface(ROLE_NAME) != 0) { @@ -134,7 +156,7 @@ void EventHandler::init(int port, const char *token) mp_wm->set_event_handler(QLibWindowmanager::Event_Visible, [this](json_object *object) { struct json_object *value; - json_object_object_get_ex(object, "drawing_name", &value); + json_object_object_get_ex(object, _drawing_name, &value); const char *name = json_object_get_string(value); HMI_DEBUG(APP_ID, "Event_Visible kKeyDrawingName = %s", name); @@ -142,7 +164,7 @@ void EventHandler::init(int port, const char *token) mp_wm->set_event_handler(QLibWindowmanager::Event_Invisible, [this](json_object *object) { struct json_object *value; - json_object_object_get_ex(object, "drawing_name", &value); + json_object_object_get_ex(object, _drawing_name, &value); const char *name = json_object_get_string(value); HMI_DEBUG(APP_ID, "Event_Invisible kKeyDrawingName = %s", name); @@ -151,48 +173,44 @@ void EventHandler::init(int port, const char *token) HMI_DEBUG(APP_ID, "LayoutHander::init() finished."); } -void EventHandler::setQuickWindow(QQuickWindow *qw) -{ - mp_qw = qw; -} - void EventHandler::onRep_static(struct json_object* reply_contents) { static_cast(EventHandler::myThis)->onRep(reply_contents); } + void EventHandler::onRep(struct json_object* reply_contents) { const char* str = json_object_to_json_string(reply_contents); HMI_DEBUG(APP_ID, "EventHandler::onReply %s", str); } -void EventHandler::activateWindow(QString &role) +void EventHandler::activateWindow(const char *role, const char *area) { HMI_DEBUG(APP_ID, "EventHandler::activateWindow()"); - mp_wm->activateWindow(role); + mp_wm->activateWindow(role, area); } -void EventHandler::deactivateWindow(QString &role) +void EventHandler::deactivateWindow() { HMI_DEBUG(APP_ID, "EventHandler::deactivateWindow()"); emit this->signalLoader(QVariant("")); - mp_wm->deactivateWindow(role); + mp_wm->deactivateWindow(ROLE_NAME); } -void EventHandler::onScreenReply(const QString &btn_name) +void EventHandler::onScreenReply(const QString &btn_name, const QString &press_mode, const QString &press_state) { HMI_DEBUG(APP_ID, "EventHandler::onScreenReply()"); - deactivateWindow(my_role); +// deactivateWindow(); struct json_object* j_obj = json_object_new_object(); - json_object_object_add(j_obj, "application_id", json_object_new_string(m_dspreq.toLatin1())); + json_object_object_add(j_obj, _application_id, json_object_new_string(m_dspreq.toLatin1())); struct json_object* j_param = json_object_new_object(); - json_object_object_add(j_param, "method", json_object_new_string("Buttons.ButtonPress")); - json_object_object_add(j_param, "buttonName", json_object_new_string(btn_name.toStdString().c_str())); - json_object_object_add(j_param, "buttonPressMode", json_object_new_string("Short")); - json_object_object_add(j_obj, "parameter", j_param); + json_object_object_add(j_param, _button_name, json_object_new_string(btn_name.toStdString().c_str())); + json_object_object_add(j_param, _button_press_mode, json_object_new_string(press_mode.toStdString().c_str())); + json_object_object_add(j_param, _button_press_state, json_object_new_string(press_state.toStdString().c_str())); + json_object_object_add(j_obj, _parameter, j_param); mp_hs->replyShowWindow(m_dspreq.toLatin1(), j_obj); }