Update license information, imprint and About screen

This commit is contained in:
Simon Stürz 2025-12-05 11:42:04 +01:00
parent eaaf0e53f9
commit 0f14ad8ab8
8 changed files with 372 additions and 77 deletions

View File

@ -1,30 +1,24 @@
// SPDX-License-Identifier: GPL-3.0-or-later
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2020, nymea GmbH
* Contact: contact@nymea.io
* Copyright (C) 2013 - 2024, nymea GmbH
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
*
* This file is part of nymea.
* This project including source code and documentation is protected by
* copyright law, and remains the property of nymea GmbH. All rights, including
* reproduction, publication, editing and translation, are reserved. The use of
* this project is subject to the terms of a license agreement to be concluded
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
* under https://nymea.io/license
* This file is part of nymea-app.
*
* GNU General Public License Usage
* Alternatively, this project may be redistributed and/or modified under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, GNU version 3. This project is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
* nymea-app is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* You should have received a copy of the GNU General Public License along with
* this project. If not, see <https://www.gnu.org/licenses/>.
* nymea-app is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* For any further details and any questions please contact us under
* contact@nymea.io or see our FAQ/Licensing Information on
* https://nymea.io/license/faq
* You should have received a copy of the GNU General Public License
* along with nymea-app. If not, see <https://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@ -32,6 +26,7 @@
#define VERSION_H
#define APP_VERSION '"$$APP_VERSION"'
#define APP_REVISION '"$$APP_REVISION"'
#define APPLICATION_NAME '"$$APPLICATION_NAME"'
#define ORGANISATION_NAME '"$$ORGANISATION_NAME"'

View File

@ -30,6 +30,7 @@
#include <QSysInfo>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include <QSslSocket>
#include "utils/qhashqml.h"
#include "libnymea-app-core.h"
@ -94,6 +95,7 @@ int main(int argc, char *argv[])
qCInfo(dcApplication()) << "Command line:" << application.arguments().join(" ");
qCInfo(dcApplication()) << "System:" << QSysInfo::machineHostName() << QSysInfo::prettyProductName() << QSysInfo::productType() << QSysInfo::productVersion() << PlatformHelper::instance()->deviceManufacturer() << PlatformHelper::instance()->deviceModel();
qCInfo(dcApplication()) << "Locale:" << QLocale() << QLocale().name() << QLocale().language();
qCInfo(dcApplication()) << "SSL version:" << QSslSocket::sslLibraryVersionString();
QScreen *screen = application.primaryScreen();
qCInfo(dcApplication()).noquote() << QString("Screen name: %1").arg(screen->name());
@ -198,8 +200,10 @@ int main(int argc, char *argv[])
#endif
engine->rootContext()->setContextProperty("appVersion", APP_VERSION);
engine->rootContext()->setContextProperty("appRevision", APP_REVISION);
engine->rootContext()->setContextProperty("qtBuildVersion", QT_VERSION_STR);
engine->rootContext()->setContextProperty("qtVersion", qVersion());
engine->rootContext()->setContextProperty("sslLibraryVersion", QSslSocket::sslLibraryVersionString());
engine->rootContext()->setContextProperty("defaultMainViewFilter", parser.value(defaultViewsOption));
engine->rootContext()->setContextProperty("kioskMode", parser.isSet(kioskOption));

View File

@ -321,5 +321,6 @@
<file>ui/system/WirelessNetworksFilterSettingsPage.qml</file>
<file>ui/system/ServerLoggingCategoriesPage.qml</file>
<file>ui/components/BackgroundFocusHandler.qml</file>
<file>ui/components/LicenseInformationItem.qml</file>
</qresource>
</RCC>

View File

@ -37,29 +37,15 @@ SettingsPageBase {
id: imprint
Layout.fillWidth: true
title: Configuration.appName
additionalLicenses: ListModel {
ListElement { license: "CC-BY-SA-3.0"; component: "Suru icons"; infoText: qsTr("Suru icons by Ubuntu"); platforms: "*" }
ListElement { license: "CC-BY-SA-3.0"; component: "Ubuntu font"; infoText: qsTr("Ubuntu font by Ubuntu"); platforms: "*" }
ListElement { license: "LGPL3"; component: "QtZeroConf"; infoText: qsTr("QtZeroConf library by Jonathan Bagg"); platforms: "android,ios,linux,osx" }
ListElement { license: "OpenSSL"; component: "OpenSSL"; infoText: qsTr("OpenSSL libraries by Eric Young"); platforms: "android,windows" }
ListElement { license: "OFL"; component: "Oswald font"; infoText: qsTr("Oswald font by The Oswald Project"); platforms: "*" }
}
githubLink: "https://github.com/nymea/nymea-app"
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("App version:")
subText: appVersion
progressive: false
prominentSubText: false
}
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("Qt version:")
subText: qtVersion + (qtBuildVersion !== qtVersion ? " (" + qsTr("Built with %1").arg(qtBuildVersion) + ")" : "")
text: qsTr("App version:") + " " + appVersion
subText: qsTr("Revision:") + " " + appRevision
progressive: false
prominentSubText: false
}
}
}

View File

@ -27,13 +27,15 @@ import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
import Nymea 1.0
Item {
id: root
implicitHeight: aboutColumn.implicitHeight
property alias title: titleLabel.text
property url githubLink
property var additionalLicenses: null
property bool showOpensourceLicenses: true
default property alias content: contentGrid.data
@ -121,41 +123,35 @@ Item {
Repeater {
visible: Configuration.additionalImrintLinks !== null && Configuration.additionalImrintLinks.count > 0
model: Configuration.additionalImrintLinks
delegate:NymeaSwipeDelegate {
delegate: NymeaSwipeDelegate {
Layout.fillWidth: true
iconName: "qrc:/icons/stock_website.svg"
text: model.text
subText: model.subText
prominentSubText: false
wrapTexts: false
onClicked: {
Qt.openUrlExternally(model.url)
}
onClicked: { Qt.openUrlExternally(model.url) }
}
}
NymeaSwipeDelegate {
Layout.fillWidth: true
iconName: "qrc:/icons/stock_website.svg"
text: qsTr("Chargebyte")
text: qsTr("chargebyte GmbH")
subText: "https://chargebyte.com"
prominentSubText: false
wrapTexts: false
onClicked: {
Qt.openUrlExternally("https://chargebyte.com")
}
onClicked: { Qt.openUrlExternally("https://chargebyte.com") }
}
NymeaSwipeDelegate {
Layout.fillWidth: true
iconName: "qrc:/icons/stock_website.svg"
text: qsTr("Visit the nymea website")
text: qsTr("Visit the nymea project website")
subText: "https://nymea.io"
prominentSubText: false
wrapTexts: false
onClicked: {
Qt.openUrlExternally("https://nymea.io")
}
onClicked: { Qt.openUrlExternally("https://nymea.io") }
}
NymeaSwipeDelegate {
@ -165,9 +161,7 @@ Item {
subText: root.githubLink
prominentSubText: false
wrapTexts: false
onClicked: {
Qt.openUrlExternally(root.githubLink)
}
onClicked: { Qt.openUrlExternally(root.githubLink) }
}
NymeaSwipeDelegate {
@ -177,8 +171,7 @@ Item {
subText: Configuration.privacyPolicyUrl
prominentSubText: false
wrapTexts: false
onClicked:
Qt.openUrlExternally(Configuration.privacyPolicyUrl)
onClicked: Qt.openUrlExternally(Configuration.privacyPolicyUrl)
}
NymeaSwipeDelegate {
@ -188,19 +181,17 @@ Item {
subText: "The nymea sofware license"
prominentSubText: false
wrapTexts: false
onClicked: {
Qt.openUrlExternally("https://nymea.io/license")
}
onClicked: { Qt.openUrlExternally("https://www.gnu.org/licenses/gpl-3.0-standalone.html") }
}
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("Additional software licenses")
text: qsTr("Open Source Licenses")
iconName: "qrc:/icons/logs.svg"
subText: "Additional used software licenses"
subText: "List of all open source components used in this app."
prominentSubText: false
wrapTexts: false
visible: root.additionalLicenses && root.additionalLicenses.count > 0
visible: root.showOpensourceLicenses
onClicked: {
pageStack.push(licensesPageComponent)
}
@ -218,22 +209,267 @@ Item {
onBackPressed: pageStack.pop()
}
ColumnLayout {
anchors { left: parent.left; top: parent.top; right: parent.right }
Flickable {
anchors.fill: parent
contentHeight: licensesColumnLayout.implicitHeight + app.margins
clip: true
Repeater {
model: root.additionalLicenses
ColumnLayout {
id: licensesColumnLayout
anchors { left: parent.left; top: parent.top; right: parent.right }
delegate: NymeaSwipeDelegate {
LicenseInformationItem {
Layout.fillWidth: true
text: model.component
subText: model.infoText
prominentSubText: false
visible: model.platforms === "*" || model.platforms.indexOf(Qt.platform.os) >= 0
onClicked: {
pageStack.push(licenseTextComponent, {license: model.license})
}
component: "QtCore"
description: qsTr("Qt core module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtbase"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtGui"
description: qsTr("Qt gui module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtbase"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtNetwork"
description: qsTr("Qt network module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtbase"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtQML"
description: qsTr("Qt QML module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtdeclarative"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtQuick"
description: qsTr("Qt Quick module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtdeclarative"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtQuickControls"
description: qsTr("Qt Quick Controls module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtdeclarative"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtQuickDialogs"
description: qsTr("Qt Quick Dialogs module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtdeclarative"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtQuickLayouts"
description: qsTr("Qt Quick Layouts module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtdeclarative"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "Qt5CoreComapitbility"
description: qsTr("Qt 5 compatibility module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "Qt Image Formats"
description: qsTr("Qt image formats module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtSvg"
description: qsTr("Qt SVG module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtsvg"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtCharts"
description: qsTr("Qt charts module")
license: "GPLv3"
version: qtBuildVersion
url: "https://github.com/qt"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtWebsockets"
description: qsTr("Qt websockets module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtwebsockets"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtBluetooth"
description: qsTr("Qt bluetooth module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtconnectivity"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtNfc"
description: qsTr("Qt NFC module")
license: "LGPLv3"
version: qtBuildVersion
url: "https://github.com/qt/qtconnectivity"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "nymea-remoteproxy"
description: qsTr("Client library for remote connections")
license: "LGPLv3"
version: "1.14.0"
url: "https://github.com/nymea/nymea-remoteproxy"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "QtZeroConf"
description: qsTr("QtZeroConf library by Jonathan Bagg")
license: "LGPLv3"
version: ""
url: "https://github.com/jbagg/QtZeroConf"
platforms: "android,ios,linux,osx"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "FirebaseSDK";
description: qsTr("Firebase iOS SDK")
license: "Apache 2.0"
version: "18.1.0"
url: "https://github.com/firebase/firebase-ios-sdk"
platforms: "ios"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "FirebaseSDK";
description: qsTr("Firebase Android SDK")
license: "Apache 2.0"
version: "18.1.0"
url: "https://github.com/firebase/firebase-android-sdk"
platforms: "android"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "OpenSSL"
description: qsTr("OpenSSL libraries by Eric Young")
license: "OpenSSL"
version: sslLibraryVersion
platforms: "android,windows,linux"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "Suru icons"
description: qsTr("Suru icons by Ubuntu")
license: "CC-BY-SA-3.0"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "Ubuntu font"
description: qsTr("Ubuntu font by Ubuntu")
license: "CC-BY-SA-3.0"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "Oswald font"
description: qsTr("Oswald font by The Oswald Project")
license: "OFL"
platforms: "*"
}
LicenseInformationItem {
Layout.fillWidth: true
component: "Material Icons"
description: qsTr("Google fonts and material icons")
license: "Apache 2.0"
url: "https://fonts.google.com/icons"
platforms: "*"
}
// Repeater {
// model: root.additionalLicenses
// delegate: NymeaSwipeDelegate {
// Layout.fillWidth: true
// text: model.component
// subText: model.description
// prominentSubText: false
// visible: model.platforms === "*" || model.platforms.indexOf(Qt.platform.os) >= 0
// onClicked: {
// pageStack.push(licenseTextComponent, {license: model.license})
// }
// }
// }
}
}
}
@ -276,4 +512,3 @@ Item {
}
}
}

View File

@ -0,0 +1,68 @@
// SPDX-License-Identifier: GPL-3.0-or-later
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright (C) 2013 - 2024, nymea GmbH
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
*
* This file is part of nymea-app.
*
* nymea-app is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* nymea-app is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with nymea-app. If not, see <https://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Controls.Material 2.2
import QtQuick.Layouts 1.3
import Nymea 1.0
NymeaSwipeDelegate {
id: root
property string component
property string description
property string license
property string url
property string version
property string platforms
prominentSubText: false
progressive: false
text: root.component
subText: root.description
visible: platforms === "*" || platforms.indexOf(Qt.platform.os) >= 0
onClicked: Qt.openUrlExternally(root.url)
additionalItem: ColumnLayout {
Label {
Layout.fillHeight: true
Layout.alignment: Qt.AlignRight
text: root.license
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignRight
}
Label {
Layout.fillHeight: true
Layout.alignment: Qt.AlignRight
text: root.version
font.pixelSize: app.extraSmallFont
color: Material.color(Material.Grey)
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignRight
visible: root.version.length > 0
}
}
}

View File

@ -32,11 +32,11 @@ SettingsPageBase {
id: root
title: qsTr("About %1").arg(Configuration.systemName)
Imprint {
id: imprint
Layout.fillWidth: true
title: Configuration.systemName
showOpensourceLicenses: false
githubLink: "https://github.com/nymea/nymea"
NymeaSwipeDelegate {
@ -46,6 +46,7 @@ SettingsPageBase {
progressive: false
prominentSubText: false
}
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("Server UUID:")
@ -57,6 +58,7 @@ SettingsPageBase {
ToolTip.show(qsTr("ID copied to clipboard"), 500);
}
}
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("Server version:")
@ -64,6 +66,7 @@ SettingsPageBase {
progressive: false
prominentSubText: false
}
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("JSON-RPC version:")
@ -71,6 +74,7 @@ SettingsPageBase {
progressive: false
prominentSubText: false
}
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("Qt version:")
@ -79,6 +83,7 @@ SettingsPageBase {
progressive: false
prominentSubText: false
}
NymeaSwipeDelegate {
Layout.fillWidth: true
text: qsTr("Device serial number")
@ -93,3 +98,4 @@ SettingsPageBase {
}
}
}

@ -1 +1 @@
Subproject commit 81ba94583d4873efe5110beef7240c4d229ec2c7
Subproject commit c8997b5260d665f7b3fe988d42bdf5d4ce434f4c