X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=launcher%2Fsrc%2Fhomescreenhandler.cpp;h=9cf7e612fbe300f052f41449bec0f56bb42b4718;hb=9495545c38d5e72014cba05f8ea79c98ed3321a1;hp=4d984142d315c785a2f85a6ea984a73771e29b90;hpb=fc41fa6da7f64262a7bbc4313b920762e1a31d15;p=apps%2Flauncher.git diff --git a/launcher/src/homescreenhandler.cpp b/launcher/src/homescreenhandler.cpp index 4d98414..9cf7e61 100644 --- a/launcher/src/homescreenhandler.cpp +++ b/launcher/src/homescreenhandler.cpp @@ -15,200 +15,76 @@ * limitations under the License. */ -#include +#include +#include #include "homescreenhandler.h" -#include #include "hmi-debug.h" -#include -#include -#include +#include -#include "shell-desktop.h" - -void* HomescreenHandler::myThis = 0; - -static struct wl_output * -getWlOutput(QPlatformNativeInterface *native, QScreen *screen) -{ - void *output = native->nativeResourceForScreen("output", screen); - return static_cast(output); -} - -static void -global_add(void *data, struct wl_registry *reg, uint32_t name, - const char *interface, uint32_t version) -{ - struct agl_shell_desktop **shell = - static_cast(data); - - if (strcmp(interface, agl_shell_desktop_interface.name) == 0) { - *shell = static_cast( - wl_registry_bind(reg, name, &agl_shell_desktop_interface, version) - ); - } -} - -static void -global_remove(void *data, struct wl_registry *reg, uint32_t id) -{ - (void) data; - (void) reg; - (void) id; -} - -static const struct wl_registry_listener registry_listener = { - global_add, - global_remove, -}; - - -static struct agl_shell_desktop * -register_agl_shell_desktop(void) -{ - struct wl_display *wl; - struct wl_registry *registry; - struct agl_shell_desktop *shell = nullptr; - - QPlatformNativeInterface *native = qApp->platformNativeInterface(); - - wl = static_cast(native->nativeResourceForIntegration("display")); - registry = wl_display_get_registry(wl); - - wl_registry_add_listener(registry, ®istry_listener, &shell); - // Roundtrip to get all globals advertised by the compositor - wl_display_roundtrip(wl); - wl_registry_destroy(registry); - - return shell; -} +#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::init(int port, const char *token, QString myname) +void HomescreenHandler::tapShortcut(QString application_id) { - myThis = this; - m_myname = myname; - - mp_hs = new LibHomeScreen(); - mp_hs->init(port, token); - mp_hs->registerCallback(nullptr, HomescreenHandler::onRep_static); - - struct agl_shell_desktop *agl_shell = register_agl_shell_desktop(); - if (!agl_shell) { - fprintf(stderr, "agl_shell extension is not advertised. " - "Are you sure that agl-compositor is running?\n"); - exit(EXIT_FAILURE); + HMI_DEBUG("Launcher","tapShortcut %s", application_id.toStdString().c_str()); + + 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()); } - - std::shared_ptr shell{agl_shell, agl_shell_desktop_destroy}; - this->aglShell = new Shell(shell, nullptr); - - 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, QString output_name) -{ - 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); - if (output_name.isEmpty()) - aglShell->activate_app(nullptr, application_id, nullptr); - else - aglShell->activate_app_by_screen(output_name, application_id, nullptr); -} - -void HomescreenHandler::onRep_static(struct json_object* reply_contents) -{ - static_cast(HomescreenHandler::myThis)->onRep(reply_contents); -} - -void HomescreenHandler::onRep(struct json_object* reply_contents) +void HomescreenHandler::getRunnables(void) { - 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); + struct json_object *json_applist; + QString applist; + QStringList apps; + + QDBusPendingReply 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(); + + 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!"); + } }