diff options
Diffstat (limited to 'launcher/src/homescreenhandler.cpp')
-rw-r--r-- | launcher/src/homescreenhandler.cpp | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/launcher/src/homescreenhandler.cpp b/launcher/src/homescreenhandler.cpp index 811daa0..9cf7e61 100644 --- a/launcher/src/homescreenhandler.cpp +++ b/launcher/src/homescreenhandler.cpp @@ -15,33 +15,76 @@ * limitations under the License. */ +#include <QDBusMessage> +#include <QDBusConnection> #include "homescreenhandler.h" #include "hmi-debug.h" +#include <json.h> + +#define APPLAUNCH_DBUS_IFACE "org.automotivelinux.AppLaunch" +#define APPLAUNCH_DBUS_OBJECT "/org/automotivelinux/AppLaunch" + HomescreenHandler::HomescreenHandler(QObject *parent) : QObject(parent) { + applaunch_iface = new org::automotivelinux::AppLaunch(APPLAUNCH_DBUS_IFACE, APPLAUNCH_DBUS_OBJECT, QDBusConnection::sessionBus(), this); } HomescreenHandler::~HomescreenHandler() { } -void HomescreenHandler::tapShortcut(QString application_id, QString output_name) +void HomescreenHandler::tapShortcut(QString application_id) { - HMI_DEBUG("Launcher","tapShortcut %s", application_id.toStdString().c_str()); -} + HMI_DEBUG("Launcher","tapShortcut %s", application_id.toStdString().c_str()); -void HomescreenHandler::onRep(struct json_object* reply_contents) -{ - if (reply_contents) { - QString data = json_object_to_json_string(reply_contents); - HMI_DEBUG("Launcher", "doing an emit initAppList()"); - emit initAppList(data); - } else { - HMI_DEBUG("Launcher", "reply contents is invalid!"); - } + 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::getRunnables(void) { + struct json_object *json_applist; + QString applist; + QStringList apps; + + 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(); + } + } + + 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!"); + } } |