diff options
author | Matt Ranostay <matt.ranostay@konsulko.com> | 2019-07-01 11:18:24 -0700 |
---|---|---|
committer | Matt Ranostay <matt.ranostay@konsulko.com> | 2019-07-09 14:08:34 -0700 |
commit | d24a8a6bc4b1241d1057d78006da3c5dac454dd1 (patch) | |
tree | a2bbbab6b521d26e9e97f4fd323212d998f43c5f /app | |
parent | 7dff10809be5feeda6f81b942c8671cdda2e3a27 (diff) |
messaging: initial commit for applicationhalibut_8.0.1halibut_8.0.0halibut_7.99.3halibut/8.0.1halibut/8.0.0halibut/7.99.38.0.18.0.07.99.3
Initial Messaging application that enables notifications of
incoming SMS messages.
Bug-AGL: SPEC-2566
Change-Id: If9a196536cf5aa4ce016d541c276b9750a9af48f
Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
Diffstat (limited to 'app')
-rw-r--r-- | app/Messaging.qml | 82 | ||||
-rw-r--r-- | app/Messaging.qrc | 6 | ||||
-rw-r--r-- | app/Notification.qml | 26 | ||||
-rw-r--r-- | app/app.pri | 13 | ||||
-rw-r--r-- | app/app.pro | 11 | ||||
-rw-r--r-- | app/main.cpp | 101 |
6 files changed, 239 insertions, 0 deletions
diff --git a/app/Messaging.qml b/app/Messaging.qml new file mode 100644 index 0000000..ec7c7c7 --- /dev/null +++ b/app/Messaging.qml @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2019 Konsulko Group + * + * 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. + */ + +import QtQuick 2.6 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.0 +import AGL.Demo.Controls 1.0 + +ApplicationWindow { + id: root + + width: 1080 * container.scale + height: 1487 * container.scale + + Connections { + target: messaging + + onNotificationEvent: { + notificationModel.append({"name": message.sender.fn, "message": message.message }) + notificationView.currentIndex = notificationModel.count - 1 + } + } + + ListModel { + id: notificationModel + } + + Item { + id: container + width: 1080 + height: 1487 + scale: screenInfo.scale_factor() + anchors.centerIn: parent + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.bottom + + // ----- Childs + Label { + id: title + font.pixelSize: 48 + text: "Notifications" + anchors.horizontalCenter: parent.horizontalCenter + } + + ListView { + id: notificationView + model: notificationModel + + anchors.margins: 50 + anchors.top: title.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + spacing: 40 + + highlight: Rectangle { + color: "transparent" + radius: 5 + border.color: "white" + border.width: 1 + } + highlightFollowsCurrentItem: true + + delegate: Notification { } + } + } +} diff --git a/app/Messaging.qrc b/app/Messaging.qrc new file mode 100644 index 0000000..6c16a61 --- /dev/null +++ b/app/Messaging.qrc @@ -0,0 +1,6 @@ +<RCC> + <qresource prefix="/"> + <file>Messaging.qml</file> + <file>Notification.qml</file> + </qresource> +</RCC> diff --git a/app/Notification.qml b/app/Notification.qml new file mode 100644 index 0000000..45c98f6 --- /dev/null +++ b/app/Notification.qml @@ -0,0 +1,26 @@ +import QtQuick 2.6 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.0 + +Item { + height: msg.height + width: parent.width + Column { + id: msg + anchors.left: parent.left + anchors.right: parent.right + Label { + text: '<b>' + name + '</b>' + font.pixelSize: 42 + wrapMode: Text.WordWrap + } + Label { + text: message + anchors.margins: 5 + anchors.left: parent.left + anchors.right: parent.right + font.pixelSize: 32 + wrapMode: Text.WordWrap + } + } +} diff --git a/app/app.pri b/app/app.pri new file mode 100644 index 0000000..c3b1fd1 --- /dev/null +++ b/app/app.pri @@ -0,0 +1,13 @@ +TEMPLATE = app +QMAKE_LFLAGS += "-Wl,--hash-style=gnu -Wl,--as-needed" + +load(configure) +qtCompileTest(libhomescreen) + +config_libhomescreen { + CONFIG += link_pkgconfig + PKGCONFIG += homescreen + DEFINES += HAVE_LIBHOMESCREEN +} + +DESTDIR = $${OUT_PWD}/../package/root/bin diff --git a/app/app.pro b/app/app.pro new file mode 100644 index 0000000..b64584b --- /dev/null +++ b/app/app.pro @@ -0,0 +1,11 @@ +TARGET = messaging +QT = quickcontrols2 websockets + +SOURCES = main.cpp + +CONFIG += link_pkgconfig +PKGCONFIG += libhomescreen qlibwindowmanager qtappfw libafbwsc + +RESOURCES += Messaging.qrc + +include(app.pri) diff --git a/app/main.cpp b/app/main.cpp new file mode 100644 index 0000000..783d2f5 --- /dev/null +++ b/app/main.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * Copyright (C) 2019 Konsulko Group + * + * 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 <QtCore/QDebug> +#include <QtCore/QCommandLineParser> +#include <QtCore/QUrlQuery> +#include <QtGui/QGuiApplication> +#include <QtQml/QQmlApplicationEngine> +#include <QtQml/QQmlContext> +#include <QtQuickControls2/QQuickStyle> +#include <QQuickWindow> +#include <libhomescreen.hpp> +#include <qlibwindowmanager.h> + +#include <map.h> + +int main(int argc, char *argv[]) +{ + QString graphic_role = QString("messaging"); + + QGuiApplication app(argc, argv); + + QQuickStyle::setStyle("AGL"); + + QQmlApplicationEngine engine; + + QCommandLineParser parser; + parser.addPositionalArgument("port", app.translate("main", "port for binding")); + parser.addPositionalArgument("secret", app.translate("main", "secret for binding")); + parser.addHelpOption(); + parser.addVersionOption(); + parser.process(app); + QStringList positionalArguments = parser.positionalArguments(); + if (positionalArguments.length() == 2) { + int port = positionalArguments.takeFirst().toInt(); + QString secret = positionalArguments.takeFirst(); + std::string token = secret.toStdString(); + QUrl bindingAddress; + bindingAddress.setScheme(QStringLiteral("ws")); + bindingAddress.setHost(QStringLiteral("localhost")); + bindingAddress.setPort(port); + bindingAddress.setPath(QStringLiteral("/api")); + QUrlQuery query; + query.addQueryItem(QStringLiteral("token"), secret); + bindingAddress.setQuery(query); + QQmlContext *context = engine.rootContext(); + context->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress); + Map *map = new Map(bindingAddress, context); + context->setContextProperty("messaging", map); + + LibHomeScreen* hs = new LibHomeScreen(); + QLibWindowmanager* qwm = new QLibWindowmanager(); + + // WindowManager + if(qwm->init(port, secret) != 0){ + exit(EXIT_FAILURE); + } + + AGLScreenInfo screenInfo(qwm->get_scale_factor()); + + // Request a surface as described in layers.json windowmanager’s file + if (qwm->requestSurface(graphic_role) != 0) { + exit(EXIT_FAILURE); + } + // Create an event callback against an event type. Here a lambda is called when SyncDraw event occurs + qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw, [qwm, graphic_role](json_object *object) { + Q_UNUSED(object); + qwm->endDraw(graphic_role); + }); + + // HomeScreen + hs->init(port, token.c_str()); + // Set the event handler for Event_ShowWindow which will activate the surface for windowmanager + hs->set_event_handler(LibHomeScreen::Event_ShowWindow, [qwm, &graphic_role](json_object *object){ + qDebug("Surface %s got showWindow\n", graphic_role.toStdString().c_str()); + qwm->activateWindow(graphic_role); + }); + + engine.rootContext()->setContextProperty("screenInfo", &screenInfo); + engine.load(QUrl(QStringLiteral("qrc:/Messaging.qml"))); + QObject *root = engine.rootObjects().first(); + QQuickWindow *window = qobject_cast<QQuickWindow *>(root); + QObject::connect(window, SIGNAL(frameSwapped()), qwm, SLOT(slotActivateWindow() + )); + } + return app.exec(); +} |