* limitations under the License.
*/
-#include <QFileInfo>
+#include <QDBusMessage>
+#include <QDBusConnection>
#include "homescreenhandler.h"
-#include <functional>
#include "hmi-debug.h"
-void* HomescreenHandler::myThis = 0;
+#include <json.h>
-HomescreenHandler::HomescreenHandler(QObject *parent) :
- QObject(parent),
- mp_hs(NULL)
-{
-
-}
+#define APPLAUNCH_DBUS_IFACE "org.automotivelinux.AppLaunch"
+#define APPLAUNCH_DBUS_OBJECT "/org/automotivelinux/AppLaunch"
-HomescreenHandler::~HomescreenHandler()
+HomescreenHandler::HomescreenHandler(QObject *parent) : QObject(parent)
{
- if (mp_hs != NULL) {
- delete mp_hs;
- }
+ applaunch_iface = new org::automotivelinux::AppLaunch(APPLAUNCH_DBUS_IFACE, APPLAUNCH_DBUS_OBJECT, QDBusConnection::sessionBus(), this);
}
-void HomescreenHandler::init(int port, const char *token, QLibWindowmanager *qwm, QString myname)
+HomescreenHandler::~HomescreenHandler()
{
- myThis = this;
- mp_qwm = qwm;
- m_myname = myname;
-
- mp_hs = new LibHomeScreen();
- mp_hs->init(port, token);
- mp_hs->registerCallback(nullptr, HomescreenHandler::onRep_static);
-
- mp_hs->set_event_handler(LibHomeScreen::Event_ShowWindow,[this](json_object *object){
- HMI_DEBUG("Launcher","Surface launcher got Event_ShowWindow\n");
- mp_qwm->activateWindow(m_myname);
- });
-
- mp_hs->set_event_handler(LibHomeScreen::Event_AppListChanged,[this](json_object *object){
- HMI_DEBUG("Launcher","laucher: appListChanged [%s]\n", json_object_to_json_string(object));
-
- struct json_object *obj_param, *obj_oper, *obj_data;
- if(json_object_object_get_ex(object, "parameter", &obj_param)
- && json_object_object_get_ex(obj_param, "operation", &obj_oper)
- && json_object_object_get_ex(obj_param, "data", &obj_data)) {
- QString oper = json_object_get_string(obj_oper);
- if(oper == "uninstall") {
- /* { "application_id": "launcher",
- * "type": "application-list-changed",
- * "parameter":{
- * "operation": "uninstall",
- * "data": "onstestapp@0.1"
- * }
- * } */
- QString id = json_object_get_string(obj_data);
- QStringList info;
- // icon, name, id
- info << "" << "" << id;
- emit appListUpdate(info);
- }
- else if(oper == "install") {
- /* { "application_id": "launcher",
- * "type": "application-list-changed",
- * "parameter": {
- * "operation": "install",
- * "data": {
- * "description":"This is a demo onstestapp application",
- * "name": "onstestapp",
- * "shortname": "",
- * "id": "onstestapp@0.1",
- * "version": "0.1",
- * "author": "Qt",
- * "author-email": "",
- * "width": "",
- * "height": "",
- * "icon": "\/var\/local\/lib\/afm\/applications\/onstestapp\/0.1\/icon.svg",
- * "http-port": 31022
- * }
- * }
- * } */
- struct json_object *obj_icon, *obj_name, *obj_id;
- if(json_object_object_get_ex(obj_data, "icon", &obj_icon)
- && json_object_object_get_ex(obj_data, "name", &obj_name)
- && json_object_object_get_ex(obj_data, "id", &obj_id)) {
- QString icon = json_object_get_string(obj_icon);
- QString name = json_object_get_string(obj_name);
- QString id = json_object_get_string(obj_id);
- QStringList info;
- // icon, name, id
- info << icon << name << id;
- emit appListUpdate(info);
- }
- }
- else {
- HMI_ERROR("Launcher","error operation.\n");
- }
- }
- });
}
void HomescreenHandler::tapShortcut(QString application_id)
{
HMI_DEBUG("Launcher","tapShortcut %s", application_id.toStdString().c_str());
- struct json_object* j_json = json_object_new_object();
- struct json_object* value;
- value = json_object_new_string("normal.full");
- json_object_object_add(j_json, "area", value);
- mp_hs->showWindow(application_id.toStdString().c_str(), j_json);
+ QDBusPendingReply<> reply = applaunch_iface->start(application_id);
+ reply.waitForFinished();
+ if (reply.isError()) {
+ HMI_ERROR("Launcher","Unable to start application '%s': %s",
+ application_id.toStdString().c_str(),
+ reply.error().message().toStdString().c_str());
+ }
}
-void HomescreenHandler::onRep_static(struct json_object* reply_contents)
+void HomescreenHandler::getRunnables(void)
{
- static_cast<HomescreenHandler*>(HomescreenHandler::myThis)->onRep(reply_contents);
-}
+ struct json_object *json_applist;
+ QString applist;
+ QStringList apps;
-void HomescreenHandler::onRep(struct json_object* reply_contents)
-{
- HMI_DEBUG("launcher","HomeScreen onReply %s", json_object_to_json_string(reply_contents));
- struct json_object *obj_res, *obj_verb;
- if(json_object_object_get_ex(reply_contents, "response", &obj_res)
- && json_object_object_get_ex(obj_res, "verb", &obj_verb)
- && !strcasecmp("getRunnables", json_object_get_string(obj_verb))) {
- struct json_object *obj_data;
- if(json_object_object_get_ex(obj_res, "data", &obj_data)) {
- HMI_DEBUG("launcher","HomescreenHandler emit initAppList");
- QString data = json_object_to_json_string(obj_data);
- emit initAppList(data);
+ QDBusPendingReply<QVariantList> reply = applaunch_iface->listApplications(true);
+ reply.waitForFinished();
+ if (reply.isError()) {
+ HMI_ERROR("Launcher","Unable to retrieve application list: %s",
+ reply.error().message().toStdString().c_str());
+ return;
+ } else {
+ QVariantList applist_variant = reply.value();
+ for (auto &v: applist_variant) {
+ QString app_id;
+ QString name;
+ QString icon_path;
+ const QDBusArgument &dbus_arg = v.value<QDBusArgument>();
+
+ dbus_arg.beginStructure();
+ dbus_arg >> app_id >> name >> icon_path;
+
+ apps << QString("{ \"name\":\"%1\", \"id\":\"%2\", \"icon\":\"%3\" }")
+ .arg(name)
+ .arg(app_id)
+ .arg(icon_path);
+ dbus_arg.endStructure();
}
}
-}
-void HomescreenHandler::getRunnables(void)
-{
- mp_hs->getRunnables();
+ applist = QString("[ %1 ]").arg(apps.join(", "));
+ json_applist = json_tokener_parse(applist.toLocal8Bit().data());
+ if (json_applist) {
+ QString data = json_object_to_json_string(json_applist);
+ HMI_DEBUG("Launcher", "doing an emit initAppList()");
+ emit initAppList(data);
+ } else {
+ HMI_DEBUG("Launcher", "app list is invalid!");
+ }
}