X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=app%2Feventhandler.cpp;fp=app%2Feventhandler.cpp;h=044eec6f0dd1b3f356d37ad7155b5e2211bcf14f;hb=e79d82c88e350e6b882158624363b82fe3e2d91a;hp=0000000000000000000000000000000000000000;hpb=ec044f44133cad1d12311345437b13b1a953226e;p=apps%2Fonscreenapp.git diff --git a/app/eventhandler.cpp b/app/eventhandler.cpp new file mode 100644 index 0000000..044eec6 --- /dev/null +++ b/app/eventhandler.cpp @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2017 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 +#include +#include +#include +#include +#include +#include + +#include "eventhandler.h" + +void* EventHandler::myThis = 0; + +EventHandler::EventHandler(QObject *parent) : + QObject(parent), + mp_hs(NULL), + mp_wm(NULL), + mp_qw(NULL) +{ + m_dspreq = QString(""); + my_id = QString(APP_ID); + my_role = QString(ROLE_NAME); + m_req.clear(); +} + +EventHandler::~EventHandler() +{ + if (mp_hs != NULL) { + delete mp_hs; + } + if (mp_wm != NULL) { + delete mp_wm; + } +} + +void EventHandler::init(int port, const char *token) +{ + myThis = this; + mp_wm = new QLibWindowmanager(); + mp_wm->init(port, 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)); + + struct json_object *param; + 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 *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); + } + + m_dspreq = QString(_replyid); + if(m_req.contains(m_dspreq)) { + m_req[m_dspreq] = qMakePair(QString(_path), QString(_data)); + } + else + m_req.insert(QString(m_dspreq), qMakePair(QString(_path), QString(_data))); + + 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); + const char *appid = json_object_get_string(value); + + 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!!!!!"); + } + }); + + if (mp_wm->requestSurface(ROLE_NAME) != 0) { + HMI_DEBUG(APP_ID, "!!!!LayoutHandler requestSurface Failed!!!!!"); + exit(EXIT_FAILURE); + } + + mp_wm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [this](json_object *object) { + HMI_DEBUG(APP_ID, "Surface %s got syncDraw!", ROLE_NAME); + emit this->signalLoader(QVariant("file://" + m_req[m_dspreq].first)); + emit this->signalOnScreenParameter(QVariant(m_req[m_dspreq].second)); + this->mp_wm->endDraw(QString(ROLE_NAME)); + }); + + 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); + const char *name = json_object_get_string(value); + + HMI_DEBUG(APP_ID, "Event_Visible kKeyDrawingName = %s", name); + }); + + 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); + const char *name = json_object_get_string(value); + + HMI_DEBUG(APP_ID, "Event_Invisible kKeyDrawingName = %s", name); + }); + + 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) +{ + HMI_DEBUG(APP_ID, "EventHandler::activateWindow()"); + mp_wm->activateWindow(role); +} + +void EventHandler::deactivateWindow(QString &role) +{ + HMI_DEBUG(APP_ID, "EventHandler::deactivateWindow()"); + + emit this->signalLoader(QVariant("")); + mp_wm->deactivateWindow(role); +} + +void EventHandler::onScreenReply(const QString &btn_name) +{ + HMI_DEBUG(APP_ID, "EventHandler::onScreenReply()"); + deactivateWindow(my_role); + + struct json_object* j_obj = json_object_new_object(); + 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); + + mp_hs->replyShowWindow(m_dspreq.toLatin1(), j_obj); +}