From f00d4fb740e2b011799599061a9bf345437c6ac4 Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Thu, 6 Jun 2019 15:46:25 +0900 Subject: add vui event --- src/qlibhomescreen.cpp | 116 ++++++++++++++++++++++++++++++++++++++++++++----- src/qlibhomescreen.h | 24 +++++++++- src/src.pro | 1 + 3 files changed, 127 insertions(+), 14 deletions(-) diff --git a/src/qlibhomescreen.cpp b/src/qlibhomescreen.cpp index 516f3dd..63dc692 100644 --- a/src/qlibhomescreen.cpp +++ b/src/qlibhomescreen.cpp @@ -27,6 +27,10 @@ using namespace std; #define _KEY_APPLICATION_DATA "application_id" #define _KEY_REPLY_MESSAGE "reply_message" #define _KEY_REQUEST_MESSAGE "display_message" +#define _KEY_SHORTCUT "shortcut" +#define _KEY_SHORTCUT_ID "shortcut_id" +#define _KEY_SHORTCUT_NAME "shortcut_name" +#define _KEY_POSITION "position" static QLibHomeScreen* myThis; @@ -43,7 +47,8 @@ static QLibHomeScreen* myThis; */ QLibHomeScreen::QLibHomeScreen(QObject *parent) : QObject(parent), - mp_hs(NULL) + mp_hs(NULL), + mp_window(NULL) { HMI_DEBUG("qlibhomescreen", "called."); } @@ -162,7 +167,7 @@ void QLibHomeScreen::set_event_handler(enum QEventType et, handler_fun f) { HMI_DEBUG("qlibhomescreen", "called."); LibHomeScreen::EventType hs_et = (LibHomeScreen::EventType)et; - return this->mp_hs->set_event_handler(hs_et, std::move(f)); + this->mp_hs->set_event_handler(hs_et, std::move(f)); } /** @@ -316,28 +321,115 @@ void QLibHomeScreen::showNotification(QString icon, QString text) } /** - * register shortcut key + * get runnables list from homescreen-service * - * tell HomeScreen to change shortcut key + * #### Parameters + * - Nothing + * + * #### Resturn + * - None. + * + */ +void QLibHomeScreen::getRunnables(void) +{ + mp_hs->getRunnables(); +} + +/** + * publlish subscription to homescreen-service * * #### Parameters - * - shortcut_id : shortcut id - * - shortcut_name : shortcut name - * - position : shortcut position + * - Nothing * * #### Resturn * - None. * */ -void QLibHomeScreen::registerShortcut(QString shortcut_id, QString shortcut_name, QString position) +void QLibHomeScreen::slotPublishSubscription(void) { + HMI_NOTICE("qlibhomescreen","slotPublishSubscription"); + if(mp_hs != NULL) { + mp_hs->publishSubscription(); + QObject::disconnect(m_loading); + } +} + +/** + * This function register callback function for reply/event message from home screen + * + * #### Parameters + * - event_cb [in] : This argument should be specified to the callback for subscribed event + * - reply_cb [in] : This argument should be specified to the reply callback for call function + * + * #### Return + * Nothing + * + * #### Note + * Event callback is invoked by home screen for event you subscribed. + * If you would like to get event, please call subscribe function before/after this function + */ +void QLibHomeScreen::registerCallback( + void (*event_cb)(const std::string& event, struct json_object* event_contents), + void (*reply_cb)(struct json_object* reply_contents), + void (*hangup_cb)(void)) +{ + if(mp_hs != NULL) + mp_hs->registerCallback(event_cb, reply_cb, hangup_cb); +} + +void QLibHomeScreen::setQuickWindow(QQuickWindow *qw) +{ + mp_window = qw; + if(mp_window != NULL) { + HMI_NOTICE("qlibhomescreen", "connect frameSwapped signal."); + m_loading = QObject::connect(mp_window, SIGNAL(frameSwapped()), this, SLOT(slotPublishSubscription())); + } +} + +/** + * shortcut_id : "dashboard" + * shortcut_name : "Dashboard" + * positon : 1~3, from left to right on homescreen + */ +int QLibHomeScreen::registerShortcut(QString shortcut_id, QString shortcut_name, QString position) { struct json_object* j_obj = json_object_new_object(); struct json_object* val_id = json_object_new_string(shortcut_id.toStdString().c_str()); struct json_object* val_name = json_object_new_string(shortcut_name.toStdString().c_str()); struct json_object* val_position = json_object_new_string(position.toStdString().c_str()); - json_object_object_add(j_obj, "shortcut_id", val_id); - json_object_object_add(j_obj, "shortcut_name", val_name); - json_object_object_add(j_obj, "position", val_position); + json_object_object_add(j_obj, _KEY_SHORTCUT_ID, val_id); + json_object_object_add(j_obj, _KEY_SHORTCUT_NAME, val_name); + json_object_object_add(j_obj, _KEY_POSITION, val_position); - mp_hs->registerShortcut(j_obj); + return mp_hs->registerShortcut("homescreen", j_obj); } + +/** + * shortcut_id : "shocut_id1,shocut_id2,shocut_id3" + * shortcut_name : "shortcut_name1,shortcut_name2,shortcut_name3" + */ +int QLibHomeScreen::updateShortcut(QString application_id, QString shortcut_id, QString shortcut_name) +{ + QStringList id = shortcut_id.split(','); + QStringList name = shortcut_name.split(','); + if(id.size() == 0 || id.size() != name.size()) { + HMI_NOTICE("qlibhomescreen","input parameters error."); + return -1; + } + + // make json contents + struct json_object* arr_obj = json_object_new_array(); + for(int i = 0; i < id.size(); ++i) { + struct json_object *j_obj = json_object_new_object(); + json_object_object_add(j_obj, _KEY_SHORTCUT_ID, json_object_new_string(id[i].toStdString().c_str())); + json_object_object_add(j_obj, _KEY_SHORTCUT_NAME, json_object_new_string(name[i].toStdString().c_str())); + json_object_array_add(arr_obj, j_obj); + } + struct json_object* push_obj = json_object_new_object(); + json_object_object_add(push_obj, _KEY_SHORTCUT, arr_obj); + return mp_hs->updateShortcut(application_id.toStdString().c_str(), push_obj); +} + +int QLibHomeScreen::updateShortcut(QString application_id, struct json_object* obj) +{ + return mp_hs->updateShortcut(application_id.toStdString().c_str(), obj); +} \ No newline at end of file diff --git a/src/qlibhomescreen.h b/src/qlibhomescreen.h index a91fda5..85f6d09 100644 --- a/src/qlibhomescreen.h +++ b/src/qlibhomescreen.h @@ -18,6 +18,7 @@ #define QLIBHOMESCREEN_H #include +#include #include #include #include @@ -41,7 +42,13 @@ public: Event_ReplyShowWindow = LibHomeScreen::Event_ReplyShowWindow, Event_ShowNotification = LibHomeScreen::Event_ShowNotification, Event_ShowInformation = LibHomeScreen::Event_ShowInformation, - Event_RegisterShortcut = LibHomeScreen::Event_RegisterShortcut + Event_AppListChanged = LibHomeScreen::Event_AppListChanged, + Event_RegisterShortcut = LibHomeScreen::Event_RegisterShortcut, + Event_UpdateShortcut = LibHomeScreen::Event_UpdateShortcut, + Event_SetDestination = LibHomeScreen::Event_SetDestination, + Event_CancelDestination = LibHomeScreen::Event_CancelDestination, + Event_StartNavigation = LibHomeScreen::Event_StartNavigation, + Event_StopNavigation = LibHomeScreen::Event_StopNavigation }; using handler_fun = std::function; @@ -59,12 +66,25 @@ public: Q_INVOKABLE void showWindow(QString application_id, QString area); Q_INVOKABLE void hideWindow(QString application_id); Q_INVOKABLE void replyShowWindow(QString application_id, QString reply); - Q_INVOKABLE void registerShortcut(QString shortcut_id, QString shortcut_name, QString position); + Q_INVOKABLE void getRunnables(void); + Q_INVOKABLE int registerShortcut(QString shortcut_id, QString shortcut_name, QString position); + Q_INVOKABLE int updateShortcut(QString application_id, QString shortcut_id, QString shortcut_name); + int updateShortcut(QString application_id, struct json_object* obj); + void registerCallback( + void (*event_cb)(const std::string& event, struct json_object* event_contents), + void (*reply_cb)(struct json_object* reply_contents), + void (*hangup_cb)(void) = nullptr); + void setQuickWindow(QQuickWindow *qw); signals: +public slots: + void slotPublishSubscription(void); + private: LibHomeScreen *mp_hs; + QQuickWindow *mp_window; + QMetaObject::Connection m_loading; }; #endif // QLIBHOMESCREEN_H diff --git a/src/src.pro b/src/src.pro index b3c8675..38bdf5b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -16,6 +16,7 @@ TEMPLATE = lib VERSION = 0.1.0 TARGET = qthomescreen +QT += quick HEADERS = qlibhomescreen.h SOURCES = qlibhomescreen.cpp -- cgit 1.2.3-korg