fix issues
[src/libqthomescreen.git] / src / qlibhomescreen.cpp
index b9298f1..63dc692 100644 (file)
 #include "qlibhomescreen.h"
 #include <QJsonDocument>
 #include <QJsonObject>
+#include "hmi-debug.h"
 using namespace std;
 
 #define _POPUPREPLY "on_screen_reply"
 #define _REQ_POPUP_MESSAGE "on_screen_message"
 #define _TAPSHORTCUT "tap_shortcut"
 #define _KEY_DATA "data"
-#define _KEY_APPLICATION_DATA "application_name"
+#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;
 
 // Note: qlibhomescreen will be integrated to libqtappfw
-
+/**
+ * QLibHomeScreen construction function
+ *
+ * #### Parameters
+ * - parent [in] : object parent.
+ *
+ * #### Return
+ * - None
+ *
+ */
 QLibHomeScreen::QLibHomeScreen(QObject *parent) :
     QObject(parent),
-    mp_hs(NULL)
+    mp_hs(NULL),
+    mp_window(NULL)
 {
-
+    HMI_DEBUG("qlibhomescreen", "called.");
 }
 
+/**
+ * QLibHomeScreen destruction function
+ *
+ * #### Parameters
+ * - None
+ *
+ * #### Return
+ * - None
+ *
+ */
 QLibHomeScreen::~QLibHomeScreen()
 {
+    HMI_DEBUG("qlibhomescreen", "called.");
     if (mp_hs != NULL) {
         delete mp_hs;
     }
 }
 
+/**
+ * init function
+ *
+ * call libhomescreen init function to connect to binder by websocket
+ *
+ * #### Parameters
+ * - prot  : port from application
+ * - token : token from application
+ *
+ * #### Return
+ * - None
+ *
+ */
 void QLibHomeScreen::init(int port, const QString &token)
 {
+    HMI_DEBUG("qlibhomescreen", "called.");
     string ctoken = token.toStdString();
     mp_hs = new LibHomeScreen();
     mp_hs->init(port, ctoken.c_str());
@@ -54,26 +94,342 @@ void QLibHomeScreen::init(int port, const QString &token)
     myThis = this;
 }
 
+
+/**
+ * call on screen message
+ *
+ * use libhomescreen api to call onscreen message
+ *
+ * #### Parameters
+ * - message : message contents
+ *
+ * #### Return
+ * - Returns 0 on success or -1 in case of error.
+ *
+ */
 int QLibHomeScreen::onScreenMessage(const QString &message)
 {
+    HMI_DEBUG("qlibhomescreen", "called.");
     string str = message.toStdString();
     return mp_hs->onScreenMessage(str.c_str());
 }
 
+/**
+ * subscribe event
+ *
+ * use libhomescreen api to subscribe homescreen event
+ *
+ * #### Parameters
+ * - evetNave : homescreen event name
+ *
+ * #### Return
+ * - Returns 0 on success or -1 in case of error.
+ *
+ */
 int QLibHomeScreen::subscribe(const QString &evetName)
 {
+    HMI_DEBUG("qlibhomescreen", "called.");
     string str = evetName.toStdString();
     return mp_hs->subscribe(str);
 }
 
+/**
+ * unsubscribe event
+ *
+ * use libhomescreen api to unsubscribe homescreen event
+ *
+ * #### Parameters
+ * - evetNave : homescreen event name
+ *
+ * #### Return
+ * - Returns 0 on success or -1 in case of error.
+ *
+ */
 int QLibHomeScreen::unsubscribe(const QString &evetName)
 {
+    HMI_DEBUG("qlibhomescreen", "called.");
     string str = evetName.toStdString();
     return mp_hs->unsubscribe(str);
 }
 
+/**
+ * set homescreen event handler function
+ *
+ * #### Parameters
+ * - et : homescreen event name
+ * - f  : event handler function
+ *
+ * #### Return
+ * - None.
+ *
+ */
 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));
+}
+
+/**
+ * tapShortcut function
+ *
+ * #### Parameters
+ * - application_id : tapped application id
+  *
+ * #### Return
+ * - None.
+ *
+ */
+void QLibHomeScreen::tapShortcut(QString application_id)
+{
+    HMI_DEBUG("qlibhomescreen","tapShortcut %s", application_id.toStdString().c_str());
+    mp_hs->showWindow(application_id.toStdString().c_str(), nullptr);
+}
+
+/**
+ * show application by application id and display area
+ *
+ * #### Parameters
+ * - application_id  : application id
+ * - area  : display area liked {"area":"normal"}
+ *
+ * #### Return
+ * - None.
+ *
+ */
+void QLibHomeScreen::showWindow(QString application_id, json_object* area)
+{
+    mp_hs->showWindow(application_id.toStdString().c_str(), area);
+}
+
+/**
+ * show application by application id and display area
+ *
+ * #### Parameters
+ * - application_id  : application id
+ * - area  : display area liked "normal"
+ *
+ * #### Return
+ * - None.
+ *
+ */
+void QLibHomeScreen::showWindow(QString application_id, QString area)
+{
+    if(area.isNull()) {
+        mp_hs->showWindow(application_id.toStdString().c_str(), nullptr);
+    } else {
+        struct json_object *j_obj = json_object_new_object();
+        struct json_object *value = json_object_new_string(area.toStdString().c_str());
+        json_object_object_add(j_obj, "area", value);
+        mp_hs->showWindow(application_id.toStdString().c_str(), j_obj);
+    }
+}
+
+/**
+ * hide application by application id
+ *
+ * #### Parameters
+ * - application_id  : application id
+ *
+ * #### Return
+ * - None.
+ *
+ */
+void QLibHomeScreen::hideWindow(QString application_id)
+{
+    mp_hs->hideWindow(application_id.toStdString().c_str());
+}
+
+/**
+ * send onscreen reply to application
+ *
+ * #### Parameters
+ * - application_id  : application id
+ * - reply  : the reply contents
+ *
+ * #### Return
+ * - None.
+ *
+ */
+void QLibHomeScreen::replyShowWindow(QString application_id, json_object* reply)
+{
+    mp_hs->replyShowWindow(application_id.toStdString().c_str(), reply);
+}
+
+/**
+ * send onscreen reply to application
+ *
+ * #### Parameters
+ * - application_id  : application id
+ * - reply  : the reply contents which can convert to json
+ *
+ * #### Return
+ * - None.
+ *
+ */
+void QLibHomeScreen::replyShowWindow(QString application_id, QString reply)
+{
+    if(reply.isNull())
+        mp_hs->replyShowWindow(application_id.toStdString().c_str(), nullptr);
+    else
+        mp_hs->replyShowWindow(application_id.toStdString().c_str(), json_tokener_parse(reply.toStdString().c_str()));
+}
+
+/**
+ * show information
+ *
+ * push information to HomeScreen
+ *
+ * #### Parameters
+ * - info : information that want to show
+ *
+ * #### Return
+ * - None.
+ *
+ */
+void QLibHomeScreen::showInformation(QString info)
+{
+       struct json_object* j_obj = json_object_new_object();
+       struct json_object* val = json_object_new_string(info.toStdString().c_str());
+       json_object_object_add(j_obj, "info", val);
+
+    mp_hs->showInformation(j_obj);
+}
+
+/**
+ * show notification
+ *
+ * push notification to HomeScreen
+ *
+ * #### Parameters
+ * - icon : provided icon
+ * - text : text that want to show
+ *
+ * #### Resturn
+ * - None.
+ *
+ */
+void QLibHomeScreen::showNotification(QString icon, QString text)
+{
+       struct json_object* j_obj = json_object_new_object();
+       struct json_object* val_icon = json_object_new_string(icon.toStdString().c_str());
+       struct json_object* val_text = json_object_new_string(text.toStdString().c_str());
+       json_object_object_add(j_obj, "icon", val_icon);
+       json_object_object_add(j_obj, "text", val_text);
+
+    mp_hs->showNotification(j_obj);
+}
+
+/**
+ * get runnables list from homescreen-service
+ *
+ * #### Parameters
+ * - Nothing
+ *
+ * #### Resturn
+ * - None.
+ *
+ */
+void QLibHomeScreen::getRunnables(void)
+{
+    mp_hs->getRunnables();
+}
+
+/**
+ * publlish subscription to homescreen-service
+ *
+ * #### Parameters
+ * - Nothing
+ *
+ * #### Resturn
+ * - None.
+ *
+ */
+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, _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);
+
+    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