aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2022-09-10 12:42:21 -0400
committerScott Murray <scott.murray@konsulko.com>2022-09-21 14:34:04 +0000
commitb28d987d3fcf0c1c728d6c3cd18e52d40f6c2ffc (patch)
treefb9a91bc540c200d13bcc8e302a0bc8a6c4a8e6c
parent168a19dd81b56af8ed659b8d3a143f1075c7b6fb (diff)
Rework to use launcher wrapper from libqtappfwneedlefish
Switch to using the new app launcher API wrapper from libqtappfw in order to migrate to the new gRPC based API implementation. As well, the copyright headers in the source files have been tweaked to remove the Apache license boilerplate in favour of a SPDX license tag. Bug-AGL: SPEC-4559 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: I62cd0a51e9c97b1db3d86ca67b7c92d086d2f1c9 (cherry picked from commit 5e828161fc1571323e2812a344f6714ae9331b2c)
-rw-r--r--launcher/launcher.pro8
-rw-r--r--launcher/qml/Launcher.qml23
-rw-r--r--launcher/src/appinfo.h13
-rw-r--r--launcher/src/applicationmodel.cpp27
-rw-r--r--launcher/src/applicationmodel.h19
-rw-r--r--launcher/src/homescreenhandler.cpp110
-rw-r--r--launcher/src/homescreenhandler.h53
-rw-r--r--launcher/src/main.cpp51
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();
}