summaryrefslogtreecommitdiffstats
path: root/app/eventhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'app/eventhandler.cpp')
-rw-r--r--app/eventhandler.cpp146
1 files changed, 82 insertions, 64 deletions
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 <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
-#include <QQuickWindow>
+#include <QQmlContext>
+#include <QtQml/QQmlApplicationEngine>
#include <cstring>
+#include <QFileInfo>
#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", &param);
+ json_object_object_get_ex(object, _parameter, &param);
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, &param_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*>(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);
}