diff options
-rw-r--r-- | launcher/launcher.pro | 8 | ||||
-rw-r--r-- | launcher/qml/Launcher.qml | 23 | ||||
-rw-r--r-- | launcher/src/appinfo.h | 13 | ||||
-rw-r--r-- | launcher/src/applicationmodel.cpp | 27 | ||||
-rw-r--r-- | launcher/src/applicationmodel.h | 19 | ||||
-rw-r--r-- | launcher/src/homescreenhandler.cpp | 110 | ||||
-rw-r--r-- | launcher/src/homescreenhandler.h | 53 | ||||
-rw-r--r-- | launcher/src/main.cpp | 51 |
8 files changed, 45 insertions, 259 deletions
diff --git a/launcher/launcher.pro b/launcher/launcher.pro index 929960f..0bfc8b9 100644 --- a/launcher/launcher.pro +++ b/launcher/launcher.pro @@ -18,7 +18,7 @@ TARGET = launcher QT = qml quick gui-private dbus CONFIG += c++11 link_pkgconfig DESTDIR = $${OUT_PWD} -PKGCONFIG += json-c +PKGCONFIG += qtappfw-applauncher CONFIG(release, debug|release) { QMAKE_POST_LINK = $(STRIP) --strip-unneeded $(TARGET) @@ -29,13 +29,11 @@ DBUS_INTERFACES = $$[QT_SYSROOT]/usr/share/dbus-1/interfaces/org.automotivelinux SOURCES += \ src/main.cpp \ src/applicationmodel.cpp \ - src/appinfo.cpp \ - src/homescreenhandler.cpp + src/appinfo.cpp HEADERS += \ src/applicationmodel.h \ - src/appinfo.h \ - src/homescreenhandler.h + src/appinfo.h OTHER_FILES += \ README.md diff --git a/launcher/qml/Launcher.qml b/launcher/qml/Launcher.qml index 894ff98..3aef4e6 100644 --- a/launcher/qml/Launcher.qml +++ b/launcher/qml/Launcher.qml @@ -67,7 +67,7 @@ ApplicationWindow { // uncomment this out if you want to highlight the currently selected item //highlight: Rectangle { width: 80; height: 80; color: "steelblue"; opacity: 0.3 } - model: ApplicationModel { id: applicationModel } + model: ApplicationModel delegate: Item { width: grid.cellWidth height: grid.cellHeight @@ -131,26 +131,13 @@ ApplicationWindow { property string currentApp: '' onClicked: { parent.GridView.view.currentIndex = index - currentApp = applicationModel.appid(parent.GridView.view.currentIndex) - homescreenHandler.tapShortcut(currentApp) + currentApp = ApplicationModel.appid(parent.GridView.view.currentIndex) + console.debug("Launcher: Starting app " + currentApp) + applauncher.startApplication(currentApp) + console.debug("Launcher: Started app " + currentApp) } } } - - Connections { - target: homescreenHandler - onAppListUpdate: { - console.warn("applist update in Launcher.qml") - applicationModel.updateApplist(info); - } - } - Connections { - target: homescreenHandler - onInitAppList: { - console.warn("applist init in Launcher.qml") - applicationModel.initAppList(data); - } - } } } } diff --git a/launcher/src/appinfo.h b/launcher/src/appinfo.h index 1d1953d..ecbb6dc 100644 --- a/launcher/src/appinfo.h +++ b/launcher/src/appinfo.h @@ -1,19 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 /* * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH * Copyright (C) 2016 The Qt Company Ltd. * Copyright (c) 2018 TOYOTA MOTOR CORPORATION - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. */ #ifndef APPINFO_H diff --git a/launcher/src/applicationmodel.cpp b/launcher/src/applicationmodel.cpp index 1af4366..d54d171 100644 --- a/launcher/src/applicationmodel.cpp +++ b/launcher/src/applicationmodel.cpp @@ -1,19 +1,9 @@ +// SPDX-License-Identifier: Apache-2.0 /* * Copyright (C) 2016 The Qt Company Ltd. * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH * Copyright (c) 2018,2019 TOYOTA MOTOR CORPORATION - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright (C) 2022 Konsulko Group */ #include "applicationmodel.h" @@ -197,18 +187,13 @@ void ApplicationModel::updateApplist(QStringList info) endResetModel(); } -void ApplicationModel::initAppList(QString data) +void ApplicationModel::initAppList(QList<QMap<QString, QString>> &apps) { HMI_DEBUG("launcher","init application list."); beginResetModel(); - QJsonDocument japps = QJsonDocument::fromJson(data.toUtf8()); - for (auto const &app : japps.array()) { - QJsonObject const &jso = app.toObject(); - auto const name = jso["name"].toString(); - auto const id = jso["id"].toString(); - auto const icon = get_icon_name(jso); - - d->addApp(icon, name, id); + qDebug() << "ApplicationModel::initAppList: got " << apps.size() << " apps"; + for (int i = 0; i < apps.size(); i++) { + d->addApp(apps[i]["icon_path"], apps[i]["name"], apps[i]["id"]); } endResetModel(); } diff --git a/launcher/src/applicationmodel.h b/launcher/src/applicationmodel.h index 780e575..c2693b2 100644 --- a/launcher/src/applicationmodel.h +++ b/launcher/src/applicationmodel.h @@ -1,28 +1,19 @@ +// SPDX-License-Identifier: Apache-2.0 /* * Copyright (C) 2016 The Qt Company Ltd. * Copyright (c) 2018,2019 TOYOTA MOTOR CORPORATION - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright (C) 2022 Konsulko Group */ #ifndef APPLICATIONMODEL_H #define APPLICATIONMODEL_H -#include <QtCore/QAbstractListModel> +#include <QAbstractListModel> class ApplicationModel : public QAbstractListModel { Q_OBJECT + public: explicit ApplicationModel(QObject *parent = nullptr); ~ApplicationModel(); @@ -35,7 +26,7 @@ public: Q_INVOKABLE QString id(int index) const; Q_INVOKABLE QString name(int index) const; Q_INVOKABLE void move(int from, int to); - Q_INVOKABLE void initAppList(QString data); + Q_INVOKABLE void initAppList(QList<QMap<QString, QString>> &apps); Q_INVOKABLE void updateApplist(QStringList info); private: diff --git a/launcher/src/homescreenhandler.cpp b/launcher/src/homescreenhandler.cpp deleted file mode 100644 index 33987dd..0000000 --- a/launcher/src/homescreenhandler.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2017 TOYOTA MOTOR CORPORATION - * Copyright (c) 2018,2019 TOYOTA MOTOR CORPORATION - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * 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) -{ - 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()); - } -} - -int HomescreenHandler::getRunnablesCount(void) -{ - int apps = 0; - - 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 apps; - } else { - QVariantList applist_variant = reply.value(); - for (auto &v: applist_variant) - apps++; - } - - return apps; -} - -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!"); - } -} diff --git a/launcher/src/homescreenhandler.h b/launcher/src/homescreenhandler.h deleted file mode 100644 index 7392992..0000000 --- a/launcher/src/homescreenhandler.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2017 TOYOTA MOTOR CORPORATION - * Copyright (c) 2018,2019 TOYOTA MOTOR CORPORATION - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef HOMESCREENHANDLER_H -#define HOMESCREENHANDLER_H - -#include <QObject> -#include <QString> -#include <QStringList> -#include <string> - -#include <json.h> - -#include "applaunch_interface.h" - -using namespace std; - -class HomescreenHandler : public QObject -{ - Q_OBJECT -public: - explicit HomescreenHandler(QObject *parent = 0); - ~HomescreenHandler(); - - Q_INVOKABLE void tapShortcut(QString application_id); - Q_INVOKABLE void getRunnables(void); - int getRunnablesCount(void); - - void onRep(struct json_object* reply_contents); - -signals: - void initAppList(QString data); - void appListUpdate(QStringList info); - -private: - org::automotivelinux::AppLaunch *applaunch_iface; -}; - -#endif // HOMESCREENHANDLER_H diff --git a/launcher/src/main.cpp b/launcher/src/main.cpp index 77dee27..40110ef 100644 --- a/launcher/src/main.cpp +++ b/launcher/src/main.cpp @@ -1,18 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 /* * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH * Copyright (c) 2018 TOYOTA MOTOR CORPORATION - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright (C) 2022 Konsulko Group */ #include <QGuiApplication> @@ -27,28 +17,37 @@ #include "applicationmodel.h" #include "appinfo.h" -#include "homescreenhandler.h" +#include "AppLauncherClient.h" int main(int argc, char *argv[]) { QString myname = QString("launcher"); - QGuiApplication a(argc, argv); + QGuiApplication app(argc, argv); // necessary to identify correctly by app_id - a.setDesktopFileName(myname); + app.setDesktopFileName(myname); - // import C++ class to QML - qmlRegisterType<ApplicationModel>("AppModel", 1, 0, "ApplicationModel"); - - HomescreenHandler* homescreenHandler = new HomescreenHandler(); - - // mail.qml loading QQmlApplicationEngine engine; - int apps = homescreenHandler->getRunnablesCount(); - engine.rootContext()->setContextProperty(QStringLiteral("homescreenHandler"), homescreenHandler); - engine.rootContext()->setContextProperty(QStringLiteral("apps_len"), apps); + + AppLauncherClient* applauncher = new AppLauncherClient(); + QList<QMap<QString, QString>> apps; + if (applauncher) { + applauncher->listApplications(apps); + engine.rootContext()->setContextProperty(QStringLiteral("applauncher"), applauncher); + engine.rootContext()->setContextProperty(QStringLiteral("apps_len"), apps.size()); + } else { + qFatal("Could not create AppLauncherClient"); + } + + ApplicationModel *appmodel = new ApplicationModel(); + if (appmodel) { + appmodel->initAppList(apps); + qmlRegisterSingletonType<ApplicationModel>("AppModel", 1, 0, "ApplicationModel", + [appmodel](QQmlEngine *, QJSEngine *) -> QObject * { return appmodel; }); + } else { + qFatal("Could not create ApplicationModel"); + } engine.load(QUrl(QStringLiteral("qrc:/Launcher.qml"))); - homescreenHandler->getRunnables(); - return a.exec(); + return app.exec(); } |