diff --git a/.gitmodules b/.gitmodules
index 051dbf83..6bbdd2fa 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,11 +1,13 @@
[submodule "QtZeroConf"]
path = QtZeroConf
- url = https://github.com/mzanetti/QtZeroConf.git
+ url = https://github.com/nymea/QtZeroConf.git
+ branch = main
[submodule "nymea-remoteproxy"]
path = nymea-remoteproxy
- url = https://github.com/guh/nymea-remoteproxy.git
+ url = https://github.com/nymea/nymea-remoteproxy.git
+ branch = qt6-cmake
[submodule "android_openssl"]
path = 3rdParty/android/android_openssl
url = https://github.com/KDAB/android_openssl.git
- branch = 1.0.x
+ branch = master
shallow = true
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 00000000..95247236
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,19 @@
+# Repository Guidelines
+
+## Project Structure & Module Organization
+`nymea-app/` holds the QtQuick entry point plus top-level QML, and `libnymea-app/` supplies shared C++ helpers, models, and logging categories. Feature bundles reside in `experiences/`, which should stay self-contained with QML, assets, and translations. Vendored code lives in `3rdParty/` and `QtZeroConf/`. Tests sit inside `tests/testrunner/` (unit) and `tests/integration/` (scenario). Packaging and store metadata are in `packaging/`, `snap/`, `debian/`, and `fastlane/`; edit them only when coordinating a release.
+
+## Build, Test, and Development Commands
+After cloning, run `git submodule update --init --recursive`. Configure with `cmake -S . -B build -DNYMEA_ENABLE_ZEROCONF=ON` and build via `cmake --build build --target nymea-app -j$(nproc)`. Execute the suite with `cmake --build build --target test` or `ctest --test-dir build --output-on-failure`. Qt Creator users can rely on `qmake nymea-app.pro CONFIG+=withtests && make`. Re-run `messages.sh` whenever you touch translations.
+
+## Coding Style & Naming Conventions
+Use Qt’s 4-space indentation, braces on new lines, and PascalCase for types (`DashboardModel`) with lowerCamelCase members (`defaultStyle`). Order includes as Qt, nymea, then local headers, and prefer `NYMEA_LOGGING_CATEGORY` over raw `qDebug`. In QML, match filenames to the exported component, avoid wildcard imports, and keep property names lowerCamelCase.
+
+## Testing Guidelines
+Add Qt Test cases under `tests/testrunner/` following the module path (e.g., `tests/testrunner/dashboard/tst_dashboard.cpp`) and use descriptive names such as `shouldConnectOnValidCredentials`. Integration flows belong to `tests/integration/` and may drive nymead or device simulators. Every functional PR needs at least one automated test plus a screenshot for UI changes. Run `ctest --test-dir build -V` before requesting review and document any skipped cases.
+
+## Commit & Pull Request Guidelines
+Commits should have concise, imperative subjects like “Fix Android packaging target configuration” plus a short body covering motivation, toggles, and tests. Pull requests must describe the issue solved, summarize design choices, link related issues, and attach test evidence (command snippets, screenshots, or APK links). Tag reviewers responsible for touched areas and keep changes scoped to a single feature or bugfix.
+
+## Security & Configuration Tips
+Store secrets in local environment files, never in git. Update `config.h.in` or `config.pri` when adding switches and document the defaults in the PR. Android builds download OpenSSL during configuration, so ensure CI nodes have first-run network access or cache the package internally. Call out any new runtime permissions so reviewers can test them explicitly.
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 00000000..b65ad56b
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,94 @@
+cmake_minimum_required(VERSION 3.16)
+
+file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/version.txt" NYMEA_VERSION_LINES)
+list(LENGTH NYMEA_VERSION_LINES NYMEA_VERSION_COUNT)
+if(NOT NYMEA_VERSION_COUNT GREATER_EQUAL 1)
+ message(FATAL_ERROR "version.txt must contain at least the application version")
+endif()
+list(GET NYMEA_VERSION_LINES 0 NYMEA_APP_VERSION)
+if(NOT NYMEA_VERSION_COUNT GREATER_EQUAL 2)
+ set(NYMEA_APP_REVISION "0")
+else()
+ list(GET NYMEA_VERSION_LINES 1 NYMEA_APP_REVISION)
+endif()
+
+project(nymea-app VERSION ${NYMEA_APP_VERSION} LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+set(APPLICATION_NAME "nymea-app" CACHE STRING "Application name")
+set(ORGANISATION_NAME "nymea" CACHE STRING "Organisation name")
+
+option(NYMEA_ENABLE_ZEROCONF "Enable ZeroConf support" OFF)
+option(NYMEA_USE_MATERIAL_ICONS "Use the Material icon set instead of Suru" OFF)
+option(NYMEA_ENABLE_FIREBASE "Enable Firebase Cloud Messaging integration" ON)
+set(NYMEA_OVERLAY_PATH "" CACHE PATH "Optional overlay directory for branding")
+
+find_package(Qt6 REQUIRED COMPONENTS
+ Core
+ Gui
+ Network
+ Qml
+ Quick
+ QuickControls2
+ Svg
+ WebSockets
+ Bluetooth
+ Charts
+ Nfc
+)
+
+find_package(OpenSSL QUIET)
+
+if(ANDROID)
+ include(FetchContent)
+ FetchContent_Declare(
+ android_openssl
+ DOWNLOAD_EXTRACT_TIMESTAMP true
+ URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
+ )
+ FetchContent_MakeAvailable(android_openssl)
+ include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
+
+ set(NYMEA_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/packaging/android" CACHE PATH "Android packaging directory")
+
+ set(_nymea_app_root_property "nymeaAppRoot=${CMAKE_SOURCE_DIR}")
+ if(NYMEA_ENABLE_FIREBASE)
+ set(_nymea_firebase_property "useFirebase=true")
+ else()
+ set(_nymea_firebase_property "useFirebase=false")
+ endif()
+
+ file(WRITE "${NYMEA_ANDROID_PACKAGE_SOURCE_DIR}/nymeaapp.properties" "${_nymea_app_root_property}\n${_nymea_firebase_property}\n")
+ configure_file(
+ "${CMAKE_SOURCE_DIR}/version.txt"
+ "${NYMEA_ANDROID_PACKAGE_SOURCE_DIR}/version.txt"
+ COPYONLY
+ )
+
+ add_link_options("-Wl,-z,max-page-size=16384")
+endif()
+
+# Make config.h available to all targets
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_BINARY_DIR}/config.h @ONLY)
+
+# Common warning flags
+if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ add_compile_options(-Wall)
+ if(UNIX AND NOT APPLE)
+ add_compile_options(-Wno-deprecated-declarations -Wno-deprecated-copy)
+ endif()
+endif()
+
+set(APP_VERSION ${NYMEA_APP_VERSION})
+set(APP_REVISION ${NYMEA_APP_REVISION})
+
+add_subdirectory(libnymea-app)
+add_subdirectory(experiences)
+add_subdirectory(nymea-app)
diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user
new file mode 100644
index 00000000..a7dea20a
--- /dev/null
+++ b/CMakeLists.txt.user
@@ -0,0 +1,701 @@
+
+
+
+
+
+ EnvironmentId
+ {3a02a921-eea1-43cd-a37d-2b4e59d6151d}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ true
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 0
+ 80
+ true
+ true
+ 1
+ 0
+ false
+ true
+ false
+ 2
+ true
+ true
+ 0
+ 8
+ true
+ false
+ 1
+ true
+ true
+ true
+ *.md, *.MD, Makefile
+ false
+ true
+ true
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ true
+ false
+ true
+ true
+ true
+ true
+
+ false
+
+
+ 0
+ true
+
+ true
+ true
+ Builtin.DefaultTidyAndClazy
+ 10
+ true
+
+
+
+ true
+
+ 0
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Android.Device.Type
+ true
+ Android Qt 6.8.4 Clang armeabi-v7a
+ Android Qt 6.8.4 Clang armeabi-v7a
+ {4ea481fa-d782-4c19-8a79-381a58bbab97}
+ 0
+ 0
+ 0
+
+ Debug
+ 2
+ false
+
+ -DQT_HOST_PATH:PATH=%{Qt:QT_HOST_PREFIX}
+-DANDROID_PLATFORM:STRING=android-23
+-DANDROID_SDK_ROOT:PATH=/usr/local/android
+-DQT_USE_TARGET_ANDROID_BUILD_DIR:BOOL=ON
+-DANDROID_USE_LEGACY_TOOLCHAIN_FILE:BOOL=OFF
+-DCMAKE_BUILD_TYPE:STRING=Debug
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DQT_NO_GLOBAL_APK_TARGET_PART_OF_ALL:BOOL=ON
+-DANDROID_ABI:STRING=armeabi-v7a
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DQT_MAINTENANCE_TOOL:FILEPATH=/home/timon/Qt/MaintenanceTool
+-DANDROID_NDK:PATH=/usr/local/android/ndk/26.1.10909125
+-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_FIND_ROOT_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+-DANDROID_STL:STRING=c++_shared
+-DCMAKE_TOOLCHAIN_FILE:FILEPATH=/usr/local/android/ndk/26.1.10909125/build/cmake/android.toolchain.cmake
+ 0
+ /home/timon/nymea/development/qt6-cmake/nymea-app/build/Android_Qt_6_8_4_Clang_armeabi_v7a-Debug
+
+
+
+
+ all
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+
+ android-36
+
+
+ true
+ Build Android APK
+ QmakeProjectManager.AndroidBuildApkStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Debug
+ CMakeProjectManager.CMakeBuildConfiguration
+ 0
+ 0
+
+
+
+ true
+ Qt4ProjectManager.AndroidDeployQtStep
+
+ 1
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ Qt4ProjectManager.AndroidDeployConfiguration2
+
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 2
+
+ true
+
+ arm64-v8a
+ armeabi-v7a
+ armeabi
+
+ 0A301JEC211655
+ 33
+
+ true
+
+
+ true
+ true
+ 0
+ true
+
+
+
+
+
+
+
+ 0
+
+ false
+ -e cpu-cycles --call-graph dwarf,4096 -F 250
+ nymea-app
+ Qt4ProjectManager.AndroidRunConfiguration:
+ nymea-app
+ true
+
+ true
+ true
+
+ 1
+
+ 1
+
+
+
+ true
+ Qt4ProjectManager.AndroidDeployQtStep
+
+ 1
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ Qt4ProjectManager.AndroidDeployConfiguration2
+
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 2
+
+ true
+ true
+ 0
+ true
+
+
+
+
+
+
+
+ 0
+
+ false
+ -e cpu-cycles --call-graph dwarf,4096 -F 250
+ nymea-app
+ Qt4ProjectManager.AndroidRunConfiguration:
+ nymea-app
+ true
+
+ true
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.Target.1
+
+ Desktop
+ true
+ Desktop Qt 6.8.4
+ Desktop Qt 6.8.4
+ qt.qt6.684.linux_gcc_64_kit
+ 0
+ 0
+ 0
+
+ Debug
+ 2
+ false
+
+ -DCMAKE_BUILD_TYPE:STRING=Debug
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DQT_MAINTENANCE_TOOL:FILEPATH=/home/timon/Qt/MaintenanceTool
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+ 0
+ /home/timon/nymea/development/qt6-cmake/nymea-app/build/Desktop_Qt_6_8_4-Debug
+
+
+
+
+ all
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Debug
+ CMakeProjectManager.CMakeBuildConfiguration
+ 0
+ 0
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+
+
+
+
+
+
+
+ false
+
+ true
+ ApplicationManagerPlugin.Deploy.CMakePackageStep
+
+
+ install-package --acknowledge
+ true
+ Install Application Manager package
+ ApplicationManagerPlugin.Deploy.InstallPackageStep
+
+
+
+
+
+
+
+ 2
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ApplicationManagerPlugin.Deploy.Configuration
+
+ 2
+
+ true
+ true
+ 0
+ true
+
+ 2
+
+ false
+ -e cpu-cycles --call-graph dwarf,4096 -F 250
+ nymea-app
+ CMakeProjectManager.CMakeRunConfiguration.
+ nymea-app
+ true
+
+ true
+ true
+ true
+ false
+
+ 1
+
+ 1
+
+
+ 0
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+
+
+
+
+
+
+
+ false
+
+ true
+ ApplicationManagerPlugin.Deploy.CMakePackageStep
+
+
+ install-package --acknowledge
+ true
+ Install Application Manager package
+ ApplicationManagerPlugin.Deploy.InstallPackageStep
+
+
+
+
+
+
+
+ 2
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ApplicationManagerPlugin.Deploy.Configuration
+
+ 2
+
+ true
+ true
+ 0
+ true
+
+ 2
+
+ false
+ -e cpu-cycles --call-graph dwarf,4096 -F 250
+ nymea-app
+ CMakeProjectManager.CMakeRunConfiguration.
+ nymea-app
+ true
+
+ true
+ true
+ true
+ false
+
+ 1
+
+
+
+ ProjectExplorer.Project.Target.2
+
+ Android.Device.Type
+ true
+ Android Qt 6.8.4 Clang armeabi-v7a
+ Android Qt 6.8.4 Clang armeabi-v7a
+ {d6a68c9e-38a8-48ba-9f70-7050ff8c051f}
+ 0
+ 0
+ 0
+
+ Debug
+ 2
+ false
+
+ -DANDROID_STL:STRING=c++_shared
+-DQT_NO_GLOBAL_APK_TARGET_PART_OF_ALL:BOOL=ON
+-DQT_HOST_PATH:PATH=%{Qt:QT_HOST_PREFIX}
+-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
+-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DANDROID_ABI:STRING=armeabi-v7a
+-DCMAKE_BUILD_TYPE:STRING=Debug
+-DANDROID_NDK:PATH=/usr/local/android/ndk/29.0.14033849
+-DQT_USE_TARGET_ANDROID_BUILD_DIR:BOOL=ON
+-DANDROID_USE_LEGACY_TOOLCHAIN_FILE:BOOL=OFF
+-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
+-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
+-DCMAKE_FIND_ROOT_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
+-DANDROID_SDK_ROOT:PATH=/usr/local/android
+-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
+-DANDROID_PLATFORM:STRING=android-23
+-DQT_MAINTENANCE_TOOL:FILEPATH=/home/timon/Qt/MaintenanceTool
+-DCMAKE_GENERATOR:STRING=Ninja
+-DCMAKE_TOOLCHAIN_FILE:FILEPATH=/usr/local/android/ndk/29.0.14033849/build/cmake/android.toolchain.cmake
+-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
+-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
+ 0
+ /home/timon/nymea/development/qt6-cmake/nymea-app/build/Android_Qt_6_8_4_Clang_armeabi_v7a-Debug
+
+
+
+
+ all
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+
+ android-36
+
+
+ true
+ Build Android APK
+ QmakeProjectManager.AndroidBuildApkStep
+
+ 2
+ Build
+ Build
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ false
+
+ true
+ Build
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+ Clean
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Debug
+ CMakeProjectManager.CMakeBuildConfiguration
+ 0
+ 0
+
+
+
+ true
+ Qt4ProjectManager.AndroidDeployQtStep
+
+ 1
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ Qt4ProjectManager.AndroidDeployConfiguration2
+
+ 1
+
+ true
+ true
+ 0
+ true
+
+
+
+
+
+
+
+ 0
+
+ false
+ -e cpu-cycles --call-graph dwarf,4096 -F 250
+ nymea-app
+ Qt4ProjectManager.AndroidRunConfiguration:
+ nymea-app
+ false
+ true
+ true
+
+ 1
+
+ 1
+
+
+
+ true
+ Qt4ProjectManager.AndroidDeployQtStep
+
+ 1
+ Deploy
+ Deploy
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ Qt4ProjectManager.AndroidDeployConfiguration2
+
+ 1
+
+ true
+ true
+ 0
+ true
+
+
+
+
+
+
+
+ 0
+
+ false
+ -e cpu-cycles --call-graph dwarf,4096 -F 250
+ nymea-app
+ Qt4ProjectManager.AndroidRunConfiguration:
+ nymea-app
+ false
+ true
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 3
+
+
+ Version
+ 22
+
+
diff --git a/QtZeroConf b/QtZeroConf
index 2b9b3c7c..6e70786e 160000
--- a/QtZeroConf
+++ b/QtZeroConf
@@ -1 +1 @@
-Subproject commit 2b9b3c7c74f05e83c4052fbb1629b22568f36b64
+Subproject commit 6e70786eef77303b5d630ce4acc7c49e03a58992
diff --git a/README.md b/README.md
index b09f8880..48c05123 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ QtQuick nymea client application
# building
Required packages:
-It is recommended to install a complete Qt installation. Minimum required Qt Version *5.7.0*.
+It is recommended to install a complete Qt installation. Minimum required Qt version is Qt 6.
No extra modules are required for a basic desktop build.
@@ -14,14 +14,19 @@ After cloning the repository, run
$ git submodule init
$ git submodule update
-To build a binary run
+To build a binary with CMake run
- $ mkdir builddir
- $ cd builddir
- $ qmake path/to/source/dir
- $ make
+ $ cmake -S . -B build
+ $ cmake --build build
-Or open `nymea-app.pro` in QtCreator and click the **"Play"** button.
+The build can be customised with the following cache variables:
+
+- `-DNYMEA_ENABLE_ZEROCONF=ON` enables ZeroConf support when the QtZeroConf and
+ Avahi dependencies are available.
+- `-DNYMEA_USE_MATERIAL_ICONS=ON` switches the icon theme to the Material icon set.
+
+Legacy qmake builds are still available by opening `nymea-app.pro` in QtCreator
+and building the project there.
Optional configuration flags to be passed to qmake:
@@ -30,8 +35,13 @@ Optional configuration flags to be passed to qmake:
> Enables building the testrunner target
## Android
-As Qt can't bundle a build of openssl for android, you need to place a copy to
-`/opt/android-ssl/`
+When targeting Android, the build will download the KDAB
+[`android_openssl`](https://github.com/KDAB/android_openssl) package at
+configure time and automatically bundle the provided `libssl` and `libcrypto`
+shared libraries inside the APK. An active internet connection is therefore
+required the first time you configure an Android build directory. Other
+platforms will build without explicitly linking to OpenSSL if the development
+package is not installed.
## Windows
diff --git a/androidservice/androidservice.pro b/androidservice/androidservice.pro
deleted file mode 100644
index 7503e717..00000000
--- a/androidservice/androidservice.pro
+++ /dev/null
@@ -1,56 +0,0 @@
-TEMPLATE = lib
-TARGET = service
-CONFIG += dll
-QT += core androidextras
-QT += network qml quick quickcontrols2 svg websockets bluetooth charts nfc
-
-include(../shared.pri)
-include(../3rdParty/android/android_openssl/openssl.pri)
-
-
-INCLUDEPATH += $$top_srcdir/libnymea-app/
-
-# https://bugreports.qt.io/browse/QTBUG-83165
-LIBS += -L$${top_builddir}/libnymea-app/$${ANDROID_TARGET_ARCH}
-
-LIBS += -L$$top_builddir/libnymea-app/ -lnymea-app
-PRE_TARGETDEPS += ../libnymea-app
-
-RESOURCES += controlviews/controlviews.qrc \
- ../nymea-app/resources.qrc \
- ../nymea-app/images.qrc \
- ../nymea-app/styles.qrc
-
-INCLUDEPATH += ../nymea-app/
-
-SOURCES += \
- controlviews/devicecontrolapplication.cpp \
- nymeaappservice/nymeaappservice.cpp \
- nymeaappservice/androidbinder.cpp \
- ../nymea-app/stylecontroller.cpp \
- ../nymea-app/platformhelper.cpp \
- ../nymea-app/nfchelper.cpp \
- ../nymea-app/nfcthingactionwriter.cpp \
- ../nymea-app/platformintegration/android/platformhelperandroid.cpp \
- service_main.cpp
-
-HEADERS += \
- controlviews/devicecontrolapplication.h \
- nymeaappservice/nymeaappservice.h \
- nymeaappservice/androidbinder.h \
- ../nymea-app/stylecontroller.h \
- ../nymea-app/platformhelper.h \
- ../nymea-app/nfchelper.h \
- ../nymea-app/nfcthingactionwriter.h \
- ../nymea-app/platformintegration/android/platformhelperandroid.h \
-
-DISTFILES += \
- java/io/guh/nymeaapp/Action.java \
- java/io/guh/nymeaapp/NymeaAppControlService.java \
- java/io/guh/nymeaapp/NymeaAppService.java \
- java/io/guh/nymeaapp/NymeaAppControlsActivity.java \
- java/io/guh/nymeaapp/NymeaAppServiceConnection.java \
- java/io/guh/nymeaapp/Thing.java \
- java/io/guh/nymeaapp/State.java \
- java/io/guh/nymeaapp/NymeaHost.java \
- controlviews/Main.qml
diff --git a/androidservice/controlviews/Main.qml b/androidservice/controlviews/Main.qml
deleted file mode 100644
index 68a355c2..00000000
--- a/androidservice/controlviews/Main.qml
+++ /dev/null
@@ -1,66 +0,0 @@
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import Qt.labs.settings 1.0
-import Nymea 1.0
-import "qrc:/ui/devicepages/"
-
-ApplicationWindow {
- id: app
- visible: true
- visibility: ApplicationWindow.FullScreen
- color: Material.background
- title: Configuration.appName
-
- Material.theme: NymeaUtils.isDark(Style.backgroundColor) ? Material.Dark : Material.Light
- Material.background: Style.backgroundColor
- Material.accent: Style.accentColor
- Material.foreground: Style.foregroundColor
-
- font.pixelSize: mediumFont
- font.weight: Font.Normal
- font.capitalization: Font.MixedCase
- font.family: Style.fontFamily
-
- property int margins: 16
- property int bigMargins: 20
-
- property int extraSmallFont: 10
- property int smallFont: 13
- property int mediumFont: 16
- property int largeFont: 20
-
- property int smallIconSize: 16
- property int iconSize: 24
- property int bigIconSize: 40
- property int hugeIconSize: 64
-
- property int delegateHeight: 60
-
- readonly property bool landscape: app.width > app.height
-
- ThingsProxy {
- id: thingProxy
- engine: _engine
- filterThingId: controlledThingId
- }
-
- property Thing controlledThing: engine.thingManager.fetchingData ? null : engine.thingManager.things.getThing(controlledThingId)
-
- onControlledThingChanged: {
- loader.setSource("qrc:/ui/devicepages/" + NymeaUtils.interfaceListToDevicePage(controlledThing.thingClass.interfaces), {thing: controlledThing, header: null})
- PlatformHelper.hideSplashScreen();
- }
-
- Loader {
- id: loader
- anchors.fill: parent
- anchors.bottomMargin: app.margins // For some reason the bottom edge seems a bit off in the overlay
- }
-
- onClosing: {
- print("************* Control View closing")
- }
-
-}
diff --git a/androidservice/controlviews/controlviews.qrc b/androidservice/controlviews/controlviews.qrc
deleted file mode 100644
index f907b18e..00000000
--- a/androidservice/controlviews/controlviews.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- Main.qml
-
-
diff --git a/androidservice/controlviews/devicecontrolapplication.cpp b/androidservice/controlviews/devicecontrolapplication.cpp
deleted file mode 100644
index 67d16dfd..00000000
--- a/androidservice/controlviews/devicecontrolapplication.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-#include "devicecontrolapplication.h"
-
-#include "engine.h"
-#include "connection/discovery/nymeadiscovery.h"
-#include "connection/nymeahosts.h"
-#include "libnymea-app-core.h"
-#include "../nymea-app/stylecontroller.h"
-#include "../nymea-app/platformhelper.h"
-#include "../nymea-app/nfchelper.h"
-#include "../nymea-app/nfcthingactionwriter.h"
-#include "../nymea-app/platformintegration/android/platformhelperandroid.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-QObject *platformHelperProvider(QQmlEngine *engine, QJSEngine *scriptEngine)
-{
- Q_UNUSED(engine)
- Q_UNUSED(scriptEngine)
- return new PlatformHelperAndroid();
-}
-
-DeviceControlApplication::DeviceControlApplication(int argc, char *argv[]) : QApplication(argc, argv)
-{
- setApplicationName("nymea-app");
- setOrganizationName("nymea");
-
- QSettings settings;
-
- m_discovery = new NymeaDiscovery(this);
-
- m_engine = new Engine(this);
-
- m_qmlEngine = new QQmlApplicationEngine(this);
-
- Nymea::Core::registerQmlTypes();
-
- qmlRegisterSingletonType("Nymea", 1, 0, "PlatformHelper", platformHelperProvider);
- qmlRegisterSingletonType(QUrl("qrc:///ui/utils/NymeaUtils.qml"), "Nymea", 1, 0, "NymeaUtils" );
- qmlRegisterType("Nymea", 1, 0, "NfcThingActionWriter");
- qmlRegisterSingletonType("Nymea", 1, 0, "NfcHelper", NfcHelper::nfcHelperProvider);
-
- StyleController *styleController = new StyleController("light", this);
-
- QQmlFileSelector *styleSelector = new QQmlFileSelector(m_qmlEngine);
- styleSelector->setExtraSelectors({styleController->currentStyle()});
-
- foreach (const QFileInfo &fi, QDir(":/ui/fonts/").entryInfoList()) {
- QFontDatabase::addApplicationFont(fi.absoluteFilePath());
- }
- foreach (const QFileInfo &fi, QDir(":/styles/" + styleController->currentStyle() + "/fonts/").entryInfoList()) {
- qDebug() << "Adding style font:" << fi.absoluteFilePath();
- QFontDatabase::addApplicationFont(fi.absoluteFilePath());
- }
-
- qmlRegisterSingletonType(QUrl("qrc:///styles/" + styleController->currentStyle() + "/Style.qml"), "Nymea", 1, 0, "Style" );
-
- m_qmlEngine->rootContext()->setContextProperty("styleController", styleController);
- m_qmlEngine->rootContext()->setContextProperty("engine", m_engine);
- m_qmlEngine->rootContext()->setContextProperty("_engine", m_engine);
- m_qmlEngine->rootContext()->setContextProperty("controlledThingId", ""); // Unknown at this point
-
- m_qmlEngine->load(QUrl(QLatin1String("qrc:/Main.qml")));
-
- jboolean startedByNfc = QtAndroid::androidActivity().callMethod("startedByNfc", "()Z");
- if (startedByNfc) {
- qDebug() << "**** Started by NFC";
- qDebug() << "Registering NFC handler and waiting for message.";
-
- QNearFieldManager *manager = new QNearFieldManager(this);
- manager->registerNdefMessageHandler(this, SLOT(handleNdefMessage(QNdefMessage,QNearFieldTarget*)));
-
- } else {
- qDebug() << "*** Started by other intent";
- qDebug() << "Expecing nymeaId and thingId in intent extras.";
- QString nymeaId = QtAndroid::androidActivity().callObjectMethod("nymeaId").toString();
- QString thingId = QtAndroid::androidActivity().callObjectMethod("thingId").toString();
-
- connectToNymea(nymeaId);
- m_qmlEngine->rootContext()->setContextProperty("controlledThingId", thingId);
- }
-}
-
-void DeviceControlApplication::handleNdefMessage(QNdefMessage message, QNearFieldTarget *target)
-{
- Q_UNUSED(target)
- qDebug() << "************* NFC message!" << message.toByteArray();
- if (message.count() < 1) {
- qWarning() << "NFC message doesn't contain any records...";
- return;
- }
- // NOTE: At this point we're only supporting one NDEF record per message
- QNdefRecord record = message.first();
- QNdefNfcUriRecord uriRecord(record);
-
- QUrl url = uriRecord.uri();
- if (url.scheme() != "nymea") {
- qWarning() << "NDEF URI record scheme is not \"nymea://\"";
- return;
- }
-
- QUuid nymeaId = QUuid(url.host());
- if (nymeaId.isNull()) {
- qWarning() << "Invalid nymea UUID in NDEF record.";
- return;
- }
-
- QUuid thingId = QUuid(QUrlQuery(url).queryItemValue("t"));
- if (thingId.isNull()) {
- qWarning() << "Invalid thing in NDEF record";
- return;
- }
-
- m_pendingNfcAction = url;
-
- connectToNymea(nymeaId);
- m_qmlEngine->rootContext()->setContextProperty("controlledThingId", thingId);
-
- connect(m_engine->thingManager(), &ThingManager::fetchingDataChanged, [this](){
- if (m_engine->jsonRpcClient()->connected() && !m_engine->thingManager()->fetchingData()) {
- qDebug() << "Ready to process commands";
- runNfcAction();
- }
- });
-}
-
-void DeviceControlApplication::connectToNymea(const QUuid &nymeaId)
-{
- NymeaHost *host = m_discovery->nymeaHosts()->find(nymeaId);
- if (!host) {
- qWarning() << "No such nymea host:" << nymeaId;
- // TODO: We could wait here until the discovery finds it... But it really should be cached already...
- exit(1);
- }
- qDebug() << "Connecting to:" << host->name();
- m_engine->jsonRpcClient()->connectToHost(host);
-}
-
-void DeviceControlApplication::runNfcAction()
-{
- if (!m_pendingNfcAction.isEmpty()) {
- qDebug() << "NFC action:" << m_pendingNfcAction;
- }
- QUrl url = m_pendingNfcAction;
- m_pendingNfcAction.clear();
-
- if (url.scheme() != "nymea") {
- qWarning() << "NDEF URI record scheme is not \"nymea://\" in" << url.toString();
- return;
- }
-
- QUuid nymeaId = QUuid(url.host());
- if (nymeaId.isNull()) {
- qWarning() << "Invalid nymea UUID" << url.host() << "in NDEF record" << url.toString();
- return;
- }
-
- QUuid thingId = QUuid(QUrlQuery(url).queryItemValue("t"));
- Thing *thing = m_engine->thingManager()->things()->getThing(thingId);
- if (!thing) {
- qDebug() << "Thing" << thingId.toString() << "from" << url.toString() << "doesn't exist on nymea host" << nymeaId.toString();
- return;
- }
-
- QList> queryItems = QUrlQuery(url.query()).queryItems();
- for (int i = 0; i < queryItems.count(); i++) {
- QString entryName = queryItems.at(i).first;
- if (entryName == "t") {
- continue;
- }
- if (!entryName.startsWith("a")) {
- qDebug() << "Only actions are supported. Skipping query item" << entryName;
- continue;
- }
-
- QString actionString = queryItems.at(i).second;
- QStringList parts = actionString.split("#");
- if (parts.count() == 0) {
- qDebug() << "Invalid action definition:" << actionString;
- continue;
- }
-
- if (parts.count() > 2) {
- // The parameters might contain a #, let's merge them again
- parts[1] = parts.mid(1).join('#');
- }
-
- QString actionTypeName = parts.at(0);
- ActionType *actionType = thing->thingClass()->actionTypes()->findByName(actionTypeName);
- if (!actionType) {
- qWarning() << "Invalid action name" << actionType << "in url:" << url.toString();
- continue;
- }
-
- QHash paramsInUri;
- if (parts.count() > 1) {
- QString paramsString = parts.at(1);
- foreach (const QString ¶mString, paramsString.split("+")) {
- QStringList parts = paramString.split(":");
- if (parts.count() != 2) {
- qWarning() << "Invalid param format" << paramString << "in url:" << url.toString();
- continue;
- }
- paramsInUri.insert(parts.at(0), parts.at(1));
- }
- }
-
- qDebug() << "Parameters in NFC uri:" << paramsInUri;
-
- QVariantList params;
- for (int j = 0; j < actionType->paramTypes()->rowCount(); j++) {
- ParamType *paramType = actionType->paramTypes()->get(j);
- QVariantMap param;
- param.insert("paramTypeId", paramType->id());
- if (paramsInUri.contains(paramType->name())) {
- param.insert("value", paramsInUri.value(paramType->name()));
- } else {
- param.insert("value", paramType->defaultValue());
- }
- params.append(param);
- }
-
- qDebug() << "Action parameters:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson());
-
- m_engine->thingManager()->executeAction(thingId, actionType->id(), params);
- }
-}
-
-
diff --git a/androidservice/controlviews/devicecontrolapplication.h b/androidservice/controlviews/devicecontrolapplication.h
deleted file mode 100644
index edd6985c..00000000
--- a/androidservice/controlviews/devicecontrolapplication.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef DEVICECONTROLAPPLICATION_H
-#define DEVICECONTROLAPPLICATION_H
-
-#include
-#include
-#include
-#include
-#include
-
-#include "types/ruleactions.h"
-#include "connection/discovery/nymeadiscovery.h"
-#include "engine.h"
-
-class DeviceControlApplication : public QApplication
-{
- Q_OBJECT
-public:
- explicit DeviceControlApplication(int argc, char *argv[]);
-
-private slots:
- void handleNdefMessage(QNdefMessage message,QNearFieldTarget* target);
-
- void connectToNymea(const QUuid &nymeaId);
-
- void runNfcAction();
-
-private:
- NymeaDiscovery *m_discovery = nullptr;
- Engine *m_engine = nullptr;
- QQmlApplicationEngine *m_qmlEngine = nullptr;
-
- QUrl m_pendingNfcAction;
-
-
-};
-
-#endif // DEVICECONTROLAPPLICATION_H
diff --git a/androidservice/java/io/guh/nymeaapp/Action.java b/androidservice/java/io/guh/nymeaapp/Action.java
deleted file mode 100644
index 04923f02..00000000
--- a/androidservice/java/io/guh/nymeaapp/Action.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package io.guh.nymeaapp;
-
-import java.util.UUID;
-
-public class Action {
- public UUID typeId;
- public String name;
- public String displayName;
-}
diff --git a/androidservice/java/io/guh/nymeaapp/NymeaAppControlService.java b/androidservice/java/io/guh/nymeaapp/NymeaAppControlService.java
deleted file mode 100644
index 8d3a7e0d..00000000
--- a/androidservice/java/io/guh/nymeaapp/NymeaAppControlService.java
+++ /dev/null
@@ -1,289 +0,0 @@
-package io.guh.nymeaapp;
-
-import android.util.Log;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.ComponentName;
-import android.app.PendingIntent;
-import android.net.Uri;
-import android.content.Context;
-import android.service.controls.ControlsProviderService;
-import android.service.controls.actions.*;
-import android.service.controls.Control;
-import android.service.controls.DeviceTypes;
-import android.service.controls.templates.*;
-import android.os.Binder;
-import android.os.IBinder;
-import android.os.Parcel;
-
-import java.util.concurrent.Flow.Publisher;
-import java.util.function.Consumer;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.UUID;
-import java.util.HashMap;
-import io.reactivex.Flowable;
-import io.reactivex.processors.ReplayProcessor;
-import org.reactivestreams.FlowAdapters;
-import org.json.*;
-
-// Android device controls service
-
-// This service is instantiated by the android device controls on demand. It will
-// connect to the NymeaAppService and interact with nymea through that.
-
-public class NymeaAppControlService extends ControlsProviderService {
- private String TAG = "nymea-app: NymeaAppControlService";
- private NymeaAppServiceConnection m_serviceConnection;
-
- // For publishing all available
- private ReplayProcessor m_publisherForAll;
- private ArrayList m_pendingForAll = new ArrayList(); // pending nymea ids to query
-
- private ReplayProcessor m_updatePublisher;
- private List m_activeControlIds;
-
-
- private void ensureServiceConnection() {
- if (m_serviceConnection == null) {
- m_serviceConnection = new NymeaAppServiceConnection(getBaseContext()) {
- @Override public void onConnectedChanged(boolean connected) {
- Log.d(TAG, "Connected to NymeaAppService. Known hosts: " + m_serviceConnection.getHosts().size());
- if (connected && m_publisherForAll != null) {
- Log.d(TAG, "Processing all");
- processAll();
- }
- }
- @Override public void onReadyChanged(UUID nymeaId, boolean ready) {
- Log.d(TAG, "Nymea instance " + nymeaId.toString() + " ready state changed: " + Boolean.toString(ready));
- if (ready) {
- process(nymeaId);
- }
- }
- @Override public void onUpdate(UUID nymeaId, UUID thingId) {
- if (m_updatePublisher != null && m_activeControlIds.contains(thingId.toString())) {
-// Log.d(TAG, "Updating publisher for thing: " + thingId);
- m_updatePublisher.onNext(thingToControl(nymeaId, thingId));
-// m_updatePublisher.onComplete();
- }
- }
- };
- }
- Intent serviceIntent = new Intent(this, NymeaAppService.class);
- bindService(serviceIntent, m_serviceConnection, Context.BIND_AUTO_CREATE);
- }
-
- private void processAll() {
- ensureServiceConnection();
- if (m_serviceConnection.connected()) {
- // Need to add all the pending before processing
- if (m_publisherForAll != null) {
- for (UUID nymeaId: m_serviceConnection.getHosts().keySet()) {
- m_pendingForAll.add(nymeaId);
- }
- }
- for (UUID nymeaId: m_serviceConnection.getHosts().keySet()) {
- if (m_serviceConnection.getHosts().get(nymeaId).isReady) {
- process(nymeaId);
- }
- }
- } else {
- Log.d(TAG, "Not connected to NymeaAppService yet...");
- }
- }
-
- private void process(UUID nymeaId) {
- Log.d(TAG, "Processing...");
- ensureServiceConnection();
- if (!m_serviceConnection.connected()) {
- Log.d(TAG, "NymeaAppService not connected to nymea instance " + nymeaId + " yet.");
- return;
- }
- if (!m_serviceConnection.getHosts().keySet().contains(nymeaId)) {
- Log.d(TAG, "Service connection is not ready yet...");
- return;
- }
-
- for (Thing thing : m_serviceConnection.getHosts().get(nymeaId).things.values()) {
- Log.d(TAG, "Processing thing: " + thing.name);
-
- if (m_publisherForAll != null) {
- Log.d(TAG, "Adding stateless");
- m_publisherForAll.onNext(thingToControl(nymeaId, thing.id));
- }
-
- if (m_updatePublisher != null) {
- if (m_activeControlIds.contains(thing.id.toString())) {
- Log.d(TAG, "Adding stateful");
- m_updatePublisher.onNext(thingToControl(nymeaId, thing.id));
- }
- }
- }
-
- if (m_pendingForAll.contains(nymeaId)) {
- m_pendingForAll.remove(nymeaId);
- }
-
- // The publisher for all needs to be completed when done
- if (m_publisherForAll != null && m_pendingForAll.isEmpty()) {
- Log.d(TAG, "Completing all publisher");
- m_publisherForAll.onComplete();
- }
-
- Log.d(TAG, "Done processing");
- // We never close the update publisher as we need that one to send updates
- }
-
-
- @Override
- public Publisher createPublisherForAllAvailable() {
- Log.d(TAG, "Creating publishers for all");
- m_publisherForAll = ReplayProcessor.create();
- processAll();
- return FlowAdapters.toFlowPublisher(m_publisherForAll);
- }
-
- @Override
- public Publisher createPublisherFor(List controlIds) {
- Log.d(TAG, "Creating publishers for " + Integer.toString(controlIds.size()));
- m_updatePublisher = ReplayProcessor.create();
- m_activeControlIds = controlIds;
- processAll();
- return FlowAdapters.toFlowPublisher(m_updatePublisher);
- }
-
- @Override
- public void performControlAction(String controlId, ControlAction action, Consumer consumer) {
- Log.d(TAG, "Performing control action: " + controlId);
-
- UUID nymeaId = m_serviceConnection.hostForThing(UUID.fromString(controlId));
- if (nymeaId == null) {
- Log.d(TAG, "Nymea host not found for thing id: " + controlId);
- consumer.accept(ControlAction.RESPONSE_FAIL);
- return;
- }
- Thing thing = m_serviceConnection.getThing(UUID.fromString(controlId));
- if (thing == null) {
- Log.d(TAG, "Thing not found for id: " + controlId);
- consumer.accept(ControlAction.RESPONSE_FAIL);
- return;
- }
-
- UUID actionTypeId;
- String param;
- if (thing.interfaces.contains("dimmablelight") && action instanceof FloatAction) {
- actionTypeId = thing.stateByName("brightness").typeId;
- FloatAction fAction = (FloatAction) action;
- param = String.valueOf(Math.round(fAction.getNewValue()));
- } else if (thing.interfaces.contains("power") && action instanceof BooleanAction) {
- actionTypeId = thing.stateByName("power").typeId;
- BooleanAction bAction = (BooleanAction) action;
- param = bAction.getNewState() == true ? "true" : "false";
- } else if (thing.interfaces.contains("closable") && action instanceof BooleanAction) {
- BooleanAction bAction = (BooleanAction) action;
- if (bAction.getNewState()) {
- Log.d(TAG, "executing open");
- actionTypeId = thing.actionByName("open").typeId;
- } else {
- Log.d(TAG, "executing close");
- actionTypeId = thing.actionByName("close").typeId;
- }
- param = "";
- } else if (thing.interfaces.contains("volumecontroller") && thing.stateByName("volume") != null) {
- actionTypeId = thing.stateByName("volume").typeId;
- FloatAction fAction = (FloatAction) action;
- param = String.valueOf(Math.round(fAction.getNewValue()));
- } else {
- Log.d(TAG, "Unhandled action for: " + thing.name);
- consumer.accept(ControlAction.RESPONSE_FAIL);
- return;
- }
-
- m_serviceConnection.executeAction(nymeaId, thing.id, actionTypeId, param);
- consumer.accept(ControlAction.RESPONSE_OK);
-
- }
-
- private HashMap m_intents = new HashMap();
-
- private Control thingToControl(UUID nymeaId, UUID thingId) {
-// Log.d(TAG, "Creating control for thing: " + thing.name + " id: " + thing.id);
-
- NymeaHost nymeaHost = m_serviceConnection.getHosts().get(nymeaId);
- Thing thing = nymeaHost.things.get(thingId);
-
- // NOTE: intentId 1 doesn't work for some reason I don't understand yet...
- // so let's make sure we never add "1" to it by always added 100
- int intentId = m_intents.size() + 100;
- PendingIntent pi;
- if (m_intents.containsKey(thing.id)) {
- intentId = m_intents.get(thing.id);
- } else {
- m_intents.put(thing.id, intentId);
- }
-
- Context context = getBaseContext();
- Intent intent = new Intent(context, NymeaAppControlsActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
- intent.putExtra("nymeaId", nymeaId.toString());
- intent.putExtra("thingId", thing.id.toString());
- pi = PendingIntent.getActivity(context, intentId, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
- Log.d(TAG, "Created pendingintent for " + thing.name + " with id " + intentId + " and extra " + thing.id);
-
- Control.StatefulBuilder builder = new Control.StatefulBuilder(thing.id.toString(), pi)
- .setTitle(thing.name)
- .setSubtitle(thing.className)
- .setStructure(nymeaHost.name);
-
- if (thing.interfaces.contains("impulsebasedgaragedoor")) {
- builder.setDeviceType(DeviceTypes.TYPE_GARAGE);
- builder.setControlTemplate(new StatelessTemplate(thing.id.toString()));
- } else if (thing.interfaces.contains("statefulgaragedoor")) {
- builder.setDeviceType(DeviceTypes.TYPE_GARAGE);
- State stateState = thing.stateByName("state");
- ControlButton controlButton = new ControlButton(stateState.value.equals("open"), stateState.displayName);
- builder.setControlTemplate(new ToggleTemplate(thing.id.toString(), controlButton));
-
-// } else if (thing.interfaces.contains("extendedstatefulgaragedoor")) {
-// builder.setDeviceTyoe(DeviceTypes.TYPE_GARAGE);
-
- } else if (thing.interfaces.contains("light")) {
- builder.setDeviceType(DeviceTypes.TYPE_LIGHT);
- State powerState = thing.stateByName("power");
- ControlButton controlButton = new ControlButton(powerState.value.equals("true"), powerState.displayName);
-
- if (thing.interfaces.contains("dimmablelight")) {
- State brightnessState = thing.stateByName("brightness");
- RangeTemplate rangeTemplate = new RangeTemplate(thing.id.toString(), 0, 100, Float.parseFloat(brightnessState.value), 1, brightnessState.displayName);
- builder.setControlTemplate(new ToggleRangeTemplate(thing.id.toString(), controlButton, rangeTemplate));
- } else {
- builder.setControlTemplate(new ToggleTemplate(thing.id.toString(), controlButton));
- }
- } else if (thing.interfaces.contains("powersocket")) {
- builder.setDeviceType(DeviceTypes.TYPE_OUTLET);
- State powerState = thing.stateByName("power");
- ControlButton controlButton = new ControlButton(powerState.value.equals("true"), powerState.displayName);
- builder.setControlTemplate(new ToggleTemplate(thing.id.toString(), controlButton));
- } else if (thing.interfaces.contains("mediaplayer")) {
- if (thing.stateByName("playerType").value == "video") {
- builder.setDeviceType(DeviceTypes.TYPE_TV);
- } else {
- // FIXME: There doesn't seem to be a speaker DeviceType!?!
- builder.setDeviceType(DeviceTypes.TYPE_TV);
- }
- if (thing.interfaces.contains("volumecontroller")) {
- State volumeState = thing.stateByName("volume");
- if (volumeState != null) {
- RangeTemplate rangeTemplate = new RangeTemplate(thing.id.toString(), 0, 100, Float.parseFloat(volumeState.value), 1, volumeState.displayName);
- builder.setControlTemplate(rangeTemplate);
- }
- }
- } else {
- builder.setDeviceType(DeviceTypes.TYPE_GENERIC_ON_OFF);
- }
- builder.setStatus(Control.STATUS_OK);
-
-// Log.d(TAG, "Created control for thing: " + thing.name + " id: " + thing.id);
- return builder.build();
- }
-}
diff --git a/androidservice/java/io/guh/nymeaapp/NymeaAppControlsActivity.java b/androidservice/java/io/guh/nymeaapp/NymeaAppControlsActivity.java
deleted file mode 100644
index 3b94d25e..00000000
--- a/androidservice/java/io/guh/nymeaapp/NymeaAppControlsActivity.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package io.guh.nymeaapp;
-import android.util.Log;
-import android.content.Intent;
-import android.content.Context;
-import android.os.Bundle;
-import android.os.Build;
-import android.telephony.TelephonyManager;
-import android.provider.Settings.Secure;
-import android.os.Vibrator;
-import android.os.Process;
-import android.nfc.NfcAdapter;
-import android.nfc.NdefMessage;
-import android.os.Parcelable;
-
-// An activity spawned by android device controls on demand.
-
-public class NymeaAppControlsActivity extends org.qtproject.qt5.android.bindings.QtActivity
-{
- private static final String TAG = "nymea-app: NymeaAppControlActivity";
-
-
- @Override public void onPause() {
- Log.d(TAG, "Pausing...");
- System.exit(0);
- }
-
- @Override public void onResume() {
- super.onResume();
- Log.d(TAG, "Resuming...");
- }
-
- @Override public void onDestroy() {
- Log.d(TAG, "Destroying...");
- }
-
- public boolean startedByNfc() {
- return NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction());
- }
-
- public String nymeaId()
- {
- return getIntent().getStringExtra("nymeaId");
- }
-
- public String thingId()
- {
- return getIntent().getStringExtra("thingId");
- }
-
- public void vibrate(int duration)
- {
- Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
- v.vibrate(duration);
- }
-}
diff --git a/androidservice/java/io/guh/nymeaapp/NymeaAppService.java b/androidservice/java/io/guh/nymeaapp/NymeaAppService.java
deleted file mode 100644
index 5bc6acf7..00000000
--- a/androidservice/java/io/guh/nymeaapp/NymeaAppService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package io.guh.nymeaapp;
-
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-import org.qtproject.qt5.android.bindings.QtService;
-
-// Background service establishing a connection to nymea and providing data on android specific interfaces
-// such as IBinder and BroadcastListener
-
-// This service loads the service_main Qt entry point and does most of its work in C++/Qt
-
-public class NymeaAppService extends QtService
-{
- public static final String NYMEA_APP_BROADCAST = "io.guh.nymeaapp.NymeaAppService.broadcast";
-
- private static final String TAG = "nymea-app: NymeaAppService";
-
- @Override
- public void onCreate() {
- super.onCreate();
- Log.i(TAG, "Creating Service");
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- Log.i(TAG, "Destroying Service");
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- int ret = super.onStartCommand(intent, flags, startId);
-
- // Do some work
-
- Log.d(TAG, "*************** Service started");
-
- return ret;
- }
-
- public void sendBroadcast(String payload) {
- Intent sendToUiIntent = new Intent();
- sendToUiIntent.setAction(NYMEA_APP_BROADCAST);
- sendToUiIntent.putExtra("data", payload);
-// Log.d(TAG, "Service sending broadcast");
- sendBroadcast(sendToUiIntent);
- }
-}
diff --git a/androidservice/java/io/guh/nymeaapp/NymeaAppServiceConnection.java b/androidservice/java/io/guh/nymeaapp/NymeaAppServiceConnection.java
deleted file mode 100644
index fd3c3b1b..00000000
--- a/androidservice/java/io/guh/nymeaapp/NymeaAppServiceConnection.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package io.guh.nymeaapp;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.UUID;
-import java.util.HashMap;
-
-import android.util.Log;
-
-import android.os.IBinder;
-import android.os.Parcel;
-import android.os.RemoteException;
-
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.BroadcastReceiver;
-import android.content.ServiceConnection;
-import android.content.ComponentName;
-import android.content.Context;
-
-import android.service.controls.Control;
-import android.service.controls.DeviceTypes;
-
-import io.reactivex.processors.ReplayProcessor;
-
-import org.json.*;
-
-// Helper class to establish a connection to the NymeaAppService and interact
-// with that using IBinder and ServiceBroadcastListener
-
-public class NymeaAppServiceConnection implements ServiceConnection {
- private static final String TAG = "nymea-app: NymeaAppServiceConnection";
- private IBinder m_service;
- private Context m_context;
-
- private boolean m_connected = false;
- private HashMap m_nymeaHosts = new HashMap();
-
- public NymeaAppServiceConnection(Context context) {
- super();
- m_context = context;
- }
-
- final public boolean connected() {
- return m_connected;
- }
- public void onConnectedChanged(boolean connected) {};
-
- final public boolean isReady(UUID nymeaId) {
- return m_nymeaHosts.get(nymeaId).isReady;
- }
- public void onReadyChanged(UUID nymeaId, boolean ready) {}
-
- public final HashMap getHosts() {
- return m_nymeaHosts;
- }
-
- final public Thing getThing(UUID thingId) {
- for (HashMap.Entry entry : m_nymeaHosts.entrySet()) {
- Thing thing = entry.getValue().things.get(thingId);
- if (thing != null) {
- return thing;
- }
- }
- return null;
- }
- final public UUID hostForThing(UUID thingId) {
- for (HashMap.Entry entry : m_nymeaHosts.entrySet()) {
- Thing thing = entry.getValue().things.get(thingId);
- if (thing != null) {
- return entry.getKey();
- }
- }
- return null;
- }
-
- public void onError() {}
- public void onUpdate(UUID nymeaId, UUID thingId) {}
-
- final public void executeAction(UUID nymeaId, UUID thingId, UUID actionTypeId, String paramValue) {
- try {
- JSONObject params = new JSONObject();
- params.put("nymeaId", nymeaId.toString());
- params.put("thingId", thingId.toString());
- params.put("actionTypeId", actionTypeId.toString());
- JSONArray actionParams = new JSONArray();
- JSONObject param = new JSONObject();
- param.put("paramTypeId", actionTypeId.toString());
- param.put("value", paramValue);
- actionParams.put(param);
- params.put("params", actionParams);
- Parcel parcel = createRequest("ExecuteAction", params);
- Parcel retParcel = Parcel.obtain();
- m_service.transact(1, parcel, retParcel, 0);
- } catch (Exception e) {
- Log.d(TAG, "Error calling executeAction on NymeaAppService");
- }
- }
-
- @Override public void onServiceConnected(ComponentName className, IBinder service) {
- Log.d(TAG, "Connected to NymeaAppService");
- m_service = service;
-
- registerServiceBroadcastReceiver();
-
- try {
- Parcel parcel = createRequest("GetInstances");
- Parcel retParcel = Parcel.obtain();
-
- m_service.transact(1, parcel, retParcel, 0);
-
- JSONObject reply = new JSONObject(retParcel.readString());
- Log.d(TAG, "Instaces received: " + reply.toString());
- JSONArray instances = reply.getJSONArray("instances");
- for (int i = 0; i < instances.length(); i++) {
- JSONObject instanceMap = instances.getJSONObject(i);
- NymeaHost nymeaHost = new NymeaHost();
- nymeaHost.id = UUID.fromString(instanceMap.getString("id"));
- nymeaHost.name = instanceMap.getString("name");
- nymeaHost.isReady = instanceMap.getBoolean("isReady");
- m_nymeaHosts.put(nymeaHost.id, nymeaHost);
- if (nymeaHost.isReady) {
- fetchThings(nymeaHost.id);
- }
- }
- } catch (JSONException e) {
- Log.d(TAG, "Error while processing JSON in communication with NymeaAppService: " + e.toString());
- onError();
- return;
- } catch (RemoteException e) {
- Log.d(TAG, "Error communicating with NymeaAppService: " + e.toString());
- onError();
- return;
- }
-
- m_connected = true;
- onConnectedChanged(m_connected);
- }
-
- @Override public void onServiceDisconnected(ComponentName arg0) {
- m_service = null;
- for (int i = 0; i < m_nymeaHosts.size(); i++) {
- m_nymeaHosts.get(i).isReady = false;
- }
- m_connected = false;
- onConnectedChanged(m_connected);
- }
-
- public void registerServiceBroadcastReceiver() {
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(NymeaAppService.NYMEA_APP_BROADCAST);
- m_context.registerReceiver(serviceMessageReceiver, intentFilter);
- Log.d(TAG, "Registered broadcast receiver");
- }
-
- private BroadcastReceiver serviceMessageReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (NymeaAppService.NYMEA_APP_BROADCAST.equals(intent.getAction())) {
- String payload = intent.getStringExtra("data");
- try {
- processBroadcast(payload);
- } catch(JSONException e) {
- Log.d(TAG, "Error parsing broadcast JSON: " + e.toString());
- }
- }
- }
- };
-
- private void processBroadcast(String payload) throws JSONException
- {
- JSONObject data = new JSONObject(payload);
- JSONObject params = data.getJSONObject("params");
-// Log.d(TAG, "Broadcast received from NymeaAppService: " + data.getString("notification"));
- Log.d(TAG, params.toString());
-
- if (data.getString("notification").equals("ThingStateChanged")) {
- UUID nymeaId = UUID.fromString(params.getString("nymeaId"));
- UUID thingId = UUID.fromString(params.getString("thingId"));
- UUID stateTypeId = UUID.fromString(params.getString("stateTypeId"));
- String value = params.getString("value");
-// Log.d(TAG, "Thing state changed: " + thingId + " stateTypeId: " + stateTypeId + " value: " + value);
-
- Thing thing = getThing(thingId);
- if (thing != null) {
- thing.stateById(stateTypeId).value = value;
- onUpdate(nymeaId, thingId);
- } else {
- Log.d(TAG, "Got a state change notification for a thing we don't know!");
- }
- }
-
- if (data.getString("notification").equals("ReadyStateChanged")) {
- UUID nymeaId = UUID.fromString(params.getString("nymeaId"));
- NymeaHost host = m_nymeaHosts.get(nymeaId);
- host.isReady = params.getBoolean("isReady");
- if (host.isReady) {
- Log.d(TAG, "Host is ready. Fetching things...");
- fetchThings(nymeaId);
- } else {
- Log.d(TAG, "Host is not ready yet...");
- }
- }
- }
-
- private void fetchThings(UUID nymeaId) {
- Log.d(TAG, "Fetching things");
- String thingsList;
- try {
- JSONObject params = new JSONObject();
- params.put("nymeaId", nymeaId.toString());
- Parcel parcel = createRequest("GetThings", params);
- Parcel retParcel = Parcel.obtain();
- m_service.transact(1, parcel, retParcel, 0);
- thingsList = retParcel.readString();
- } catch (Exception e) {
- Log.d(TAG, "Error fetching things from NymeaAppService: " + e.toString());
- onError();
- return;
- }
-
- try {
- JSONObject result = new JSONObject(thingsList);
- for (int i = 0; i < result.getJSONArray("things").length(); i++) {
- JSONObject entry = result.getJSONArray("things").getJSONObject(i);
- Thing thing = new Thing();
- thing.id = UUID.fromString(entry.getString("id"));
- thing.name = entry.getString("name");
- thing.className = entry.getString("className");
- JSONArray ifaces = entry.getJSONArray("interfaces");
- for (int j = 0; j < ifaces.length(); j++) {
- thing.interfaces.add(ifaces.get(j));
- }
- JSONArray states = entry.getJSONArray("states");
- for (int j = 0; j < states.length(); j++) {
- JSONObject stateMap = states.getJSONObject(j);
- State s = new State();
- s.typeId = UUID.fromString(stateMap.getString("stateTypeId"));
- s.name = stateMap.getString("name");
- s.displayName = stateMap.getString("displayName");
- s.value = stateMap.getString("value");
- thing.states.add(s);
- }
- JSONArray actions = entry.getJSONArray("actions");
- for (int j = 0; j < actions.length(); j++) {
- JSONObject actionMap = actions.getJSONObject(j);
- Action a = new Action();
- a.typeId = UUID.fromString(actionMap.getString("actionTypeId"));
- a.name = actionMap.getString("name");
- a.displayName = actionMap.getString("displayName");
- thing.actions.add(a);
- }
- m_nymeaHosts.get(nymeaId).things.put(thing.id, thing);
- }
-
- } catch (Exception e) {
- Log.d(TAG, "Error parsing JSON from NymeaAppService: " + e.toString());
- Log.d(TAG, thingsList);
- m_service = null;
- onError();
- return;
- }
-
- Log.d(TAG, "Things fetched: " + m_nymeaHosts.get(nymeaId).things.size());
- m_nymeaHosts.get(nymeaId).isReady = true;
- onReadyChanged(nymeaId, true);
- }
-
- private Parcel createRequest(String method) throws JSONException {
- return createRequest(method, null);
- }
- private Parcel createRequest(String method, JSONObject params) throws JSONException {
- Parcel ret = Parcel.obtain();
- JSONObject payload = new JSONObject();
- payload.put("method", method);
- if (params != null) {
- payload.put("params", params);
- }
- Log.d(TAG, "Parcel payload: " + payload.toString());
- ret.writeString(payload.toString());
- return ret;
- }
-}
diff --git a/androidservice/java/io/guh/nymeaapp/NymeaHost.java b/androidservice/java/io/guh/nymeaapp/NymeaHost.java
deleted file mode 100644
index a568563c..00000000
--- a/androidservice/java/io/guh/nymeaapp/NymeaHost.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package io.guh.nymeaapp;
-
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.UUID;
-
-public class NymeaHost {
-
- UUID id;
- boolean isReady = false;
- String name = "";
- HashMap things = new HashMap();
-}
diff --git a/androidservice/java/io/guh/nymeaapp/State.java b/androidservice/java/io/guh/nymeaapp/State.java
deleted file mode 100644
index 5b7053ea..00000000
--- a/androidservice/java/io/guh/nymeaapp/State.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package io.guh.nymeaapp;
-
-import java.util.UUID;
-
-public class State {
- public UUID typeId;
- public String name;
- public String displayName;
- public String value;
-}
diff --git a/androidservice/java/io/guh/nymeaapp/Thing.java b/androidservice/java/io/guh/nymeaapp/Thing.java
deleted file mode 100644
index e5667831..00000000
--- a/androidservice/java/io/guh/nymeaapp/Thing.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package io.guh.nymeaapp;
-
-import android.util.Log;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.UUID;
-
-
-public class Thing {
- static final public String TAG = "nymea-app: Thing";
- public UUID id;
- public String name;
- public String className;
- public List interfaces = new ArrayList();
-
- public ArrayList states = new ArrayList();
- public ArrayList actions = new ArrayList();
-
- public State stateByName(String name) {
- for (int i = 0; i < states.size(); i++) {
- if (states.get(i).name.equals(name)) {
- return states.get(i);
- }
- }
- return null;
- }
-
- public State stateById(UUID stateTypeId) {
- for (int i = 0; i < states.size(); i++) {
- if (states.get(i).typeId.equals(stateTypeId)) {
- return states.get(i);
- }
- }
- return null;
- }
-
- public Action actionByName(String name) {
- for (int i = 0; i < actions.size(); i++) {
- Log.d(TAG, "Thing has action: " + actions.get(i).name);
- if (actions.get(i).name.equals(name)) {
- return actions.get(i);
- }
- }
- return null;
- }
-
- public Action actionById(UUID actionTypeId) {
- for (int i = 0; i < actions.size(); i++) {
- if (actions.get(i).typeId.equals(actionTypeId)) {
- return actions.get(i);
- }
- }
- return null;
- }
-}
diff --git a/androidservice/nymeaappservice/androidbinder.cpp b/androidservice/nymeaappservice/androidbinder.cpp
deleted file mode 100644
index 41696887..00000000
--- a/androidservice/nymeaappservice/androidbinder.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-#include "androidbinder.h"
-#include "engine.h"
-#include "types/thing.h"
-
-#include
-#include
-#include
-#include
-#include
-
-AndroidBinder::AndroidBinder(NymeaAppService *service):
- m_service(service)
-{
-}
-
-bool AndroidBinder::onTransact(int code, const QAndroidParcel &data, const QAndroidParcel &reply, QAndroidBinder::CallType flags)
-{
- qDebug() << "onTransact: code " << code << ", flags " << int(flags);
-
-// QString payload = data.readData();
- QString payload = data.handle().callObjectMethod("readString").toString();
-
- QJsonParseError error;
- QJsonDocument jsonDoc = QJsonDocument::fromJson(payload.toUtf8(), &error);
- if (error.error != QJsonParseError::NoError) {
- qWarning() << "Error parsing JSON from parcel:" << error.errorString();
- qWarning() << payload;
- return false;
- }
- QVariantMap request = jsonDoc.toVariant().toMap();
-
- if (request.value("method").toString() == "GetInstances") {
- QVariantMap params;
- QVariantList instances;
- foreach (const QUuid &nymeaId, m_service->engines().keys()) {
- Engine *engine = m_service->engines().value(nymeaId);
- QVariantMap instance;
- instance.insert("id", nymeaId);
- instance.insert("isReady", engine->jsonRpcClient()->connected() && !engine->thingManager()->fetchingData());
- instance.insert("name", engine->jsonRpcClient()->currentHost()->name());
- instances.append(instance);
- }
- params.insert("instances", instances);
- sendReply(reply, params);
- return true;
- }
-
- if (request.value("method").toString() == "GetThings") {
- QUuid nymeaId = request.value("params").toMap().value("nymeaId").toUuid();
- Engine *engine = m_service->engines().value(nymeaId);
- if (!engine) {
- qWarning() << "Android client requested things for an invalid nymea instance:" << nymeaId;
- return false;
- }
- QVariantList thingsList;
- for (int i = 0; i < engine->thingManager()->things()->rowCount(); i++) {
- Thing *thing = engine->thingManager()->things()->get(i);
- QVariantMap thingMap;
- thingMap.insert("id", thing->id());
- thingMap.insert("name", thing->name());
- thingMap.insert("className", thing->thingClass()->displayName());
- thingMap.insert("interfaces", thing->thingClass()->interfaces());
- QVariantList states;
- for (int j = 0; j < thing->states()->rowCount(); j++) {
- State *state = thing->states()->get(j);
- QVariantMap stateMap;
- stateMap.insert("stateTypeId", state->stateTypeId());
- stateMap.insert("name", thing->thingClass()->stateTypes()->getStateType(state->stateTypeId())->name());
- stateMap.insert("displayName", thing->thingClass()->stateTypes()->getStateType(state->stateTypeId())->displayName());
- stateMap.insert("value", state->value());
- states.append(stateMap);
- }
- thingMap.insert("states", states);
- QVariantList actions;
- for (int j = 0; j < thing->thingClass()->actionTypes()->rowCount(); j++) {
- ActionType *actionType = thing->thingClass()->actionTypes()->get(j);
- QVariantMap actionMap;
- actionMap.insert("actionTypeId", actionType->id());
- actionMap.insert("name", actionType->name());
- actionMap.insert("displayName", actionType->displayName());
- actions.append(actionMap);
- }
- thingMap.insert("actions", actions);
- thingsList.append(thingMap);
- }
- QVariantMap params;
- params.insert("things", thingsList);
- sendReply(reply, params);
- return true;
- }
-
- if (request.value("method").toString() == "ExecuteAction") {
- qDebug() << "ExecuteAction";
- QUuid nymeaId = request.value("params").toMap().value("nymeaId").toUuid();
- Engine *engine = m_service->engines().value(nymeaId);
- if (!engine) {
- qWarning() << "Android client requested executeAction for an invalid nymea instance:" << nymeaId;
- return false;
- }
- QUuid thingId = request.value("params").toMap().value("thingId").toUuid();
- QUuid actionTypeId = request.value("params").toMap().value("actionTypeId").toUuid();
- QVariantList params = request.value("params").toMap().value("params").toList();
-
- qDebug() << "**** executeAction:" << thingId << actionTypeId << params;
- engine->thingManager()->executeAction(thingId, actionTypeId, params);
- }
-
- return false;
-}
-
-void AndroidBinder::sendReply(const QAndroidParcel &reply, const QVariantMap ¶ms)
-{
- QString payload = QJsonDocument::fromVariant(params).toJson();
- reply.handle().callMethod("writeString", "(Ljava/lang/String;)V", QAndroidJniObject::fromString(payload).object());
-}
diff --git a/androidservice/nymeaappservice/androidbinder.h b/androidservice/nymeaappservice/androidbinder.h
deleted file mode 100644
index 36a9b795..00000000
--- a/androidservice/nymeaappservice/androidbinder.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef ANDROIDBINDER_H
-#define ANDROIDBINDER_H
-
-#include
-
-#include "nymeaappservice.h"
-#include "engine.h"
-
-class AndroidBinder : public QAndroidBinder
-{
-public:
- explicit AndroidBinder(NymeaAppService *service);
-
- bool onTransact(int code, const QAndroidParcel &data, const QAndroidParcel &reply, QAndroidBinder::CallType flags) override;
-
-private:
- void sendReply(const QAndroidParcel &reply, const QVariantMap ¶ms);
-
-private:
- NymeaAppService *m_service = nullptr;
-};
-
-#endif // ANDROIDBINDER_H
diff --git a/androidservice/nymeaappservice/nymeaappservice.cpp b/androidservice/nymeaappservice/nymeaappservice.cpp
deleted file mode 100644
index 76a2d4a8..00000000
--- a/androidservice/nymeaappservice/nymeaappservice.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-#include "nymeaappservice.h"
-#include "androidbinder.h"
-
-#include
-#include
-#include
-#include
-
-#include "connection/discovery/nymeadiscovery.h"
-#include "connection/nymeahosts.h"
-
-NymeaAppService::NymeaAppService(int argc, char **argv):
- QAndroidService(argc, argv, [=](const QAndroidIntent &) {
- return new AndroidBinder{this};
- })
-{
- setApplicationName("nymea-app");
- setOrganizationName("nymea");
-
- QSettings settings;
-
- NymeaDiscovery *discovery = new NymeaDiscovery(this);
-
- settings.beginGroup("ConfiguredHosts");
- foreach (const QString &childGroup, settings.childGroups()) {
- settings.beginGroup(childGroup);
- QUuid lastConnected = settings.value("uuid").toUuid();
- QString cachedName = settings.value("cachedName").toString();
- settings.endGroup();
-
- if (lastConnected.isNull()) {
- continue;
- }
- NymeaHost *host = discovery->nymeaHosts()->find(lastConnected);
- if (!host) {
- continue;
- }
-
- Engine *engine = new Engine(this);
- engine->jsonRpcClient()->connectToHost(host);
- m_engines.insert(host->uuid(), engine);
-
-
- QObject::connect(engine->thingManager(), &ThingManager::thingStateChanged, [=](const QUuid &thingId, const QUuid &stateTypeId, const QVariant &value){
- QVariantMap params;
- params.insert("nymeaId", engine->jsonRpcClient()->currentHost()->uuid());
- params.insert("thingId", thingId);
- params.insert("stateTypeId", stateTypeId);
- params.insert("value", value);
- sendNotification("ThingStateChanged", params);
- });
-
- connect(engine->thingManager(), &ThingManager::fetchingDataChanged, [=]() {
- qDebug() << "Fetching data changed";
- QVariantMap params;
- params.insert("nymeaId", engine->jsonRpcClient()->currentHost()->uuid());
- params.insert("isReady", !engine->thingManager()->fetchingData());
- qDebug() << "Nymea host is ready" << engine->jsonRpcClient()->currentHost()->uuid();
- sendNotification("ReadyStateChanged", params);
- });
- }
- settings.endGroup();
-
- qDebug() << "NymeaAppService started.";
-
-}
-
-QHash NymeaAppService::engines() const
-{
- return m_engines;
-}
-
-void NymeaAppService::sendNotification(const QString ¬ification, const QVariantMap ¶ms)
-{
- QVariantMap data;
- data.insert("notification", notification);
- data.insert("params", params);
- QString payload = QJsonDocument::fromVariant(data).toJson();
- QtAndroid::androidService().callMethod("sendBroadcast",
- "(Ljava/lang/String;)V",
- QAndroidJniObject::fromString(payload).object());
-
-}
diff --git a/androidservice/nymeaappservice/nymeaappservice.h b/androidservice/nymeaappservice/nymeaappservice.h
deleted file mode 100644
index 5e823efa..00000000
--- a/androidservice/nymeaappservice/nymeaappservice.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef NYMEAAPPSERVICE_H
-#define NYMEAAPPSERVICE_H
-
-#include
-#include
-#include
-
-#include "engine.h"
-
-class NymeaAppService : public QAndroidService
-{
- Q_OBJECT
-public:
- explicit NymeaAppService(int argc, char** argv);
-
- QHash engines() const;
-
-private:
- void sendNotification(const QString ¬ification, const QVariantMap ¶ms);
-
-
-private:
- QHash m_engines;
-
-};
-
-#endif // NYMEAAPPSERVICE_H
diff --git a/androidservice/service_main.cpp b/androidservice/service_main.cpp
deleted file mode 100644
index 46efab22..00000000
--- a/androidservice/service_main.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include
-#include
-
-#include "nymeaappservice/nymeaappservice.h"
-#include "controlviews/devicecontrolapplication.h"
-
-#include
-#include
-
-int main(int argc, char *argv[])
-{
- qWarning() << "Service starting from a separate .so file";
-
- QLoggingCategory::setFilterRules("qt.remoteobjects.debug=true\n");
-
- QStringList args;
- for (int i = 0; i < argc; i++) {
- args.append(QByteArray(argv[i]));
- qDebug() << "nymea-app: Added command line arg" << args.last();
- }
- QCommandLineParser parser;
- QCommandLineOption controlActivityOption("controlActivity");
- parser.addOption(controlActivityOption);
- parser.parse(args);
-
- QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
-
- QCoreApplication *app;
- if (parser.isSet(controlActivityOption)) {
- qDebug() << "nymea-app: Starting Device Control Activity";
- app = new DeviceControlApplication(argc, argv);
- } else {
- qDebug() << "nymea-app: Starting NymeaAppService background service";
- app = new NymeaAppService(argc, argv);
- }
- return app->exec();
-}
diff --git a/config.h.in.qmake b/config.h.in.qmake
new file mode 100644
index 00000000..ed2ba667
--- /dev/null
+++ b/config.h.in.qmake
@@ -0,0 +1,71 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+*
+* Copyright 2013 - 2020, nymea GmbH
+* Contact: contact@nymea.io
+*
+* 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
+*
+* 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.
+*
+* You should have received a copy of the GNU General Public License along with
+* this project. If not, see .
+*
+* 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
+*
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef VERSION_H
+#define VERSION_H
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+*
+* Copyright 2013 - 2020, nymea GmbH
+* Contact: contact@nymea.io
+*
+* 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
+*
+* 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.
+*
+* You should have received a copy of the GNU General Public License along with
+* this project. If not, see .
+*
+* 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
+*
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef VERSION_H
+#define VERSION_H
+
+#define APP_VERSION '"$$APP_VERSION"'
+#define APPLICATION_NAME '"$$APPLICATION_NAME"'
+#define ORGANISATION_NAME '"$$ORGANISATION_NAME"'
+
+#endif
diff --git a/debian b/debian
index 3f3d1dfa..cf793782 120000
--- a/debian
+++ b/debian
@@ -1 +1 @@
-packaging/ubuntu/debian/
\ No newline at end of file
+packaging/ubuntu/debian-qt6/
\ No newline at end of file
diff --git a/experiences/CMakeLists.txt b/experiences/CMakeLists.txt
new file mode 100644
index 00000000..cb6c01f9
--- /dev/null
+++ b/experiences/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(airconditioning)
diff --git a/experiences/airconditioning/CMakeLists.txt b/experiences/airconditioning/CMakeLists.txt
new file mode 100644
index 00000000..58d56a13
--- /dev/null
+++ b/experiences/airconditioning/CMakeLists.txt
@@ -0,0 +1,31 @@
+file(GLOB AIRCONDITIONING_SOURCES CONFIGURE_DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+)
+file(GLOB AIRCONDITIONING_HEADERS CONFIGURE_DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/*.h
+)
+
+add_library(nymea-app-airconditioning STATIC
+ ${AIRCONDITIONING_SOURCES}
+ ${AIRCONDITIONING_HEADERS}
+)
+set_target_properties(nymea-app-airconditioning PROPERTIES OUTPUT_NAME "nymea-app-airconditioning")
+
+target_include_directories(nymea-app-airconditioning
+ PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/libnymea-app
+ ${CMAKE_BINARY_DIR}
+)
+
+target_link_libraries(nymea-app-airconditioning
+ PUBLIC
+ nymea-app-core
+ Qt6::Core
+ Qt6::Network
+ Qt6::WebSockets
+ Qt6::Bluetooth
+ Qt6::Charts
+ Qt6::Quick
+ Qt6::Qml
+)
diff --git a/experiences/airconditioning/airconditioning.pro b/experiences/airconditioning/airconditioning.pro
index 9ca7c8ab..67657a29 100644
--- a/experiences/airconditioning/airconditioning.pro
+++ b/experiences/airconditioning/airconditioning.pro
@@ -10,8 +10,8 @@ include(../../shared.pri)
LIBS += -L$${top_builddir}/libnymea-app/ -lnymea-app
android: {
-LIBS += -L$${top_builddir}/libnymea-app/$${ANDROID_TARGET_ARCH}
-PRE_TARGETDEPS += $$top_builddir/libnymea-app/$${ANDROID_TARGET_ARCH}/libnymea-app.a
+ LIBS += -L$${top_builddir}/libnymea-app/$${ANDROID_TARGET_ARCH}
+ PRE_TARGETDEPS += $$top_builddir/libnymea-app/$${ANDROID_TARGET_ARCH}/libnymea-app_$${ANDROID_TARGET_ARCH}.a
}
INCLUDEPATH += $${top_srcdir}/libnymea-app/
diff --git a/experiences/airconditioning/airconditioningmanager.cpp b/experiences/airconditioning/airconditioningmanager.cpp
index 32d0dde8..23fc2822 100644
--- a/experiences/airconditioning/airconditioningmanager.cpp
+++ b/experiences/airconditioning/airconditioningmanager.cpp
@@ -25,8 +25,6 @@
#include "airconditioningmanager.h"
#include "zoneinfo.h"
-#include "engine.h"
-
#include
#include
diff --git a/experiences/airconditioning/airconditioningmanager.h b/experiences/airconditioning/airconditioningmanager.h
index 071090d9..3d3a051a 100644
--- a/experiences/airconditioning/airconditioningmanager.h
+++ b/experiences/airconditioning/airconditioningmanager.h
@@ -28,8 +28,7 @@
#include
#include "zoneinfo.h"
-
-class Engine;
+#include "engine.h"
class AirConditioningManager : public QObject
{
diff --git a/libnymea-app/CMakeLists.txt b/libnymea-app/CMakeLists.txt
new file mode 100644
index 00000000..0dd7288e
--- /dev/null
+++ b/libnymea-app/CMakeLists.txt
@@ -0,0 +1,116 @@
+set(LIBNYMEA_APP_SOURCES)
+file(GLOB_RECURSE LIBNYMEA_APP_SOURCES CONFIGURE_DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+)
+file(GLOB_RECURSE LIBNYMEA_APP_HEADERS CONFIGURE_DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/*.h
+)
+
+set(NYMEA_REMOTEPROXYCLIENT_MODULE
+ ${CMAKE_SOURCE_DIR}/nymea-remoteproxy/cmake/nymea-remoteproxyclient-sources.cmake
+)
+
+set(REMOTE_PROXYCLIENT_SOURCES)
+set(REMOTE_PROXYCLIENT_HEADERS)
+set(REMOTE_PROXYCLIENT_INCLUDE_DIRS)
+
+if(EXISTS ${NYMEA_REMOTEPROXYCLIENT_MODULE})
+ include(${NYMEA_REMOTEPROXYCLIENT_MODULE})
+
+ if(COMMAND nymea_remoteproxyclient_sources)
+ nymea_remoteproxyclient_sources(
+ REMOTE_PROXYCLIENT_SOURCES
+ REMOTE_PROXYCLIENT_HEADERS
+ REMOTE_PROXYCLIENT_INCLUDE_DIRS
+ )
+ endif()
+
+ if(DEFINED NYMEA_REMOTEPROXYCLIENT_SOURCES)
+ list(APPEND REMOTE_PROXYCLIENT_SOURCES ${NYMEA_REMOTEPROXYCLIENT_SOURCES})
+ endif()
+ if(DEFINED NYMEA_REMOTEPROXYCLIENT_HEADERS)
+ list(APPEND REMOTE_PROXYCLIENT_HEADERS ${NYMEA_REMOTEPROXYCLIENT_HEADERS})
+ endif()
+ if(DEFINED NYMEA_REMOTEPROXYCLIENT_INCLUDE_DIRS)
+ list(APPEND REMOTE_PROXYCLIENT_INCLUDE_DIRS ${NYMEA_REMOTEPROXYCLIENT_INCLUDE_DIRS})
+ endif()
+
+ if(NOT REMOTE_PROXYCLIENT_SOURCES AND NOT REMOTE_PROXYCLIENT_HEADERS)
+ message(FATAL_ERROR
+ "nymea-remoteproxyclient module did not populate its source lists. "
+ "Please ensure nymea-remoteproxy is checked out at the required revision."
+ )
+ endif()
+else()
+ message(FATAL_ERROR
+ "nymea-remoteproxyclient CMake module not found. Did you initialize the nymea-remoteproxy submodule?"
+ )
+endif()
+
+if(NOT REMOTE_PROXYCLIENT_INCLUDE_DIRS)
+ set(_nymea_remoteproxyclient_root
+ ${CMAKE_SOURCE_DIR}/nymea-remoteproxy/libnymea-remoteproxyclient
+ )
+ if(EXISTS ${_nymea_remoteproxyclient_root})
+ list(APPEND REMOTE_PROXYCLIENT_INCLUDE_DIRS ${_nymea_remoteproxyclient_root})
+ endif()
+ unset(_nymea_remoteproxyclient_root)
+endif()
+
+if(NOT REMOTE_PROXYCLIENT_INCLUDE_DIRS)
+ message(FATAL_ERROR
+ "nymea-remoteproxyclient include directories were not provided by the module. "
+ "Please ensure the nymea-remoteproxy submodule is checked out at the required revision."
+ )
+endif()
+
+set(NYMEA_APP_CORE_INCLUDE_DIRS
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_BINARY_DIR}
+)
+
+list(APPEND NYMEA_APP_CORE_INCLUDE_DIRS ${REMOTE_PROXYCLIENT_INCLUDE_DIRS})
+
+if(EXISTS ${CMAKE_SOURCE_DIR}/QtZeroConf)
+ list(APPEND NYMEA_APP_CORE_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/QtZeroConf)
+endif()
+
+add_library(nymea-app-core STATIC
+ ${LIBNYMEA_APP_SOURCES}
+ ${LIBNYMEA_APP_HEADERS}
+ ${REMOTE_PROXYCLIENT_SOURCES}
+ ${REMOTE_PROXYCLIENT_HEADERS}
+)
+set_target_properties(nymea-app-core PROPERTIES OUTPUT_NAME "nymea-app")
+
+list(REMOVE_DUPLICATES NYMEA_APP_CORE_INCLUDE_DIRS)
+target_include_directories(nymea-app-core PUBLIC ${NYMEA_APP_CORE_INCLUDE_DIRS})
+
+target_link_libraries(nymea-app-core
+ PUBLIC
+ Qt6::Core
+ Qt6::Network
+ Qt6::WebSockets
+ Qt6::Bluetooth
+ Qt6::Charts
+ Qt6::Quick
+ Qt6::Qml
+)
+
+if(TARGET OpenSSL::SSL AND TARGET OpenSSL::Crypto)
+ target_link_libraries(nymea-app-core PUBLIC OpenSSL::SSL OpenSSL::Crypto)
+else()
+ message(WARNING "OpenSSL development libraries not found; continuing without explicit OpenSSL linkage.")
+endif()
+
+if(NYMEA_ENABLE_ZEROCONF)
+ target_compile_definitions(nymea-app-core PUBLIC WITH_ZEROCONF QZEROCONF_STATIC)
+ find_library(QTZEROCONF_LIBRARY NAMES QtZeroConf HINTS ${CMAKE_SOURCE_DIR}/QtZeroConf)
+ if(NOT QTZEROCONF_LIBRARY AND TARGET Qt6::QtZeroConf)
+ target_link_libraries(nymea-app-core PUBLIC Qt6::QtZeroConf)
+ elseif(QTZEROCONF_LIBRARY)
+ target_link_libraries(nymea-app-core PUBLIC ${QTZEROCONF_LIBRARY})
+ else()
+ message(FATAL_ERROR "ZeroConf support requested but QtZeroConf library was not found")
+ endif()
+endif()
diff --git a/libnymea-app/configuration/mqttpolicies.h b/libnymea-app/configuration/mqttpolicies.h
index 4639d025..b26ec916 100644
--- a/libnymea-app/configuration/mqttpolicies.h
+++ b/libnymea-app/configuration/mqttpolicies.h
@@ -52,15 +52,17 @@ public:
void addPolicy(MqttPolicy *policy);
void removePolicy(MqttPolicy *policy);
- Q_INVOKABLE MqttPolicy* getPolicy(const QString &clientId) const;
- Q_INVOKABLE MqttPolicy* get(int index) const;
+ Q_INVOKABLE MqttPolicy *getPolicy(const QString &clientId) const;
+ Q_INVOKABLE MqttPolicy *get(int index) const;
void clear();
+
signals:
void countChanged();
private:
- QList m_list;
+ QList m_list;
+
};
#endif // MQTTPOLICIES_H
diff --git a/libnymea-app/configuration/nymeaconfiguration.h b/libnymea-app/configuration/nymeaconfiguration.h
index 7ae0d83f..d1201b04 100644
--- a/libnymea-app/configuration/nymeaconfiguration.h
+++ b/libnymea-app/configuration/nymeaconfiguration.h
@@ -133,7 +133,7 @@ signals:
void serverNameChanged();
private:
- JsonRpcClient* m_client = nullptr;
+ JsonRpcClient *m_client = nullptr;
bool m_fetchingData = false;
bool m_debugServerEnabled = false;
diff --git a/libnymea-app/configuration/serverconfiguration.h b/libnymea-app/configuration/serverconfiguration.h
index c5105789..0cef2662 100644
--- a/libnymea-app/configuration/serverconfiguration.h
+++ b/libnymea-app/configuration/serverconfiguration.h
@@ -56,7 +56,7 @@ public:
bool sslEnabled() const;
void setSslEnabled(bool sslEnabled);
- Q_INVOKABLE virtual ServerConfiguration* clone() const;
+ Q_INVOKABLE virtual ServerConfiguration *clone() const;
signals:
void addressChanged();
diff --git a/libnymea-app/configuration/serverconfigurations.h b/libnymea-app/configuration/serverconfigurations.h
index 90d4ff26..0477f13c 100644
--- a/libnymea-app/configuration/serverconfigurations.h
+++ b/libnymea-app/configuration/serverconfigurations.h
@@ -57,8 +57,8 @@ public:
void clear();
- Q_INVOKABLE ServerConfiguration* get(int index) const;
- Q_INVOKABLE ServerConfiguration* getConfiguration(const QString &id) const;
+ Q_INVOKABLE ServerConfiguration *get(int index) const;
+ Q_INVOKABLE ServerConfiguration *getConfiguration(const QString &id) const;
signals:
void countChanged();
diff --git a/libnymea-app/connection/discovery/bluetoothservicediscovery.cpp b/libnymea-app/connection/discovery/bluetoothservicediscovery.cpp
index da51c15a..de64c392 100644
--- a/libnymea-app/connection/discovery/bluetoothservicediscovery.cpp
+++ b/libnymea-app/connection/discovery/bluetoothservicediscovery.cpp
@@ -24,9 +24,6 @@
#include "bluetoothservicediscovery.h"
-#include "../nymeahosts.h"
-#include "../nymeahost.h"
-
#include
#include "logging.h"
@@ -127,17 +124,6 @@ void BluetoothServiceDiscovery::onServiceDiscovered(const QBluetoothServiceInfo
if (serviceInfo.serviceClassUuids().first() == QBluetoothUuid(QUuid("997936b5-d2cd-4c57-b41b-c6048320cd2b"))) {
qCDebug(dcBluetoothDiscovery()) << "BluetoothServiceDiscovery: Found nymea rfcom service!";
-
-// NymeaHost* host = m_nymeaHosts->find(serviceInfo.device().address());
-// if (!host) {
-// host = new DiscoveryDevice(DiscoveryDevice::DeviceTypeBluetooth, this);
-// qDebug() << "BluetoothServiceDiscovery: Adding new bluetooth host to model";
-// host->setName(QString("%1 (%2)").arg(serviceInfo.serviceName()).arg(serviceInfo.device().name()));
-//// device->setBluetoothAddress(serviceInfo.device().address());
-// PortConfig pc;
-
-// m_nymeaHosts->addHost(device);
-// }
}
}
@@ -157,7 +143,6 @@ void BluetoothServiceDiscovery::onServiceDiscoveryFinished()
return;
}
-// qDebug() << "BluetoothServiceDiscovery: Restart service discovery";
discover();
}
}
diff --git a/libnymea-app/connection/discovery/nymeadiscovery.h b/libnymea-app/connection/discovery/nymeadiscovery.h
index f0e13c29..b062682c 100644
--- a/libnymea-app/connection/discovery/nymeadiscovery.h
+++ b/libnymea-app/connection/discovery/nymeadiscovery.h
@@ -36,7 +36,6 @@ class UpnpDiscovery;
class ZeroconfDiscovery;
class BluetoothServiceDiscovery;
-
class NymeaDiscovery : public QObject
{
Q_OBJECT
diff --git a/libnymea-app/connection/discovery/upnpdiscovery.cpp b/libnymea-app/connection/discovery/upnpdiscovery.cpp
index 6a682da7..42310675 100644
--- a/libnymea-app/connection/discovery/upnpdiscovery.cpp
+++ b/libnymea-app/connection/discovery/upnpdiscovery.cpp
@@ -116,8 +116,13 @@ void UpnpDiscovery::updateInterfaces()
}
qCInfo(dcUPnP()) << "Discovering on" << netAddressEntry.ip() << port;
m_sockets.insert(netAddressEntry.ip(), socket);
- connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
+
connect(socket, &QUdpSocket::readyRead, this, &UpnpDiscovery::readData);
+#if QT_VERSION >= QT_VERSION_CHECK(5 , 15, 0)
+ connect(socket, &QUdpSocket::errorOccurred, this, &UpnpDiscovery::error);
+#else
+ connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
+#endif
}
}
diff --git a/libnymea-app/connection/discovery/zeroconfdiscovery.cpp b/libnymea-app/connection/discovery/zeroconfdiscovery.cpp
index 7633ef75..e0f24bd2 100644
--- a/libnymea-app/connection/discovery/zeroconfdiscovery.cpp
+++ b/libnymea-app/connection/discovery/zeroconfdiscovery.cpp
@@ -45,23 +45,23 @@ ZeroconfDiscovery::ZeroconfDiscovery(NymeaHosts *nymeaHosts, QObject *parent) :
connect(m_zeroconfJsonRPC, &QZeroConf::serviceUpdated, this, &ZeroconfDiscovery::serviceEntryAdded);
connect(m_zeroconfJsonRPC, &QZeroConf::serviceRemoved, this, &ZeroconfDiscovery::serviceEntryRemoved);
- if (m_zeroconfJsonRPC->isValid()) {
+ // if (m_zeroconfJsonRPC->isValid()) {
m_zeroconfJsonRPC->startBrowser("_jsonrpc._tcp", QAbstractSocket::IPv4Protocol);
qCInfo(dcZeroConf()) << "Created service browser for _jsonrpc._tcp:" << m_zeroconfJsonRPC->browserExists();
- } else {
- qCWarning(dcZeroConf()) << "Failed to initialize service broeser for _jsonprc._tcp";
- }
+ // } else {
+ // qCWarning(dcZeroConf()) << "Failed to initialize service broeser for _jsonprc._tcp";
+ // }
m_zeroconfWebSocket = new QZeroConf(this);
connect(m_zeroconfWebSocket, &QZeroConf::serviceAdded, this, &ZeroconfDiscovery::serviceEntryAdded);
connect(m_zeroconfWebSocket, &QZeroConf::serviceUpdated, this, &ZeroconfDiscovery::serviceEntryAdded);
connect(m_zeroconfWebSocket, &QZeroConf::serviceRemoved, this, &ZeroconfDiscovery::serviceEntryRemoved);
- if (m_zeroconfWebSocket->isValid()) {
+ // if (m_zeroconfWebSocket->isValid()) {
m_zeroconfWebSocket->startBrowser("_ws._tcp", QAbstractSocket::IPv4Protocol);
qCInfo(dcZeroConf()) << "Created service browser for _ws._tcp:" << m_zeroconfWebSocket->browserExists();
- } else {
- qCWarning(dcZeroConf()) << "Failed to initialize service browserr for _ws._tcp";
- }
+ // } else {
+ // qCWarning(dcZeroConf()) << "Failed to initialize service browserr for _ws._tcp";
+ // }
#else
qCInfo(dcZeroConf()) << "Zeroconf support not compiled in. Zeroconf will not be available.";
diff --git a/libnymea-app/connection/networkreachabilitymonitor.cpp b/libnymea-app/connection/networkreachabilitymonitor.cpp
index 60a8bc19..da9e9c0a 100644
--- a/libnymea-app/connection/networkreachabilitymonitor.cpp
+++ b/libnymea-app/connection/networkreachabilitymonitor.cpp
@@ -38,6 +38,25 @@ NetworkReachabilityMonitor::NetworkReachabilityMonitor(QObject *parent)
setupIOS();
#endif
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+
+ m_networkInformation = QNetworkInformation::instance();
+
+ qCDebug(dcNymeaConnection()) << "Network infromation supported features:" << m_networkInformation->supportedFeatures();
+ qCDebug(dcNymeaConnection()) << "Network reachability:" << m_networkInformation->reachability();
+ qCDebug(dcNymeaConnection()) << "Network trasport medium changed:" << m_networkInformation->transportMedium();
+
+ QObject::connect(m_networkInformation, &QNetworkInformation::reachabilityChanged, this, [this](QNetworkInformation::Reachability reachability){
+ qCDebug(dcNymeaConnection()) << "Network reachability changed:" << reachability;
+ updateActiveBearers();
+ });
+
+ QObject::connect(m_networkInformation, &QNetworkInformation::transportMediumChanged, this, [this](QNetworkInformation::TransportMedium type){
+ qCDebug(dcNymeaConnection()) << "Network trasport medium changed:" << type;
+ updateActiveBearers();
+ });
+
+#else
m_networkConfigManager = new QNetworkConfigurationManager(this);
QObject::connect(m_networkConfigManager, &QNetworkConfigurationManager::configurationAdded, this, [this](const QNetworkConfiguration &config){
@@ -50,6 +69,7 @@ NetworkReachabilityMonitor::NetworkReachabilityMonitor(QObject *parent)
qCDebug(dcNymeaConnection()) << "Network configuration removed:" << config.name() << config.bearerTypeName() << config.purpose();
updateActiveBearers();
});
+#endif
QGuiApplication *app = static_cast(QGuiApplication::instance());
QObject::connect(app, &QGuiApplication::applicationStateChanged, this, [this](Qt::ApplicationState state) {
@@ -58,7 +78,6 @@ NetworkReachabilityMonitor::NetworkReachabilityMonitor(QObject *parent)
});
updateActiveBearers();
-
}
NetworkReachabilityMonitor::~NetworkReachabilityMonitor()
@@ -80,6 +99,16 @@ void NetworkReachabilityMonitor::updateActiveBearers()
#endif
NymeaConnection::BearerTypes availableBearerTypes;
+
+// Note: some features are availabe since Qt 6.3.0, but the minimal Qt6 version is 6.6.0,
+// so we don't want so have an unhanlded gap and let the compiler warn about incompatibility
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ if (m_networkInformation->reachability() == QNetworkInformation::Reachability::Disconnected) {
+ qCDebug(dcNymeaConnection()) << "No reachable network transport medium available.";
+ } else {
+ availableBearerTypes.setFlag(qBearerTypeToNymeaBearerType(m_networkInformation->transportMedium()));
+ }
+#else
QList configs = m_networkConfigManager->allConfigurations(QNetworkConfiguration::Active);
qCDebug(dcNymeaConnection()) << "Network configuations:" << configs.count();
foreach (const QNetworkConfiguration &config, configs) {
@@ -97,6 +126,7 @@ void NetworkReachabilityMonitor::updateActiveBearers()
qCDebug(dcNymeaConnection()) << "Updating network manager";
m_networkConfigManager->updateConfigurations();
}
+#endif
if (m_availableBearerTypes != availableBearerTypes) {
qCInfo(dcNymeaConnection()) << "Available Bearer Types changed to:" << availableBearerTypes;
@@ -109,6 +139,27 @@ void NetworkReachabilityMonitor::updateActiveBearers()
emit availableBearerTypesUpdated();
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+NymeaConnection::BearerType NetworkReachabilityMonitor::qBearerTypeToNymeaBearerType(QNetworkInformation::TransportMedium type)
+{
+ switch (type) {
+ case QNetworkInformation::TransportMedium::Unknown:
+ // Unable to determine the connection type. Assume it's something we can establish any connection type on
+ return NymeaConnection::BearerTypeAll;
+ case QNetworkInformation::TransportMedium::Ethernet:
+ return NymeaConnection::BearerTypeEthernet;
+ case QNetworkInformation::TransportMedium::Cellular:
+ return NymeaConnection::BearerTypeMobileData;
+ case QNetworkInformation::TransportMedium::WiFi:
+ return NymeaConnection::BearerTypeWiFi;
+ case QNetworkInformation::TransportMedium::Bluetooth:
+ // Note: Do not confuse this with the Bluetooth transport... For Qt, this means IP over BT, not RFCOMM as we do it.
+ return NymeaConnection::BearerTypeBluetooth;
+ }
+
+ return NymeaConnection::BearerTypeAll;
+}
+#else
NymeaConnection::BearerType NetworkReachabilityMonitor::qBearerTypeToNymeaBearerType(QNetworkConfiguration::BearerType type)
{
switch (type) {
@@ -130,9 +181,11 @@ NymeaConnection::BearerType NetworkReachabilityMonitor::qBearerTypeToNymeaBearer
case QNetworkConfiguration::Bearer4G:
return NymeaConnection::BearerTypeMobileData;
case QNetworkConfiguration::BearerBluetooth:
- // Note: Do not confuse this with the Bluetooth transport... For Qt, this means IP over BT, not RFCOMM as we do it.
+ // Note: Do not confuse this with the Bluetooth transport... For Qt, this means IP over BT, not RFCOMM as we do it.
return NymeaConnection::BearerTypeNone;
}
- return NymeaConnection::BearerTypeAll;
+ return NymeaConnection::BearerTypeAll;
}
+
+#endif
diff --git a/libnymea-app/connection/networkreachabilitymonitor.h b/libnymea-app/connection/networkreachabilitymonitor.h
index fd227655..e5c0b802 100644
--- a/libnymea-app/connection/networkreachabilitymonitor.h
+++ b/libnymea-app/connection/networkreachabilitymonitor.h
@@ -26,14 +26,19 @@
#define NETWORKREACHABILITYMONITOR_H
#include
-#include
-#include "nymeaconnection.h"
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#include
+#else
+#include
+#endif
#ifdef Q_OS_IOS
#import
#endif
+#include "nymeaconnection.h"
+
class NetworkReachabilityMonitor : public QObject
{
Q_OBJECT
@@ -52,10 +57,16 @@ private slots:
void updateActiveBearers();
private:
- QNetworkConfigurationManager *m_networkConfigManager = nullptr;
NymeaConnection::BearerTypes m_availableBearerTypes = NymeaConnection::BearerTypeNone;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0)
+ QNetworkInformation *m_networkInformation = nullptr;
+ static NymeaConnection::BearerType qBearerTypeToNymeaBearerType(QNetworkInformation::TransportMedium type);
+#else
+ QNetworkConfigurationManager *m_networkConfigManager = nullptr;
static NymeaConnection::BearerType qBearerTypeToNymeaBearerType(QNetworkConfiguration::BearerType type);
+#endif
+
#ifdef Q_OS_IOS
void setupIOS();
diff --git a/libnymea-app/connection/nymeaconnection.cpp b/libnymea-app/connection/nymeaconnection.cpp
index 84f3e53c..969ed0f5 100644
--- a/libnymea-app/connection/nymeaconnection.cpp
+++ b/libnymea-app/connection/nymeaconnection.cpp
@@ -45,18 +45,21 @@ NYMEA_LOGGING_CATEGORY(dcNymeaConnection, "NymeaConnection")
NymeaConnection::NymeaConnection(QObject *parent) : QObject(parent)
{
-// m_networkConfigManager = new QNetworkConfigurationManager(this);
+ m_networkReachabilityMonitor = new NetworkReachabilityMonitor(this);
+ connect(m_networkReachabilityMonitor, &NetworkReachabilityMonitor::availableBearerTypesChanged, this, &NymeaConnection::availableBearerTypesChanged);
+ connect(m_networkReachabilityMonitor, &NetworkReachabilityMonitor::availableBearerTypesUpdated, this, &NymeaConnection::onAvailableBearerTypesUpdated);
-// QObject::connect(m_networkConfigManager, &QNetworkConfigurationManager::configurationAdded, this, [this](const QNetworkConfiguration &config){
-// Q_UNUSED(config)
-// qCDebug(dcNymeaConnection()) << "Network configuration added:" << config.name() << config.bearerTypeName() << config.purpose();
-// updateActiveBearers();
-// });
-// QObject::connect(m_networkConfigManager, &QNetworkConfigurationManager::configurationRemoved, this, [this](const QNetworkConfiguration &config){
-// Q_UNUSED(config)
-// qCDebug(dcNymeaConnection()) << "Network configuration removed:" << config.name() << config.bearerTypeName() << config.purpose();
-// updateActiveBearers();
-// });
+#ifdef Q_OS_IOS
+ connect(m_networkReachabilityMonitor, &NetworkReachabilityMonitor::availableBearerTypesChanged, this, [this](){
+ if (m_currentTransport) {
+ qCInfo(dcNymeaConnection()) << "Available bearer types changed:" << m_networkReachabilityMonitor->availableBearerTypes() << "currently used:" << m_usedBearerType;
+ if (!m_networkReachabilityMonitor->availableBearerTypes().testFlag(m_usedBearerType)) {
+ qCInfo(dcNymeaConnection()) << "Used bearer type" << m_usedBearerType << "isn't available any more. Reconnecting.";
+ m_currentTransport->disconnect();
+ }
+ }
+ });
+#endif
QGuiApplication *app = static_cast(QGuiApplication::instance());
QObject::connect(app, &QGuiApplication::applicationStateChanged, this, [app, this](Qt::ApplicationState state) {
@@ -313,18 +316,18 @@ void NymeaConnection::onConnected()
newTransport->deleteLater();
-// Connection *existingConnection = m_transportCandidates.value(m_currentTransport);
-// Connection *alternativeConnection = m_transportCandidates.value(newTransport);
-// if (alternativeConnection->priority() > existingConnection->priority()) {
-// qDebug() << "New connection has higher priority! Roaming from" << existingConnection->url() << existingConnection->priority() << "to" << alternativeConnection->url() << alternativeConnection->priority();
-// m_transportCandidates.remove(m_currentTransport);
-// m_currentTransport->deleteLater();
-// m_currentTransport = newTransport;
-// } else {
-// qDebug() << "Connection" << alternativeConnection->url() << alternativeConnection->priority() << "has lower priority than existing" << existingConnection->url() << existingConnection->priority();
-// m_transportCandidates.remove(newTransport);
-// newTransport->deleteLater();
-// }
+ // Connection *existingConnection = m_transportCandidates.value(m_currentTransport);
+ // Connection *alternativeConnection = m_transportCandidates.value(newTransport);
+ // if (alternativeConnection->priority() > existingConnection->priority()) {
+ // qDebug() << "New connection has higher priority! Roaming from" << existingConnection->url() << existingConnection->priority() << "to" << alternativeConnection->url() << alternativeConnection->priority();
+ // m_transportCandidates.remove(m_currentTransport);
+ // m_currentTransport->deleteLater();
+ // m_currentTransport = newTransport;
+ // } else {
+ // qDebug() << "Connection" << alternativeConnection->url() << alternativeConnection->priority() << "has lower priority than existing" << existingConnection->url() << existingConnection->priority();
+ // m_transportCandidates.remove(newTransport);
+ // newTransport->deleteLater();
+ // }
return;
}
}
@@ -386,7 +389,7 @@ void NymeaConnection::onDataAvailable(const QByteArray &data)
{
NymeaTransportInterface *t = static_cast(sender());
if (t == m_currentTransport) {
-// qCDebug(dcNymeaConnection()) << "Data available";
+ // qCDebug(dcNymeaConnection()) << "Data available";
emit dataAvailable(data);
} else {
qCDebug(dcNymeaConnection()) << "Received data from a transport that is not the current one:" << t->url();
@@ -395,39 +398,6 @@ void NymeaConnection::onDataAvailable(const QByteArray &data)
void NymeaConnection::onAvailableBearerTypesUpdated()
{
- NymeaConnection::BearerTypes availableBearerTypes;
-// QList configs = m_networkConfigManager->allConfigurations(QNetworkConfiguration::Active);
-// qCDebug(dcNymeaConnection()) << "Network configuations:" << configs.count();
-// foreach (const QNetworkConfiguration &config, configs) {
-// qCDebug(dcNymeaConnection()) << "Active network config:" << config.name() << config.bearerTypeFamily() << config.bearerTypeName();
-
-// // NOTE: iOS doesn't correctly report bearer types. It'll be Unknown all the time. Let's hardcode it to WiFi for that...
-//#if defined(Q_OS_IOS)
- availableBearerTypes.setFlag(NymeaConnection::BearerTypeWiFi);
-//#else
-// availableBearerTypes.setFlag(qBearerTypeToNymeaBearerType(config.bearerType()));
-//#endif
-// }
-// if (availableBearerTypes == NymeaConnection::BearerTypeNone) {
-// // This is just debug info... On some platform bearer management seems a bit broken, so let's get some infos right away...
-// qCDebug(dcNymeaConnection()) << "No active bearer available. Inactive bearers are:";
-// QList configs = m_networkConfigManager->allConfigurations();
-// foreach (const QNetworkConfiguration &config, configs) {
-// qCDebug(dcNymeaConnection()) << "Inactive network config:" << config.name() << config.bearerTypeFamily() << config.bearerTypeName();
-// }
-
-// qCDebug(dcNymeaConnection()) << "Updating network manager";
-// m_networkConfigManager->updateConfigurations();
-// }
-
- if (m_availableBearerTypes != availableBearerTypes) {
- qCInfo(dcNymeaConnection()) << "Available Bearer Types changed to:" << availableBearerTypes;
- m_availableBearerTypes = availableBearerTypes;
- emit availableBearerTypesChanged();
- } else {
- qCDebug(dcNymeaConnection()) << "Available Bearer Types:" << availableBearerTypes;
- }
-
if (!m_currentHost) {
// No host set... Nothing to do...
qCInfo(dcNymeaConnection()) << "No current host... Nothing to do...";
@@ -446,7 +416,7 @@ void NymeaConnection::onAvailableBearerTypesUpdated()
if (!m_currentTransport) {
// There's a host but no connection. Try connecting now...
qCInfo(dcNymeaConnection()) << "There's a host but no connection. Trying to connect now...";
- connectInternal(m_currentHost);
+ //connectInternal(m_currentHost);
}
}
@@ -493,7 +463,7 @@ void NymeaConnection::connectInternal(NymeaHost *host)
connectInternal(loopbackConnection);
} else if (m_networkReachabilityMonitor->availableBearerTypes().testFlag(NymeaConnection::BearerTypeWiFi)
- || m_networkReachabilityMonitor->availableBearerTypes().testFlag(NymeaConnection::BearerTypeEthernet)) {
+ || m_networkReachabilityMonitor->availableBearerTypes().testFlag(NymeaConnection::BearerTypeEthernet)) {
Connection* lanConnection = host->connections()->bestMatch(Connection::BearerTypeLan | Connection::BearerTypeWan);
if (lanConnection) {
qCDebug(dcNymeaConnection()) << "Best candidate LAN/WAN connection:" << lanConnection->url();
@@ -554,44 +524,17 @@ bool NymeaConnection::connectInternal(Connection *connection)
return newTransport->connect(connection->url());
}
-//NymeaConnection::BearerType NymeaConnection::qBearerTypeToNymeaBearerType(QNetworkConfiguration::BearerType type) const
-//{
-// switch (type) {
-// case QNetworkConfiguration::BearerUnknown:
-// // Unable to determine the connection type. Assume it's something we can establish any connection type on
-// return BearerTypeAll;
-// case QNetworkConfiguration::BearerEthernet:
-// return BearerTypeEthernet;
-// case QNetworkConfiguration::BearerWLAN:
-// return BearerTypeWiFi;
-// case QNetworkConfiguration::Bearer2G:
-// case QNetworkConfiguration::BearerCDMA2000:
-// case QNetworkConfiguration::BearerWCDMA:
-// case QNetworkConfiguration::BearerHSPA:
-// case QNetworkConfiguration::BearerWiMAX:
-// case QNetworkConfiguration::BearerEVDO:
-// case QNetworkConfiguration::BearerLTE:
-// case QNetworkConfiguration::Bearer3G:
-// case QNetworkConfiguration::Bearer4G:
-// return BearerTypeMobileData;
-// case QNetworkConfiguration::BearerBluetooth:
-// // Note: Do not confuse this with the Bluetooth transport... For Qt, this means IP over BT, not RFCOMM as we do it.
-// return BearerTypeNone;
-// }
-// return BearerTypeAll;
-//}
-
bool NymeaConnection::isConnectionBearerAvailable(Connection::BearerType connectionBearerType) const
{
switch (connectionBearerType) {
case Connection::BearerTypeLan:
return availableBearerTypes().testFlag(BearerTypeEthernet)
- || availableBearerTypes().testFlag(BearerTypeWiFi);
+ || availableBearerTypes().testFlag(BearerTypeWiFi);
case Connection::BearerTypeWan:
case Connection::BearerTypeCloud:
return availableBearerTypes().testFlag(BearerTypeEthernet)
- || availableBearerTypes().testFlag(BearerTypeWiFi)
- || availableBearerTypes().testFlag(BearerTypeMobileData);
+ || availableBearerTypes().testFlag(BearerTypeWiFi)
+ || availableBearerTypes().testFlag(BearerTypeMobileData);
case Connection::BearerTypeBluetooth:
return availableBearerTypes().testFlag(BearerTypeBluetooth);
case Connection::BearerTypeUnknown:
diff --git a/libnymea-app/connection/nymeaconnection.h b/libnymea-app/connection/nymeaconnection.h
index 9a19269c..43c6d323 100644
--- a/libnymea-app/connection/nymeaconnection.h
+++ b/libnymea-app/connection/nymeaconnection.h
@@ -30,9 +30,14 @@
#include
#include
#include
-//#include
#include
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#include
+#else
+#include
+#endif
+
#include "nymeahost.h"
class NymeaTransportInterface;
@@ -125,8 +130,7 @@ private:
private:
ConnectionStatus m_connectionStatus = ConnectionStatusUnconnected;
-// QNetworkConfigurationManager *m_networkConfigManager = nullptr;
- NymeaConnection::BearerTypes m_availableBearerTypes = BearerTypeNone;
+ NetworkReachabilityMonitor *m_networkReachabilityMonitor = nullptr;
QHash m_transportFactories;
QHash m_transportCandidates;
diff --git a/libnymea-app/connection/nymeahosts.cpp b/libnymea-app/connection/nymeahosts.cpp
index fcf33920..cea61434 100644
--- a/libnymea-app/connection/nymeahosts.cpp
+++ b/libnymea-app/connection/nymeahosts.cpp
@@ -23,9 +23,8 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "nymeahosts.h"
-#include "connection/discovery/nymeadiscovery.h"
#include "nymeahost.h"
-#include "jsonrpc/jsonrpcclient.h"
+
#include
NymeaHosts::NymeaHosts(QObject *parent) :
diff --git a/libnymea-app/connection/nymeahosts.h b/libnymea-app/connection/nymeahosts.h
index 1ebdb15f..6ad61ad6 100644
--- a/libnymea-app/connection/nymeahosts.h
+++ b/libnymea-app/connection/nymeahosts.h
@@ -29,8 +29,11 @@
#include
#include
#include
+
#include "nymeahost.h"
+
class JsonRpcClient;
+class NymeaDiscovery;
class NymeaHosts : public QAbstractListModel
{
@@ -74,49 +77,49 @@ private:
QList m_hosts;
};
-class NymeaHostsFilterModel: public QSortFilterProxyModel
-{
- Q_OBJECT
- Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
- Q_PROPERTY(NymeaDiscovery* discovery READ discovery WRITE setDiscovery NOTIFY discoveryChanged)
- Q_PROPERTY(JsonRpcClient* jsonRpcClient READ jsonRpcClient WRITE setJsonRpcClient NOTIFY jsonRpcClientChanged)
- Q_PROPERTY(bool showUnreachableBearers READ showUnreachableBearers WRITE setShowUnreachableBearers NOTIFY showUnreachableBearersChanged)
- Q_PROPERTY(bool showUnreachableHosts READ showUnreachableHosts WRITE setShowUnreachableHosts NOTIFY showUnreachableHostsChanged)
+// class NymeaHostsFilterModel: public QSortFilterProxyModel
+// {
+// Q_OBJECT
+// Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
+// Q_PROPERTY(NymeaDiscovery* discovery READ discovery WRITE setDiscovery NOTIFY discoveryChanged)
+// Q_PROPERTY(JsonRpcClient* jsonRpcClient READ jsonRpcClient WRITE setJsonRpcClient NOTIFY jsonRpcClientChanged)
+// Q_PROPERTY(bool showUnreachableBearers READ showUnreachableBearers WRITE setShowUnreachableBearers NOTIFY showUnreachableBearersChanged)
+// Q_PROPERTY(bool showUnreachableHosts READ showUnreachableHosts WRITE setShowUnreachableHosts NOTIFY showUnreachableHostsChanged)
-public:
- NymeaHostsFilterModel(QObject *parent = nullptr);
+// public:
+// NymeaHostsFilterModel(QObject *parent = nullptr);
- NymeaDiscovery *discovery() const;
- void setDiscovery(NymeaDiscovery *discovery);
+// NymeaDiscovery *discovery() const;
+// void setDiscovery(NymeaDiscovery *discovery);
- JsonRpcClient *jsonRpcClient() const;
- void setJsonRpcClient(JsonRpcClient* jsonRpcClient);
+// JsonRpcClient *jsonRpcClient() const;
+// void setJsonRpcClient(JsonRpcClient* jsonRpcClient);
- bool showUnreachableBearers() const;
- void setShowUnreachableBearers(bool showUnreachableBearers);
+// bool showUnreachableBearers() const;
+// void setShowUnreachableBearers(bool showUnreachableBearers);
- bool showUnreachableHosts() const;
- void setShowUnreachableHosts(bool showUnreachableHosts);
+// bool showUnreachableHosts() const;
+// void setShowUnreachableHosts(bool showUnreachableHosts);
- Q_INVOKABLE NymeaHost* get(int index) const;
+// Q_INVOKABLE NymeaHost *get(int index) const;
-signals:
- void countChanged();
- void discoveryChanged();
- void jsonRpcClientChanged();
- void showUnreachableBearersChanged();
- void showUnreachableHostsChanged();
+// signals:
+// void countChanged();
+// void discoveryChanged();
+// void jsonRpcClientChanged();
+// void showUnreachableBearersChanged();
+// void showUnreachableHostsChanged();
-protected:
- bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
+// protected:
+// bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
-private:
- NymeaDiscovery *m_nymeaDiscovery = nullptr;
- JsonRpcClient *m_jsonRpcClient = nullptr;
+// private:
+// NymeaDiscovery *m_nymeaDiscovery = nullptr;
+// JsonRpcClient *m_jsonRpcClient = nullptr;
- bool m_showUneachableBearers = false;
- bool m_showUneachableHosts = false;
+// bool m_showUneachableBearers = false;
+// bool m_showUneachableHosts = false;
-};
+// };
#endif // NYMEAHOSTS_H
diff --git a/libnymea-app/connection/tunnelproxytransport.cpp b/libnymea-app/connection/tunnelproxytransport.cpp
index cde06016..3ff9ffa1 100644
--- a/libnymea-app/connection/tunnelproxytransport.cpp
+++ b/libnymea-app/connection/tunnelproxytransport.cpp
@@ -59,7 +59,7 @@ bool TunnelProxyTransport::connect(const QUrl &url)
serverUrl.setScheme(url.scheme() == "tunnels" ? "ssl" : "tcp");
serverUrl.setHost(url.host());
serverUrl.setPort(url.port());
- QUuid serverUuid = QUrlQuery(url).queryItemValue("uuid");
+ QUuid serverUuid(QUrlQuery(url).queryItemValue("uuid"));
return m_remoteConnection->connectServer(serverUrl, serverUuid);
}
diff --git a/libnymea-app/engine.cpp b/libnymea-app/engine.cpp
index 10bb3b6a..9e39d24c 100644
--- a/libnymea-app/engine.cpp
+++ b/libnymea-app/engine.cpp
@@ -48,21 +48,6 @@ Engine::Engine(QObject *parent) :
connect(m_thingManager, &ThingManager::fetchingDataChanged, this, &Engine::onThingManagerFetchingChanged);
- connect(m_jsonRpcClient, &JsonRpcClient::connectedChanged, this, [this]() {
- qDebug() << "JSONRpc connected changed:" << m_jsonRpcClient->connected() << "AWS status:" << AWSClient::instance()->awsDevices()->rowCount();
- if (m_jsonRpcClient->connected() && m_jsonRpcClient->cloudConnectionState() == JsonRpcClient::CloudConnectionStateConnected) {
- if (AWSClient::instance()->awsDevices()->getDevice(m_jsonRpcClient->serverUuid().toString()) == nullptr) {
- m_jsonRpcClient->setupRemoteAccess(AWSClient::instance()->idToken(), AWSClient::instance()->userId());
- }
- }
- });
- connect(m_jsonRpcClient, &JsonRpcClient::cloudConnectionStateChanged, this, [this](){
- if (m_jsonRpcClient->connected() && m_jsonRpcClient->cloudConnectionState() == JsonRpcClient::CloudConnectionStateConnected) {
- if (AWSClient::instance()->awsDevices()->getDevice(m_jsonRpcClient->serverUuid().toString()) == nullptr) {
- m_jsonRpcClient->setupRemoteAccess(AWSClient::instance()->idToken(), AWSClient::instance()->userId());
- }
- }
- });
}
ThingManager *Engine::thingManager() const
@@ -105,22 +90,6 @@ SystemController *Engine::systemController() const
return m_systemController;
}
-void Engine::deployCertificate()
-{
- if (!m_jsonRpcClient->connected()) {
- qWarning() << "JSONRPC not connected. Cannot deploy certificate";
- return;
- }
- if (!AWSClient::instance()->isLoggedIn()) {
- qWarning() << "Not logged in at AWS. Cannot deploy certificate";
- return;
- }
- AWSClient::instance()->fetchCertificate(m_jsonRpcClient->serverUuid().toString(), [this](const QByteArray &rootCA, const QByteArray &certificate, const QByteArray &publicKey, const QByteArray &privateKey, const QString &endpoint){
- qDebug() << "Certificate received" << certificate << publicKey << privateKey;
- m_jsonRpcClient->deployCertificate(rootCA, certificate, publicKey, privateKey, endpoint);
- });
-}
-
void Engine::onConnectedChanged()
{
qDebug() << "Engine: connected changed:" << m_jsonRpcClient->connected();
diff --git a/libnymea-app/interfacesmodel.cpp b/libnymea-app/interfacesmodel.cpp
index 8e1e9880..e91a5067 100644
--- a/libnymea-app/interfacesmodel.cpp
+++ b/libnymea-app/interfacesmodel.cpp
@@ -154,10 +154,10 @@ void InterfacesModel::syncInterfaces()
}
}
- qWarning() << "syncing for interfaces:" << m_shownInterfaces;
+ // qWarning() << "syncing for interfaces:" << m_shownInterfaces;
QStringList interfacesInSource;
foreach (ThingClass *dc, thingClasses) {
-// qWarning() << "thing" <name() << "has interfaces" << dc->interfaces();
+ // qWarning() << "thing" <name() << "has interfaces" << dc->interfaces();
bool isInShownIfaces = false;
foreach (const QString &interface, dc->interfaces()) {
@@ -168,7 +168,7 @@ void InterfacesModel::syncInterfaces()
if (!interfacesInSource.contains(interface)) {
interfacesInSource.append(interface);
}
-// qWarning() << "yes" << interface;
+ // qWarning() << "yes" << interface;
isInShownIfaces = true;
}
if (m_showUncategorized && !isInShownIfaces && !interfacesInSource.contains("uncategorized")) {
diff --git a/libnymea-app/jsonrpc/jsonrpcclient.cpp b/libnymea-app/jsonrpc/jsonrpcclient.cpp
index 9dcbf913..29c317be 100644
--- a/libnymea-app/jsonrpc/jsonrpcclient.cpp
+++ b/libnymea-app/jsonrpc/jsonrpcclient.cpp
@@ -307,7 +307,7 @@ QString JsonRpcClient::jsonRpcVersion() const
QUuid JsonRpcClient::serverUuid() const
{
- return m_connection && m_connection->currentHost() ? m_connection->currentHost()->uuid().toString() : "";
+ return m_connection && m_connection->currentHost() ? m_connection->currentHost()->uuid() : QUuid();
}
QString JsonRpcClient::serverName() const
diff --git a/libnymea-app/libnymea-app.pri b/libnymea-app/libnymea-app.pri
index 72ff5352..693acf2c 100644
--- a/libnymea-app/libnymea-app.pri
+++ b/libnymea-app/libnymea-app.pri
@@ -11,7 +11,6 @@
include(../nymea-remoteproxy/libnymea-remoteproxyclient/libnymea-remoteproxyclient.pri)
-
QT -= gui
QT += network websockets bluetooth charts quick
diff --git a/libnymea-app/models/boolseriesadapter.cpp b/libnymea-app/models/boolseriesadapter.cpp
index d12f9164..37b70cdb 100644
--- a/libnymea-app/models/boolseriesadapter.cpp
+++ b/libnymea-app/models/boolseriesadapter.cpp
@@ -46,12 +46,12 @@ void BoolSeriesAdapter::setLogsModel(LogsModel *logsModel)
}
-QtCharts::QXYSeries *BoolSeriesAdapter::xySeries() const
+QXYSeries *BoolSeriesAdapter::xySeries() const
{
return m_series;
}
-void BoolSeriesAdapter::setXySeries(QtCharts::QXYSeries *series)
+void BoolSeriesAdapter::setXySeries(QXYSeries *series)
{
if (m_series != series) {
m_series = series;
diff --git a/libnymea-app/models/boolseriesadapter.h b/libnymea-app/models/boolseriesadapter.h
index 1ee5720d..a76e9708 100644
--- a/libnymea-app/models/boolseriesadapter.h
+++ b/libnymea-app/models/boolseriesadapter.h
@@ -34,7 +34,7 @@ class BoolSeriesAdapter : public QObject
{
Q_OBJECT
Q_PROPERTY(LogsModel* logsModel READ logsModel WRITE setLogsModel NOTIFY logsModelChanged)
- Q_PROPERTY(QtCharts::QXYSeries* xySeries READ xySeries WRITE setXySeries NOTIFY xySeriesChanged)
+ Q_PROPERTY(QXYSeries* xySeries READ xySeries WRITE setXySeries NOTIFY xySeriesChanged)
Q_PROPERTY(bool inverted READ inverted WRITE setInverted NOTIFY invertedChanged)
@@ -44,8 +44,8 @@ public:
LogsModel* logsModel() const;
void setLogsModel(LogsModel *logsModel);
- QtCharts::QXYSeries* xySeries() const;
- void setXySeries(QtCharts::QXYSeries *series);
+ QXYSeries* xySeries() const;
+ void setXySeries(QXYSeries *series);
bool inverted() const;
void setInverted(bool inverted);
@@ -65,7 +65,7 @@ private:
private:
LogsModel* m_model = nullptr;
- QtCharts::QXYSeries* m_series = nullptr;
+ QXYSeries* m_series = nullptr;
bool m_inverted = false;
};
diff --git a/libnymea-app/models/newlogsmodel.cpp b/libnymea-app/models/newlogsmodel.cpp
index 8171544c..cb0197c0 100644
--- a/libnymea-app/models/newlogsmodel.cpp
+++ b/libnymea-app/models/newlogsmodel.cpp
@@ -460,7 +460,7 @@ void NewLogsModel::logsReply(int commandId, const QVariantMap &data)
} else {
if (!entries.isEmpty()) {
beginInsertRows(QModelIndex(), m_list.count(), m_list.count() + entries.count() - 1);
- qSort(entries.begin(), entries.end(), [](NewLogEntry *left, NewLogEntry *right){
+ std::sort(entries.begin(), entries.end(), [](NewLogEntry *left, NewLogEntry *right){
return left->timestamp() > right->timestamp();
});
m_list.append(entries);
diff --git a/libnymea-app/models/newlogsmodel.h b/libnymea-app/models/newlogsmodel.h
index cb815ac1..31ac72ab 100644
--- a/libnymea-app/models/newlogsmodel.h
+++ b/libnymea-app/models/newlogsmodel.h
@@ -25,11 +25,12 @@
#ifndef NEWLOGSMODEL_H
#define NEWLOGSMODEL_H
-#include
+#include
#include
-#include "newlogentry.h"
+#include
-class Engine;
+#include "engine.h"
+#include "newlogentry.h"
class NewLogsModel : public QAbstractListModel, public QQmlParserStatus
{
diff --git a/libnymea-app/models/nymeahostsfiltermodel.h b/libnymea-app/models/nymeahostsfiltermodel.h
index 18f800b4..3ee0feb6 100644
--- a/libnymea-app/models/nymeahostsfiltermodel.h
+++ b/libnymea-app/models/nymeahostsfiltermodel.h
@@ -3,8 +3,8 @@
#include
-#include "connection/discovery/nymeadiscovery.h"
#include "jsonrpc/jsonrpcclient.h"
+#include "connection/discovery/nymeadiscovery.h"
class NymeaHostsFilterModel: public QSortFilterProxyModel
{
diff --git a/libnymea-app/pluginconfigmanager.cpp b/libnymea-app/pluginconfigmanager.cpp
index b749be3c..49277446 100644
--- a/libnymea-app/pluginconfigmanager.cpp
+++ b/libnymea-app/pluginconfigmanager.cpp
@@ -85,7 +85,7 @@ void PluginConfigManager::getPluginConfigResponse(int /*commandId*/, const QVari
QVariantList pluginParams = params.value("configuration").toList();
foreach (const QVariant ¶mVariant, pluginParams) {
Param* param = new Param();
- param->setParamTypeId(paramVariant.toMap().value("paramTypeId").toString());
+ param->setParamTypeId(paramVariant.toMap().value("paramTypeId").toUuid());
param->setValue(paramVariant.toMap().value("value"));
m_params->addParam(param);
}
diff --git a/libnymea-app/scripting/codecompletion.cpp b/libnymea-app/scripting/codecompletion.cpp
index 08b1330d..190a0d45 100644
--- a/libnymea-app/scripting/codecompletion.cpp
+++ b/libnymea-app/scripting/codecompletion.cpp
@@ -237,16 +237,16 @@ void CodeCompletion::update()
qDebug() << "stateName block info" << info.name << info.properties;
QString thingId;
Interfaces ifaces;
- StateTypes *stateTypes = nullptr;
+ //StateTypes *stateTypes = nullptr;
if (info.properties.contains("thingId")) {
thingId = info.properties.value("thingId");
qDebug() << "selected thingId" << thingId;
- Thing *thing = m_engine->thingManager()->things()->getThing(thingId);
+ Thing *thing = m_engine->thingManager()->things()->getThing(QUuid(thingId));
if (!thing) {
return;
}
- stateTypes = thing->thingClass()->stateTypes();
+ //stateTypes = thing->thingClass()->stateTypes();
} else if (info.properties.contains("interfaceName")) {
QString interfaceName = info.properties.value("interfaceName");
@@ -254,7 +254,7 @@ void CodeCompletion::update()
if (!iface) {
return;
}
- stateTypes = iface->stateTypes();
+ //stateTypes = iface->stateTypes();
} else {
return;
}
diff --git a/libnymea-app/serverdebug/serverdebugmanager.cpp b/libnymea-app/serverdebug/serverdebugmanager.cpp
index 882e6fe1..be695c45 100644
--- a/libnymea-app/serverdebug/serverdebugmanager.cpp
+++ b/libnymea-app/serverdebug/serverdebugmanager.cpp
@@ -24,9 +24,7 @@
#include "serverdebugmanager.h"
-#include "engine.h"
#include "logging.h"
-#include "serverloggingcategories.h"
NYMEA_LOGGING_CATEGORY(dcServerDebug, "ServerDebug")
diff --git a/libnymea-app/serverdebug/serverdebugmanager.h b/libnymea-app/serverdebug/serverdebugmanager.h
index 2603cf08..573c126b 100644
--- a/libnymea-app/serverdebug/serverdebugmanager.h
+++ b/libnymea-app/serverdebug/serverdebugmanager.h
@@ -27,17 +27,16 @@
#include
-#include "serverloggingcategory.h"
+#include "engine.h"
+#include "serverloggingcategories.h"
-class Engine;
class JsonRpcClient;
-class ServerLoggingCategories;
class ServerDebugManager : public QObject
{
Q_OBJECT
- Q_PROPERTY(Engine* engine READ engine WRITE setEngine NOTIFY engineChanged)
- Q_PROPERTY(bool fetchingData READ fetchingData NOTIFY fetchingDataChanged)
+ Q_PROPERTY(Engine* engine READ engine WRITE setEngine NOTIFY engineChanged FINAL)
+ Q_PROPERTY(bool fetchingData READ fetchingData NOTIFY fetchingDataChanged FINAL)
Q_PROPERTY(ServerLoggingCategories *categories READ categories CONSTANT FINAL)
public:
diff --git a/libnymea-app/zigbee/zigbeenode.cpp b/libnymea-app/zigbee/zigbeenode.cpp
index 06ce0a29..a007bc62 100644
--- a/libnymea-app/zigbee/zigbeenode.cpp
+++ b/libnymea-app/zigbee/zigbeenode.cpp
@@ -25,6 +25,7 @@
#include "zigbeenode.h"
#include
+#include
ZigbeeNode::ZigbeeNode(const QUuid &networkUuid, const QString &ieeeAddress, QObject *parent) :
QObject(parent),
@@ -666,7 +667,7 @@ QString ZigbeeCluster::clusterName() const
QMetaEnum clusterEnum = QMetaEnum::fromType();
QString name = clusterEnum.valueToKey(m_clusterId);
name.remove("ZigbeeClusterId");
- QRegExp re1 = QRegExp("([A-Z])([a-z]*)");
+ QRegularExpression re1 = QRegularExpression("([A-Z])([a-z]*)");
name.replace(re1, ";\\1\\2");
QStringList parts = name.split(";");
QString clusterName = parts.join(" ").trimmed();
diff --git a/libnymea-app/zwave/zwavemanager.cpp b/libnymea-app/zwave/zwavemanager.cpp
index 21bf6359..b72f9d98 100644
--- a/libnymea-app/zwave/zwavemanager.cpp
+++ b/libnymea-app/zwave/zwavemanager.cpp
@@ -27,12 +27,9 @@
#include
#include
-#include "types/serialports.h"
#include "types/serialport.h"
-#include "zwavenetwork.h"
-#include "zwavenode.h"
-#include "engine.h"
+
#include "logging.h"
NYMEA_LOGGING_CATEGORY(dcZWave, "ZWave")
diff --git a/libnymea-app/zwave/zwavemanager.h b/libnymea-app/zwave/zwavemanager.h
index b15d2139..18ad8efa 100644
--- a/libnymea-app/zwave/zwavemanager.h
+++ b/libnymea-app/zwave/zwavemanager.h
@@ -28,22 +28,21 @@
#include
#include
-class Engine;
+#include "engine.h"
+#include "zwavenetwork.h"
+#include "types/serialports.h"
+
class JsonRpcClient;
-class SerialPorts;
-class ZWaveNetwork;
-class ZWaveNetworks;
-class ZWaveNode;
class ZWaveManager : public QObject
{
Q_OBJECT
- Q_PROPERTY(Engine* engine READ engine WRITE setEngine NOTIFY engineChanged)
- Q_PROPERTY(bool fetchingData READ fetchingData NOTIFY fetchingDataChanged)
- Q_PROPERTY(bool zwaveAvailable READ zwaveAvailable NOTIFY zwaveAvailableChanged)
+ Q_PROPERTY(Engine *engine READ engine WRITE setEngine NOTIFY engineChanged FINAL)
+ Q_PROPERTY(bool fetchingData READ fetchingData NOTIFY fetchingDataChanged FINAL)
+ Q_PROPERTY(bool zwaveAvailable READ zwaveAvailable NOTIFY zwaveAvailableChanged FINAL)
- Q_PROPERTY(SerialPorts *serialPorts READ serialPorts CONSTANT)
- Q_PROPERTY(ZWaveNetworks *networks READ networks CONSTANT)
+ Q_PROPERTY(SerialPorts *serialPorts READ serialPorts CONSTANT FINAL)
+ Q_PROPERTY(ZWaveNetworks *networks READ networks CONSTANT FINAL)
public:
enum ZWaveError {
@@ -111,7 +110,7 @@ private:
Q_INVOKABLE void notificationReceived(const QVariantMap &data);
private:
- Engine* m_engine = nullptr;
+ Engine *m_engine = nullptr;
bool m_fetchingData = false;
bool m_zwaveAvailable = false;
SerialPorts *m_serialPorts = nullptr;
diff --git a/libnymea-app/zwave/zwavenetwork.h b/libnymea-app/zwave/zwavenetwork.h
index 90a30925..633b8a66 100644
--- a/libnymea-app/zwave/zwavenetwork.h
+++ b/libnymea-app/zwave/zwavenetwork.h
@@ -29,23 +29,22 @@
#include
#include
-class ZWaveNode;
-class ZWaveNodes;
+#include "zwavenode.h"
class ZWaveNetwork : public QObject
{
Q_OBJECT
- Q_PROPERTY(QUuid networkUuid READ networkUuid CONSTANT)
- Q_PROPERTY(QString serialPort READ serialPort CONSTANT)
- Q_PROPERTY(quint32 homeId READ homeId NOTIFY homeIdChanged)
- Q_PROPERTY(bool isZWavePlus READ isZWavePlus NOTIFY isZWavePlusChanged)
- Q_PROPERTY(bool isPrimaryController READ isPrimaryController NOTIFY isPrimaryControllerChanged)
- Q_PROPERTY(bool isStaticUpdateController READ isStaticUpdateController NOTIFY isStaticUpdateControllerChanged)
- Q_PROPERTY(bool isBridgeController READ isBridgeController NOTIFY isBridgeControllerChanged)
- Q_PROPERTY(bool waitingForNodeAddition READ waitingForNodeAddition NOTIFY waitingForNodeAdditionChanged)
- Q_PROPERTY(bool waitingForNodeRemoval READ waitingForNodeRemoval NOTIFY waitingForNodeRemovalChanged)
- Q_PROPERTY(ZWaveNetworkState networkState READ networkState NOTIFY networkStateChanged)
- Q_PROPERTY(ZWaveNodes* nodes READ nodes CONSTANT)
+ Q_PROPERTY(QUuid networkUuid READ networkUuid CONSTANT FINAL)
+ Q_PROPERTY(QString serialPort READ serialPort CONSTANT FINAL)
+ Q_PROPERTY(quint32 homeId READ homeId NOTIFY homeIdChanged FINAL)
+ Q_PROPERTY(bool isZWavePlus READ isZWavePlus NOTIFY isZWavePlusChanged FINAL)
+ Q_PROPERTY(bool isPrimaryController READ isPrimaryController NOTIFY isPrimaryControllerChanged FINAL)
+ Q_PROPERTY(bool isStaticUpdateController READ isStaticUpdateController NOTIFY isStaticUpdateControllerChanged FINAL)
+ Q_PROPERTY(bool isBridgeController READ isBridgeController NOTIFY isBridgeControllerChanged FINAL)
+ Q_PROPERTY(bool waitingForNodeAddition READ waitingForNodeAddition NOTIFY waitingForNodeAdditionChanged FINAL)
+ Q_PROPERTY(bool waitingForNodeRemoval READ waitingForNodeRemoval NOTIFY waitingForNodeRemovalChanged FINAL)
+ Q_PROPERTY(ZWaveNetworkState networkState READ networkState NOTIFY networkStateChanged FINAL)
+ Q_PROPERTY(ZWaveNodes* nodes READ nodes CONSTANT FINAL)
public:
enum ZWaveNetworkState {
@@ -55,6 +54,7 @@ public:
ZWaveNetworkStateError
};
Q_ENUM(ZWaveNetworkState)
+
explicit ZWaveNetwork(const QUuid &networkUuid, const QString &serialPort, QObject *parent = nullptr);
QUuid networkUuid() const;
@@ -119,6 +119,7 @@ class ZWaveNetworks: public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
+
public:
enum Roles {
RoleUuid,
@@ -141,14 +142,14 @@ public:
void addNetwork(ZWaveNetwork *network);
void removeNetwork(const QUuid &networkUuid);
- Q_INVOKABLE ZWaveNetwork* get(int index) const;
- Q_INVOKABLE ZWaveNetwork* getNetwork(const QUuid &networkUuid);
+ Q_INVOKABLE ZWaveNetwork *get(int index) const;
+ Q_INVOKABLE ZWaveNetwork *getNetwork(const QUuid &networkUuid);
signals:
void countChanged();
private:
- QList m_list;
+ QList m_list;
};
#endif // ZWAVENETWORK_H
diff --git a/libnymea-app/zwave/zwavenode.cpp b/libnymea-app/zwave/zwavenode.cpp
index d6b301f3..abff9941 100644
--- a/libnymea-app/zwave/zwavenode.cpp
+++ b/libnymea-app/zwave/zwavenode.cpp
@@ -24,6 +24,7 @@
#include "zwavenode.h"
#include
+#include
ZWaveNode::ZWaveNode(const QUuid &networkUuid, quint8 id, QObject *parent):
QObject{parent},
@@ -59,7 +60,7 @@ void ZWaveNode::setNodeType(ZWaveNodeType nodeType)
QString ZWaveNode::nodeTypeString() const
{
QMetaEnum metaEnum = QMetaEnum::fromType();
- return QString(metaEnum.valueToKey(m_nodeType)).remove(QRegExp("^ZWaveNodeType"));
+ return QString(metaEnum.valueToKey(m_nodeType)).remove(QRegularExpression("^ZWaveNodeType"));
}
ZWaveNode::ZWaveNodeRole ZWaveNode::role() const
@@ -78,7 +79,7 @@ void ZWaveNode::setRole(ZWaveNodeRole role)
QString ZWaveNode::roleString() const
{
QMetaEnum metaEnum = QMetaEnum::fromType();
- return QString(metaEnum.valueToKey(m_role)).remove(QRegExp("^ZWaveNodeRole"));
+ return QString(metaEnum.valueToKey(m_role)).remove(QRegularExpression("^ZWaveNodeRole"));
}
ZWaveNode::ZWaveDeviceType ZWaveNode::deviceType() const
@@ -94,7 +95,7 @@ void ZWaveNode::setDeviceType(ZWaveDeviceType deviceType)
QString ZWaveNode::deviceTypeString() const
{
QMetaEnum metaEnum = QMetaEnum::fromType();
- return QString(metaEnum.valueToKey(m_deviceType)).remove(QRegExp("^ZWaveDeviceType"));
+ return QString(metaEnum.valueToKey(m_deviceType)).remove(QRegularExpression("^ZWaveDeviceType"));
}
quint16 ZWaveNode::manufacturerId() const
diff --git a/nymea-app.pro b/nymea-app.pro
index 65810c03..e1e53824 100644
--- a/nymea-app.pro
+++ b/nymea-app.pro
@@ -81,9 +81,6 @@ linux:!android: {
android: {
message("Android package source dir $${ANDROID_PACKAGE_SOURCE_DIR}")
- SUBDIRS += androidservice
- androidservice.depends = libnymea-app
-
NYMEA_APP_ROOT_PROPERTY="nymeaAppRoot=$${top_srcdir}"
no-firebase: FIREBASE_PROPERTY="useFirebase=false"
else: FIREBASE_PROPERTY="useFirebase=true"
diff --git a/nymea-app/CMakeLists.txt b/nymea-app/CMakeLists.txt
new file mode 100644
index 00000000..f844da89
--- /dev/null
+++ b/nymea-app/CMakeLists.txt
@@ -0,0 +1,153 @@
+set(NYMEA_APP_SOURCES
+ main.cpp
+ configuredhostsmodel.cpp
+ dashboard/dashboarditem.cpp
+ dashboard/dashboardmodel.cpp
+ mouseobserver.cpp
+ nfchelper.cpp
+ nfcthingactionwriter.cpp
+ platformintegration/platformpermissions.cpp
+ stylecontroller.cpp
+ pushnotifications.cpp
+ platformhelper.cpp
+ platformintegration/generic/screenhelper.cpp
+ utils/privacypolicyhelper.cpp
+ utils/qhashqml.cpp
+)
+
+set(NYMEA_APP_HEADERS
+ configuredhostsmodel.h
+ dashboard/dashboarditem.h
+ dashboard/dashboardmodel.h
+ mouseobserver.h
+ nfchelper.h
+ nfcthingactionwriter.h
+ platformintegration/generic/screenhelper.h
+ platformintegration/platformpermissions.h
+ stylecontroller.h
+ pushnotifications.h
+ platformhelper.h
+ ruletemplates/messages.h
+ utils/privacypolicyhelper.h
+ utils/qhashqml.h
+)
+
+if(UNIX AND NOT APPLE AND NOT ANDROID)
+ list(APPEND NYMEA_APP_SOURCES
+ platformintegration/generic/platformhelpergeneric.cpp
+ )
+ list(APPEND NYMEA_APP_HEADERS
+ platformintegration/generic/platformhelpergeneric.h
+ )
+endif()
+
+if(ANDROID)
+ list(APPEND NYMEA_APP_SOURCES
+ platformintegration/android/platformhelperandroid.cpp
+ platformintegration/android/platformpermissionsandroid.cpp
+ )
+ list(APPEND NYMEA_APP_HEADERS
+ platformintegration/android/platformhelperandroid.h
+ platformintegration/android/platformpermissionsandroid.h
+ )
+endif()
+
+set(NYMEA_APP_RESOURCES
+ ${CMAKE_CURRENT_SOURCE_DIR}/resources.qrc
+ ${CMAKE_CURRENT_SOURCE_DIR}/ruletemplates.qrc
+ ${CMAKE_CURRENT_SOURCE_DIR}/images.qrc
+)
+
+if(NYMEA_OVERLAY_PATH)
+ message(WARNING "Overlay support is not implemented in the CMake build yet; NYMEA_OVERLAY_PATH will be ignored.")
+else()
+ list(APPEND NYMEA_APP_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/styles.qrc)
+endif()
+
+if(NYMEA_USE_MATERIAL_ICONS)
+ list(APPEND NYMEA_APP_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/ui/icons/material/icons.qrc)
+else()
+ list(APPEND NYMEA_APP_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/ui/icons/suru/icons.qrc)
+endif()
+
+qt_add_executable(nymea-app
+ MANUAL_FINALIZATION
+ ${NYMEA_APP_SOURCES}
+ ${NYMEA_APP_HEADERS}
+ ${NYMEA_APP_RESOURCES}
+)
+
+target_include_directories(nymea-app
+ PRIVATE
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_SOURCE_DIR}/libnymea-app
+ ${CMAKE_SOURCE_DIR}/experiences/airconditioning
+ ${CMAKE_BINARY_DIR}
+)
+
+target_link_libraries(nymea-app
+ PRIVATE
+ nymea-app-core
+ nymea-app-airconditioning
+ Qt6::Gui
+ Qt6::Network
+ Qt6::Qml
+ Qt6::Quick
+ Qt6::QuickControls2
+ Qt6::Svg
+ Qt6::WebSockets
+ Qt6::Bluetooth
+ Qt6::Charts
+ Qt6::Nfc
+)
+
+if(TARGET Qt6::WebView)
+ target_link_libraries(nymea-app PRIVATE Qt6::WebView)
+ target_compile_definitions(nymea-app PRIVATE HAVE_WEBVIEW)
+endif()
+
+find_package(Qt6 COMPONENTS GuiPrivate QUIET)
+if(TARGET Qt6::GuiPrivate)
+ target_link_libraries(nymea-app PRIVATE Qt6::GuiPrivate)
+else()
+ message(WARNING "Qt6::GuiPrivate not found; continuing without private GUI APIs.")
+endif()
+
+if(UNIX AND NOT APPLE AND NYMEA_ENABLE_ZEROCONF)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(AVAHI REQUIRED IMPORTED_TARGET avahi-client avahi-common)
+ target_link_libraries(nymea-app PRIVATE PkgConfig::AVAHI)
+endif()
+
+if(WIN32)
+ target_compile_definitions(nymea-app PRIVATE NOMINMAX)
+endif()
+
+if(ANDROID)
+ if(DEFINED NYMEA_ANDROID_PACKAGE_SOURCE_DIR)
+ set_property(TARGET nymea-app PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR "${NYMEA_ANDROID_PACKAGE_SOURCE_DIR}")
+ endif()
+
+ set_property(TARGET nymea-app PROPERTY QT_ANDROID_MIN_SDK_VERSION 23)
+ set_property(TARGET nymea-app PROPERTY QT_ANDROID_TARGET_SDK_VERSION 35)
+
+ if(NYMEA_ENABLE_FIREBASE)
+ target_compile_definitions(nymea-app PRIVATE WITH_FIREBASE)
+ target_include_directories(nymea-app PRIVATE ${CMAKE_SOURCE_DIR}/3rdParty/android/firebase_cpp_sdk/include)
+
+ if(CMAKE_ANDROID_ARCH_ABI)
+ set(_firebase_lib_dir "${CMAKE_SOURCE_DIR}/3rdParty/android/firebase_cpp_sdk/libs/android/${CMAKE_ANDROID_ARCH_ABI}/c++")
+ target_link_libraries(nymea-app PRIVATE
+ "${_firebase_lib_dir}/libfirebase_messaging.a"
+ "${_firebase_lib_dir}/libfirebase_app.a"
+ )
+ else()
+ message(WARNING "CMAKE_ANDROID_ARCH_ABI is not defined; Firebase static libraries could not be linked.")
+ endif()
+ else()
+ message(STATUS "Firebase support disabled via NYMEA_ENABLE_FIREBASE option.")
+ endif()
+endif()
+
+qt_finalize_executable(nymea-app)
+
diff --git a/nymea-app/configuredhostsmodel.cpp b/nymea-app/configuredhostsmodel.cpp
index c4a08dcf..843e5be6 100644
--- a/nymea-app/configuredhostsmodel.cpp
+++ b/nymea-app/configuredhostsmodel.cpp
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
#include
Q_DECLARE_LOGGING_CATEGORY(dcApplication)
@@ -154,8 +155,8 @@ void ConfiguredHostsModel::removeHost(int index)
settings.remove("");
settings.endGroup();
- QDir dir(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/sslcerts/");
- QFile certFile(dir.absoluteFilePath(hostUuidString.remove(QRegExp("[{}]")) + ".pem"));
+ QDir dir(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/sslcerts/");
+ QFile certFile(dir.absoluteFilePath(hostUuidString.remove(QRegularExpression("[{}]")) + ".pem"));
if (certFile.exists()) {
if (!certFile.remove()) {
qCWarning(dcApplication()) << "Failed to remove certificate file" << certFile.fileName() << certFile.errorString();
diff --git a/nymea-app/main.cpp b/nymea-app/main.cpp
index 6fc679c7..bd0ff131 100644
--- a/nymea-app/main.cpp
+++ b/nymea-app/main.cpp
@@ -39,6 +39,10 @@
#include
#include
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+#include
+#endif
+
#include "libnymea-app-core.h"
#include "libnymea-app-airconditioning.h"
@@ -53,8 +57,9 @@
#include "dashboard/dashboarditem.h"
#include "mouseobserver.h"
#include "configuredhostsmodel.h"
-#include "../config.h"
+#include "utils/qhashqml.h"
#include "utils/privacypolicyhelper.h"
+#include "config.h"
#include "logging.h"
@@ -71,10 +76,7 @@ int main(int argc, char *argv[])
#ifdef Q_OS_OSX
qputenv("QT_WEBVIEW_PLUGIN", "native");
#endif
-
- QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication application(argc, argv);
-
application.setApplicationName(APPLICATION_NAME);
application.setOrganizationName(ORGANISATION_NAME);
@@ -114,8 +116,11 @@ int main(int argc, char *argv[])
}
}
- QTranslator qtTranslator;
- qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+ QTranslator qtTranslator;
+ if (!qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::path(QLibraryInfo::TranslationsPath))) {
+ qCWarning(dcApplication()) << "Unable to load translations from" << QLibraryInfo::path(QLibraryInfo::TranslationsPath);
+ }
+
application.installTranslator(&qtTranslator);
QStringList loadedTranslations;
@@ -169,6 +174,21 @@ int main(int argc, char *argv[])
QFontDatabase::addApplicationFont(fi.absoluteFilePath());
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ // Note: QNetworkInformation should always first be loaded in the same thread as the QCoreApplication object
+ qCInfo(dcApplication()) << "Available network information backends" << QNetworkInformation::instance()->availableBackends();
+
+ if (QNetworkInformation::instance()->loadDefaultBackend()) {
+ qCInfo(dcApplication()) << "Loaded default network information backend" << QNetworkInformation::instance()->backendName();
+ qCInfo(dcApplication()) << "Network infromation supported features:" << QNetworkInformation::instance()->supportedFeatures();
+ qCInfo(dcApplication()) << "Network reachability:" << QNetworkInformation::instance()->reachability();
+ qCInfo(dcApplication()) << "Network trasport medium changed:" << QNetworkInformation::instance()->transportMedium();
+
+ } else {
+ qCWarning(dcApplication()) << "Unable to load default network information backend." << QNetworkInformation::instance()->availableBackends();
+ }
+#endif
+
qmlRegisterSingletonType(QUrl("qrc:///styles/" + styleController.currentStyle() + "/Style.qml"), "Nymea", 1, 0, "Style" );
qmlRegisterType(QUrl("qrc:///styles/" + styleController.currentStyle() + "/Background.qml"), "Nymea", 1, 0, "Background" );
qmlRegisterSingletonType(QUrl("qrc:///ui/Configuration.qml"), "Nymea", 1, 0, "Configuration");
diff --git a/nymea-app/nymea-app.pro b/nymea-app/nymea-app.pro
index b4c70af2..ffb97878 100644
--- a/nymea-app/nymea-app.pro
+++ b/nymea-app/nymea-app.pro
@@ -15,8 +15,7 @@ qtHaveModule(webview) {
INCLUDEPATH += $$top_srcdir/libnymea-app \
$$top_srcdir/experiences/airconditioning
-LIBS += -L$$top_builddir/libnymea-app/ -lnymea-app \
- -L$$top_builddir/experiences/airconditioning -lnymea-app-airconditioning
+linux:!android: LIBS += -L$$top_builddir/libnymea-app/ -lnymea-app -L$$top_builddir/experiences/airconditioning -lnymea-app-airconditioning
win32:Debug:LIBS += -L$$top_builddir/libnymea-app/debug \
-L$$top_builddir/experiences/airconditioning/debug
@@ -92,19 +91,17 @@ android {
ANDROID_MIN_SDK_VERSION = 21
ANDROID_TARGET_SDK_VERSION = 35
- QT += androidextras
HEADERS += platformintegration/android/platformhelperandroid.h \
platformintegration/android/platformpermissionsandroid.h \
SOURCES += platformintegration/android/platformhelperandroid.cpp \
platformintegration/android/platformpermissionsandroid.cpp \
- # https://bugreports.qt.io/browse/QTBUG-83165
CORE_LIBS += -L$${top_builddir}/libnymea-app/$${ANDROID_TARGET_ARCH}
AIRCONDITIONING_LIBS += -L$${top_builddir}/experiences/airconditioning/$${ANDROID_TARGET_ARCH}
- LIBS += $${CORE_LIBS} $${AIRCONDITIONING_LIBS}
- message("CORE_LIBS: $${CORE_LIBS}")
+ LIBS += $${CORE_LIBS} -lnymea-app_$${ANDROID_TARGET_ARCH} \
+ $${AIRCONDITIONING_LIBS} -lnymea-app-airconditioning_$${ANDROID_TARGET_ARCH}
versioninfo.files = ../version.txt
versioninfo.path = /
@@ -113,9 +110,9 @@ android {
DISTFILES += \
$$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml \
$$ANDROID_PACKAGE_SOURCE_DIR/google-services.json \
- $$ANDROID_PACKAGE_SOURCE_DIR/gradle/wrapper/gradle-wrapper.jar \
$$ANDROID_PACKAGE_SOURCE_DIR/gradlew \
$$ANDROID_PACKAGE_SOURCE_DIR/res/values/libs.xml \
+ $$ANDROID_PACKAGE_SOURCE_DIR/res/values/styles.xml \
$$ANDROID_PACKAGE_SOURCE_DIR/build.gradle \
$$ANDROID_PACKAGE_SOURCE_DIR/gradle/wrapper/gradle-wrapper.properties \
$$ANDROID_PACKAGE_SOURCE_DIR/gradlew.bat \
diff --git a/nymea-app/platformhelper.cpp b/nymea-app/platformhelper.cpp
index cbe66d52..241f1c88 100644
--- a/nymea-app/platformhelper.cpp
+++ b/nymea-app/platformhelper.cpp
@@ -32,7 +32,6 @@
#include
#if defined Q_OS_ANDROID
-#include
#include "platformintegration/android/platformhelperandroid.h"
#elif defined Q_OS_IOS
#include "platformintegration/ios/platformhelperios.h"
@@ -70,7 +69,7 @@ void PlatformHelper::notificationActionReceived(const QString &nymeaData)
QUrlQuery query(map.value("data").toString());
QVariantMap dataMap;
for (int i = 0; i < query.queryItems().count(); i++) {
- const QPair &item = query.queryItems().at(i);
+ QPair item = query.queryItems().at(i);
dataMap.insert(item.first, item.second);
}
map.insert("dataMap", dataMap);
diff --git a/nymea-app/platformintegration/android/java/io/guh/nymeaapp/NymeaAppActivity.java b/nymea-app/platformintegration/android/java/io/guh/nymeaapp/NymeaAppActivity.java
index 87b31da6..558482a9 100644
--- a/nymea-app/platformintegration/android/java/io/guh/nymeaapp/NymeaAppActivity.java
+++ b/nymea-app/platformintegration/android/java/io/guh/nymeaapp/NymeaAppActivity.java
@@ -20,8 +20,15 @@ import androidx.core.content.FileProvider;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import android.view.WindowInsets;
+import android.graphics.Insets;
-public class NymeaAppActivity extends org.qtproject.qt5.android.bindings.QtActivity
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+
+import org.qtproject.qt.android.bindings.QtActivity;
+
+public class NymeaAppActivity extends QtActivity
{
private static final String TAG = "nymea-app: NymeaAppActivity";
private static Context context = null;
@@ -42,6 +49,7 @@ public class NymeaAppActivity extends org.qtproject.qt5.android.bindings.QtActiv
@Override
public void onCreate(Bundle savedInstanceState) {
+ Log.w(TAG, "Create activity");
super.onCreate(savedInstanceState);
// Move th app to the background (Edge to edge is forced since SDK 35)
//WindowCompat.setDecorFitsSystemWindows(getWindow(), true);
@@ -143,12 +151,62 @@ public class NymeaAppActivity extends org.qtproject.qt5.android.bindings.QtActiv
public int topPadding() {
WindowInsets windowInsets = getWindow().getDecorView().getRootWindowInsets();
- return windowInsets.getInsets(WindowInsets.Type.statusBars() | WindowInsets.Type.displayCutout()).top;
+
+ if (windowInsets == null) {
+ return 0;
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ Insets insets = windowInsets.getInsets(WindowInsets.Type.statusBars() | WindowInsets.Type.displayCutout());
+ return insets != null ? insets.top : 0;
+ }
+
+ return windowInsets.getStableInsetTop();
}
public int bottomPadding() {
WindowInsets windowInsets = getWindow().getDecorView().getRootWindowInsets();
- return windowInsets.getInsets(WindowInsets.Type.navigationBars() | WindowInsets.Type.displayCutout()).bottom;
+ if (windowInsets == null) {
+ return 0;
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ Insets insets = windowInsets.getInsets(WindowInsets.Type.navigationBars() | WindowInsets.Type.displayCutout());
+ return insets != null ? insets.bottom : 0;
+ }
+
+ return windowInsets.getStableInsetBottom();
}
+ private void logStaticInitClassesMetadata() {
+ try {
+ ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
+ if (appInfo.metaData == null || !appInfo.metaData.containsKey("android.app.static_init_classes")) {
+ Log.w(TAG, "No android.app.static_init_classes meta-data present in the manifest");
+ return;
+ }
+
+ Object value = appInfo.metaData.get("android.app.static_init_classes");
+ if (!(value instanceof Integer)) {
+ Log.w(TAG, "android.app.static_init_classes meta-data is not a resource reference: " + value);
+ return;
+ }
+
+ int resId = (Integer) value;
+ if (resId == 0) {
+ Log.e(TAG, "android.app.static_init_classes meta-data resolves to resource id 0");
+ return;
+ }
+
+ try {
+ String resName = getResources().getResourceName(resId);
+ String resValue = getResources().getString(resId);
+ Log.i(TAG, "android.app.static_init_classes -> " + resName + " = " + resValue);
+ } catch (Resources.NotFoundException notFoundException) {
+ Log.e(TAG, "android.app.static_init_classes references missing resource 0x" + Integer.toHexString(resId), notFoundException);
+ }
+ } catch (PackageManager.NameNotFoundException exception) {
+ Log.e(TAG, "Failed to inspect android.app.static_init_classes meta-data", exception);
+ }
+ }
}
diff --git a/nymea-app/platformintegration/android/platformhelperandroid.cpp b/nymea-app/platformintegration/android/platformhelperandroid.cpp
index 447c7df3..3ad8a7e3 100644
--- a/nymea-app/platformintegration/android/platformhelperandroid.cpp
+++ b/nymea-app/platformintegration/android/platformhelperandroid.cpp
@@ -26,10 +26,9 @@
#include
#include
-#include
-#include
+#include
#include
-#include
+#include
// WindowManager.LayoutParams
#define FLAG_TRANSLUCENT_STATUS 0x04000000
@@ -64,20 +63,27 @@ JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* /*reserved*/)
return JNI_VERSION_1_6;
}
-static QAndroidJniObject getAndroidWindow()
-{
- QAndroidJniObject window = QtAndroid::androidActivity().callObjectMethod("getWindow", "()Landroid/view/Window;");
- return window;
-}
+// static QJniObject getAndroidWindow()
+// {
+// QJniObject window;
+// QJniObject activity = QNativeInterface::QAndroidApplication::context();
+// if(activity.isValid()) {
+// activity.callMethod("setRequestedOrientation", "(I)V", 0);
+// window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
+// }
+
+// // QJniObject window = QNativeInterface::QAndroidApplication::context().callMethod("getWindow", "()Landroid/view/Window;");
+// return window;
+// }
PlatformHelperAndroid::PlatformHelperAndroid(QObject *parent) : PlatformHelper(parent)
{
m_instance = this;
- QString notificationData = QtAndroid::androidActivity().callObjectMethod("notificationData", "()Ljava/lang/String;").toString();
- if (!notificationData.isNull()) {
- notificationActionReceived(notificationData);
- }
+ // QString notificationData = QNativeInterface::QAndroidApplication::context().callMethod("notificationData", "()Ljava/lang/String;").toString();
+ // if (!notificationData.isNull()) {
+ // notificationActionReceived(notificationData);
+ // }
connect(qApp, &QApplication::applicationStateChanged, this, [this](Qt::ApplicationState state){
qCritical() << "----> Application state changed" << state;
@@ -92,7 +98,7 @@ void PlatformHelperAndroid::hideSplashScreen()
// Android's splash will flicker when fading out twice
static bool alreadyHiding = false;
if (!alreadyHiding) {
- QtAndroid::hideSplashScreen(250);
+ //QtAndroid::hideSplashScreen(250);
alreadyHiding = true;
}
}
@@ -105,23 +111,23 @@ QString PlatformHelperAndroid::machineHostname() const
QString PlatformHelperAndroid::deviceSerial() const
{
- QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
+ QJniObject activity = QJniObject::callStaticObjectMethod("org/qtproject/qt/android/QtNative", "activity", "()Landroid/app/Activity;");
return activity.callObjectMethod("deviceSerial").toString();
}
QString PlatformHelperAndroid::device() const
{
- return QAndroidJniObject::callStaticObjectMethod("io/guh/nymeaapp/NymeaAppActivity","device").toString();
+ return QJniObject::callStaticObjectMethod("io/guh/nymeaapp/NymeaAppActivity", "device").toString();
}
QString PlatformHelperAndroid::deviceModel() const
{
- return QAndroidJniObject::callStaticObjectMethod("io/guh/nymeaapp/NymeaAppActivity","deviceModel").toString();
+ return QJniObject::callStaticObjectMethod("io/guh/nymeaapp/NymeaAppActivity", "deviceModel").toString();
}
QString PlatformHelperAndroid::deviceManufacturer() const
{
- return QAndroidJniObject::callStaticObjectMethod("io/guh/nymeaapp/NymeaAppActivity","deviceManufacturer").toString();
+ return QJniObject::callStaticObjectMethod("io/guh/nymeaapp/NymeaAppActivity", "deviceManufacturer").toString();
}
void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType)
@@ -139,7 +145,20 @@ void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType
break;
}
- QtAndroid::androidActivity().callMethod("vibrate","(I)V", duration);
+ QJniObject context = QNativeInterface::QAndroidApplication::context();
+ if (!context.isValid()) {
+ qDebug() << "Could not get Android context.";
+ return;
+ }
+
+ QJniObject vibrator = context.callMethod("getSystemService", "Landroid/content/Context;Ljava/lang/String;", QJniObject::fromString("vibrator").object());
+ if (!vibrator.isValid()) {
+ qDebug() << "Could not get vibrator service.";
+ return;
+ }
+
+ // Call the vibrate method
+ vibrator.callMethod("vibrate", "(J)V", duration);
}
//void PlatformHelperAndroid::syncThings()
@@ -147,7 +166,7 @@ void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType
// QAndroidIntent serviceIntent(QtAndroid::androidActivity().object(),
// "io/guh/nymeaapp/NymeaAppService");
-// QAndroidJniObject result = QtAndroid::androidActivity().callObjectMethod(
+// QJniObject result = QtAndroid::androidActivity().callObjectMethod(
// "startService",
// "(Landroid/content/Intent;)Landroid/content/ComponentName;",
// serviceIntent.handle().object());
@@ -163,7 +182,7 @@ void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType
//// m_serviceConnection->handle().callMethod("syncThings", "(Ljava/lang/String;)V", "bla");
-//// QAndroidJniObject result = QtAndroid::androidActivity().callObjectMethod(
+//// QJniObject result = QtAndroid::androidActivity().callObjectMethod(
//// "syncThings",
//// "(Landroid/content/Intent;)Landroid/content/ComponentName;",
//// m_serviceConnection->handle().object());
@@ -173,113 +192,120 @@ void PlatformHelperAndroid::setTopPanelColor(const QColor &color)
{
PlatformHelper::setTopPanelColor(color);
- if (QtAndroid::androidSdkVersion() < 21)
- return;
+ // if (QtAndroid::androidSdkVersion() < 21)
+ // return;
- QtAndroid::runOnAndroidThread([=]() {
- QAndroidJniObject window = getAndroidWindow();
- window.callMethod("addFlags", "(I)V", FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
- window.callMethod("clearFlags", "(I)V", FLAG_TRANSLUCENT_STATUS);
- window.callMethod("setStatusBarColor", "(I)V", color.rgba());
- });
+ // QtAndroid::runOnAndroidThread([=]() {
+ // QJniObject window = getAndroidWindow();
+ // window.callMethod("addFlags", "(I)V", FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ // window.callMethod("clearFlags", "(I)V", FLAG_TRANSLUCENT_STATUS);
+ // window.callMethod("setStatusBarColor", "(I)V", color.rgba());
+ // });
- if (((color.red() * 299 + color.green() * 587 + color.blue() * 114) / 1000) > 123) {
- setTopPanelTheme(Light);
- } else {
- setTopPanelTheme(Dark);
- }
+ // if (((color.red() * 299 + color.green() * 587 + color.blue() * 114) / 1000) > 123) {
+ // setTopPanelTheme(Light);
+ // } else {
+ // setTopPanelTheme(Dark);
+ // }
}
void PlatformHelperAndroid::setBottomPanelColor(const QColor &color)
{
PlatformHelper::setBottomPanelColor(color);
- if (QtAndroid::androidSdkVersion() < 21)
- return;
+ // if (QtAndroid::androidSdkVersion() < 21)
+ // return;
- QtAndroid::runOnAndroidThread([=]() {
- QAndroidJniObject window = getAndroidWindow();
- window.callMethod("clearFlags", "(I)V", FLAG_TRANSLUCENT_NAVIGATION);
- window.callMethod("setNavigationBarColor", "(I)V", color.rgba());
+ // QtAndroid::runOnAndroidThread([=]() {
+ // QJniObject window = getAndroidWindow();
+ // window.callMethod("clearFlags", "(I)V", FLAG_TRANSLUCENT_NAVIGATION);
+ // window.callMethod("setNavigationBarColor", "(I)V", color.rgba());
- if (((color.red() * 299 + color.green() * 587 + color.blue() * 114) / 1000) > 123) {
- setBottomPanelTheme(Light);
- } else {
- setBottomPanelTheme(Dark);
- }
- });
+ // if (((color.red() * 299 + color.green() * 587 + color.blue() * 114) / 1000) > 123) {
+ // setBottomPanelTheme(Light);
+ // } else {
+ // setBottomPanelTheme(Dark);
+ // }
+ // });
}
void PlatformHelperAndroid::setTopPanelTheme(PlatformHelperAndroid::Theme theme)
{
- if (QtAndroid::androidSdkVersion() < 23)
- return;
+ Q_UNUSED(theme)
+ // if (QtAndroid::androidSdkVersion() < 23)
+ // return;
- QtAndroid::runOnAndroidThread([=]() {
- QAndroidJniObject window = getAndroidWindow();
- QAndroidJniObject view = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
- int visibility = view.callMethod("getSystemUiVisibility", "()I");
- if (theme == Theme::Light)
- visibility |= SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
- else
- visibility &= ~SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
- view.callMethod("setSystemUiVisibility", "(I)V", visibility);
- });
+ // QtAndroid::runOnAndroidThread([=]() {
+ // QJniObject window = getAndroidWindow();
+ // QJniObject view = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
+ // int visibility = view.callMethod("getSystemUiVisibility", "()I");
+ // if (theme == Theme::Light)
+ // visibility |= SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+ // else
+ // visibility &= ~SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+ // view.callMethod("setSystemUiVisibility", "(I)V", visibility);
+ // });
}
void PlatformHelperAndroid::setBottomPanelTheme(Theme theme)
{
- if (QtAndroid::androidSdkVersion() < 23)
- return;
+ Q_UNUSED(theme)
- QtAndroid::runOnAndroidThread([=]() {
- QAndroidJniObject window = getAndroidWindow();
- QAndroidJniObject view = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
- int visibility = view.callMethod("getSystemUiVisibility", "()I");
- if (theme == Theme::Light)
- visibility |= SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
- else
- visibility &= ~SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
- view.callMethod("setSystemUiVisibility", "(I)V", visibility);
- });
+ // if (QtAndroid::androidSdkVersion() < 23)
+ // return;
+
+ // QtAndroid::runOnAndroidThread([=]() {
+ // QJniObject window = getAndroidWindow();
+ // QJniObject view = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
+ // int visibility = view.callMethod("getSystemUiVisibility", "()I");
+ // if (theme == Theme::Light)
+ // visibility |= SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
+ // else
+ // visibility &= ~SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
+ // view.callMethod("setSystemUiVisibility", "(I)V", visibility);
+ // });
}
int PlatformHelperAndroid::topPadding() const
{
// Edge to edge has been forced since android SDK 35
// We don't want to handle it in earlied versions.
- if (QtAndroid::androidSdkVersion() < 35)
- return 0;
+ // if (QtAndroid::androidSdkVersion() < 35)
+ // return 0;
- return QtAndroid::androidActivity().callMethod("topPadding") / QApplication::primaryScreen()->devicePixelRatio();
+ //return QNativeInterface::QAndroidApplication::context().callMethod("topPadding") / QApplication::primaryScreen()->devicePixelRatio();
+ return 0;
}
int PlatformHelperAndroid::bottomPadding() const
{
// Edge to edge has been forced since android SDK 35
// We don't want to handle it in earlied versions.
- if (QtAndroid::androidSdkVersion() < 35)
- return 0;
+ // if (QtAndroid::androidSdkVersion() < 35)
+ // return 0;
- return QtAndroid::androidActivity().callMethod("bottomPadding") / QApplication::primaryScreen()->devicePixelRatio();
+ // return QNativeInterface::QAndroidApplication::context().callMethod("bottomPadding") / QApplication::primaryScreen()->devicePixelRatio();
+ return 0;
}
bool PlatformHelperAndroid::darkModeEnabled() const
{
- return QtAndroid::androidActivity().callMethod("darkModeEnabled");
+ return QNativeInterface::QAndroidApplication::context().callMethod("darkModeEnabled");
}
bool PlatformHelperAndroid::locationServicesEnabled() const
{
- jboolean enabled = QtAndroid::androidActivity().callMethod("locationServicesEnabled", "()Z");
- return enabled;
+ // jboolean enabled = QNativeInterface::QAndroidApplication::context().callMethod("locationServicesEnabled", "()Z");
+ // return enabled;
+ return true;
}
void PlatformHelperAndroid::shareFile(const QString &fileName)
{
- QtAndroid::androidActivity().callMethod("shareFile", "(Ljava/lang/String;)V",
- QAndroidJniObject::fromString(fileName).object()
- );
+ Q_UNUSED(fileName)
+ // QNativeInterface::QAndroidApplication::context().callMethod("shareFile", "(Ljava/lang/String;)V",
+ // QJniObject::fromString(fileName).object()
+ // );
}
void PlatformHelperAndroid::darkModeEnabledChangedJNI()
diff --git a/nymea-app/platformintegration/android/platformhelperandroid.h b/nymea-app/platformintegration/android/platformhelperandroid.h
index ed88f782..3edbaeda 100644
--- a/nymea-app/platformintegration/android/platformhelperandroid.h
+++ b/nymea-app/platformintegration/android/platformhelperandroid.h
@@ -28,8 +28,9 @@
#include "platformhelper.h"
#include
-#include
-#include
+#include
+#include
+#include
class PlatformHelperAndroid : public PlatformHelper
{
@@ -67,8 +68,6 @@ public:
static void notificationActionReceivedJNI(JNIEnv *env, jobject /*thiz*/, jstring data);
static void locationServicesEnabledChangedJNI();
-private:
- static void permissionRequestFinished(const QtAndroid::PermissionResultMap &);
};
#endif // PLATFORMHELPERANDROID_H
diff --git a/nymea-app/platformintegration/android/platformpermissionsandroid.cpp b/nymea-app/platformintegration/android/platformpermissionsandroid.cpp
index df75200f..213942a1 100644
--- a/nymea-app/platformintegration/android/platformpermissionsandroid.cpp
+++ b/nymea-app/platformintegration/android/platformpermissionsandroid.cpp
@@ -26,7 +26,7 @@
#include
#include
-#include
+#include
#include
#include "logging.h"
@@ -53,94 +53,227 @@ PlatformPermissionsAndroid::PlatformPermissionsAndroid(QObject *parent)
}
-void PlatformPermissionsAndroid::requestPermission(PlatformPermissions::Permission permission)
-{
- if (permissionMap().contains(permission)) {
- qCDebug(dcPlatformPermissions()) << "Requesting permissions:" << permissionMap().value(permission);
- QtAndroid::requestPermissions({permissionMap().value(permission)}, &permissionResultCallback);
- }
-}
-
-void PlatformPermissionsAndroid::openPermissionSettings()
-{
- qCDebug(dcPlatformPermissions()) << "Opening permission dialog.";
- QAndroidJniObject packageName = QtAndroid::androidContext().callObjectMethod("getPackageName", "()Ljava/lang/String;");
- QString packageUri = "package:" + packageName.toString();
- QAndroidJniObject uri = QAndroidJniObject::callStaticObjectMethod("android/net/Uri", "parse", "(Ljava/lang/String;)Landroid/net/Uri;", QAndroidJniObject::fromString(packageUri).object());
- QAndroidIntent intent = QAndroidIntent("android.settings.APPLICATION_DETAILS_SETTINGS");
- intent.handle().callObjectMethod("setData", "(Landroid/net/Uri;)Landroid/content/Intent;", uri.object());
- intent.handle().callObjectMethod("addFlags", "(I)Landroid/content/Intent;", FLAG_ACTIVITY_NEW_TASK);
- QtAndroid::androidContext().callMethod("startActivity", "(Landroid/content/Intent;)V", intent.handle().object());
-}
-
-QHash PlatformPermissionsAndroid::permissionMap() const
-{
- QOperatingSystemVersion osVersion = QOperatingSystemVersion::current();
- if (osVersion.majorVersion() <= 9) {
- return {
- {PlatformPermissions::PermissionBluetooth, {"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION"}}
- };
- }
- if (osVersion.majorVersion() <= 10) {
- return {
- {PlatformPermissions::PermissionBluetooth, {"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_BACKGROUND_LOCATION"}}
- };
- }
- if (osVersion.majorVersion() <= 12) {
- return {
- // TODO: Once QtBluetooth does not request the COARSE_LOCATION and FINE_LOCATION for Bluetooth any more, remove it from here. The new Bluetooth permissions would be enough.
- {PlatformPermissions::PermissionBluetooth, {"android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_ADVERTISE", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_BACKGROUND_LOCATION"}}
- };
- }
- return {
- // TODO: Once QtBluetooth does not request the COARSE_LOCATION and FINE_LOCATION for Bluetooth any more, remove it from here. The new Bluetooth permissions would be enough.
- {PlatformPermissions::PermissionBluetooth, {"android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_ADVERTISE", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
- {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_BACKGROUND_LOCATION"}},
- {PlatformPermissions::PermissionNotifications, {"android.permission.POST_NOTIFICATIONS"}}
- };
-}
-
-PlatformPermissions::PermissionStatus PlatformPermissionsAndroid::checkPermission(Permission permission) const
+PlatformPermissions::PermissionStatus PlatformPermissionsAndroid::checkPermission(Permission platformPermission) const
{
PermissionStatus status = PermissionStatusGranted;
- QStringList androidPermissions = permissionMap().value(permission);
- qCDebug(dcPlatformPermissions()) << "Checking permission" << permission << "(" << androidPermissions << ")";
- foreach (const QString androidPermission, androidPermissions) {
- if (QtAndroid::shouldShowRequestPermissionRationale(androidPermission) || m_requestedButDeniedPermissions.contains(androidPermission)) {
- qCDebug(dcPlatformPermissions()) << "Permission:" << androidPermission << "denied";
- status = PermissionStatusDenied;
+ qCDebug(dcPlatformPermissions()) << "Checking permission" << platformPermission;
+
+ switch (platformPermission) {
+ case PlatformPermissions::PermissionBluetooth: {
+ QBluetoothPermission permission;
+
+ // Status prüfen
+ auto status = qApp->checkPermission(permission);
+
+ switch (status) {
+ case Qt::PermissionStatus::Granted:
+ qCDebug(dcPlatformPermissions()) << "Bluetooth permission already granted.";
+ break;
+ case Qt::PermissionStatus::Denied:
+ qCDebug(dcPlatformPermissions()) << "Bluetooth permission denied.";
+ break;
+ case Qt::PermissionStatus::Undetermined:
+ qCDebug(dcPlatformPermissions()) << "Bluetooth permission not yet requested. Requesting...";
+ qApp->requestPermission(permission, [](const QPermission &perm){
+ if (perm.status() == Qt::PermissionStatus::Granted)
+ qCDebug(dcPlatformPermissions()) << "Bluetooth permission granted after request.";
+ else
+ qCDebug(dcPlatformPermissions()) << "Bluetooth permission denied after request.";
+ });
+ break;
}
- if (QtAndroid::checkPermission(androidPermission) == QtAndroid::PermissionResult::Denied) {
- qDebug(dcPlatformPermissions()) << "Permission:" << androidPermission << "not determined";
- if (status != PermissionStatusDenied) {
- status = PermissionStatusNotDetermined;
- }
- } else {
- qDebug(dcPlatformPermissions()) << "Permission:" << androidPermission << "granted";
+ break;
+ }
+ case PlatformPermissions::PermissionLocalNetwork: {
+ QLocationPermission permission;
+ permission.setAccuracy(QLocationPermission::Precise);
+
+ // Status prüfen
+ auto status = qApp->checkPermission(permission);
+
+ switch (status) {
+ case Qt::PermissionStatus::Granted:
+ qCDebug(dcPlatformPermissions()) << "Location permission already granted.";
+ break;
+ case Qt::PermissionStatus::Denied:
+ qCDebug(dcPlatformPermissions()) << "Location permission denied.";
+ break;
+ case Qt::PermissionStatus::Undetermined:
+ qCDebug(dcPlatformPermissions()) << "Location permission not yet requested. Requesting...";
+ qApp->requestPermission(permission, [](const QPermission &perm){
+ if (perm.status() == Qt::PermissionStatus::Granted)
+ qCDebug(dcPlatformPermissions()) << "Location permission granted after request.";
+ else
+ qCDebug(dcPlatformPermissions()) << "Location permission denied after request.";
+ });
+ break;
}
}
- qCDebug(dcPlatformPermissions()) << "Permission status for:" << permission << ":" << status;
+ case PlatformPermissions::PermissionNotifications: {
+ break;
+ }
+ default:
+ qCWarning(dcPlatformPermissions()) << "Requested status of platform permission" << platformPermission << "but is not implemented yet.";
+ break;
+ }
return status;
}
-void PlatformPermissionsAndroid::permissionResultCallback(const QtAndroid::PermissionResultMap &results)
+void PlatformPermissionsAndroid::requestPermission(PlatformPermissions::Permission platformPermission)
{
- foreach (const QString &androidPermission, results.keys()) {
- qCDebug(dcPlatformPermissions()) << "Permission result callback:" << androidPermission << (results.value(androidPermission) == QtAndroid::PermissionResult::Granted ? "Granted" : "Denied");
- if (results.value(androidPermission) == QtAndroid::PermissionResult::Denied) {
- s_instance->m_requestedButDeniedPermissions.append(androidPermission);
- }
+ switch (platformPermission) {
+ case PlatformPermissions::PermissionBluetooth:
+ qCDebug(dcPlatformPermissions()) << "Requesting bluetooth permission";
+ qApp->requestPermission(QLocationPermission{}, [platformPermission](const QPermission &permission) {
+ if (permission.status() == Qt::PermissionStatus::Denied) {
+ qCWarning(dcPlatformPermissions()) << "Bluetooth permission denied.";
+ s_instance->m_requestedButDeniedPermissions.append(platformPermission);
+ }
+
+ if (permission.status() == Qt::PermissionStatus::Granted)
+ qCDebug(dcPlatformPermissions()) << "Bluetooth permission granted.";
+
+ emit s_instance->bluetoothPermissionChanged();
+ });
+ break;
+ case PlatformPermissions::PermissionLocation: {
+ QLocationPermission locationPermission;
+ locationPermission.setAccuracy(QLocationPermission::Precise);
+ qApp->requestPermission(locationPermission, [platformPermission](const QPermission &permission) {
+ if (permission.status() == Qt::PermissionStatus::Denied) {
+ qCWarning(dcPlatformPermissions()) << "Location permission denied.";
+ s_instance->m_requestedButDeniedPermissions.append(platformPermission);
+ }
+
+ if (permission.status() == Qt::PermissionStatus::Granted)
+ qCDebug(dcPlatformPermissions()) << "Location permission granted.";
+
+ emit s_instance->locationPermissionChanged();
+ });
+ break;
}
- emit s_instance->bluetoothPermissionChanged();
+ case PlatformPermissions::PermissionLocalNetwork: {
+ QFuture permission_request = QtAndroidPrivate::requestPermission("android.permission.POST_NOTIFICATIONS");
+ switch(permission_request.result())
+ {
+ case QtAndroidPrivate::Undetermined:
+ qWarning() << "Permission for posting notifications undetermined!";
+ break;
+ case QtAndroidPrivate::Authorized:
+ qDebug() << "Permission for posting notifications authorized";
+ break;
+ case QtAndroidPrivate::Denied:
+ qWarning() << "Permission for posting notifications denied!";
+ break;
+ }
+
+ break;
+ }
+ default:
+ qCWarning(dcPlatformPermissions()) << "Requested platform permission" << platformPermission << "but is not implemented yet.";
+ break;
+ }
+
emit s_instance->locationPermissionChanged();
emit s_instance->backgroundLocationPermissionChanged();
emit s_instance->notificationsPermissionChanged();
+
+ // if (permissionMap().contains(permission)) {
+ // qCDebug(dcPlatformPermissions()) << "Requesting permissions:" << permissionMap().value(permission);
+
+
+
+ // qApp->requestPermission(QCameraPermission{}, [](const QPermission &permission) {
+
+
+ // if (permission.status() == Qt::PermissionStatus::Granted)
+ // takePhoto();
+ // });
+
+ // // QtAndroid::requestPermissions({permissionMap().value(permission)}, &permissionResultCallback);
+ // }
}
+// void PlatformPermissionsAndroid::openPermissionSettings()
+// {
+// qCDebug(dcPlatformPermissions()) << "Opening permission dialog.";
+// QJniObject packageName = QtAndroid::androidContext().callObjectMethod("getPackageName", "()Ljava/lang/String;");
+// QString packageUri = "package:" + packageName.toString();
+// QJniObject uri = QJniObject::callStaticObjectMethod("android/net/Uri", "parse", "(Ljava/lang/String;)Landroid/net/Uri;", QJniObject::fromString(packageUri).object());
+// QAndroidIntent intent = QAndroidIntent("android.settings.APPLICATION_DETAILS_SETTINGS");
+// intent.handle().callObjectMethod("setData", "(Landroid/net/Uri;)Landroid/content/Intent;", uri.object());
+// intent.handle().callObjectMethod("addFlags", "(I)Landroid/content/Intent;", FLAG_ACTIVITY_NEW_TASK);
+// QtAndroid::androidContext().callMethod("startActivity", "(Landroid/content/Intent;)V", intent.handle().object());
+// }
+
+// QHash PlatformPermissionsAndroid::permissionMap() const
+// {
+// QOperatingSystemVersion osVersion = QOperatingSystemVersion::current();
+// if (osVersion.majorVersion() <= 9) {
+// return {
+// {PlatformPermissions::PermissionBluetooth, {"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION"}}
+// };
+// }
+// if (osVersion.majorVersion() <= 10) {
+// return {
+// {PlatformPermissions::PermissionBluetooth, {"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_BACKGROUND_LOCATION"}}
+// };
+// }
+// if (osVersion.majorVersion() <= 12) {
+// return {
+// // TODO: Once QtBluetooth does not request the COARSE_LOCATION and FINE_LOCATION for Bluetooth any more, remove it from here. The new Bluetooth permissions would be enough.
+// {PlatformPermissions::PermissionBluetooth, {"android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_ADVERTISE", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_BACKGROUND_LOCATION"}}
+// };
+// }
+// return {
+// // TODO: Once QtBluetooth does not request the COARSE_LOCATION and FINE_LOCATION for Bluetooth any more, remove it from here. The new Bluetooth permissions would be enough.
+// {PlatformPermissions::PermissionBluetooth, {"android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_ADVERTISE", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionLocation, {"android.permission.ACCESS_FINE_LOCATION"}},
+// {PlatformPermissions::PermissionBackgroundLocation, {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_BACKGROUND_LOCATION"}},
+// {PlatformPermissions::PermissionNotifications, {"android.permission.POST_NOTIFICATIONS"}}
+// };
+// }
+
+// PlatformPermissions::PermissionStatus PlatformPermissionsAndroid::checkPermission(Permission permission) const
+// {
+// PermissionStatus status = PermissionStatusGranted;
+// QStringList androidPermissions = permissionMap().value(permission);
+// qCDebug(dcPlatformPermissions()) << "Checking permission" << permission << "(" << androidPermissions << ")";
+// foreach (const QString androidPermission, androidPermissions) {
+// if (QtAndroid::shouldShowRequestPermissionRationale(androidPermission) || m_requestedButDeniedPermissions.contains(androidPermission)) {
+// qCDebug(dcPlatformPermissions()) << "Permission:" << androidPermission << "denied";
+// status = PermissionStatusDenied;
+// }
+// if (QtAndroid::checkPermission(androidPermission) == QtAndroid::PermissionResult::Denied) {
+// qDebug(dcPlatformPermissions()) << "Permission:" << androidPermission << "not determined";
+// if (status != PermissionStatusDenied) {
+// status = PermissionStatusNotDetermined;
+// }
+// } else {
+// qDebug(dcPlatformPermissions()) << "Permission:" << androidPermission << "granted";
+// }
+// }
+// qCDebug(dcPlatformPermissions()) << "Permission status for:" << permission << ":" << status;
+// return status;
+// }
+
+// void PlatformPermissionsAndroid::permissionResultCallback(const QtAndroid::PermissionResultMap &results)
+// {
+// foreach (const QString &androidPermission, results.keys()) {
+// qCDebug(dcPlatformPermissions()) << "Permission result callback:" << androidPermission << (results.value(androidPermission) == QtAndroid::PermissionResult::Granted ? "Granted" : "Denied");
+// if (results.value(androidPermission) == QtAndroid::PermissionResult::Denied) {
+// s_instance->m_requestedButDeniedPermissions.append(androidPermission);
+// }
+// }
+// emit s_instance->bluetoothPermissionChanged();
+// emit s_instance->locationPermissionChanged();
+// emit s_instance->backgroundLocationPermissionChanged();
+// emit s_instance->notificationsPermissionChanged();
+// }
+
diff --git a/nymea-app/platformintegration/android/platformpermissionsandroid.h b/nymea-app/platformintegration/android/platformpermissionsandroid.h
index 0a43d40a..6f5ea583 100644
--- a/nymea-app/platformintegration/android/platformpermissionsandroid.h
+++ b/nymea-app/platformintegration/android/platformpermissionsandroid.h
@@ -26,8 +26,7 @@
#define PLATFORMPERMISSIONSANDROID_H
#include "../platformpermissions.h"
-
-#include
+#include
class PlatformPermissionsAndroid : public PlatformPermissions
{
@@ -35,20 +34,14 @@ class PlatformPermissionsAndroid : public PlatformPermissions
public:
explicit PlatformPermissionsAndroid(QObject *parent = nullptr);
- PermissionStatus checkPermission(Permission permission) const override;
-
- void requestPermission(Permission permission) override;
- void openPermissionSettings() override;
-
-signals:
+ PermissionStatus checkPermission(Permission platformPermission) const override;
+ void requestPermission(Permission platformPermission) override;
private:
- QHash permissionMap() const;
-
- QStringList m_requestedButDeniedPermissions;
-
static PlatformPermissionsAndroid *s_instance;
- static void permissionResultCallback(const QtAndroid::PermissionResultMap &results);
+
+ QList m_requestedButDeniedPermissions;
+ QList m_grantedPermission;
};
diff --git a/nymea-app/pushnotifications.cpp b/nymea-app/pushnotifications.cpp
index 0b2266ef..3e5ca749 100644
--- a/nymea-app/pushnotifications.cpp
+++ b/nymea-app/pushnotifications.cpp
@@ -26,11 +26,16 @@
#include "platformhelper.h"
#include
+#include
#if defined Q_OS_ANDROID
-#include
-#include
-#include
+#include
+#include
+
+#include // QJniEnvironment
+#include // QJniObject
+#include // QtJniTypes::Context / Activity
+#include
static PushNotifications *m_client_pointer;
#endif
@@ -82,14 +87,50 @@ void PushNotifications::registerForPush()
{
#if defined Q_OS_ANDROID && defined WITH_FIREBASE
qDebug() << "Checking for play services";
- jboolean playServicesAvailable = QAndroidJniObject::callStaticMethod("io.guh.nymeaapp.NymeaAppNotificationService", "checkPlayServices", "()Z");
+ jboolean playServicesAvailable = QJniObject::callStaticMethod("io.guh.nymeaapp.NymeaAppNotificationService", "checkPlayServices", "()Z");
if (playServicesAvailable) {
+
qDebug() << "Setting up firebase";
m_client_pointer = this;
- m_firebaseApp = ::firebase::App::Create(::firebase::AppOptions(), QAndroidJniEnvironment(), QtAndroid::androidActivity().object());
- m_firebase_initializer.Initialize(m_firebaseApp, nullptr, [](::firebase::App * fapp, void *) {
- return ::firebase::messaging::Initialize( *fapp, (::firebase::messaging::Listener *)m_client_pointer);
- });
+
+ JNIEnv *jni = QJniEnvironment().jniEnv();
+ QtJniTypes::Context ctx = QNativeInterface::QAndroidApplication::context();
+ jobject contextObj = ctx.object();
+
+ m_firebaseApp = firebase::App::Create(firebase::AppOptions(), jni, contextObj);
+
+ firebase::messaging::Initialize(*m_firebaseApp, this);
+ firebase::messaging::SetListener(this);
+
+ // (Optional, Android 13+): Benachrichtigungs-Erlaubnis anfragen
+ // firebase::messaging::RequestPermission();
+
+
+
+ // // Activity + JNIEnv besorgen
+ // JNIEnv* env = QNativeInterface::QAndroidApplication::jniEnv();
+ // jobject activity = QNativeInterface::QAndroidApplication::context();
+
+ // // Firebase App erstellen
+ // m_firebaseApp = firebase::App::Create(firebase::AppOptions(), env, activity);
+
+ // // Messaging initialisieren und Listener setzen
+ // auto initResult = firebase::messaging::Initialize(*m_firebaseApp);
+ // if (initResult != firebase::kFutureStatusComplete) {
+ // // optional: warten oder loggen
+ // }
+ // firebase::messaging::SetListener(this);
+
+ // // Optional: Token anfordern (wird i.d.R. via OnTokenReceived geliefert)
+ // firebase::messaging::RequestPermission(); // Android 13+ für Notifications sinnvoll
+
+
+
+
+ // m_firebaseApp = ::firebase::App::Create(::firebase::AppOptions(), QAndroidJniEnvironment(), QtAndroid::androidActivity().object());
+ // m_firebase_initializer.Initialize(m_firebaseApp, nullptr, [](::firebase::App * fapp, void *) {
+ // return ::firebase::messaging::Initialize( *fapp, (::firebase::messaging::Listener *)m_client_pointer);
+ // });
} else {
qDebug() << "Google Play Services not available. Cannot connect to push client.";
}
diff --git a/nymea-app/resources.qrc b/nymea-app/resources.qrc
index 5030b43d..4a7c56a7 100644
--- a/nymea-app/resources.qrc
+++ b/nymea-app/resources.qrc
@@ -323,5 +323,7 @@
ui/components/BackgroundFocusHandler.qml
ui/components/LicenseInformationItem.qml
ui/shaders/coloricon.frag.qsb
+ ui/shaders/brightnesscircle.frag.qsb
+ ui/shaders/colorizedimage.frag.qsb
diff --git a/nymea-app/styles.qrc b/nymea-app/styles.qrc
index 4fa9cbde..cc23c2a0 100644
--- a/nymea-app/styles.qrc
+++ b/nymea-app/styles.qrc
@@ -45,5 +45,6 @@
styles/lime/Background.qml
styles/mellow/Background.qml
styles/noir/Background.qml
+ styles/dark/ItemDelegate.qml
diff --git a/nymea-app/styles/dark/Background.qml b/nymea-app/styles/dark/Background.qml
index 9a4e71a5..10ca63bd 100644
--- a/nymea-app/styles/dark/Background.qml
+++ b/nymea-app/styles/dark/Background.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Rectangle {
color: Style.backgroundColor
diff --git a/nymea-app/styles/dark/Button.qml b/nymea-app/styles/dark/Button.qml
index f34fb1e8..e97fb06e 100644
--- a/nymea-app/styles/dark/Button.qml
+++ b/nymea-app/styles/dark/Button.qml
@@ -2,6 +2,7 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
+// Copyright (C) 2017 The Qt Company Ltd.
* Copyright (C) 2013 - 2024, nymea GmbH
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
*
@@ -22,90 +23,78 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
-import QtQuick.Controls.impl 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Controls.Material.impl 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
T.Button {
id: control
- implicitWidth: Math.max(background ? background.implicitWidth : 0,
- contentItem.implicitWidth + leftPadding + rightPadding)
- implicitHeight: Math.max(background ? background.implicitHeight : 0,
- contentItem.implicitHeight + topPadding + bottomPadding)
- baselineOffset: contentItem.y + contentItem.baselineOffset
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
- // external vertical padding is 6 (to increase touch area)
- padding: 12
- leftPadding: padding - 4
- rightPadding: padding - 4
+ topInset: 6
+ bottomInset: 6
+ verticalPadding: Material.buttonVerticalPadding
+ leftPadding: Material.buttonLeftPadding(flat, hasIcon && (display !== AbstractButton.TextOnly))
+ rightPadding: Material.buttonRightPadding(flat, hasIcon && (display !== AbstractButton.TextOnly),
+ (text !== "") && (display !== AbstractButton.IconOnly))
+ spacing: 8
- Material.elevation: flat ? control.down || control.hovered ? 2 : 0
- : control.down ? 8 : 2
- Material.background: flat ? "transparent" : undefined
+ icon.width: 24
+ icon.height: 24
+ icon.color: !enabled ? Material.hintTextColor :
+ (control.flat && control.highlighted) || (control.checked && !control.highlighted) ? Material.accentColor :
+ highlighted ? Material.primaryHighlightedTextColor : Material.foreground
- contentItem: Text {
+ readonly property bool hasIcon: icon.name.length > 0 || icon.source.toString().length > 0
+
+ Material.elevation: control.down ? 8 : 2
+ Material.roundedScale: Material.FullScale
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
text: control.text
- color: Style.foregroundColor
- font.bold: control.font.bold
- font.capitalization: Font.AllUppercase
- font.family: control.font.family
- font.hintingPreference: control.font.hintingPreference
- font.italic: control.font.italic
- font.letterSpacing: 2
- font.overline: control.font.overline
- font.pixelSize: app.smallFont
- font.weight: Font.Bold
-
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- elide: Text.ElideRight
+ font: control.font
+ color: !control.enabled ? control.Material.hintTextColor :
+ (control.flat && control.highlighted) || (control.checked && !control.highlighted) ? control.Material.accentColor :
+ control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground
}
- // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state
background: Rectangle {
implicitWidth: 64
- implicitHeight: Style.smallDelegateHeight
+ implicitHeight: control.Material.buttonHeight
- // external vertical padding is 6 (to increase touch area)
- y: 6
- width: parent.width
- height: parent.height - 12
- radius: Style.smallCornerRadius
- color: !control.enabled ? control.Material.buttonDisabledColor :
- control.highlighted ? control.Material.highlightedButtonColor : control.Material.accentColor
-
- PaddedRectangle {
- y: parent.height - 4
- width: parent.width
- height: 4
- radius: 2
- topPadding: -2
- clip: true
- visible: control.checkable && (!control.highlighted || control.flat)
- color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor
- }
+ radius: control.Material.roundedScale === Material.FullScale ? height / 2 : control.Material.roundedScale
+ color: control.Material.buttonColor(control.Material.theme, control.Material.background,
+ control.Material.accent, control.enabled, control.flat, control.highlighted, control.checked)
// The layer is disabled when the button color is transparent so you can do
// Material.background: "transparent" and get a proper flat button without needing
// to set Material.elevation as well
- layer.enabled: control.enabled && control.Material.buttonColor.a > 0
- layer.effect: ElevationEffect {
+ layer.enabled: control.enabled && color.a > 0 && !control.flat
+ layer.effect: RoundedElevationEffect {
elevation: control.Material.elevation
+ roundedScale: control.background.radius
}
Ripple {
- clipRadius: 2
+ clip: true
+ clipRadius: parent.radius
width: parent.width
height: parent.height
pressed: control.pressed
anchor: control
- active: control.down || control.visualFocus || control.hovered
- color: control.Material.rippleColor
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.flat && control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor
}
}
}
diff --git a/nymea-app/styles/dark/Dialog.qml b/nymea-app/styles/dark/Dialog.qml
index 98e5fdd0..28cc4d5d 100644
--- a/nymea-app/styles/dark/Dialog.qml
+++ b/nymea-app/styles/dark/Dialog.qml
@@ -3,6 +3,8 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2013 - 2024, nymea GmbH
+** Copyright (C) 2024 - 2025, chargebyte austria GmbH
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
@@ -36,34 +38,13 @@
**
****************************************************************************/
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-*
-* 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 .
-*
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
-import QtQuick 2.9
-import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Controls.Material.impl 2.2
-import Nymea 1.0
+import Nymea
T.Dialog {
id: control
diff --git a/nymea-app/styles/dark/ItemDelegate.qml b/nymea-app/styles/dark/ItemDelegate.qml
new file mode 100644
index 00000000..ae45332d
--- /dev/null
+++ b/nymea-app/styles/dark/ItemDelegate.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+import Nymea
+
+T.ItemDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: 8
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.delegateHeight
+ color: control.highlighted ? control.Material.listHighlightColor : "transparent"
+ radius: Style.cornerRadius
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: true
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/nymea-app/styles/dark/Page.qml b/nymea-app/styles/dark/Page.qml
index e9ad1436..e763136e 100644
--- a/nymea-app/styles/dark/Page.qml
+++ b/nymea-app/styles/dark/Page.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Templates 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick
+import QtQuick.Templates
+import QtQuick.Controls.Material
Page {
background: Background {}
diff --git a/nymea-app/styles/dark/Style.qml b/nymea-app/styles/dark/Style.qml
index 4c500004..0b83254c 100644
--- a/nymea-app/styles/dark/Style.qml
+++ b/nymea-app/styles/dark/Style.qml
@@ -23,7 +23,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.0
+import QtQuick
import "../../ui"
StyleBase {
diff --git a/nymea-app/styles/energize/Background.qml b/nymea-app/styles/energize/Background.qml
index 8ecace77..ca6c179c 100644
--- a/nymea-app/styles/energize/Background.qml
+++ b/nymea-app/styles/energize/Background.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Rectangle {
gradient: Gradient {
diff --git a/nymea-app/styles/energize/Button.qml b/nymea-app/styles/energize/Button.qml
index fa205f8f..5d63db16 100644
--- a/nymea-app/styles/energize/Button.qml
+++ b/nymea-app/styles/energize/Button.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
+import QtQuick.Controls
import QtQuick.Controls.impl 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
import QtQuick.Controls.Material.impl 2.2
-import Nymea 1.0
+import Nymea
T.Button {
id: control
diff --git a/nymea-app/styles/energize/Page.qml b/nymea-app/styles/energize/Page.qml
index e9ad1436..a27db034 100644
--- a/nymea-app/styles/energize/Page.qml
+++ b/nymea-app/styles/energize/Page.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
+import QtQuick
import QtQuick.Templates 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
Page {
background: Background {}
diff --git a/nymea-app/styles/energize/Style.qml b/nymea-app/styles/energize/Style.qml
index 071fa83f..8984d331 100644
--- a/nymea-app/styles/energize/Style.qml
+++ b/nymea-app/styles/energize/Style.qml
@@ -23,7 +23,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.0
+import QtQuick
import "../../ui"
StyleBase {
diff --git a/nymea-app/styles/light/Background.qml b/nymea-app/styles/light/Background.qml
index 9ee708bc..935bafd8 100644
--- a/nymea-app/styles/light/Background.qml
+++ b/nymea-app/styles/light/Background.qml
@@ -22,8 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
+
import "qrc:/styles/light"
Rectangle {
diff --git a/nymea-app/styles/light/Button.qml b/nymea-app/styles/light/Button.qml
index 347a3fee..ce03673b 100644
--- a/nymea-app/styles/light/Button.qml
+++ b/nymea-app/styles/light/Button.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
+import QtQuick.Controls
import QtQuick.Controls.impl 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
import QtQuick.Controls.Material.impl 2.2
-import Nymea 1.0
+import Nymea
T.Button {
id: control
diff --git a/nymea-app/styles/light/Dialog.qml b/nymea-app/styles/light/Dialog.qml
index 98e5fdd0..ff61c50e 100644
--- a/nymea-app/styles/light/Dialog.qml
+++ b/nymea-app/styles/light/Dialog.qml
@@ -3,6 +3,8 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2013 - 2024, nymea GmbH
+** Copyright (C) 2024 - 2025, chargebyte austria GmbH
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit.
@@ -36,34 +38,12 @@
**
****************************************************************************/
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-*
-* 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 .
-*
-* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-import QtQuick 2.9
-import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Controls.Material.impl 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+import Nymea
T.Dialog {
id: control
diff --git a/nymea-app/styles/light/Page.qml b/nymea-app/styles/light/Page.qml
index e9ad1436..a27db034 100644
--- a/nymea-app/styles/light/Page.qml
+++ b/nymea-app/styles/light/Page.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
+import QtQuick
import QtQuick.Templates 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
Page {
background: Background {}
diff --git a/nymea-app/styles/light/Style.qml b/nymea-app/styles/light/Style.qml
index 56c336c6..8b049a15 100644
--- a/nymea-app/styles/light/Style.qml
+++ b/nymea-app/styles/light/Style.qml
@@ -23,7 +23,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.0
+import QtQuick
import "../../ui"
StyleBase {
diff --git a/nymea-app/styles/lime/Background.qml b/nymea-app/styles/lime/Background.qml
index 9a4e71a5..10ca63bd 100644
--- a/nymea-app/styles/lime/Background.qml
+++ b/nymea-app/styles/lime/Background.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Rectangle {
color: Style.backgroundColor
diff --git a/nymea-app/styles/lime/Button.qml b/nymea-app/styles/lime/Button.qml
index 0023b6e5..53fafe8f 100644
--- a/nymea-app/styles/lime/Button.qml
+++ b/nymea-app/styles/lime/Button.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
+import QtQuick.Controls
import QtQuick.Controls.impl 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
import QtQuick.Controls.Material.impl 2.2
T.Button {
diff --git a/nymea-app/styles/lime/Page.qml b/nymea-app/styles/lime/Page.qml
index e9ad1436..a27db034 100644
--- a/nymea-app/styles/lime/Page.qml
+++ b/nymea-app/styles/lime/Page.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
+import QtQuick
import QtQuick.Templates 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
Page {
background: Background {}
diff --git a/nymea-app/styles/lime/Style.qml b/nymea-app/styles/lime/Style.qml
index 85b15927..58ec21ae 100644
--- a/nymea-app/styles/lime/Style.qml
+++ b/nymea-app/styles/lime/Style.qml
@@ -23,7 +23,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.0
+import QtQuick
import "../../ui"
StyleBase {
diff --git a/nymea-app/styles/mellow/Background.qml b/nymea-app/styles/mellow/Background.qml
index 9a4e71a5..10ca63bd 100644
--- a/nymea-app/styles/mellow/Background.qml
+++ b/nymea-app/styles/mellow/Background.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Rectangle {
color: Style.backgroundColor
diff --git a/nymea-app/styles/mellow/Button.qml b/nymea-app/styles/mellow/Button.qml
index 347a3fee..ce03673b 100644
--- a/nymea-app/styles/mellow/Button.qml
+++ b/nymea-app/styles/mellow/Button.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
+import QtQuick.Controls
import QtQuick.Controls.impl 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
import QtQuick.Controls.Material.impl 2.2
-import Nymea 1.0
+import Nymea
T.Button {
id: control
diff --git a/nymea-app/styles/mellow/Page.qml b/nymea-app/styles/mellow/Page.qml
index e9ad1436..a27db034 100644
--- a/nymea-app/styles/mellow/Page.qml
+++ b/nymea-app/styles/mellow/Page.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
+import QtQuick
import QtQuick.Templates 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
Page {
background: Background {}
diff --git a/nymea-app/styles/mellow/Style.qml b/nymea-app/styles/mellow/Style.qml
index b3ca2e30..a3ab2595 100644
--- a/nymea-app/styles/mellow/Style.qml
+++ b/nymea-app/styles/mellow/Style.qml
@@ -23,7 +23,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.0
+import QtQuick
import "../../ui"
StyleBase {
diff --git a/nymea-app/styles/noir/Background.qml b/nymea-app/styles/noir/Background.qml
index 9a4e71a5..10ca63bd 100644
--- a/nymea-app/styles/noir/Background.qml
+++ b/nymea-app/styles/noir/Background.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Rectangle {
color: Style.backgroundColor
diff --git a/nymea-app/styles/noir/Button.qml b/nymea-app/styles/noir/Button.qml
index 4d93fd68..6fc06508 100644
--- a/nymea-app/styles/noir/Button.qml
+++ b/nymea-app/styles/noir/Button.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
import QtQuick.Templates 2.2 as T
-import QtQuick.Controls 2.2
+import QtQuick.Controls
import QtQuick.Controls.impl 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick.Controls.Material
import QtQuick.Controls.Material.impl 2.2
-import Nymea 1.0
+import Nymea
T.Button {
id: control
diff --git a/nymea-app/styles/noir/Page.qml b/nymea-app/styles/noir/Page.qml
index a3e3dd1f..148ec72a 100644
--- a/nymea-app/styles/noir/Page.qml
+++ b/nymea-app/styles/noir/Page.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
+import QtQuick
import QtQuick.Templates 2.2
-import QtQuick.Controls.Material 2.2
-import Nymea 1.0
+import QtQuick.Controls.Material
+import Nymea
Page {
background: Background {}
diff --git a/nymea-app/styles/noir/Style.qml b/nymea-app/styles/noir/Style.qml
index d22d3be4..c0bccd16 100644
--- a/nymea-app/styles/noir/Style.qml
+++ b/nymea-app/styles/noir/Style.qml
@@ -23,7 +23,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.0
+import QtQuick
import "../../ui"
StyleBase {
diff --git a/nymea-app/ui/Configuration.qml b/nymea-app/ui/Configuration.qml
index efda6d70..60f5afb7 100644
--- a/nymea-app/ui/Configuration.qml
+++ b/nymea-app/ui/Configuration.qml
@@ -23,7 +23,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.0
+import QtQuick
ConfigurationBase {
systemName: "nymea"
diff --git a/nymea-app/ui/ConfigurationBase.qml b/nymea-app/ui/ConfigurationBase.qml
index 29b887ce..9f77919d 100644
--- a/nymea-app/ui/ConfigurationBase.qml
+++ b/nymea-app/ui/ConfigurationBase.qml
@@ -22,7 +22,7 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
+import QtQuick
Item {
property string systemName: ""
diff --git a/nymea-app/ui/KeyboardLoader.qml b/nymea-app/ui/KeyboardLoader.qml
index 23b8c4a3..82fba9b1 100644
--- a/nymea-app/ui/KeyboardLoader.qml
+++ b/nymea-app/ui/KeyboardLoader.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Window 2.3
+import QtQuick
+import QtQuick.Window
Item {
id: root
@@ -40,8 +40,8 @@ Item {
property var kbd: null
property string virtualKeyboardString:
'
- import QtQuick 2.8;
- import QtQuick.VirtualKeyboard 2.1
+ import QtQuick
+ import QtQuick.VirtualKeyboard
InputPanel {
id: inputPanel
y: Qt.inputMethod.visible ? parent.height - inputPanel.height : parent.height
diff --git a/nymea-app/ui/MagicPage.qml b/nymea-app/ui/MagicPage.qml
index 1ba07b7e..642a627f 100644
--- a/nymea-app/ui/MagicPage.qml
+++ b/nymea-app/ui/MagicPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "components"
-import Nymea 1.0
Page {
id: root
@@ -99,8 +100,8 @@ Page {
Connections {
target: engine.ruleManager
- onAddRuleReply: {
- if (ruleError == RuleManager.RuleErrorNoError) {
+ onAddRuleReply: (commandId, ruleError, ruleId) => {
+ if (ruleError === RuleManager.RuleErrorNoError) {
// print("should tag rule now:", d.editRulePage.rule.id, d.editRulePage.ruleIcon, d.editRulePage.ruleColor)
// engine.tagsManager.tagRule(ruleId, "color", d.editRulePage.ruleColor)
// engine.tagsManager.tagRule(ruleId, "icon", d.editRulePage.ruleIcon)
@@ -112,8 +113,8 @@ Page {
d.editRulePage.busy = false;
}
- onEditRuleReply: {
- if (ruleError == RuleManager.RuleErrorNoError) {
+ onEditRuleReply: (commandId, ruleError) => {
+ if (ruleError === RuleManager.RuleErrorNoError) {
// print("should tag rule now:", d.editRulePage.ruleIcon, d.editRulePage.ruleColor)
engine.tagsManager.tagRule(d.editRulePage.rule.id, "color", d.editRulePage.ruleColor)
engine.tagsManager.tagRule(d.editRulePage.rule.id, "icon", d.editRulePage.ruleIcon)
diff --git a/nymea-app/ui/MainMenu.qml b/nymea-app/ui/MainMenu.qml
index 5d0f16a5..998369a4 100644
--- a/nymea-app/ui/MainMenu.qml
+++ b/nymea-app/ui/MainMenu.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Qt.labs.settings 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtCore
+import Nymea
+import NymeaApp.Utils
+
import "components"
-import Nymea 1.0
-import NymeaApp.Utils 1.0
Drawer {
id: root
@@ -187,7 +188,7 @@ Drawer {
enabled: topSectionLayout.configureConnections
onClicked: {
print("host is:", hostDelegate.configuredHost.uuid)
- if (hostDelegate.configuredHost.uuid != "{00000000-0000-0000-0000-000000000000}") {
+ if (hostDelegate.configuredHost.uuid !== "{00000000-0000-0000-0000-000000000000}") {
var popup = askCloseDialog.createObject(app, {uuid: hostDelegate.configuredHost.uuid, index: index})
popup.open();
} else {
@@ -265,7 +266,7 @@ Drawer {
fakeDragItem.y = Math.max(0, Math.min(hostsListView.height - fakeDragItem.height, originY - diff))
var hoveredIdx = hostsListView.indexAt(mouseX, mouseY)
- if (hoveredIdx >= 0 && draggedIndex != hoveredIdx) {
+ if (hoveredIdx >= 0 && draggedIndex !== hoveredIdx) {
print("moved", draggedIndex, "to", hoveredIdx)
root.configuredHosts.move(draggedIndex, hoveredIdx)
draggedIndex = hoveredIdx;
diff --git a/nymea-app/ui/MainPage.qml b/nymea-app/ui/MainPage.qml
index 38303ebb..23832c1f 100644
--- a/nymea-app/ui/MainPage.qml
+++ b/nymea-app/ui/MainPage.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtQuick.Window 2.3
-import Qt.labs.settings 1.0
-import Qt.labs.folderlistmodel 2.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtQuick.Window
+import QtCore
+import Qt.labs.folderlistmodel
import Qt5Compat.GraphicalEffects
-import Nymea 1.0
+import Nymea
+
import "components"
import "delegates"
import "mainviews"
@@ -124,7 +125,7 @@ Page {
Connections {
target: engine.ruleManager
- onAddRuleReply: {
+ onAddRuleReply: (commandId, ruleError, ruleId) => {
d.editRulePage.busy = false
if (d.editRulePage) {
pageStack.pop();
diff --git a/nymea-app/ui/Nymea.qml b/nymea-app/ui/Nymea.qml
index 237e3e44..4b777c5d 100644
--- a/nymea-app/ui/Nymea.qml
+++ b/nymea-app/ui/Nymea.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import Qt.labs.settings 1.0
-import Qt.labs.folderlistmodel 2.2
-import QtQuick.Window 2.3
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick.Controls.Material
+import QtQuick.Controls
+import QtQuick
+import QtQuick.Layouts
+import QtCore
+import Qt.labs.folderlistmodel
+import QtQuick.Window
+
+import Nymea
+import NymeaApp.Utils
ApplicationWindow {
id: app
@@ -567,7 +568,7 @@ ApplicationWindow {
// by checking if the app becomes inactive right after the event. If not, it's probably a back
// button press and we close ourselves.
onClosing: {
- if (Qt.platform.os == "android") {
+ if (Qt.platform.os === "android") {
var handled = rootItem.handleAndroidBackButton();
if (!handled) {
closeTimer.start()
@@ -591,20 +592,20 @@ ApplicationWindow {
showFiles: false
}
- // NOTE: If using a Dialog, make sure closePolicy does not contain Dialog.CloseOnPressOutside
- // or the virtual keyboard will close when pressing it...
+ // // NOTE: If using a Dialog, make sure closePolicy does not contain Dialog.CloseOnPressOutside
+ // // or the virtual keyboard will close when pressing it...
- // https://bugreports.qt.io/browse/QTBUG-56918
+ // // https://bugreports.qt.io/browse/QTBUG-56918
KeyboardLoader {
id: keyboardRect
- parent: app.overlay
+ // parent: app.overlay
z: 1
anchors { left: parent.left; bottom: parent.bottom; right: parent.right }
}
Image {
id: splashScreen
- parent: overlay
+ // parent: overlay
source: "/ui/images/nymea-splash.svg"
anchors.fill: parent
fillMode: Image.PreserveAspectCrop
diff --git a/nymea-app/ui/PushButtonAuthPage.qml b/nymea-app/ui/PushButtonAuthPage.qml
index df702911..01ebd627 100644
--- a/nymea-app/ui/PushButtonAuthPage.qml
+++ b/nymea-app/ui/PushButtonAuthPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "components"
Page {
diff --git a/nymea-app/ui/RootItem.qml b/nymea-app/ui/RootItem.qml
index 735f5b8f..ed301478 100644
--- a/nymea-app/ui/RootItem.qml
+++ b/nymea-app/ui/RootItem.qml
@@ -22,14 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
-import Qt.labs.settings 1.0
-import QtQuick.Window 2.12
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCore
+import QtQuick.Window
+import Nymea
+import NymeaApp.Utils
+
import "components"
import "connection"
diff --git a/nymea-app/ui/SettingsPage.qml b/nymea-app/ui/SettingsPage.qml
index e9756972..5f113aa8 100644
--- a/nymea-app/ui/SettingsPage.qml
+++ b/nymea-app/ui/SettingsPage.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+import NymeaApp.Utils
import "components"
Page {
diff --git a/nymea-app/ui/StyleBase.qml b/nymea-app/ui/StyleBase.qml
index 4208ec6e..5dda1587 100644
--- a/nymea-app/ui/StyleBase.qml
+++ b/nymea-app/ui/StyleBase.qml
@@ -22,7 +22,7 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
+import QtQuick
Item {
property color backgroundColor: "#fafafa"
diff --git a/nymea-app/ui/appsettings/AboutPage.qml b/nymea-app/ui/appsettings/AboutPage.qml
index c0338144..6398daab 100644
--- a/nymea-app/ui/appsettings/AboutPage.qml
+++ b/nymea-app/ui/appsettings/AboutPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/appsettings/AppLogPage.qml b/nymea-app/ui/appsettings/AppLogPage.qml
index fe073a99..52ae632e 100644
--- a/nymea-app/ui/appsettings/AppLogPage.qml
+++ b/nymea-app/ui/appsettings/AppLogPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/appsettings/AppSettingsPage.qml b/nymea-app/ui/appsettings/AppSettingsPage.qml
index 88732794..23592532 100644
--- a/nymea-app/ui/appsettings/AppSettingsPage.qml
+++ b/nymea-app/ui/appsettings/AppSettingsPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/appsettings/DeveloperOptionsPage.qml b/nymea-app/ui/appsettings/DeveloperOptionsPage.qml
index 743d7490..52d11f89 100644
--- a/nymea-app/ui/appsettings/DeveloperOptionsPage.qml
+++ b/nymea-app/ui/appsettings/DeveloperOptionsPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/appsettings/LoggingCategories.qml b/nymea-app/ui/appsettings/LoggingCategories.qml
index 44dbe86c..81d0fcab 100644
--- a/nymea-app/ui/appsettings/LoggingCategories.qml
+++ b/nymea-app/ui/appsettings/LoggingCategories.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/appsettings/LookAndFeelSettingsPage.qml b/nymea-app/ui/appsettings/LookAndFeelSettingsPage.qml
index 6e6d2b20..95657a19 100644
--- a/nymea-app/ui/appsettings/LookAndFeelSettingsPage.qml
+++ b/nymea-app/ui/appsettings/LookAndFeelSettingsPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
@@ -50,7 +51,7 @@ SettingsPageBase {
model: styleController.allStyles
currentIndex: styleController.allStyles.indexOf(styleController.currentStyle)
- onActivated: {
+ onActivated: (index) => {
styleController.currentStyle = model[index]
}
}
@@ -88,7 +89,7 @@ SettingsPageBase {
}
}
- onActivated: {
+ onActivated: (index) => {
switch (currentIndex) {
case 0:
settings.viewMode = ApplicationWindow.Windowed;
@@ -123,8 +124,8 @@ SettingsPageBase {
id: unitsComboBox
currentIndex: settings.units === "metric" ? 0 : 1
model: [ qsTr("Metric"), qsTr("Imperial") ]
- onActivated: {
- settings.units = index == 0 ? "metric" : "imperial";
+ onActivated: (index) => {
+ settings.units = index === 0 ? "metric" : "imperial";
}
}
}
diff --git a/nymea-app/ui/components/ActivityIndicator.qml b/nymea-app/ui/components/ActivityIndicator.qml
index 529b26f2..294dcca2 100644
--- a/nymea-app/ui/components/ActivityIndicator.qml
+++ b/nymea-app/ui/components/ActivityIndicator.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/AutoSizeMenu.qml b/nymea-app/ui/components/AutoSizeMenu.qml
index bbccc66f..a8727e45 100644
--- a/nymea-app/ui/components/AutoSizeMenu.qml
+++ b/nymea-app/ui/components/AutoSizeMenu.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
+import QtQuick
+import QtQuick.Controls
Menu {
modal: true
diff --git a/nymea-app/ui/components/BackgroundFocusHandler.qml b/nymea-app/ui/components/BackgroundFocusHandler.qml
index 4d7be7a3..b9f01a39 100644
--- a/nymea-app/ui/components/BackgroundFocusHandler.qml
+++ b/nymea-app/ui/components/BackgroundFocusHandler.qml
@@ -22,7 +22,7 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
MouseArea {
onClicked: {
diff --git a/nymea-app/ui/components/BatteryStatusIcon.qml b/nymea-app/ui/components/BatteryStatusIcon.qml
index 5a29a5fd..47225435 100644
--- a/nymea-app/ui/components/BatteryStatusIcon.qml
+++ b/nymea-app/ui/components/BatteryStatusIcon.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import Nymea
+import NymeaApp.Utils
ColorIcon {
id: root
@@ -42,12 +42,12 @@ ColorIcon {
name: {
if (!hasBatteryLevel) {
if (isCritical) {
- return "qrc:/icons/battery/battery-020.svg"
+ return "battery/battery-020"
}
- return "qrc:/icons/battery/battery-100.svg"
+ return "battery/battery-100"
}
var rounded = Math.round(batteryLevel / 10) * 10
- return "qrc:/icons/battery/battery-" + NymeaUtils.pad(rounded, 3)
+ return "battery/battery-" + NymeaUtils.pad(rounded, 3)
}
}
diff --git a/nymea-app/ui/components/BigThingTile.qml b/nymea-app/ui/components/BigThingTile.qml
index f14c06cb..a5e01747 100644
--- a/nymea-app/ui/components/BigThingTile.qml
+++ b/nymea-app/ui/components/BigThingTile.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
BigTile {
id: root
diff --git a/nymea-app/ui/components/BigTile.qml b/nymea-app/ui/components/BigTile.qml
index 80f8ecc2..e7720252 100644
--- a/nymea-app/ui/components/BigTile.qml
+++ b/nymea-app/ui/components/BigTile.qml
@@ -22,14 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+import Nymea
Item {
id: root
+
implicitHeight: layout.implicitHeight + app.margins
property alias header: headerContainer.children
@@ -85,6 +87,7 @@ Item {
anchors.fill: parent
anchors.margins: app.margins / 2
radius: Style.cornerRadius
+ clip: true
gradient: Gradient {
GradientStop {
@@ -100,6 +103,7 @@ Item {
}
}
+
ColumnLayout {
id: layout
spacing: 0
@@ -113,6 +117,7 @@ Item {
height: childrenRect.height
}
+
ItemDelegate {
id: content
Layout.fillWidth: true
diff --git a/nymea-app/ui/components/BrightnessSlider.qml b/nymea-app/ui/components/BrightnessSlider.qml
index 5ba2eb7e..0ecca7d7 100644
--- a/nymea-app/ui/components/BrightnessSlider.qml
+++ b/nymea-app/ui/components/BrightnessSlider.qml
@@ -22,9 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../utils"
Item {
diff --git a/nymea-app/ui/components/BrowserContextMenu.qml b/nymea-app/ui/components/BrowserContextMenu.qml
index 96c0db00..4d6bf141 100644
--- a/nymea-app/ui/components/BrowserContextMenu.qml
+++ b/nymea-app/ui/components/BrowserContextMenu.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../delegates"
NymeaDialog {
diff --git a/nymea-app/ui/components/BusyOverlay.qml b/nymea-app/ui/components/BusyOverlay.qml
index e75938c3..d8087f46 100644
--- a/nymea-app/ui/components/BusyOverlay.qml
+++ b/nymea-app/ui/components/BusyOverlay.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Controls
Rectangle {
anchors.fill: parent
diff --git a/nymea-app/ui/components/ButtonControls.qml b/nymea-app/ui/components/ButtonControls.qml
index 3d2c7c68..20c5de25 100644
--- a/nymea-app/ui/components/ButtonControls.qml
+++ b/nymea-app/ui/components/ButtonControls.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
RowLayout {
id: root
diff --git a/nymea-app/ui/components/CircleBackground.qml b/nymea-app/ui/components/CircleBackground.qml
index 2ce39276..1bda4116 100644
--- a/nymea-app/ui/components/CircleBackground.qml
+++ b/nymea-app/ui/components/CircleBackground.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../utils"
Item {
diff --git a/nymea-app/ui/components/ClosableArrowAnimation.qml b/nymea-app/ui/components/ClosableArrowAnimation.qml
index 28a027ac..2103c76f 100644
--- a/nymea-app/ui/components/ClosableArrowAnimation.qml
+++ b/nymea-app/ui/components/ClosableArrowAnimation.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: arrows
diff --git a/nymea-app/ui/components/ClosablesControlLarge.qml b/nymea-app/ui/components/ClosablesControlLarge.qml
index f4025503..c3d25035 100644
--- a/nymea-app/ui/components/ClosablesControlLarge.qml
+++ b/nymea-app/ui/components/ClosablesControlLarge.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../customviews"
Item {
diff --git a/nymea-app/ui/components/ColorIcon.qml b/nymea-app/ui/components/ColorIcon.qml
index ad60559c..af2e3b65 100644
--- a/nymea-app/ui/components/ColorIcon.qml
+++ b/nymea-app/ui/components/ColorIcon.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: icon
diff --git a/nymea-app/ui/components/ColorPicker.qml b/nymea-app/ui/components/ColorPicker.qml
index 510650e2..b2c221e0 100644
--- a/nymea-app/ui/components/ColorPicker.qml
+++ b/nymea-app/ui/components/ColorPicker.qml
@@ -22,9 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../utils"
Item {
diff --git a/nymea-app/ui/components/ColorPickerCt.qml b/nymea-app/ui/components/ColorPickerCt.qml
index d5329645..720725ee 100644
--- a/nymea-app/ui/components/ColorPickerCt.qml
+++ b/nymea-app/ui/components/ColorPickerCt.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/ColorPickerPre510.qml b/nymea-app/ui/components/ColorPickerPre510.qml
index 42c0a0c7..11e9bc48 100644
--- a/nymea-app/ui/components/ColorPickerPre510.qml
+++ b/nymea-app/ui/components/ColorPickerPre510.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/ColorTemperaturePicker.qml b/nymea-app/ui/components/ColorTemperaturePicker.qml
index 09b435c1..66c0f2bf 100644
--- a/nymea-app/ui/components/ColorTemperaturePicker.qml
+++ b/nymea-app/ui/components/ColorTemperaturePicker.qml
@@ -22,9 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../utils"
Item {
diff --git a/nymea-app/ui/components/ConnectionInfoDialog.qml b/nymea-app/ui/components/ConnectionInfoDialog.qml
index e6ef2bee..21d41b22 100644
--- a/nymea-app/ui/components/ConnectionInfoDialog.qml
+++ b/nymea-app/ui/components/ConnectionInfoDialog.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import Nymea 1.0
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "qrc:/ui/connection"
Dialog {
diff --git a/nymea-app/ui/components/ConnectionStatusIcon.qml b/nymea-app/ui/components/ConnectionStatusIcon.qml
index 65e7372a..b1dafa2b 100644
--- a/nymea-app/ui/components/ConnectionStatusIcon.qml
+++ b/nymea-app/ui/components/ConnectionStatusIcon.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import Nymea
+import NymeaApp.Utils
ColorIcon {
id: root
diff --git a/nymea-app/ui/components/DatePicker.qml b/nymea-app/ui/components/DatePicker.qml
index 8d843f7b..205ed459 100644
--- a/nymea-app/ui/components/DatePicker.qml
+++ b/nymea-app/ui/components/DatePicker.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
ColumnLayout {
id: root
diff --git a/nymea-app/ui/components/Dial.qml b/nymea-app/ui/components/Dial.qml
index af4b2377..2ef01ee1 100644
--- a/nymea-app/ui/components/Dial.qml
+++ b/nymea-app/ui/components/Dial.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../utils"
Item {
diff --git a/nymea-app/ui/components/EmptyViewPlaceholder.qml b/nymea-app/ui/components/EmptyViewPlaceholder.qml
index c4285f1a..c1922a6b 100644
--- a/nymea-app/ui/components/EmptyViewPlaceholder.qml
+++ b/nymea-app/ui/components/EmptyViewPlaceholder.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
ColumnLayout {
id: root
diff --git a/nymea-app/ui/components/ErrorDialog.qml b/nymea-app/ui/components/ErrorDialog.qml
index 1a065d6a..35b80b88 100644
--- a/nymea-app/ui/components/ErrorDialog.qml
+++ b/nymea-app/ui/components/ErrorDialog.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
NymeaDialog {
id: root
diff --git a/nymea-app/ui/components/Graph.qml b/nymea-app/ui/components/Graph.qml
index 16f85d67..dbbb363b 100644
--- a/nymea-app/ui/components/Graph.qml
+++ b/nymea-app/ui/components/Graph.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
-import Nymea 1.0
-import QtQuick.Controls.Material 2.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/GroupedListView.qml b/nymea-app/ui/components/GroupedListView.qml
index eb75277c..5c5108e3 100644
--- a/nymea-app/ui/components/GroupedListView.qml
+++ b/nymea-app/ui/components/GroupedListView.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
+import QtQuick
+import QtQuick.Controls
ListView {
id: root
diff --git a/nymea-app/ui/components/HeaderButton.qml b/nymea-app/ui/components/HeaderButton.qml
index eea5c13b..22d2058e 100644
--- a/nymea-app/ui/components/HeaderButton.qml
+++ b/nymea-app/ui/components/HeaderButton.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import Nymea
ToolButton {
property alias imageSource: image.name
diff --git a/nymea-app/ui/components/IconMenuItem.qml b/nymea-app/ui/components/IconMenuItem.qml
index ac86dcfc..401430eb 100644
--- a/nymea-app/ui/components/IconMenuItem.qml
+++ b/nymea-app/ui/components/IconMenuItem.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
MenuItem {
id: root
diff --git a/nymea-app/ui/components/Imprint.qml b/nymea-app/ui/components/Imprint.qml
index 5430fa15..c09d2280 100644
--- a/nymea-app/ui/components/Imprint.qml
+++ b/nymea-app/ui/components/Imprint.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
Item {
diff --git a/nymea-app/ui/components/InfoPane.qml b/nymea-app/ui/components/InfoPane.qml
index 3fb112c6..b1575171 100644
--- a/nymea-app/ui/components/InfoPane.qml
+++ b/nymea-app/ui/components/InfoPane.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
InfoPaneBase {
id: root
diff --git a/nymea-app/ui/components/InfoPaneBase.qml b/nymea-app/ui/components/InfoPaneBase.qml
index c1aef187..87fdf907 100644
--- a/nymea-app/ui/components/InfoPaneBase.qml
+++ b/nymea-app/ui/components/InfoPaneBase.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/KeypadButton.qml b/nymea-app/ui/components/KeypadButton.qml
index d7e11c40..00aa6591 100644
--- a/nymea-app/ui/components/KeypadButton.qml
+++ b/nymea-app/ui/components/KeypadButton.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import Nymea 1.0
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/Led.qml b/nymea-app/ui/components/Led.qml
index 76273b35..962d2136 100644
--- a/nymea-app/ui/components/Led.qml
+++ b/nymea-app/ui/components/Led.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/ListFilterInput.qml b/nymea-app/ui/components/ListFilterInput.qml
index b0e6a3ad..ef34e151 100644
--- a/nymea-app/ui/components/ListFilterInput.qml
+++ b/nymea-app/ui/components/ListFilterInput.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.6
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
Item {
id: root
diff --git a/nymea-app/ui/components/ListSectionHeader.qml b/nymea-app/ui/components/ListSectionHeader.qml
index 38aad515..ec3e50c8 100644
--- a/nymea-app/ui/components/ListSectionHeader.qml
+++ b/nymea-app/ui/components/ListSectionHeader.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Layouts 1.3
-import QtQuick.Controls 2.2
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
ColumnLayout {
width: parent.width
diff --git a/nymea-app/ui/components/MainPageTabButton.qml b/nymea-app/ui/components/MainPageTabButton.qml
index 863b9216..9d42fcfa 100644
--- a/nymea-app/ui/components/MainPageTabButton.qml
+++ b/nymea-app/ui/components/MainPageTabButton.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+
+import Nymea
TabButton {
id: root
diff --git a/nymea-app/ui/components/MainPageTile.qml b/nymea-app/ui/components/MainPageTile.qml
index ecfe5d13..bb29e647 100644
--- a/nymea-app/ui/components/MainPageTile.qml
+++ b/nymea-app/ui/components/MainPageTile.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
+import Nymea
Item {
id: root
@@ -36,6 +36,7 @@ Item {
property alias fallbackIconName: fallbackIcon.name
property alias iconColor: colorIcon.color
property alias backgroundImage: backgroundImg.source
+
property string text
property bool disconnected: false
property bool isWireless: false
@@ -99,7 +100,6 @@ Item {
anchors.margins: app.margins / 2
source: backgroundImg
maskSource: backgroundImgClipper
-// visible: root.backgroundImage.length > 0
}
ItemDelegate {
@@ -141,7 +141,7 @@ Item {
Item {
Layout.fillWidth: true
Layout.fillHeight: true
- visible: backgroundImg.status !== Image.Ready && label.text != ""
+ visible: backgroundImg.status !== Image.Ready && label.text !== ""
Label {
id: label
diff --git a/nymea-app/ui/components/MainViewBase.qml b/nymea-app/ui/components/MainViewBase.qml
index aa3dc62a..6d8cf1b8 100644
--- a/nymea-app/ui/components/MainViewBase.qml
+++ b/nymea-app/ui/components/MainViewBase.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
@@ -52,6 +53,6 @@ Item {
MouseArea {
anchors.fill: parent
preventStealing: true
- onWheel: wheel.accepted = true
+ onWheel: (wheel) => wheel.accepted = true
}
}
diff --git a/nymea-app/ui/components/MediaArtworkImage.qml b/nymea-app/ui/components/MediaArtworkImage.qml
index a120a0bd..dc1d5b2a 100644
--- a/nymea-app/ui/components/MediaArtworkImage.qml
+++ b/nymea-app/ui/components/MediaArtworkImage.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/MediaBrowser.qml b/nymea-app/ui/components/MediaBrowser.qml
index d1ebca29..e5b651dd 100644
--- a/nymea-app/ui/components/MediaBrowser.qml
+++ b/nymea-app/ui/components/MediaBrowser.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
import "../delegates"
diff --git a/nymea-app/ui/components/MediaControls.qml b/nymea-app/ui/components/MediaControls.qml
index bdc4c10a..81d83e15 100644
--- a/nymea-app/ui/components/MediaControls.qml
+++ b/nymea-app/ui/components/MediaControls.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
RowLayout {
id: root
diff --git a/nymea-app/ui/components/MediaPlayer.qml b/nymea-app/ui/components/MediaPlayer.qml
index ec8078ed..dab53d0e 100644
--- a/nymea-app/ui/components/MediaPlayer.qml
+++ b/nymea-app/ui/components/MediaPlayer.qml
@@ -22,14 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
-import QtGraphicalEffects 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+import NymeaApp.Utils
import Qt5Compat.GraphicalEffects
+
import "../delegates"
import "../utils"
diff --git a/nymea-app/ui/components/MultiSelectionTabs.qml b/nymea-app/ui/components/MultiSelectionTabs.qml
index 4a31aa7a..d62708f5 100644
--- a/nymea-app/ui/components/MultiSelectionTabs.qml
+++ b/nymea-app/ui/components/MultiSelectionTabs.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.12
-import QtQuick.Layouts 1.15
-import QtQuick.Controls 2.12
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Qt5Compat.GraphicalEffects
+import Nymea
Rectangle {
id: root
diff --git a/nymea-app/ui/components/NavigationPad.qml b/nymea-app/ui/components/NavigationPad.qml
index f151193d..94ba4ecf 100644
--- a/nymea-app/ui/components/NavigationPad.qml
+++ b/nymea-app/ui/components/NavigationPad.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import Nymea 1.0
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
+import QtQuick
+import Nymea
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
Item {
id: root
diff --git a/nymea-app/ui/components/NymeaDialog.qml b/nymea-app/ui/components/NymeaDialog.qml
index 04f53667..eb64e977 100644
--- a/nymea-app/ui/components/NymeaDialog.qml
+++ b/nymea-app/ui/components/NymeaDialog.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
Dialog {
id: root
@@ -46,15 +46,15 @@ Dialog {
// onDestroye: root.destroy()
// }
- MouseArea {
- parent: app.overlay
- anchors.fill: parent
- z: -1
- onPressed: {
- print("Dialog: eating mouse press", root.title)
- mouse.accepted = true
- }
- }
+ // MouseArea {
+ // // parent: app.overlay
+ // anchors.fill: parent
+ // z: -1
+ // onPressed: {
+ // print("Dialog: eating mouse press", root.title)
+ // mouse.accepted = true
+ // }
+ // }
header: Item {
implicitHeight: headerRow.height + app.margins
diff --git a/nymea-app/ui/components/NymeaHeader.qml b/nymea-app/ui/components/NymeaHeader.qml
index becb97ef..7586f3bf 100644
--- a/nymea-app/ui/components/NymeaHeader.qml
+++ b/nymea-app/ui/components/NymeaHeader.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/NymeaItemDelegate.qml b/nymea-app/ui/components/NymeaItemDelegate.qml
index d7427cf9..fa649169 100644
--- a/nymea-app/ui/components/NymeaItemDelegate.qml
+++ b/nymea-app/ui/components/NymeaItemDelegate.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import QtQuick.Controls.Material 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
// There's a bug in QtQuick.Controls' SwipeDelegate in that it appears with wrong
// background when used in Popups/Dialogs So we need a non-swipable one for those cases
diff --git a/nymea-app/ui/components/NymeaSpinBox.qml b/nymea-app/ui/components/NymeaSpinBox.qml
index d252ae93..9c99bffb 100644
--- a/nymea-app/ui/components/NymeaSpinBox.qml
+++ b/nymea-app/ui/components/NymeaSpinBox.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
RowLayout {
id: root
diff --git a/nymea-app/ui/components/NymeaSwipeDelegate.qml b/nymea-app/ui/components/NymeaSwipeDelegate.qml
index 412c4a38..48823855 100644
--- a/nymea-app/ui/components/NymeaSwipeDelegate.qml
+++ b/nymea-app/ui/components/NymeaSwipeDelegate.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import QtQuick.Controls.Material 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
SwipeDelegate {
id: root
diff --git a/nymea-app/ui/components/NymeaTextField.qml b/nymea-app/ui/components/NymeaTextField.qml
index 58b5c5fe..c23e48a9 100644
--- a/nymea-app/ui/components/NymeaTextField.qml
+++ b/nymea-app/ui/components/NymeaTextField.qml
@@ -22,26 +22,17 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.0
-import QtQuick.Controls.Material 2.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+import Nymea
TextField {
id: control
property bool error: false
- onEditingFinished: {
- parent.forceActiveFocus()
- }
-
- background: Rectangle {
- y: control.height - height - control.bottomPadding + 8
- implicitWidth: 120
- height: control.activeFocus || control.hovered ? 2 : 1
- color: control.error ? Style.red : control.activeFocus ? Style.accentColor
- : (control.hovered ? control.Material.primaryTextColor : control.Material.hintTextColor)
- }
+ color: enabled ? ( control.error ? Style.red : Material.foreground) : Material.hintTextColor
}
diff --git a/nymea-app/ui/components/NymeaToolTip.qml b/nymea-app/ui/components/NymeaToolTip.qml
index 34d31aa6..3750e640 100644
--- a/nymea-app/ui/components/NymeaToolTip.qml
+++ b/nymea-app/ui/components/NymeaToolTip.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
+import QtQuick
import Qt5Compat.GraphicalEffects
-import Nymea 1.0
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/PasswordTextField.qml b/nymea-app/ui/components/PasswordTextField.qml
index 243f5db8..324d63d9 100644
--- a/nymea-app/ui/components/PasswordTextField.qml
+++ b/nymea-app/ui/components/PasswordTextField.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
ColumnLayout {
id: root
diff --git a/nymea-app/ui/components/ProgressButton.qml b/nymea-app/ui/components/ProgressButton.qml
index ed5333dc..f6bfeab5 100644
--- a/nymea-app/ui/components/ProgressButton.qml
+++ b/nymea-app/ui/components/ProgressButton.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/RemoveThingMethodDialog.qml b/nymea-app/ui/components/RemoveThingMethodDialog.qml
index 73461108..da9039e4 100644
--- a/nymea-app/ui/components/RemoveThingMethodDialog.qml
+++ b/nymea-app/ui/components/RemoveThingMethodDialog.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
Dialog {
id: root
diff --git a/nymea-app/ui/components/SelectionTabs.qml b/nymea-app/ui/components/SelectionTabs.qml
index d8448874..5c0a0568 100644
--- a/nymea-app/ui/components/SelectionTabs.qml
+++ b/nymea-app/ui/components/SelectionTabs.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
Rectangle {
id: root
diff --git a/nymea-app/ui/components/SettingsPageBase.qml b/nymea-app/ui/components/SettingsPageBase.qml
index 98c3876b..a26b5649 100644
--- a/nymea-app/ui/components/SettingsPageBase.qml
+++ b/nymea-app/ui/components/SettingsPageBase.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
Page {
id: root
diff --git a/nymea-app/ui/components/SettingsPageSectionHeader.qml b/nymea-app/ui/components/SettingsPageSectionHeader.qml
index 729d6c0e..9668fa66 100644
--- a/nymea-app/ui/components/SettingsPageSectionHeader.qml
+++ b/nymea-app/ui/components/SettingsPageSectionHeader.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
Label {
Layout.fillWidth: true
diff --git a/nymea-app/ui/components/SettingsTile.qml b/nymea-app/ui/components/SettingsTile.qml
index bfb53ee3..491bf29a 100644
--- a/nymea-app/ui/components/SettingsTile.qml
+++ b/nymea-app/ui/components/SettingsTile.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
BigTile {
id: root
diff --git a/nymea-app/ui/components/SetupStatusIcon.qml b/nymea-app/ui/components/SetupStatusIcon.qml
index fbf31194..25d132f1 100644
--- a/nymea-app/ui/components/SetupStatusIcon.qml
+++ b/nymea-app/ui/components/SetupStatusIcon.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import Nymea 1.0
+import QtQuick
+import Nymea
ColorIcon {
id: root
diff --git a/nymea-app/ui/components/ShuffleRepeatVolumeControl.qml b/nymea-app/ui/components/ShuffleRepeatVolumeControl.qml
index 3c2a96aa..e37da75f 100644
--- a/nymea-app/ui/components/ShuffleRepeatVolumeControl.qml
+++ b/nymea-app/ui/components/ShuffleRepeatVolumeControl.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
RowLayout {
id: root
diff --git a/nymea-app/ui/components/ShutterControls.qml b/nymea-app/ui/components/ShutterControls.qml
index 81c670f2..535a3771 100644
--- a/nymea-app/ui/components/ShutterControls.qml
+++ b/nymea-app/ui/components/ShutterControls.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/components/SmartMeterChart.qml b/nymea-app/ui/components/SmartMeterChart.qml
index 205f1c78..26df40e3 100644
--- a/nymea-app/ui/components/SmartMeterChart.qml
+++ b/nymea-app/ui/components/SmartMeterChart.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
ChartView {
id: root
diff --git a/nymea-app/ui/components/StateDial.qml b/nymea-app/ui/components/StateDial.qml
index 7829021c..3f69ca3a 100644
--- a/nymea-app/ui/components/StateDial.qml
+++ b/nymea-app/ui/components/StateDial.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import Nymea
+import QtQuick.Layouts
+
import "../utils"
Item {
diff --git a/nymea-app/ui/components/SwipeDelegateGroup.qml b/nymea-app/ui/components/SwipeDelegateGroup.qml
index ab1196e2..9a5c3798 100644
--- a/nymea-app/ui/components/SwipeDelegateGroup.qml
+++ b/nymea-app/ui/components/SwipeDelegateGroup.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
+import QtQuick
+import QtQuick.Controls
Item {
id: swipeGroup
diff --git a/nymea-app/ui/components/ThinDivider.qml b/nymea-app/ui/components/ThinDivider.qml
index 10391da1..fe6cd6d9 100644
--- a/nymea-app/ui/components/ThinDivider.qml
+++ b/nymea-app/ui/components/ThinDivider.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import Nymea
Rectangle {
height: 1
diff --git a/nymea-app/ui/components/ThingContextMenu.qml b/nymea-app/ui/components/ThingContextMenu.qml
index e68862e7..ddfd1fcb 100644
--- a/nymea-app/ui/components/ThingContextMenu.qml
+++ b/nymea-app/ui/components/ThingContextMenu.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
AutoSizeMenu {
id: root
diff --git a/nymea-app/ui/components/ThingInfoPane.qml b/nymea-app/ui/components/ThingInfoPane.qml
index 23d62cd4..74710499 100644
--- a/nymea-app/ui/components/ThingInfoPane.qml
+++ b/nymea-app/ui/components/ThingInfoPane.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
InfoPaneBase {
id: root
diff --git a/nymea-app/ui/components/ThingStatusIcons.qml b/nymea-app/ui/components/ThingStatusIcons.qml
index 53525b3d..94a53cc1 100644
--- a/nymea-app/ui/components/ThingStatusIcons.qml
+++ b/nymea-app/ui/components/ThingStatusIcons.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
RowLayout {
id: root
diff --git a/nymea-app/ui/components/ThrottledSlider.qml b/nymea-app/ui/components/ThrottledSlider.qml
index ef18d2a8..196c4c60 100644
--- a/nymea-app/ui/components/ThrottledSlider.qml
+++ b/nymea-app/ui/components/ThrottledSlider.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Controls
Item {
id: root
diff --git a/nymea-app/ui/components/TimePicker.qml b/nymea-app/ui/components/TimePicker.qml
index 772dc9e6..17aad19a 100644
--- a/nymea-app/ui/components/TimePicker.qml
+++ b/nymea-app/ui/components/TimePicker.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
ColumnLayout {
id: root
diff --git a/nymea-app/ui/components/UpdateRunningOverlay.qml b/nymea-app/ui/components/UpdateRunningOverlay.qml
index 1541ec0d..636fc458 100644
--- a/nymea-app/ui/components/UpdateRunningOverlay.qml
+++ b/nymea-app/ui/components/UpdateRunningOverlay.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
Rectangle {
anchors.fill: parent
diff --git a/nymea-app/ui/components/UpdateStatusIcon.qml b/nymea-app/ui/components/UpdateStatusIcon.qml
index d7a3b78c..d255d24e 100644
--- a/nymea-app/ui/components/UpdateStatusIcon.qml
+++ b/nymea-app/ui/components/UpdateStatusIcon.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import Nymea 1.0
+import QtQuick
+import Nymea
ColorIcon {
id: root
diff --git a/nymea-app/ui/components/WebViewWrapper.qml b/nymea-app/ui/components/WebViewWrapper.qml
index a2c979d0..601f7aec 100644
--- a/nymea-app/ui/components/WebViewWrapper.qml
+++ b/nymea-app/ui/components/WebViewWrapper.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtWebView 1.1
+import QtQuick
+import QtWebView
// This is needed because we can only load this on-demand but
// *deployqt will not include the module if there isn't a actual qml file importing it
diff --git a/nymea-app/ui/components/WizardPageBase.qml b/nymea-app/ui/components/WizardPageBase.qml
index 4b200ba5..c8a7bf3a 100644
--- a/nymea-app/ui/components/WizardPageBase.qml
+++ b/nymea-app/ui/components/WizardPageBase.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
@@ -75,7 +76,8 @@ Page {
Row {
id: additionalIcons
- anchors { right: parent.right; top: parent.top }
+ Layout.alignment: Qt.AlignTop | Qt.AlignRight
+ //anchors { right: parent.right; top: parent.top }
visible: !d.configOverlay
width: visible ? implicitWidth : 0
Repeater {
diff --git a/nymea-app/ui/connection/CertificateDialog.qml b/nymea-app/ui/connection/CertificateDialog.qml
index 6647b1f6..92c4647e 100644
--- a/nymea-app/ui/connection/CertificateDialog.qml
+++ b/nymea-app/ui/connection/CertificateDialog.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Dialog {
diff --git a/nymea-app/ui/connection/CertificateErrorDialog.qml b/nymea-app/ui/connection/CertificateErrorDialog.qml
index 13a65bba..0e2127f1 100644
--- a/nymea-app/ui/connection/CertificateErrorDialog.qml
+++ b/nymea-app/ui/connection/CertificateErrorDialog.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
NymeaDialog {
diff --git a/nymea-app/ui/connection/ConnectingPage.qml b/nymea-app/ui/connection/ConnectingPage.qml
index 8f9c3e5b..7ab6a8e3 100644
--- a/nymea-app/ui/connection/ConnectingPage.qml
+++ b/nymea-app/ui/connection/ConnectingPage.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
-import "../components"
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+import "../components"
Page {
id: root
diff --git a/nymea-app/ui/connection/ConnectionWizard.qml b/nymea-app/ui/connection/ConnectionWizard.qml
index 0d040c4a..c309fcc4 100644
--- a/nymea-app/ui/connection/ConnectionWizard.qml
+++ b/nymea-app/ui/connection/ConnectionWizard.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.2
-import Qt.labs.settings 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtCore
+import Nymea
import "../components"
-import Nymea 1.0
WizardPageBase {
id: root
@@ -67,7 +67,7 @@ WizardPageBase {
ColorIcon {
anchors.centerIn: parent
size: Math.min(parent.width, parent.height, Style.hugeIconSize * 2)
- name: "nymea-logo"
+ name: "qrc:/ui/images/nymea-logo.svg"
}
}
@@ -98,7 +98,7 @@ WizardPageBase {
font: Style.smallFont
text: qsTr("Please follow the installation instructions on %1 to install a nymea system.").arg('nymea.io')
horizontalAlignment: Text.AlignHCenter
- onLinkActivated: Qt.openUrlExternally(link)
+ onLinkActivated: (link) => Qt.openUrlExternally(link)
}
}
Item { Layout.fillHeight: true }
@@ -353,7 +353,7 @@ WizardPageBase {
Layout.margins: Style.margins
fillMode: Image.PreserveAspectFit
sourceSize.width: width
- source: "qrc:/icons/setupwizard/wired-connection.svg"
+ source: "qrc:/ui/images/setupwizard/wired-connection.svg"
}
}
}
@@ -374,7 +374,7 @@ WizardPageBase {
Layout.margins: Style.margins
fillMode: Image.PreserveAspectFit
sourceSize.width: width
- source: "qrc:/icons/setupwizard/wireless-connection.svg"
+ source: "qrc:/ui/images/setupwizard/wireless-connection.svg"
}
}
}
@@ -661,7 +661,6 @@ WizardPageBase {
NymeaTextField {
id: ssidTextField
Layout.fillWidth: true
-
}
Label {
diff --git a/nymea-app/ui/connection/LoginPage.qml b/nymea-app/ui/connection/LoginPage.qml
index f74b644a..599f2926 100644
--- a/nymea-app/ui/connection/LoginPage.qml
+++ b/nymea-app/ui/connection/LoginPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
@@ -125,8 +126,8 @@ SettingsPageBase {
? Qt.ImhEmailCharactersOnly | Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText
: Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText
error: loginForm.showErrors && !acceptableInput
- validator: RegExpValidator {
- regExp: /[a-zA-Z0-9_\\.+-@]{3,}/
+ validator: RegularExpressionValidator {
+ regularExpression: /[a-zA-Z0-9_\\.+-@]{3,}/
}
}
Label {
diff --git a/nymea-app/ui/connection/ManualConnectionEntry.qml b/nymea-app/ui/connection/ManualConnectionEntry.qml
index 558a05ea..a468fbfa 100644
--- a/nymea-app/ui/connection/ManualConnectionEntry.qml
+++ b/nymea-app/ui/connection/ManualConnectionEntry.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
ColumnLayout {
diff --git a/nymea-app/ui/connection/SetupWizard.qml b/nymea-app/ui/connection/SetupWizard.qml
index 47455cf7..f9f4e641 100644
--- a/nymea-app/ui/connection/SetupWizard.qml
+++ b/nymea-app/ui/connection/SetupWizard.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/customviews/GarageController.qml b/nymea-app/ui/customviews/GarageController.qml
index 444be732..0e8aaf08 100644
--- a/nymea-app/ui/customviews/GarageController.qml
+++ b/nymea-app/ui/customviews/GarageController.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.1
-import QtGraphicalEffects 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
-import Nymea 1.0
Item {
id: root
diff --git a/nymea-app/ui/customviews/GenericTypeGraph.qml b/nymea-app/ui/customviews/GenericTypeGraph.qml
index 2d63ea5b..d1f61773 100644
--- a/nymea-app/ui/customviews/GenericTypeGraph.qml
+++ b/nymea-app/ui/customviews/GenericTypeGraph.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../components"
import "../customviews"
-import QtCharts 2.2
Item {
id: root
diff --git a/nymea-app/ui/customviews/GenericTypeLogView.qml b/nymea-app/ui/customviews/GenericTypeLogView.qml
index c3b362c4..abac772f 100644
--- a/nymea-app/ui/customviews/GenericTypeLogView.qml
+++ b/nymea-app/ui/customviews/GenericTypeLogView.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Item {
diff --git a/nymea-app/ui/customviews/MultiStateChart.qml b/nymea-app/ui/customviews/MultiStateChart.qml
index 15cb7daf..2a499c51 100644
--- a/nymea-app/ui/customviews/MultiStateChart.qml
+++ b/nymea-app/ui/customviews/MultiStateChart.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../components"
import "../customviews"
-import QtCharts 2.2
Item {
id: root
@@ -248,7 +249,7 @@ Item {
}
}
- onEntriesAddedIdx: {
+ onEntriesAddedIdx: (index, count) => {
print("**** entries added", index, count, "entries in series:", series.count, "in model", logsModel.count)
for (var i = 0; i < count; i++) {
var entry = logsModel.get(i)
@@ -301,7 +302,7 @@ Item {
print("added entries. now in series:", series.count)
}
- onEntriesRemoved: {
+ onEntriesRemoved: (index, count) => {
print("removing:", index, count, series.count)
if (stateType.type.toLowerCase() == "bool") {
series.removePoints(index * 2, count * 2)
diff --git a/nymea-app/ui/customviews/SensorView.qml b/nymea-app/ui/customviews/SensorView.qml
index d640b931..1c995cf7 100644
--- a/nymea-app/ui/customviews/SensorView.qml
+++ b/nymea-app/ui/customviews/SensorView.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.3
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Qt5Compat.GraphicalEffects
+import Nymea
+import NymeaApp.Utils
+
import "qrc:/ui/components"
-import QtGraphicalEffects 1.0
Item {
id: root
diff --git a/nymea-app/ui/customviews/StateChart.qml b/nymea-app/ui/customviews/StateChart.qml
index 403934f7..b88bb3d3 100644
--- a/nymea-app/ui/customviews/StateChart.qml
+++ b/nymea-app/ui/customviews/StateChart.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../components"
import "../customviews"
-import QtCharts 2.2
Item {
id: root
@@ -106,7 +107,7 @@ Item {
property double minValue
property double maxValue
- onEntriesAddedIdx: {
+ onEntriesAddedIdx: (index, count) => {
// print("**** entries added", index, count, "entries in series:", valueSeries.count, "in model", logsModel.count)
for (var i = 0; i < count; i++) {
var entry = logsModel.get(i)
@@ -157,7 +158,7 @@ Item {
print("added entries. now in series:", valueSeries.count)
}
- onEntriesRemoved: {
+ onEntriesRemoved: (index, count) => {
print("removing:", index, count, valueSeries.count)
if (root.stateType.type.toLowerCase() == "bool") {
valueSeries.removePoints(index * 2, count * 2)
diff --git a/nymea-app/ui/customviews/ThermostatController.qml b/nymea-app/ui/customviews/ThermostatController.qml
index 2433616f..b0799958 100644
--- a/nymea-app/ui/customviews/ThermostatController.qml
+++ b/nymea-app/ui/customviews/ThermostatController.qml
@@ -22,14 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../utils"
import "../components"
-
Item {
id: root
diff --git a/nymea-app/ui/customviews/WeatherView.qml b/nymea-app/ui/customviews/WeatherView.qml
index 9b4802c8..9422d026 100644
--- a/nymea-app/ui/customviews/WeatherView.qml
+++ b/nymea-app/ui/customviews/WeatherView.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "../components"
-import Nymea 1.0
Item {
id: root
diff --git a/nymea-app/ui/delegates/ActionDelegate.qml b/nymea-app/ui/delegates/ActionDelegate.qml
index 86847064..39db3915 100644
--- a/nymea-app/ui/delegates/ActionDelegate.qml
+++ b/nymea-app/ui/delegates/ActionDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
ItemDelegate {
@@ -280,7 +281,7 @@ ItemDelegate {
currentIndex: paramType.allowedValues.indexOf(value)
property var paramType: null
property var value: null
- onActivated: {
+ onActivated: (index) => {
value = paramType.allowedValues[index]
var params = [];
var param1 = new Object();
diff --git a/nymea-app/ui/delegates/BrowserItemDelegate.qml b/nymea-app/ui/delegates/BrowserItemDelegate.qml
index b050389d..6606b933 100644
--- a/nymea-app/ui/delegates/BrowserItemDelegate.qml
+++ b/nymea-app/ui/delegates/BrowserItemDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
NymeaSwipeDelegate {
diff --git a/nymea-app/ui/delegates/InterfaceTile.qml b/nymea-app/ui/delegates/InterfaceTile.qml
index 63e344bc..6c587b22 100644
--- a/nymea-app/ui/delegates/InterfaceTile.qml
+++ b/nymea-app/ui/delegates/InterfaceTile.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import QtQuick.Controls.Material 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+import NymeaApp.Utils
+
import "../components"
MainPageTile {
diff --git a/nymea-app/ui/delegates/ParamDelegate.qml b/nymea-app/ui/delegates/ParamDelegate.qml
index 5e77dc0f..6819d759 100644
--- a/nymea-app/ui/delegates/ParamDelegate.qml
+++ b/nymea-app/ui/delegates/ParamDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
ItemDelegate {
@@ -282,7 +283,7 @@ ItemDelegate {
text: Types.toUiValue(modelData, root.paramType.unit) + ( root.paramType.unit != Types.UnitNone ? " " + Types.toUiUnit(root.paramType.unit) : "")
highlighted: control.highlightedIndex === index
}
- onActivated: {
+ onActivated: (index) => {
root.param.value = root.paramType.allowedValues[index]
}
Component.onCompleted: {
diff --git a/nymea-app/ui/delegates/ParamDescriptorDelegate.qml b/nymea-app/ui/delegates/ParamDescriptorDelegate.qml
index 29810cf5..ba66a7bb 100644
--- a/nymea-app/ui/delegates/ParamDescriptorDelegate.qml
+++ b/nymea-app/ui/delegates/ParamDescriptorDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
ItemDelegate {
diff --git a/nymea-app/ui/delegates/SensorListDelegate.qml b/nymea-app/ui/delegates/SensorListDelegate.qml
index 924d63ba..eafe0a31 100644
--- a/nymea-app/ui/delegates/SensorListDelegate.qml
+++ b/nymea-app/ui/delegates/SensorListDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
BigThingTile {
diff --git a/nymea-app/ui/delegates/StateDelegate.qml b/nymea-app/ui/delegates/StateDelegate.qml
index 2408c086..97bf68e5 100644
--- a/nymea-app/ui/delegates/StateDelegate.qml
+++ b/nymea-app/ui/delegates/StateDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
ItemDelegate {
@@ -270,7 +271,7 @@ ItemDelegate {
text: Types.toUiValue(modelData, root.stateType.unit) + ( root.stateType.unit != Types.UnitNone ? " " + Types.toUiUnit(root.stateType.unit) : "")
highlighted: control.highlightedIndex === index
}
- onActivated: {
+ onActivated: (index) => {
root.param.value = root.stateType.allowedValues[index]
}
Component.onCompleted: {
diff --git a/nymea-app/ui/delegates/ThingDelegate.qml b/nymea-app/ui/delegates/ThingDelegate.qml
index 495cb099..5535631d 100644
--- a/nymea-app/ui/delegates/ThingDelegate.qml
+++ b/nymea-app/ui/delegates/ThingDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
NymeaSwipeDelegate {
id: root
diff --git a/nymea-app/ui/delegates/ThingTile.qml b/nymea-app/ui/delegates/ThingTile.qml
index 4f67f26b..93cf8e3f 100644
--- a/nymea-app/ui/delegates/ThingTile.qml
+++ b/nymea-app/ui/delegates/ThingTile.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import QtQuick.Controls.Material 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
MainPageTile {
diff --git a/nymea-app/ui/delegates/statedelegates/CheckboxDelegate.qml b/nymea-app/ui/delegates/statedelegates/CheckboxDelegate.qml
index aafdd610..ad6a5960 100644
--- a/nymea-app/ui/delegates/statedelegates/CheckboxDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/CheckboxDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
CheckBox {
diff --git a/nymea-app/ui/delegates/statedelegates/ColorDelegate.qml b/nymea-app/ui/delegates/statedelegates/ColorDelegate.qml
index b8ec635b..cf8ef3d6 100644
--- a/nymea-app/ui/delegates/statedelegates/ColorDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/ColorDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
Item {
diff --git a/nymea-app/ui/delegates/statedelegates/ComboBoxDelegate.qml b/nymea-app/ui/delegates/statedelegates/ComboBoxDelegate.qml
index a2eced94..d21b5735 100644
--- a/nymea-app/ui/delegates/statedelegates/ComboBoxDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/ComboBoxDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
ComboBox {
@@ -51,7 +52,7 @@ ComboBox {
model: ListModel {
id: listModel
}
- onActivated: changed(model.get(index).value)
+ onActivated: (index) => changed(model.get(index).value)
textRole: "label"
Component.onCompleted: {
print("completed. values", possibleValues, "value", root.value)
diff --git a/nymea-app/ui/delegates/statedelegates/DateTimeDelegate.qml b/nymea-app/ui/delegates/statedelegates/DateTimeDelegate.qml
index cf646182..cd9d36a6 100644
--- a/nymea-app/ui/delegates/statedelegates/DateTimeDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/DateTimeDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
Label {
diff --git a/nymea-app/ui/delegates/statedelegates/LabelDelegate.qml b/nymea-app/ui/delegates/statedelegates/LabelDelegate.qml
index 2141ab4c..5ba36d33 100644
--- a/nymea-app/ui/delegates/statedelegates/LabelDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/LabelDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
Label {
diff --git a/nymea-app/ui/delegates/statedelegates/LedDelegate.qml b/nymea-app/ui/delegates/statedelegates/LedDelegate.qml
index c954ab34..cdeb4931 100644
--- a/nymea-app/ui/delegates/statedelegates/LedDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/LedDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
Item {
diff --git a/nymea-app/ui/delegates/statedelegates/ListDelegate.qml b/nymea-app/ui/delegates/statedelegates/ListDelegate.qml
index 0395cc96..d120cc91 100644
--- a/nymea-app/ui/delegates/statedelegates/ListDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/ListDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
Label {
diff --git a/nymea-app/ui/delegates/statedelegates/NumberLabelDelegate.qml b/nymea-app/ui/delegates/statedelegates/NumberLabelDelegate.qml
index dfcbd81a..ec99e426 100644
--- a/nymea-app/ui/delegates/statedelegates/NumberLabelDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/NumberLabelDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
Label {
diff --git a/nymea-app/ui/delegates/statedelegates/SliderDelegate.qml b/nymea-app/ui/delegates/statedelegates/SliderDelegate.qml
index 733d7443..d4360ebc 100644
--- a/nymea-app/ui/delegates/statedelegates/SliderDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/SliderDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
RowLayout {
diff --git a/nymea-app/ui/delegates/statedelegates/SpinBoxDelegate.qml b/nymea-app/ui/delegates/statedelegates/SpinBoxDelegate.qml
index 4e65ea66..bee05013 100644
--- a/nymea-app/ui/delegates/statedelegates/SpinBoxDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/SpinBoxDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
SpinBox {
diff --git a/nymea-app/ui/delegates/statedelegates/SwitchDelegate.qml b/nymea-app/ui/delegates/statedelegates/SwitchDelegate.qml
index 83875a62..e25a75d0 100644
--- a/nymea-app/ui/delegates/statedelegates/SwitchDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/SwitchDelegate.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
-import Nymea 1.0
import "../../components"
Switch {
diff --git a/nymea-app/ui/delegates/statedelegates/TextFieldDelegate.qml b/nymea-app/ui/delegates/statedelegates/TextFieldDelegate.qml
index 15fc9ba4..2e4a761d 100644
--- a/nymea-app/ui/delegates/statedelegates/TextFieldDelegate.qml
+++ b/nymea-app/ui/delegates/statedelegates/TextFieldDelegate.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
TextField {
diff --git a/nymea-app/ui/devicelistpages/AwningThingsListPage.qml b/nymea-app/ui/devicelistpages/AwningThingsListPage.qml
index 6f0561e8..15f97428 100644
--- a/nymea-app/ui/devicelistpages/AwningThingsListPage.qml
+++ b/nymea-app/ui/devicelistpages/AwningThingsListPage.qml
@@ -22,7 +22,7 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
ClosablesThingsListPage {
title: qsTr("Awnings")
diff --git a/nymea-app/ui/devicelistpages/BlindThingsListPage.qml b/nymea-app/ui/devicelistpages/BlindThingsListPage.qml
index 4e6a6411..0680f4fa 100644
--- a/nymea-app/ui/devicelistpages/BlindThingsListPage.qml
+++ b/nymea-app/ui/devicelistpages/BlindThingsListPage.qml
@@ -22,7 +22,7 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
ClosablesThingsListPage {
title: qsTr("Blinds")
diff --git a/nymea-app/ui/devicelistpages/ClosablesThingsListPage.qml b/nymea-app/ui/devicelistpages/ClosablesThingsListPage.qml
index 3761bd23..a818e01f 100644
--- a/nymea-app/ui/devicelistpages/ClosablesThingsListPage.qml
+++ b/nymea-app/ui/devicelistpages/ClosablesThingsListPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
ThingsListPageBase {
diff --git a/nymea-app/ui/devicelistpages/GarageThingsListPage.qml b/nymea-app/ui/devicelistpages/GarageThingsListPage.qml
index 4ac278c4..1da5ae22 100644
--- a/nymea-app/ui/devicelistpages/GarageThingsListPage.qml
+++ b/nymea-app/ui/devicelistpages/GarageThingsListPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/devicelistpages/GenericThingsListPage.qml b/nymea-app/ui/devicelistpages/GenericThingsListPage.qml
index 9c0db0cb..a272c2da 100644
--- a/nymea-app/ui/devicelistpages/GenericThingsListPage.qml
+++ b/nymea-app/ui/devicelistpages/GenericThingsListPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/devicelistpages/LightThingsListPage.qml b/nymea-app/ui/devicelistpages/LightThingsListPage.qml
index a8a5e6ae..5b291bc7 100644
--- a/nymea-app/ui/devicelistpages/LightThingsListPage.qml
+++ b/nymea-app/ui/devicelistpages/LightThingsListPage.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+import NymeaApp.Utils
+
import "../components"
import "../utils"
diff --git a/nymea-app/ui/devicelistpages/MediaDeviceListPage.qml b/nymea-app/ui/devicelistpages/MediaDeviceListPage.qml
index 369eb432..435b29e4 100644
--- a/nymea-app/ui/devicelistpages/MediaDeviceListPage.qml
+++ b/nymea-app/ui/devicelistpages/MediaDeviceListPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import QtGraphicalEffects 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
ThingsListPageBase {
@@ -140,43 +141,35 @@ ThingsListPageBase {
}
}
- Rectangle {
- id: maskRect
- anchors.centerIn: parent
- height: parent.width
- width: parent.height
- radius: Style.cornerRadius
- gradient: Gradient {
- GradientStop { position: 0; color: "#00FF0000" }
- GradientStop { position: 0.2; color: "#15FF0000" }
- GradientStop { position: 1; color: "#FFFF0000" }
- }
- }
+ // Rectangle {
+ // id: maskRect
+ // anchors.centerIn: parent
+ // height: parent.width
+ // width: parent.height
+ // radius: Style.cornerRadius
+ // gradient: Gradient {
+ // orientation: Gradient.Horizontal
+ // GradientStop { position: 0; color: "#00FF0000" }
+ // GradientStop { position: 0.2; color: "#15FF0000" }
+ // GradientStop { position: 1; color: "#FFFF0000" }
+ // }
+ // }
- ShaderEffect {
- anchors.fill: parent
- property variant source: ShaderEffectSource {
- sourceItem: artworkContainer
- hideSource: true
- }
- property variant mask: ShaderEffectSource {
- sourceItem: maskRect
- hideSource: true
- }
+ // ShaderEffect {
+ // anchors.fill: parent
+ // property variant source: ShaderEffectSource {
+ // format: ShaderEffectSource.RGBA8
+ // sourceItem: artworkContainer
+ // hideSource: true
+ // }
+ // property variant mask: ShaderEffectSource {
+ // format: ShaderEffectSource.RGBA8
+ // sourceItem: maskRect
+ // hideSource: true
+ // }
- fragmentShader: "
- varying highp vec2 qt_TexCoord0;
- uniform sampler2D source;
- uniform sampler2D mask;
- void main(void)
- {
- highp vec4 sourceColor = texture2D(source, qt_TexCoord0);
- highp float alpha = texture2D(mask, vec2(qt_TexCoord0.y, qt_TexCoord0.x)).a;
- sourceColor *= alpha;
- gl_FragColor = sourceColor;
- }
- "
- }
+ // fragmentShader: "/ui/shaders/colorizedimage.frag.qsb"
+ // }
}
}
}
diff --git a/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml b/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml
index efa3a9d3..8177eba8 100644
--- a/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml
+++ b/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
import "../delegates"
-import QtQuick.Controls.Material 2.1
ThingsListPageBase {
id: root
diff --git a/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml b/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml
index 914c90f7..d6c4fa35 100644
--- a/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml
+++ b/nymea-app/ui/devicelistpages/SensorsDeviceListPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "qrc:/ui/components"
import "qrc:/ui/delegates"
diff --git a/nymea-app/ui/devicelistpages/ShutterDeviceListPage.qml b/nymea-app/ui/devicelistpages/ShutterDeviceListPage.qml
index e4a06373..7952e21b 100644
--- a/nymea-app/ui/devicelistpages/ShutterDeviceListPage.qml
+++ b/nymea-app/ui/devicelistpages/ShutterDeviceListPage.qml
@@ -22,7 +22,7 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
+import QtQuick
ClosablesThingsListPage {
title: qsTr("Shutters")
diff --git a/nymea-app/ui/devicelistpages/SmartMeterDeviceListPage.qml b/nymea-app/ui/devicelistpages/SmartMeterDeviceListPage.qml
index 1bd8beeb..2775b1f1 100644
--- a/nymea-app/ui/devicelistpages/SmartMeterDeviceListPage.qml
+++ b/nymea-app/ui/devicelistpages/SmartMeterDeviceListPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
ThingsListPageBase {
diff --git a/nymea-app/ui/devicelistpages/ThingsListPageBase.qml b/nymea-app/ui/devicelistpages/ThingsListPageBase.qml
index 7ea2941a..ad650e92 100644
--- a/nymea-app/ui/devicelistpages/ThingsListPageBase.qml
+++ b/nymea-app/ui/devicelistpages/ThingsListPageBase.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+import NymeaApp.Utils
+
import "../components"
Page {
diff --git a/nymea-app/ui/devicelistpages/WeatherDeviceListPage.qml b/nymea-app/ui/devicelistpages/WeatherDeviceListPage.qml
index db5c11d2..35bdde75 100644
--- a/nymea-app/ui/devicelistpages/WeatherDeviceListPage.qml
+++ b/nymea-app/ui/devicelistpages/WeatherDeviceListPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/ActionLogPage.qml b/nymea-app/ui/devicepages/ActionLogPage.qml
index 2dd0944c..69a273a8 100644
--- a/nymea-app/ui/devicepages/ActionLogPage.qml
+++ b/nymea-app/ui/devicepages/ActionLogPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/AwningThingPage.qml b/nymea-app/ui/devicepages/AwningThingPage.qml
index c9c6bc21..ae864bb0 100644
--- a/nymea-app/ui/devicepages/AwningThingPage.qml
+++ b/nymea-app/ui/devicepages/AwningThingPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtGraphicalEffects 1.0
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import Qt5Compat.GraphicalEffects
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
import "../utils"
diff --git a/nymea-app/ui/devicepages/BarcodeScannerThingPage.qml b/nymea-app/ui/devicepages/BarcodeScannerThingPage.qml
index aa88b86c..d33d61e9 100644
--- a/nymea-app/ui/devicepages/BarcodeScannerThingPage.qml
+++ b/nymea-app/ui/devicepages/BarcodeScannerThingPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/BoolSensorDevicePage.qml b/nymea-app/ui/devicepages/BoolSensorDevicePage.qml
index 403e51c8..59c1d14e 100644
--- a/nymea-app/ui/devicepages/BoolSensorDevicePage.qml
+++ b/nymea-app/ui/devicepages/BoolSensorDevicePage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/ButtonThingPage.qml b/nymea-app/ui/devicepages/ButtonThingPage.qml
index 06e266e9..48c333bb 100644
--- a/nymea-app/ui/devicepages/ButtonThingPage.qml
+++ b/nymea-app/ui/devicepages/ButtonThingPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/CleaningRobotThingPage.qml b/nymea-app/ui/devicepages/CleaningRobotThingPage.qml
index 1024d9c4..a4054f2d 100644
--- a/nymea-app/ui/devicepages/CleaningRobotThingPage.qml
+++ b/nymea-app/ui/devicepages/CleaningRobotThingPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/CoolingThingPage.qml b/nymea-app/ui/devicepages/CoolingThingPage.qml
index 888dcc1a..289440d4 100644
--- a/nymea-app/ui/devicepages/CoolingThingPage.qml
+++ b/nymea-app/ui/devicepages/CoolingThingPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
import "../utils"
diff --git a/nymea-app/ui/devicepages/DeviceBrowserPage.qml b/nymea-app/ui/devicepages/DeviceBrowserPage.qml
index 26262da9..29360162 100644
--- a/nymea-app/ui/devicepages/DeviceBrowserPage.qml
+++ b/nymea-app/ui/devicepages/DeviceBrowserPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/devicepages/DeviceDetailsPage.qml b/nymea-app/ui/devicepages/DeviceDetailsPage.qml
index 5874ffe0..ea09c028 100644
--- a/nymea-app/ui/devicepages/DeviceDetailsPage.qml
+++ b/nymea-app/ui/devicepages/DeviceDetailsPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/devicepages/DeviceLogPage.qml b/nymea-app/ui/devicepages/DeviceLogPage.qml
index e9c8de9b..335be54a 100644
--- a/nymea-app/ui/devicepages/DeviceLogPage.qml
+++ b/nymea-app/ui/devicepages/DeviceLogPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/DoorbellDevicePage.qml b/nymea-app/ui/devicepages/DoorbellDevicePage.qml
index 4526f25f..3830b69f 100644
--- a/nymea-app/ui/devicepages/DoorbellDevicePage.qml
+++ b/nymea-app/ui/devicepages/DoorbellDevicePage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/EvChargerThingPage.qml b/nymea-app/ui/devicepages/EvChargerThingPage.qml
index 331ccdd3..88795c24 100644
--- a/nymea-app/ui/devicepages/EvChargerThingPage.qml
+++ b/nymea-app/ui/devicepages/EvChargerThingPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../utils"
diff --git a/nymea-app/ui/devicepages/EventLogPage.qml b/nymea-app/ui/devicepages/EventLogPage.qml
index 349acba8..535707a7 100644
--- a/nymea-app/ui/devicepages/EventLogPage.qml
+++ b/nymea-app/ui/devicepages/EventLogPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/FingerprintReaderDevicePage.qml b/nymea-app/ui/devicepages/FingerprintReaderDevicePage.qml
index 7b635fce..fa689cd5 100644
--- a/nymea-app/ui/devicepages/FingerprintReaderDevicePage.qml
+++ b/nymea-app/ui/devicepages/FingerprintReaderDevicePage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/GarageThingPage.qml b/nymea-app/ui/devicepages/GarageThingPage.qml
index e7049b26..98170d2f 100644
--- a/nymea-app/ui/devicepages/GarageThingPage.qml
+++ b/nymea-app/ui/devicepages/GarageThingPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/GenericThingPage.qml b/nymea-app/ui/devicepages/GenericThingPage.qml
index f285b103..a2a01106 100644
--- a/nymea-app/ui/devicepages/GenericThingPage.qml
+++ b/nymea-app/ui/devicepages/GenericThingPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/devicepages/HeatingDevicePage.qml b/nymea-app/ui/devicepages/HeatingDevicePage.qml
index 4ce1dabb..16da1865 100644
--- a/nymea-app/ui/devicepages/HeatingDevicePage.qml
+++ b/nymea-app/ui/devicepages/HeatingDevicePage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
import "../utils"
diff --git a/nymea-app/ui/devicepages/InputTriggerDevicePage.qml b/nymea-app/ui/devicepages/InputTriggerDevicePage.qml
index cbc5c3c8..0e519e66 100644
--- a/nymea-app/ui/devicepages/InputTriggerDevicePage.qml
+++ b/nymea-app/ui/devicepages/InputTriggerDevicePage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/IrrigationDevicePage.qml b/nymea-app/ui/devicepages/IrrigationDevicePage.qml
index 6f6634ce..050ad844 100644
--- a/nymea-app/ui/devicepages/IrrigationDevicePage.qml
+++ b/nymea-app/ui/devicepages/IrrigationDevicePage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
import "../utils"
diff --git a/nymea-app/ui/devicepages/LightThingPage.qml b/nymea-app/ui/devicepages/LightThingPage.qml
index a24cfc79..e453425f 100644
--- a/nymea-app/ui/devicepages/LightThingPage.qml
+++ b/nymea-app/ui/devicepages/LightThingPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.3
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
-import QtGraphicalEffects 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
import "../utils"
@@ -180,24 +181,7 @@ ThingPageBase {
property real threshold: 0.1
property real brightness: 1 - (actionQueue.pendingValue || brightnessState.value) / 100
- fragmentShader: "
- varying highp vec2 qt_TexCoord0;
- uniform sampler2D source;
- uniform highp vec4 outColor;
- uniform highp vec4 inColor;
- uniform lowp float threshold;
- uniform lowp float qt_Opacity;
- uniform lowp float brightness;
- void main() {
- bool isOn = qt_TexCoord0.y > brightness;
- lowp vec4 sourceColor = texture2D(source, qt_TexCoord0);
- if (isOn) {
- gl_FragColor = mix(vec4(outColor.rgb, 1.0) * sourceColor.a, sourceColor, step(threshold, distance(sourceColor.rgb / sourceColor.a, inColor.rgb))) * qt_Opacity;
- } else {
- gl_FragColor = sourceColor;
- }
- }"
-
+ fragmentShader: "/ui/shaders/brightnesscircle.frag.qsb"
}
MouseArea {
diff --git a/nymea-app/ui/devicepages/MediaThingPage.qml b/nymea-app/ui/devicepages/MediaThingPage.qml
index ff0146f6..64d9f50c 100644
--- a/nymea-app/ui/devicepages/MediaThingPage.qml
+++ b/nymea-app/ui/devicepages/MediaThingPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
import "../customviews"
import "../delegates"
diff --git a/nymea-app/ui/devicepages/NotificationsThingPage.qml b/nymea-app/ui/devicepages/NotificationsThingPage.qml
index 78287409..c948c648 100644
--- a/nymea-app/ui/devicepages/NotificationsThingPage.qml
+++ b/nymea-app/ui/devicepages/NotificationsThingPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/PowersocketDevicePage.qml b/nymea-app/ui/devicepages/PowersocketDevicePage.qml
index 84b63ae8..921177a8 100644
--- a/nymea-app/ui/devicepages/PowersocketDevicePage.qml
+++ b/nymea-app/ui/devicepages/PowersocketDevicePage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
import "../utils"
diff --git a/nymea-app/ui/devicepages/SensorDevicePage.qml b/nymea-app/ui/devicepages/SensorDevicePage.qml
index caaac20e..051e1485 100644
--- a/nymea-app/ui/devicepages/SensorDevicePage.qml
+++ b/nymea-app/ui/devicepages/SensorDevicePage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+import NymeaApp.Utils
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/ShutterDevicePage.qml b/nymea-app/ui/devicepages/ShutterDevicePage.qml
index 0919c237..dc48a5fe 100644
--- a/nymea-app/ui/devicepages/ShutterDevicePage.qml
+++ b/nymea-app/ui/devicepages/ShutterDevicePage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
import "../customviews"
import "../utils"
diff --git a/nymea-app/ui/devicepages/SmartMeterDevicePage.qml b/nymea-app/ui/devicepages/SmartMeterDevicePage.qml
index a67440ab..ad0be921 100644
--- a/nymea-app/ui/devicepages/SmartMeterDevicePage.qml
+++ b/nymea-app/ui/devicepages/SmartMeterDevicePage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import QtGraphicalEffects 1.0
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/StateLogPage.qml b/nymea-app/ui/devicepages/StateLogPage.qml
index 621dbcef..6126d135 100644
--- a/nymea-app/ui/devicepages/StateLogPage.qml
+++ b/nymea-app/ui/devicepages/StateLogPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/ThermostatDevicePage.qml b/nymea-app/ui/devicepages/ThermostatDevicePage.qml
index 6e660e28..65174c51 100644
--- a/nymea-app/ui/devicepages/ThermostatDevicePage.qml
+++ b/nymea-app/ui/devicepages/ThermostatDevicePage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
import "../utils"
diff --git a/nymea-app/ui/devicepages/ThingLogPage.qml b/nymea-app/ui/devicepages/ThingLogPage.qml
index f01c9661..c3e5830b 100644
--- a/nymea-app/ui/devicepages/ThingLogPage.qml
+++ b/nymea-app/ui/devicepages/ThingLogPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/ThingPageBase.qml b/nymea-app/ui/devicepages/ThingPageBase.qml
index 019ae4ea..9cefae4a 100644
--- a/nymea-app/ui/devicepages/ThingPageBase.qml
+++ b/nymea-app/ui/devicepages/ThingPageBase.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/devicepages/ThingStatusPage.qml b/nymea-app/ui/devicepages/ThingStatusPage.qml
index 6621dc32..ddd03cae 100644
--- a/nymea-app/ui/devicepages/ThingStatusPage.qml
+++ b/nymea-app/ui/devicepages/ThingStatusPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/devicepages/VentilationThingPage.qml b/nymea-app/ui/devicepages/VentilationThingPage.qml
index 360bb07b..70bbcc1e 100644
--- a/nymea-app/ui/devicepages/VentilationThingPage.qml
+++ b/nymea-app/ui/devicepages/VentilationThingPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../utils"
diff --git a/nymea-app/ui/devicepages/WeatherDevicePage.qml b/nymea-app/ui/devicepages/WeatherDevicePage.qml
index 5cfe6e36..49fdad9d 100644
--- a/nymea-app/ui/devicepages/WeatherDevicePage.qml
+++ b/nymea-app/ui/devicepages/WeatherDevicePage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../customviews"
diff --git a/nymea-app/ui/experiences/heating/Main.qml b/nymea-app/ui/experiences/heating/Main.qml
index a737fa31..3e985d28 100644
--- a/nymea-app/ui/experiences/heating/Main.qml
+++ b/nymea-app/ui/experiences/heating/Main.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.2
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "qrc:/ui/components"
-import Nymea 1.0
-import QtGraphicalEffects 1.0
Item {
id: root
diff --git a/nymea-app/ui/grouping/GroupInterfacesPage.qml b/nymea-app/ui/grouping/GroupInterfacesPage.qml
index 4ca7bc7d..33de5737 100644
--- a/nymea-app/ui/grouping/GroupInterfacesPage.qml
+++ b/nymea-app/ui/grouping/GroupInterfacesPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
import "../mainviews"
diff --git a/nymea-app/ui/grouping/GroupThingsPage.qml b/nymea-app/ui/grouping/GroupThingsPage.qml
index e528babf..57c06445 100644
--- a/nymea-app/ui/grouping/GroupThingsPage.qml
+++ b/nymea-app/ui/grouping/GroupThingsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+import NymeaApp.Utils
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/magic/CalendarItemDelegate.qml b/nymea-app/ui/magic/CalendarItemDelegate.qml
index ca90f6c7..e55520f7 100644
--- a/nymea-app/ui/magic/CalendarItemDelegate.qml
+++ b/nymea-app/ui/magic/CalendarItemDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
NymeaSwipeDelegate {
diff --git a/nymea-app/ui/magic/ComposeEventDescriptorPage.qml b/nymea-app/ui/magic/ComposeEventDescriptorPage.qml
index 18896b2c..0e20052f 100644
--- a/nymea-app/ui/magic/ComposeEventDescriptorPage.qml
+++ b/nymea-app/ui/magic/ComposeEventDescriptorPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.6
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/EditCalendarItemPage.qml b/nymea-app/ui/magic/EditCalendarItemPage.qml
index b2603148..820d60bc 100644
--- a/nymea-app/ui/magic/EditCalendarItemPage.qml
+++ b/nymea-app/ui/magic/EditCalendarItemPage.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import Qt.labs.calendar 1.0
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
@@ -218,7 +218,7 @@ Page {
}
return ret;
}
- onActivated: {
+ onActivated: (index) => {
var date = root.calendarItem.dateTime
date.setDate(index)
root.calendarItem.dateTime = date;
diff --git a/nymea-app/ui/magic/EditRulePage.qml b/nymea-app/ui/magic/EditRulePage.qml
index e99cb61d..0763db08 100644
--- a/nymea-app/ui/magic/EditRulePage.qml
+++ b/nymea-app/ui/magic/EditRulePage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Layouts 1.3
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/EditStateEvaluatorPage.qml b/nymea-app/ui/magic/EditStateEvaluatorPage.qml
index 3a5c6316..f4505500 100644
--- a/nymea-app/ui/magic/EditStateEvaluatorPage.qml
+++ b/nymea-app/ui/magic/EditStateEvaluatorPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/magic/EditTimeEventItemPage.qml b/nymea-app/ui/magic/EditTimeEventItemPage.qml
index ed2e4b7d..50c32e86 100644
--- a/nymea-app/ui/magic/EditTimeEventItemPage.qml
+++ b/nymea-app/ui/magic/EditTimeEventItemPage.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import Qt.labs.calendar 1.0
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
@@ -322,5 +322,4 @@ Page {
}
}
}
-
}
diff --git a/nymea-app/ui/magic/EventDescriptorDelegate.qml b/nymea-app/ui/magic/EventDescriptorDelegate.qml
index ffc975c8..3a378fcd 100644
--- a/nymea-app/ui/magic/EventDescriptorDelegate.qml
+++ b/nymea-app/ui/magic/EventDescriptorDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
NymeaSwipeDelegate {
diff --git a/nymea-app/ui/magic/NewMagicPage.qml b/nymea-app/ui/magic/NewMagicPage.qml
index 71da3a1a..3cb89f69 100644
--- a/nymea-app/ui/magic/NewMagicPage.qml
+++ b/nymea-app/ui/magic/NewMagicPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/magic/NewScenePage.qml b/nymea-app/ui/magic/NewScenePage.qml
index acd885c3..db174766 100644
--- a/nymea-app/ui/magic/NewScenePage.qml
+++ b/nymea-app/ui/magic/NewScenePage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/magic/NewThingMagicPage.qml b/nymea-app/ui/magic/NewThingMagicPage.qml
index df217879..c40a4cc2 100644
--- a/nymea-app/ui/magic/NewThingMagicPage.qml
+++ b/nymea-app/ui/magic/NewThingMagicPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/magic/RuleActionDelegate.qml b/nymea-app/ui/magic/RuleActionDelegate.qml
index 2ab09c94..6a58ede6 100644
--- a/nymea-app/ui/magic/RuleActionDelegate.qml
+++ b/nymea-app/ui/magic/RuleActionDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
NymeaSwipeDelegate {
diff --git a/nymea-app/ui/magic/ScriptEditor.qml b/nymea-app/ui/magic/ScriptEditor.qml
index 71b8d38b..e14341d5 100644
--- a/nymea-app/ui/magic/ScriptEditor.qml
+++ b/nymea-app/ui/magic/ScriptEditor.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import QtQuick.Layouts 1.2
-import QtQuick.Controls.Material 2.1
-import Qt.labs.settings 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import QtCore
+import Nymea
+
import "../components"
import "scripting"
@@ -40,7 +41,7 @@ Page {
if (scriptId !== undefined) {;
d.callId = engine.scriptManager.fetchScript(scriptId);
} else {
- scriptEdit.text = "import QtQuick 2.0\nimport nymea 1.0\n\nItem {\n \n}\n"
+ scriptEdit.text = "import QtQuick\nimport nymea 1.0\n\nItem {\n \n}\n"
}
if ((Qt.platform.os == "android" || Qt.platform.os == "ios") && !editorSettings.popupWasShown) {
@@ -167,8 +168,8 @@ Page {
}
}
- onFetchScriptReply: {
- if (id == d.callId && status == ScriptManager.ScriptErrorNoError) {
+ onFetchScriptReply: (id, status, content) => {
+ if (id === d.callId && status === ScriptManager.ScriptErrorNoError) {
d.callId = -1;
d.oldContent = content;
diff --git a/nymea-app/ui/magic/ScriptsPage.qml b/nymea-app/ui/magic/ScriptsPage.qml
index 0d823a5e..52989d0b 100644
--- a/nymea-app/ui/magic/ScriptsPage.qml
+++ b/nymea-app/ui/magic/ScriptsPage.qml
@@ -22,9 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
-import QtQuick.Controls 2.2
+import QtQuick
+import QtQuick.Controls
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/magic/SelectBrowserItemActionPage.qml b/nymea-app/ui/magic/SelectBrowserItemActionPage.qml
index 7cb71f7b..e74363ff 100644
--- a/nymea-app/ui/magic/SelectBrowserItemActionPage.qml
+++ b/nymea-app/ui/magic/SelectBrowserItemActionPage.qml
@@ -22,9 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/magic/SelectEventDescriptorPage.qml b/nymea-app/ui/magic/SelectEventDescriptorPage.qml
index d3233cdb..8c949a38 100644
--- a/nymea-app/ui/magic/SelectEventDescriptorPage.qml
+++ b/nymea-app/ui/magic/SelectEventDescriptorPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SelectEventDescriptorParamsPage.qml b/nymea-app/ui/magic/SelectEventDescriptorParamsPage.qml
index d39a2cbf..770765ac 100644
--- a/nymea-app/ui/magic/SelectEventDescriptorParamsPage.qml
+++ b/nymea-app/ui/magic/SelectEventDescriptorParamsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SelectRuleActionPage.qml b/nymea-app/ui/magic/SelectRuleActionPage.qml
index d83ab993..86d48df9 100644
--- a/nymea-app/ui/magic/SelectRuleActionPage.qml
+++ b/nymea-app/ui/magic/SelectRuleActionPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Controls
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SelectRuleActionParamsPage.qml b/nymea-app/ui/magic/SelectRuleActionParamsPage.qml
index 897a502b..3b96acfd 100644
--- a/nymea-app/ui/magic/SelectRuleActionParamsPage.qml
+++ b/nymea-app/ui/magic/SelectRuleActionParamsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SelectStateDescriptorPage.qml b/nymea-app/ui/magic/SelectStateDescriptorPage.qml
index 5334045c..29d4a2e1 100644
--- a/nymea-app/ui/magic/SelectStateDescriptorPage.qml
+++ b/nymea-app/ui/magic/SelectStateDescriptorPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Controls
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SelectStateDescriptorParamsPage.qml b/nymea-app/ui/magic/SelectStateDescriptorParamsPage.qml
index 00f012cf..9739ce21 100644
--- a/nymea-app/ui/magic/SelectStateDescriptorParamsPage.qml
+++ b/nymea-app/ui/magic/SelectStateDescriptorParamsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SelectStatePage.qml b/nymea-app/ui/magic/SelectStatePage.qml
index d8ff2d6c..5b215cb9 100644
--- a/nymea-app/ui/magic/SelectStatePage.qml
+++ b/nymea-app/ui/magic/SelectStatePage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SelectThingPage.qml b/nymea-app/ui/magic/SelectThingPage.qml
index 9cee9e7e..17b31954 100644
--- a/nymea-app/ui/magic/SelectThingPage.qml
+++ b/nymea-app/ui/magic/SelectThingPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.6
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/SimpleStateEvaluatorDelegate.qml b/nymea-app/ui/magic/SimpleStateEvaluatorDelegate.qml
index e5ae3726..1780f327 100644
--- a/nymea-app/ui/magic/SimpleStateEvaluatorDelegate.qml
+++ b/nymea-app/ui/magic/SimpleStateEvaluatorDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SwipeDelegate {
diff --git a/nymea-app/ui/magic/StateEvaluatorDelegate.qml b/nymea-app/ui/magic/StateEvaluatorDelegate.qml
index 7276e462..62128306 100644
--- a/nymea-app/ui/magic/StateEvaluatorDelegate.qml
+++ b/nymea-app/ui/magic/StateEvaluatorDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
ItemDelegate {
@@ -105,8 +106,8 @@ ItemDelegate {
model: [qsTr("and all of those"), qsTr("or any of those")]
currentIndex: root.stateEvaluator && root.stateEvaluator.stateOperator === StateEvaluator.StateOperatorAnd ? 0 : 1
visible: root.stateEvaluator && root.stateEvaluator.childEvaluators.count > 0
- onActivated: {
- root.stateEvaluator.stateOperator = index == 0 ? StateEvaluator.StateOperatorAnd : StateEvaluator.StateOperatorOr
+ onActivated: (index) => {
+ root.stateEvaluator.stateOperator = index === 0 ? StateEvaluator.StateOperatorAnd : StateEvaluator.StateOperatorOr
}
}
diff --git a/nymea-app/ui/magic/ThingRulesPage.qml b/nymea-app/ui/magic/ThingRulesPage.qml
index ac2bbb1b..4de8d6fb 100644
--- a/nymea-app/ui/magic/ThingRulesPage.qml
+++ b/nymea-app/ui/magic/ThingRulesPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/magic/TimeEventDelegate.qml b/nymea-app/ui/magic/TimeEventDelegate.qml
index b3ac730c..78806a5c 100644
--- a/nymea-app/ui/magic/TimeEventDelegate.qml
+++ b/nymea-app/ui/magic/TimeEventDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
NymeaSwipeDelegate{
diff --git a/nymea-app/ui/magic/WriteNfcTagPage.qml b/nymea-app/ui/magic/WriteNfcTagPage.qml
index a7bcc52c..57ebd936 100644
--- a/nymea-app/ui/magic/WriteNfcTagPage.qml
+++ b/nymea-app/ui/magic/WriteNfcTagPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/magic/scripting/CompletionBox.qml b/nymea-app/ui/magic/scripting/CompletionBox.qml
index 80b39b7c..1b33a756 100644
--- a/nymea-app/ui/magic/scripting/CompletionBox.qml
+++ b/nymea-app/ui/magic/scripting/CompletionBox.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../../components"
Rectangle {
diff --git a/nymea-app/ui/magic/scripting/EditorPane.qml b/nymea-app/ui/magic/scripting/EditorPane.qml
index a4170175..e32cd5dd 100644
--- a/nymea-app/ui/magic/scripting/EditorPane.qml
+++ b/nymea-app/ui/magic/scripting/EditorPane.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.2
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
import "../../components"
-import Nymea 1.0
+import Nymea
Item {
id: pane
diff --git a/nymea-app/ui/magic/scripting/LineNumbers.qml b/nymea-app/ui/magic/scripting/LineNumbers.qml
index 93a3a06d..699f159b 100644
--- a/nymea-app/ui/magic/scripting/LineNumbers.qml
+++ b/nymea-app/ui/magic/scripting/LineNumbers.qml
@@ -22,9 +22,9 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import Nymea
Rectangle {
id: root
diff --git a/nymea-app/ui/mainviews/AirConditioningView.qml b/nymea-app/ui/mainviews/AirConditioningView.qml
index b9177b58..d64ee169 100644
--- a/nymea-app/ui/mainviews/AirConditioningView.qml
+++ b/nymea-app/ui/mainviews/AirConditioningView.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtGraphicalEffects 1.0
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
-import Nymea.AirConditioning 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/delegates"
import "airconditioning"
diff --git a/nymea-app/ui/mainviews/DashboardView.qml b/nymea-app/ui/mainviews/DashboardView.qml
index 27a6cfc0..60e6d0e7 100644
--- a/nymea-app/ui/mainviews/DashboardView.qml
+++ b/nymea-app/ui/mainviews/DashboardView.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import Qt.labs.settings 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import QtCore
import "../components"
import "dashboard"
diff --git a/nymea-app/ui/mainviews/EnergyView.qml b/nymea-app/ui/mainviews/EnergyView.qml
index 327fb800..7978797d 100644
--- a/nymea-app/ui/mainviews/EnergyView.qml
+++ b/nymea-app/ui/mainviews/EnergyView.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
-import QtCharts 2.2
-import Nymea 1.0
+import QtCharts
+import Nymea
+
import "../components"
import "../delegates"
import "energy"
diff --git a/nymea-app/ui/mainviews/FavoritesView.qml b/nymea-app/ui/mainviews/FavoritesView.qml
index 50d105d3..ca645b55 100644
--- a/nymea-app/ui/mainviews/FavoritesView.qml
+++ b/nymea-app/ui/mainviews/FavoritesView.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import QtQuick.Controls.Material 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+import NymeaApp.Utils
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/mainviews/GaragesView.qml b/nymea-app/ui/mainviews/GaragesView.qml
index d4cd9d63..2975f9da 100644
--- a/nymea-app/ui/mainviews/GaragesView.qml
+++ b/nymea-app/ui/mainviews/GaragesView.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "../components"
import "../customviews"
-import Nymea 1.0
MainViewBase {
id: root
diff --git a/nymea-app/ui/mainviews/GroupsView.qml b/nymea-app/ui/mainviews/GroupsView.qml
index 8b701289..9651f593 100644
--- a/nymea-app/ui/mainviews/GroupsView.qml
+++ b/nymea-app/ui/mainviews/GroupsView.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
-import QtQuick.Controls.Material 2.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
MainViewBase {
diff --git a/nymea-app/ui/mainviews/MediaView.qml b/nymea-app/ui/mainviews/MediaView.qml
index a507c1ed..112deeb7 100644
--- a/nymea-app/ui/mainviews/MediaView.qml
+++ b/nymea-app/ui/mainviews/MediaView.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/mainviews/ScenesView.qml b/nymea-app/ui/mainviews/ScenesView.qml
index 8e746b4b..3e3656e3 100644
--- a/nymea-app/ui/mainviews/ScenesView.qml
+++ b/nymea-app/ui/mainviews/ScenesView.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
-import QtQuick.Controls.Material 2.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+import QtQuick.Controls.Material
+
import "../components"
MainViewBase {
diff --git a/nymea-app/ui/mainviews/ThingsView.qml b/nymea-app/ui/mainviews/ThingsView.qml
index 26924e25..0f8cb909 100644
--- a/nymea-app/ui/mainviews/ThingsView.qml
+++ b/nymea-app/ui/mainviews/ThingsView.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/mainviews/airconditioning/ACChartsPage.qml b/nymea-app/ui/mainviews/airconditioning/ACChartsPage.qml
index ee4a9f25..94d410b7 100644
--- a/nymea-app/ui/mainviews/airconditioning/ACChartsPage.qml
+++ b/nymea-app/ui/mainviews/airconditioning/ACChartsPage.qml
@@ -22,14 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/customviews"
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
-import QtCharts 2.3
Page {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/ACSettingsPage.qml b/nymea-app/ui/mainviews/airconditioning/ACSettingsPage.qml
index 80f5b939..6f318c0e 100644
--- a/nymea-app/ui/mainviews/airconditioning/ACSettingsPage.qml
+++ b/nymea-app/ui/mainviews/airconditioning/ACSettingsPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/delegates"
diff --git a/nymea-app/ui/mainviews/airconditioning/BigZoneStatusIcons.qml b/nymea-app/ui/mainviews/airconditioning/BigZoneStatusIcons.qml
index 9a2d2589..562c45b1 100644
--- a/nymea-app/ui/mainviews/airconditioning/BigZoneStatusIcons.qml
+++ b/nymea-app/ui/mainviews/airconditioning/BigZoneStatusIcons.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.3
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+import NymeaApp.Utils
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
-import Nymea 1.0
-import NymeaApp.Utils 1.0
-import Nymea.AirConditioning 1.0
Item {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/EditZonePage.qml b/nymea-app/ui/mainviews/airconditioning/EditZonePage.qml
index 7ea0b67b..190ff808 100644
--- a/nymea-app/ui/mainviews/airconditioning/EditZonePage.qml
+++ b/nymea-app/ui/mainviews/airconditioning/EditZonePage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/delegates"
diff --git a/nymea-app/ui/mainviews/airconditioning/EditZoneThingsPage.qml b/nymea-app/ui/mainviews/airconditioning/EditZoneThingsPage.qml
index 4947aadb..0bde9b39 100644
--- a/nymea-app/ui/mainviews/airconditioning/EditZoneThingsPage.qml
+++ b/nymea-app/ui/mainviews/airconditioning/EditZoneThingsPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/delegates"
diff --git a/nymea-app/ui/mainviews/airconditioning/LegendDelegate.qml b/nymea-app/ui/mainviews/airconditioning/LegendDelegate.qml
index 63290e3f..2b324539 100644
--- a/nymea-app/ui/mainviews/airconditioning/LegendDelegate.qml
+++ b/nymea-app/ui/mainviews/airconditioning/LegendDelegate.qml
@@ -22,14 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/customviews"
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
-import QtCharts 2.3
Item {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/TemperatureScheduleEditor.qml b/nymea-app/ui/mainviews/airconditioning/TemperatureScheduleEditor.qml
index f8cfce77..3991fb2a 100644
--- a/nymea-app/ui/mainviews/airconditioning/TemperatureScheduleEditor.qml
+++ b/nymea-app/ui/mainviews/airconditioning/TemperatureScheduleEditor.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
ColumnLayout {
diff --git a/nymea-app/ui/mainviews/airconditioning/TimeOverrideDialog.qml b/nymea-app/ui/mainviews/airconditioning/TimeOverrideDialog.qml
index 27c6088b..c845b4fb 100644
--- a/nymea-app/ui/mainviews/airconditioning/TimeOverrideDialog.qml
+++ b/nymea-app/ui/mainviews/airconditioning/TimeOverrideDialog.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+import NymeaApp.Utils
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/customviews"
import "qrc:/ui/delegates"
-import Nymea 1.0
-import NymeaApp.Utils 1.0
-import Nymea.AirConditioning 1.0
NymeaDialog {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/TimeSchedulePage.qml b/nymea-app/ui/mainviews/airconditioning/TimeSchedulePage.qml
index 7306b0a8..4a6f3a4a 100644
--- a/nymea-app/ui/mainviews/airconditioning/TimeSchedulePage.qml
+++ b/nymea-app/ui/mainviews/airconditioning/TimeSchedulePage.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/customviews"
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
Page {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/TooltipDelegate.qml b/nymea-app/ui/mainviews/airconditioning/TooltipDelegate.qml
index 0322a77d..e2b202cf 100644
--- a/nymea-app/ui/mainviews/airconditioning/TooltipDelegate.qml
+++ b/nymea-app/ui/mainviews/airconditioning/TooltipDelegate.qml
@@ -22,14 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/customviews"
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
-import QtCharts 2.3
NymeaToolTip {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/ZoneInfoWrapper.qml b/nymea-app/ui/mainviews/airconditioning/ZoneInfoWrapper.qml
index f4a19ef7..8f50e199 100644
--- a/nymea-app/ui/mainviews/airconditioning/ZoneInfoWrapper.qml
+++ b/nymea-app/ui/mainviews/airconditioning/ZoneInfoWrapper.qml
@@ -22,14 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtGraphicalEffects 1.0
-import QtCharts 2.2
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import QtCharts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/delegates"
diff --git a/nymea-app/ui/mainviews/airconditioning/ZonePage.qml b/nymea-app/ui/mainviews/airconditioning/ZonePage.qml
index e0e34ada..61838056 100644
--- a/nymea-app/ui/mainviews/airconditioning/ZonePage.qml
+++ b/nymea-app/ui/mainviews/airconditioning/ZonePage.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/customviews"
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
Page {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/ZoneStatusIcons.qml b/nymea-app/ui/mainviews/airconditioning/ZoneStatusIcons.qml
index 6e9dc1a5..aa0d19f6 100644
--- a/nymea-app/ui/mainviews/airconditioning/ZoneStatusIcons.qml
+++ b/nymea-app/ui/mainviews/airconditioning/ZoneStatusIcons.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Layouts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
RowLayout {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/ZoneView.qml b/nymea-app/ui/mainviews/airconditioning/ZoneView.qml
index 74513bc9..3b7d37d9 100644
--- a/nymea-app/ui/mainviews/airconditioning/ZoneView.qml
+++ b/nymea-app/ui/mainviews/airconditioning/ZoneView.qml
@@ -22,15 +22,16 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+import NymeaApp.Utils
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/customviews"
import "qrc:/ui/delegates"
-import Nymea 1.0
-import NymeaApp.Utils 1.0
-import Nymea.AirConditioning 1.0
Item {
id: root
diff --git a/nymea-app/ui/mainviews/airconditioning/ZonesView.qml b/nymea-app/ui/mainviews/airconditioning/ZonesView.qml
index 56a41800..dfe30184 100644
--- a/nymea-app/ui/mainviews/airconditioning/ZonesView.qml
+++ b/nymea-app/ui/mainviews/airconditioning/ZonesView.qml
@@ -22,14 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtGraphicalEffects 1.0
-import QtCharts 2.2
-import Nymea 1.0
-import Nymea.AirConditioning 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import QtCharts
+import Nymea
+import Nymea.AirConditioning
+
import "qrc:/ui/components"
import "qrc:/ui/delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/Dashboard.qml b/nymea-app/ui/mainviews/dashboard/Dashboard.qml
index eb690f83..f2a77785 100644
--- a/nymea-app/ui/mainviews/dashboard/Dashboard.qml
+++ b/nymea-app/ui/mainviews/dashboard/Dashboard.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+
import "../../components"
import "../../delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardAddWizard.qml b/nymea-app/ui/mainviews/dashboard/DashboardAddWizard.qml
index b885d295..9b91bc90 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardAddWizard.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardAddWizard.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../../components"
import "../../delegates"
import "../../customviews"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardDelegateBase.qml b/nymea-app/ui/mainviews/dashboard/DashboardDelegateBase.qml
index 30086530..64f27123 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardDelegateBase.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardDelegateBase.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+
import "../../components"
import "../../delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardFolderDelegate.qml b/nymea-app/ui/mainviews/dashboard/DashboardFolderDelegate.qml
index 1d3a2cec..7d2f32c1 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardFolderDelegate.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardFolderDelegate.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../../components"
import "../../delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardGraphDelegate.qml b/nymea-app/ui/mainviews/dashboard/DashboardGraphDelegate.qml
index b7f164fa..30ca1b99 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardGraphDelegate.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardGraphDelegate.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+
import "../../components"
import "../../customviews"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardPage.qml b/nymea-app/ui/mainviews/dashboard/DashboardPage.qml
index 53bb0403..96da989e 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardPage.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+
import "../../components"
import "../../delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardSceneDelegate.qml b/nymea-app/ui/mainviews/dashboard/DashboardSceneDelegate.qml
index fe4eeee1..f011e51f 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardSceneDelegate.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardSceneDelegate.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+
import "../../components"
import "../../delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardSensorDelegate.qml b/nymea-app/ui/mainviews/dashboard/DashboardSensorDelegate.qml
index 7fd1aa1d..26b831de 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardSensorDelegate.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardSensorDelegate.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../../components"
import "../../delegates"
import "../../customviews"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardStateDelegate.qml b/nymea-app/ui/mainviews/dashboard/DashboardStateDelegate.qml
index e00d36df..5bcc84dc 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardStateDelegate.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardStateDelegate.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../../components"
import "../../delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardThingDelegate.qml b/nymea-app/ui/mainviews/dashboard/DashboardThingDelegate.qml
index 73460d01..49b153d2 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardThingDelegate.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardThingDelegate.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "../../components"
import "../../delegates"
diff --git a/nymea-app/ui/mainviews/dashboard/DashboardWebViewDelegate.qml b/nymea-app/ui/mainviews/dashboard/DashboardWebViewDelegate.qml
index a134ba1a..58d7afba 100644
--- a/nymea-app/ui/mainviews/dashboard/DashboardWebViewDelegate.qml
+++ b/nymea-app/ui/mainviews/dashboard/DashboardWebViewDelegate.qml
@@ -22,16 +22,17 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Qt5Compat.GraphicalEffects
+import Nymea
+
import "../../components"
import "../../delegates"
-//import QtWebView 1.1
-import QtGraphicalEffects 1.1
+//import QtWebView
DashboardDelegateBase {
id: root
@@ -70,9 +71,9 @@ DashboardDelegateBase {
property string webViewString:
'
- import QtQuick 2.8;
- import QtWebView 1.1;
- import Nymea 1.0;
+ import QtQuick;
+ import QtWebView;
+ import Nymea;
WebView {
id: webView
diff --git a/nymea-app/ui/mainviews/energy/ConsumerStats.qml b/nymea-app/ui/mainviews/energy/ConsumerStats.qml
index 2c39c990..b2ce8acf 100644
--- a/nymea-app/ui/mainviews/energy/ConsumerStats.qml
+++ b/nymea-app/ui/mainviews/energy/ConsumerStats.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import QtCharts 2.3
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "qrc:/ui/components/"
StatsBase {
diff --git a/nymea-app/ui/mainviews/energy/ConsumerStatsPage.qml b/nymea-app/ui/mainviews/energy/ConsumerStatsPage.qml
index 3040213b..2d18cd58 100644
--- a/nymea-app/ui/mainviews/energy/ConsumerStatsPage.qml
+++ b/nymea-app/ui/mainviews/energy/ConsumerStatsPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Page {
diff --git a/nymea-app/ui/mainviews/energy/ConsumersHistory.qml b/nymea-app/ui/mainviews/energy/ConsumersHistory.qml
index 78a5b6e5..2324f4b7 100644
--- a/nymea-app/ui/mainviews/energy/ConsumersHistory.qml
+++ b/nymea-app/ui/mainviews/energy/ConsumersHistory.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtCharts 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtCharts
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+import NymeaApp.Utils
+
import "qrc:/ui/components"
Item {
@@ -45,7 +46,7 @@ Item {
sampleRate: d.sampleRate
Component.onCompleted: fetchLogs()
- onEntriesAddedIdx: {
+ onEntriesAddedIdx: (index, count) => {
print("entries added", index, count)
for (var i = 0; i < count; i++) {
var entry = powerBalanceLogs.get(index + i)
@@ -495,11 +496,11 @@ Item {
thingId: consumerDelegate.thing.id
loader: logsLoader
- onEntriesAddedIdx: {
+ onEntriesAddedIdx: (index, count) => {
addTimer.addEntries(index, count)
}
- onEntriesRemoved: {
+ onEntriesRemoved: (index, count) => {
// Note QtCharts crash when calling removePoints() for points that don't exist.
// Additionally it may decide to ignore values we add, e.g. if we try to add an Inf or undefined value for whatever reason
// So, even though in theory the series should always 1:1 reflect the model, it may not do so in practice and we'll have to make sure not crash here
diff --git a/nymea-app/ui/mainviews/energy/ConsumersHistoryPage.qml b/nymea-app/ui/mainviews/energy/ConsumersHistoryPage.qml
index ff510c96..196d3a93 100644
--- a/nymea-app/ui/mainviews/energy/ConsumersHistoryPage.qml
+++ b/nymea-app/ui/mainviews/energy/ConsumersHistoryPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Page {
diff --git a/nymea-app/ui/mainviews/energy/ConsumersPieChart.qml b/nymea-app/ui/mainviews/energy/ConsumersPieChart.qml
index a184af1c..3483ea58 100644
--- a/nymea-app/ui/mainviews/energy/ConsumersPieChart.qml
+++ b/nymea-app/ui/mainviews/energy/ConsumersPieChart.qml
@@ -22,13 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "qrc:/ui/components"
Item {
diff --git a/nymea-app/ui/mainviews/energy/ConsumersPieChartPage.qml b/nymea-app/ui/mainviews/energy/ConsumersPieChartPage.qml
index c0f68b2e..fdba7263 100644
--- a/nymea-app/ui/mainviews/energy/ConsumersPieChartPage.qml
+++ b/nymea-app/ui/mainviews/energy/ConsumersPieChartPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Page {
diff --git a/nymea-app/ui/mainviews/energy/CurrentConsumptionBalancePieChart.qml b/nymea-app/ui/mainviews/energy/CurrentConsumptionBalancePieChart.qml
index 1029f685..fc3b55a2 100644
--- a/nymea-app/ui/mainviews/energy/CurrentConsumptionBalancePieChart.qml
+++ b/nymea-app/ui/mainviews/energy/CurrentConsumptionBalancePieChart.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+import Nymea
+import NymeaApp.Utils
ChartView {
id: consumptionPieChart
diff --git a/nymea-app/ui/mainviews/energy/CurrentPowerBalancePage.qml b/nymea-app/ui/mainviews/energy/CurrentPowerBalancePage.qml
index 1ee9a81a..e308954a 100644
--- a/nymea-app/ui/mainviews/energy/CurrentPowerBalancePage.qml
+++ b/nymea-app/ui/mainviews/energy/CurrentPowerBalancePage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Page {
diff --git a/nymea-app/ui/mainviews/energy/CurrentPowerBalancePieChart.qml b/nymea-app/ui/mainviews/energy/CurrentPowerBalancePieChart.qml
index fb0c4fe5..3b2b5b39 100644
--- a/nymea-app/ui/mainviews/energy/CurrentPowerBalancePieChart.qml
+++ b/nymea-app/ui/mainviews/energy/CurrentPowerBalancePieChart.qml
@@ -22,14 +22,15 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtGraphicalEffects 1.0
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Qt5Compat.GraphicalEffects
+import QtCharts
+import Nymea
+import NymeaApp.Utils
+
import "qrc:/ui/components"
Item {
diff --git a/nymea-app/ui/mainviews/energy/CurrentProductionBalancePieChart.qml b/nymea-app/ui/mainviews/energy/CurrentProductionBalancePieChart.qml
index b7117836..d6757c07 100644
--- a/nymea-app/ui/mainviews/energy/CurrentProductionBalancePieChart.qml
+++ b/nymea-app/ui/mainviews/energy/CurrentProductionBalancePieChart.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.2
-import QtCharts 2.2
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCharts
+
+import Nymea
+import NymeaApp.Utils
ChartView {
id: productionPieChart
diff --git a/nymea-app/ui/mainviews/energy/EnergySettingsPage.qml b/nymea-app/ui/mainviews/energy/EnergySettingsPage.qml
index 5492ccf2..8a980adf 100644
--- a/nymea-app/ui/mainviews/energy/EnergySettingsPage.qml
+++ b/nymea-app/ui/mainviews/energy/EnergySettingsPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
SettingsPageBase {
@@ -74,7 +75,7 @@ SettingsPageBase {
textRole: "name"
currentIndex: rootMeterProxy.indexOf(rootMeterProxy.getThing(energyManager.rootMeterId))
- onActivated: {
+ onActivated: (index) => {
energyManager.setRootMeterId(rootMeterProxy.get(index).id)
}
}
diff --git a/nymea-app/ui/mainviews/energy/PowerBalanceHistory.qml b/nymea-app/ui/mainviews/energy/PowerBalanceHistory.qml
index a4f6ebdb..961dfaf0 100644
--- a/nymea-app/ui/mainviews/energy/PowerBalanceHistory.qml
+++ b/nymea-app/ui/mainviews/energy/PowerBalanceHistory.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtCharts 2.2
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtCharts
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Item {
@@ -104,7 +105,7 @@ Item {
Connections {
target: powerBalanceLogs
- onEntriesAddedIdx: {
+ onEntriesAddedIdx: (index, count) => {
// print("entries added", index, count)
selfProductionConsumptionSeries.upperSeries = null
selfProductionConsumptionSeries.lowerSeries = null
diff --git a/nymea-app/ui/mainviews/energy/PowerBalanceHistoryPage.qml b/nymea-app/ui/mainviews/energy/PowerBalanceHistoryPage.qml
index 70b181bb..641661d6 100644
--- a/nymea-app/ui/mainviews/energy/PowerBalanceHistoryPage.qml
+++ b/nymea-app/ui/mainviews/energy/PowerBalanceHistoryPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Page {
diff --git a/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml b/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml
index 96e5b8f0..93f006eb 100644
--- a/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml
+++ b/nymea-app/ui/mainviews/energy/PowerBalanceStats.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import QtCharts 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtCharts
+import Nymea
+
import "qrc:/ui/components/"
StatsBase {
diff --git a/nymea-app/ui/mainviews/energy/PowerBalanceStatsPage.qml b/nymea-app/ui/mainviews/energy/PowerBalanceStatsPage.qml
index 318996c0..06a1a35a 100644
--- a/nymea-app/ui/mainviews/energy/PowerBalanceStatsPage.qml
+++ b/nymea-app/ui/mainviews/energy/PowerBalanceStatsPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.3
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Page {
diff --git a/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml b/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml
index b567052b..703753d5 100644
--- a/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml
+++ b/nymea-app/ui/mainviews/energy/PowerConsumptionBalanceHistory.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtCharts 2.2
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.3
-import Nymea 1.0
+import QtQuick
+import QtCharts
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Item {
diff --git a/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml b/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml
index d3247141..4b16fcca 100644
--- a/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml
+++ b/nymea-app/ui/mainviews/energy/PowerProductionBalanceHistory.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import QtCharts 2.2
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.2
-import Nymea 1.0
+import QtQuick
+import QtCharts
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "qrc:/ui/components"
Item {
diff --git a/nymea-app/ui/mainviews/energy/StatsBase.qml b/nymea-app/ui/mainviews/energy/StatsBase.qml
index e6ca9cb3..db9c3b8d 100644
--- a/nymea-app/ui/mainviews/energy/StatsBase.qml
+++ b/nymea-app/ui/mainviews/energy/StatsBase.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.0
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/shaders/brightnesscircle.frag.qsb b/nymea-app/ui/shaders/brightnesscircle.frag.qsb
new file mode 100644
index 00000000..bad57294
Binary files /dev/null and b/nymea-app/ui/shaders/brightnesscircle.frag.qsb differ
diff --git a/nymea-app/ui/shaders/coloricon.frag b/nymea-app/ui/shaders/coloricon.frag
index bdae5db2..cd572532 100644
--- a/nymea-app/ui/shaders/coloricon.frag
+++ b/nymea-app/ui/shaders/coloricon.frag
@@ -11,9 +11,9 @@ layout(std140, binding = 0) uniform buf {
vec4 inColor;
vec4 outColor;
float threshold;
-} ubuf;
+};
void main() {
- lowp vec4 sourceColor = texture(source, qt_TexCoord0);
- fragColor = mix(vec4(ubuf.outColor.rgb, 1.0) * sourceColor.a, sourceColor, step(ubuf.threshold, distance(sourceColor.rgb / sourceColor.a, ubuf.inColor.rgb))) * ubuf.qt_Opacity;
+ vec4 sourceColor = texture(source, qt_TexCoord0);
+ fragColor = mix(vec4(outColor.rgb, 1.0) * sourceColor.a, sourceColor, step(threshold, distance(sourceColor.rgb / sourceColor.a, inColor.rgb))) * qt_Opacity;
}
diff --git a/nymea-app/ui/shaders/coloricon.frag.qsb b/nymea-app/ui/shaders/coloricon.frag.qsb
index a3d95cb2..687aee4e 100644
Binary files a/nymea-app/ui/shaders/coloricon.frag.qsb and b/nymea-app/ui/shaders/coloricon.frag.qsb differ
diff --git a/nymea-app/ui/shaders/colorizedimage.frag.qsb b/nymea-app/ui/shaders/colorizedimage.frag.qsb
new file mode 100644
index 00000000..558ae1f5
Binary files /dev/null and b/nymea-app/ui/shaders/colorizedimage.frag.qsb differ
diff --git a/nymea-app/ui/system/AboutNymeaPage.qml b/nymea-app/ui/system/AboutNymeaPage.qml
index 38a77e58..cb723d01 100644
--- a/nymea-app/ui/system/AboutNymeaPage.qml
+++ b/nymea-app/ui/system/AboutNymeaPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/system/AdvancedConnectionInterfacesPage.qml b/nymea-app/ui/system/AdvancedConnectionInterfacesPage.qml
index 0ae1b0b0..93bf423a 100644
--- a/nymea-app/ui/system/AdvancedConnectionInterfacesPage.qml
+++ b/nymea-app/ui/system/AdvancedConnectionInterfacesPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/system/ConnectionInterfaceDelegate.qml b/nymea-app/ui/system/ConnectionInterfaceDelegate.qml
index bd3c3aab..a894d78c 100644
--- a/nymea-app/ui/system/ConnectionInterfaceDelegate.qml
+++ b/nymea-app/ui/system/ConnectionInterfaceDelegate.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
NymeaSwipeDelegate {
diff --git a/nymea-app/ui/system/ConnectionInterfacesPage.qml b/nymea-app/ui/system/ConnectionInterfacesPage.qml
index 2442058f..196d567b 100644
--- a/nymea-app/ui/system/ConnectionInterfacesPage.qml
+++ b/nymea-app/ui/system/ConnectionInterfacesPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/system/DeveloperTools.qml b/nymea-app/ui/system/DeveloperTools.qml
index 5cb7bce5..4ebe818f 100644
--- a/nymea-app/ui/system/DeveloperTools.qml
+++ b/nymea-app/ui/system/DeveloperTools.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
@@ -107,7 +108,7 @@ SettingsPageBase {
var path = engine.jsonRpcClient.currentConnection.hostAddress + ":" + root.usedConfig.port + "/debug"
return qsTr("Debug interface active at %1.").arg('' + proto + path + '')
}
- onLinkActivated: Qt.openUrlExternally(link)
+ onLinkActivated: (link) => Qt.openUrlExternally(link)
}
SettingsPageSectionHeader {
diff --git a/nymea-app/ui/system/GeneralSettingsPage.qml b/nymea-app/ui/system/GeneralSettingsPage.qml
index e0b4fb6f..43487d38 100644
--- a/nymea-app/ui/system/GeneralSettingsPage.qml
+++ b/nymea-app/ui/system/GeneralSettingsPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
@@ -202,7 +203,7 @@ SettingsPageBase {
Layout.minimumWidth: 200
model: engine.systemController.timeZones
currentIndex: model.indexOf(engine.systemController.serverTimeZone)
- onActivated: {
+ onActivated: (index) => {
engine.systemController.serverTimeZone = currentText;
}
}
diff --git a/nymea-app/ui/system/LogViewerPage.qml b/nymea-app/ui/system/LogViewerPage.qml
index d7965d38..7d47ffc6 100644
--- a/nymea-app/ui/system/LogViewerPage.qml
+++ b/nymea-app/ui/system/LogViewerPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
Page {
@@ -88,8 +89,9 @@ Page {
delegate: NymeaItemDelegate {
id: delegate
width: listView.width
- leftPadding: 0
- rightPadding: 0
+
+ leftPadding: app.margins
+ rightPadding: app.margins
topPadding: 0
bottomPadding: 0
property NewLogEntry entry: newLogsModel.get(index)
diff --git a/nymea-app/ui/system/LogViewerPagePre18.qml b/nymea-app/ui/system/LogViewerPagePre18.qml
index 6a12c9c2..9d906d22 100644
--- a/nymea-app/ui/system/LogViewerPagePre18.qml
+++ b/nymea-app/ui/system/LogViewerPagePre18.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Layouts 1.2
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
+
import "../components"
Page {
diff --git a/nymea-app/ui/system/ModbusRtuAddMasterPage.qml b/nymea-app/ui/system/ModbusRtuAddMasterPage.qml
index b3cd63a5..7be622d7 100644
--- a/nymea-app/ui/system/ModbusRtuAddMasterPage.qml
+++ b/nymea-app/ui/system/ModbusRtuAddMasterPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
SettingsPageBase {
id: root
@@ -160,7 +161,7 @@ SettingsPageBase {
Layout.minimumWidth: 250
textRole: "value"
enabled: !root.busy
- onActivated: console.log("Selected baud rate", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected baud rate", currentText, model.get(index).value)
model: serialPortBaudrateModel
}
}
@@ -178,7 +179,7 @@ SettingsPageBase {
textRole: "text"
enabled: !root.busy
Layout.minimumWidth: 250
- onActivated: console.log("Selected parity", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected parity", currentText, model.get(index).value)
model: serialPortParityModel
}
}
@@ -196,7 +197,7 @@ SettingsPageBase {
textRole: "text"
enabled: !root.busy
Layout.minimumWidth: 250
- onActivated: console.log("Selected data bits", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected data bits", currentText, model.get(index).value)
model: serialPortDataBitsModel
Component.onCompleted: {
currentIndex = 3
@@ -217,7 +218,7 @@ SettingsPageBase {
textRole: "text"
enabled: !root.busy
Layout.minimumWidth: 250
- onActivated: console.log("Selected stop bits", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected stop bits", currentText, model.get(index).value)
model: serialPortStopBitsModel
}
}
diff --git a/nymea-app/ui/system/ModbusRtuReconfigureMasterPage.qml b/nymea-app/ui/system/ModbusRtuReconfigureMasterPage.qml
index e26d1c14..942dd0ce 100644
--- a/nymea-app/ui/system/ModbusRtuReconfigureMasterPage.qml
+++ b/nymea-app/ui/system/ModbusRtuReconfigureMasterPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
SettingsPageBase {
id: root
@@ -175,7 +176,7 @@ SettingsPageBase {
enabled: !root.busy
textRole: "value"
model: serialPortBaudrateModel
- onActivated: console.log("Selected baudrate", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected baudrate", currentText, model.get(index).value)
Component.onCompleted: {
for (var i = 0; i < serialPortBaudrateModel.count; i++) {
if (serialPortBaudrateModel.get(i).value === modbusRtuMaster.baudrate) {
@@ -199,7 +200,7 @@ SettingsPageBase {
textRole: "text"
enabled: !root.busy
Layout.minimumWidth: 250
- onActivated: console.log("Selected parity", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected parity", currentText, model.get(index).value)
model: serialPortParityModel
Component.onCompleted: {
for (var i = 0; i < serialPortParityModel.count; i++) {
@@ -224,7 +225,7 @@ SettingsPageBase {
textRole: "text"
enabled: !root.busy
Layout.minimumWidth: 250
- onActivated: console.log("Selected data bits", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected data bits", currentText, model.get(index).value)
model: serialPortDataBitsModel
Component.onCompleted: {
for (var i = 0; i < serialPortDataBitsModel.count; i++) {
@@ -249,7 +250,7 @@ SettingsPageBase {
textRole: "text"
enabled: !root.busy
Layout.minimumWidth: 250
- onActivated: console.log("Selected stop bits", currentText, model.get(currentIndex).value)
+ onActivated: (index) => console.log("Selected stop bits", currentText, model.get(index).value)
model: serialPortStopBitsModel
Component.onCompleted: {
for (var i = 0; i < serialPortStopBitsModel.count; i++) {
diff --git a/nymea-app/ui/system/ModbusRtuSettingsPage.qml b/nymea-app/ui/system/ModbusRtuSettingsPage.qml
index 9188cd90..0a702a5b 100644
--- a/nymea-app/ui/system/ModbusRtuSettingsPage.qml
+++ b/nymea-app/ui/system/ModbusRtuSettingsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/MqttBrokerSettingsPage.qml b/nymea-app/ui/system/MqttBrokerSettingsPage.qml
index 1698aeed..07a1ed12 100644
--- a/nymea-app/ui/system/MqttBrokerSettingsPage.qml
+++ b/nymea-app/ui/system/MqttBrokerSettingsPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/system/MqttPolicyPage.qml b/nymea-app/ui/system/MqttPolicyPage.qml
index 3fe29c05..692e158e 100644
--- a/nymea-app/ui/system/MqttPolicyPage.qml
+++ b/nymea-app/ui/system/MqttPolicyPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/system/NetworkSettingsPage.qml b/nymea-app/ui/system/NetworkSettingsPage.qml
index e176fb5b..c3af7c01 100644
--- a/nymea-app/ui/system/NetworkSettingsPage.qml
+++ b/nymea-app/ui/system/NetworkSettingsPage.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Qt.labs.settings 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import QtCore
-import Nymea 1.0
+import Nymea
import "qrc:/ui/components"
SettingsPageBase {
@@ -570,8 +570,8 @@ SettingsPageBase {
maximumLength: 32
Layout.fillWidth: true
horizontalAlignment: Text.AlignRight
- validator: RegExpValidator {
- regExp: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
+ validator: RegularExpressionValidator {
+ regularExpression: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
}
}
@@ -597,8 +597,8 @@ SettingsPageBase {
id: defaultGwTextField
maximumLength: 32
Layout.fillWidth: true
- validator: RegExpValidator {
- regExp: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
+ validator: RegularExpressionValidator {
+ regularExpression: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
}
}
@@ -610,8 +610,8 @@ SettingsPageBase {
id: dnsTextField
maximumLength: 32
Layout.fillWidth: true
- validator: RegExpValidator {
- regExp: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
+ validator: RegularExpressionValidator {
+ regularExpression: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
}
}
}
diff --git a/nymea-app/ui/system/PackageDetailsPage.qml b/nymea-app/ui/system/PackageDetailsPage.qml
index fdc63a2a..441dfc93 100644
--- a/nymea-app/ui/system/PackageDetailsPage.qml
+++ b/nymea-app/ui/system/PackageDetailsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
SettingsPageBase {
id: packageDetailsPage
diff --git a/nymea-app/ui/system/PackageListPage.qml b/nymea-app/ui/system/PackageListPage.qml
index 00db3140..517aa6ff 100644
--- a/nymea-app/ui/system/PackageListPage.qml
+++ b/nymea-app/ui/system/PackageListPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
SettingsPageBase {
id: packageListPage
diff --git a/nymea-app/ui/system/PluginParamsPage.qml b/nymea-app/ui/system/PluginParamsPage.qml
index 9eca628b..c3454610 100644
--- a/nymea-app/ui/system/PluginParamsPage.qml
+++ b/nymea-app/ui/system/PluginParamsPage.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/PluginsPage.qml b/nymea-app/ui/system/PluginsPage.qml
index 1aa3d580..dfb3aa58 100644
--- a/nymea-app/ui/system/PluginsPage.qml
+++ b/nymea-app/ui/system/PluginsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/ServerConfigurationDialog.qml b/nymea-app/ui/system/ServerConfigurationDialog.qml
index 6042e0a9..49ad4e20 100644
--- a/nymea-app/ui/system/ServerConfigurationDialog.qml
+++ b/nymea-app/ui/system/ServerConfigurationDialog.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
Dialog {
id: root
@@ -54,7 +54,7 @@ Dialog {
? 0
: root.serverConfiguration.address === "127.0.0.1"
? 1 : 2
- onActivated: {
+ onActivated: (index) => {
switch (index) {
case 0:
root.serverConfiguration.address = "0.0.0.0";
diff --git a/nymea-app/ui/system/ServerLoggingCategoriesPage.qml b/nymea-app/ui/system/ServerLoggingCategoriesPage.qml
index 5b493509..18831e9c 100644
--- a/nymea-app/ui/system/ServerLoggingCategoriesPage.qml
+++ b/nymea-app/ui/system/ServerLoggingCategoriesPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/system/SystemUpdatePage.qml b/nymea-app/ui/system/SystemUpdatePage.qml
index 309f975f..3f11bb72 100644
--- a/nymea-app/ui/system/SystemUpdatePage.qml
+++ b/nymea-app/ui/system/SystemUpdatePage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "../components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/system/TunnelProxyServerConfigurationDialog.qml b/nymea-app/ui/system/TunnelProxyServerConfigurationDialog.qml
index a0bd1283..f04dc951 100644
--- a/nymea-app/ui/system/TunnelProxyServerConfigurationDialog.qml
+++ b/nymea-app/ui/system/TunnelProxyServerConfigurationDialog.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
Dialog {
id: root
@@ -40,17 +40,15 @@ Dialog {
ColumnLayout {
anchors { left: parent.left; top: parent.top; right: parent.right }
- RowLayout {
- Label {
- text: qsTr("Proxy server address:")
- Layout.fillWidth: true
- }
- TextField {
- id: addressTextField
- Layout.fillWidth: true
- text: root.serverConfiguration ? root.serverConfiguration.address : ""
- onEditingFinished: root.serverConfiguration.address = text
- }
+ Label {
+ text: qsTr("Proxy server address:")
+ Layout.fillWidth: true
+ }
+ TextField {
+ id: addressTextField
+ Layout.fillWidth: true
+ text: root.serverConfiguration ? root.serverConfiguration.address : ""
+ onEditingFinished: root.serverConfiguration.address = text
}
RowLayout {
diff --git a/nymea-app/ui/system/UsersSettingsPage.qml b/nymea-app/ui/system/UsersSettingsPage.qml
index 83b02fbd..75988440 100644
--- a/nymea-app/ui/system/UsersSettingsPage.qml
+++ b/nymea-app/ui/system/UsersSettingsPage.qml
@@ -22,12 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
-import NymeaApp.Utils 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+
+import Nymea
+import NymeaApp.Utils
+
import "../components"
SettingsPageBase {
@@ -38,7 +40,7 @@ SettingsPageBase {
id: userManager
engine: _engine
- onChangePasswordReply: {
+ onChangePasswordReply: (id, error) => {
if (error !== UserManager.UserErrorNoError) {
var component = Qt.createComponent("../components/ErrorDialog.qml")
var text;
@@ -173,9 +175,9 @@ SettingsPageBase {
}
Connections {
target: userManager
- onSetUserInfoReply: {
+ onSetUserInfoReply: (id, error) => {
editUserInfoPage.busy = false
- if (error != UserManager.UserErrorNoError) {
+ if (error !== UserManager.UserErrorNoError) {
var component = Qt.createComponent("../components/ErrorDialog.qml")
var text = qsTr("Un unexpected error happened when creating the user. We're sorry for this. (Error code: %1)").arg(error);
var popup = component.createObject(app, {text: text});
@@ -421,7 +423,7 @@ SettingsPageBase {
Connections {
target: userManager
- onRemoveUserReply: {
+ onRemoveUserReply: (id, error) => {
userDetailsPage.busy = false
if (error !== UserManager.UserErrorNoError) {
var component = Qt.createComponent("../components/ErrorDialog.qml")
@@ -528,7 +530,7 @@ SettingsPageBase {
}
Connections {
target: userManager
- onCreateUserReply: {
+ onCreateUserReply: (id, error) => {
createUserPage.busy = false
if (error !== UserManager.UserErrorNoError) {
var component = Qt.createComponent("../components/ErrorDialog.qml")
diff --git a/nymea-app/ui/system/WebServerConfigurationDialog.qml b/nymea-app/ui/system/WebServerConfigurationDialog.qml
index ede9079f..08cd9f0d 100644
--- a/nymea-app/ui/system/WebServerConfigurationDialog.qml
+++ b/nymea-app/ui/system/WebServerConfigurationDialog.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
Dialog {
id: root
@@ -54,7 +54,7 @@ Dialog {
? 0
: root.serverConfiguration.address === "127.0.0.1"
? 1 : 2
- onActivated: {
+ onActivated: (index) => {
switch (index) {
case 0:
root.serverConfiguration.address = "0.0.0.0";
diff --git a/nymea-app/ui/system/WebServerSettingsPage.qml b/nymea-app/ui/system/WebServerSettingsPage.qml
index 3cb8f90d..0c4af9a4 100644
--- a/nymea-app/ui/system/WebServerSettingsPage.qml
+++ b/nymea-app/ui/system/WebServerSettingsPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
SettingsPageBase {
diff --git a/nymea-app/ui/system/WirelessNetworksFilterSettingsPage.qml b/nymea-app/ui/system/WirelessNetworksFilterSettingsPage.qml
index 926af868..a3714223 100644
--- a/nymea-app/ui/system/WirelessNetworksFilterSettingsPage.qml
+++ b/nymea-app/ui/system/WirelessNetworksFilterSettingsPage.qml
@@ -22,13 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.9
-import QtQuick.Layouts 1.2
-import Qt.labs.settings 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import QtCore
+import Nymea
import "qrc:/ui/components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/system/zigbee/ZigbeeAddNetworkPage.qml b/nymea-app/ui/system/zigbee/ZigbeeAddNetworkPage.qml
index 537195d5..32f421d9 100644
--- a/nymea-app/ui/system/zigbee/ZigbeeAddNetworkPage.qml
+++ b/nymea-app/ui/system/zigbee/ZigbeeAddNetworkPage.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
import "qrc:/ui/components"
diff --git a/nymea-app/ui/system/zigbee/ZigbeeNetworkPage.qml b/nymea-app/ui/system/zigbee/ZigbeeNetworkPage.qml
index 5051a658..0d1fe504 100644
--- a/nymea-app/ui/system/zigbee/ZigbeeNetworkPage.qml
+++ b/nymea-app/ui/system/zigbee/ZigbeeNetworkPage.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
import "qrc:/ui/components"
-import Nymea 1.0
+import Nymea
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/zigbee/ZigbeeNetworkSettingsPage.qml b/nymea-app/ui/system/zigbee/ZigbeeNetworkSettingsPage.qml
index 1aed65b3..b7ed6793 100644
--- a/nymea-app/ui/system/zigbee/ZigbeeNetworkSettingsPage.qml
+++ b/nymea-app/ui/system/zigbee/ZigbeeNetworkSettingsPage.qml
@@ -22,12 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
import "qrc:/ui/components"
-import Nymea 1.0
+import Nymea
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/zigbee/ZigbeeNetworkTopologyPage.qml b/nymea-app/ui/system/zigbee/ZigbeeNetworkTopologyPage.qml
index 392510aa..75802073 100644
--- a/nymea-app/ui/system/zigbee/ZigbeeNetworkTopologyPage.qml
+++ b/nymea-app/ui/system/zigbee/ZigbeeNetworkTopologyPage.qml
@@ -22,11 +22,12 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.1
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "qrc:/ui/components"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/system/zigbee/ZigbeeNodePage.qml b/nymea-app/ui/system/zigbee/ZigbeeNodePage.qml
index 0f05fb96..fad26218 100644
--- a/nymea-app/ui/system/zigbee/ZigbeeNodePage.qml
+++ b/nymea-app/ui/system/zigbee/ZigbeeNodePage.qml
@@ -22,13 +22,14 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+import NymeaApp.Utils
+
import "qrc:/ui/components"
-import Nymea 1.0
-import NymeaApp.Utils 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/zigbee/ZigbeeSettingsPage.qml b/nymea-app/ui/system/zigbee/ZigbeeSettingsPage.qml
index 2b6f7131..f170a28f 100644
--- a/nymea-app/ui/system/zigbee/ZigbeeSettingsPage.qml
+++ b/nymea-app/ui/system/zigbee/ZigbeeSettingsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "qrc:/ui/components"
-import Nymea 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/zwave/ZWaveAddNetworkPage.qml b/nymea-app/ui/system/zwave/ZWaveAddNetworkPage.qml
index 77a539e4..e25e9ba9 100644
--- a/nymea-app/ui/system/zwave/ZWaveAddNetworkPage.qml
+++ b/nymea-app/ui/system/zwave/ZWaveAddNetworkPage.qml
@@ -22,10 +22,10 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import QtQuick.Controls 2.2
-import QtQuick.Layouts 1.3
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
import "../../components"
diff --git a/nymea-app/ui/system/zwave/ZWaveNetworkPage.qml b/nymea-app/ui/system/zwave/ZWaveNetworkPage.qml
index 8a0af42a..b218027e 100644
--- a/nymea-app/ui/system/zwave/ZWaveNetworkPage.qml
+++ b/nymea-app/ui/system/zwave/ZWaveNetworkPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "qrc:/ui/components"
-import Nymea 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/zwave/ZWaveNetworkSettingsPage.qml b/nymea-app/ui/system/zwave/ZWaveNetworkSettingsPage.qml
index 29e02a11..19796b5f 100644
--- a/nymea-app/ui/system/zwave/ZWaveNetworkSettingsPage.qml
+++ b/nymea-app/ui/system/zwave/ZWaveNetworkSettingsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "qrc:/ui/components"
-import Nymea 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/system/zwave/ZWaveSettingsPage.qml b/nymea-app/ui/system/zwave/ZWaveSettingsPage.qml
index 68d04efd..6f8edf23 100644
--- a/nymea-app/ui/system/zwave/ZWaveSettingsPage.qml
+++ b/nymea-app/ui/system/zwave/ZWaveSettingsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.2
-import QtQuick.Controls.Material 2.1
-import QtQuick.Layouts 1.3
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+import Nymea
+
import "qrc:/ui/components"
-import Nymea 1.0
SettingsPageBase {
id: root
diff --git a/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml b/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml
index a3763619..493fa8c0 100644
--- a/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml
+++ b/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/thingconfiguration/EditThingsPage.qml b/nymea-app/ui/thingconfiguration/EditThingsPage.qml
index 78ab65f0..a9930121 100644
--- a/nymea-app/ui/thingconfiguration/EditThingsPage.qml
+++ b/nymea-app/ui/thingconfiguration/EditThingsPage.qml
@@ -22,12 +22,13 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.4
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
-import Nymea 1.0
Page {
id: root
diff --git a/nymea-app/ui/thingconfiguration/NewThingPage.qml b/nymea-app/ui/thingconfiguration/NewThingPage.qml
index 0cf7e36c..87de113d 100644
--- a/nymea-app/ui/thingconfiguration/NewThingPage.qml
+++ b/nymea-app/ui/thingconfiguration/NewThingPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/thingconfiguration/SetupWizard.qml b/nymea-app/ui/thingconfiguration/SetupWizard.qml
index 2d062331..e636333e 100644
--- a/nymea-app/ui/thingconfiguration/SetupWizard.qml
+++ b/nymea-app/ui/thingconfiguration/SetupWizard.qml
@@ -22,11 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.5
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.1
-import QtQuick.Controls.Material 2.1
-import Nymea 1.0
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import Nymea
import "../components"
import "../delegates"
@@ -532,10 +532,10 @@ Page {
property string webViewString:
'
- import QtQuick 2.8;
- import QtWebView 1.1;
- import QtQuick.Controls 2.2
- import Nymea 1.0;
+ import QtQuick;
+ import QtWebView;
+ import QtQuick.Controls
+ import Nymea;
Rectangle {
anchors.fill: parent
diff --git a/nymea-app/ui/thingconfiguration/ThingClassDetailsPage.qml b/nymea-app/ui/thingconfiguration/ThingClassDetailsPage.qml
index b51411f7..fcb70086 100644
--- a/nymea-app/ui/thingconfiguration/ThingClassDetailsPage.qml
+++ b/nymea-app/ui/thingconfiguration/ThingClassDetailsPage.qml
@@ -22,10 +22,11 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.8
-import QtQuick.Controls 2.1
-import QtQuick.Layouts 1.2
-import Nymea 1.0
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Nymea
+
import "../components"
import "../delegates"
diff --git a/nymea-app/ui/utils/ActionQueue.qml b/nymea-app/ui/utils/ActionQueue.qml
index ca05ed01..7a4d0d22 100644
--- a/nymea-app/ui/utils/ActionQueue.qml
+++ b/nymea-app/ui/utils/ActionQueue.qml
@@ -22,8 +22,8 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-import QtQuick 2.9
-import Nymea 1.0
+import QtQuick
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/utils/AirQualityIndex.qml b/nymea-app/ui/utils/AirQualityIndex.qml
index b89f1e8e..7c846a85 100644
--- a/nymea-app/ui/utils/AirQualityIndex.qml
+++ b/nymea-app/ui/utils/AirQualityIndex.qml
@@ -23,8 +23,9 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.9
-import Nymea 1.0
+
+import QtQuick
+import Nymea
Item {
id: root
diff --git a/nymea-app/ui/utils/NymeaUtils.qml b/nymea-app/ui/utils/NymeaUtils.qml
index 783850d3..daec4ae7 100644
--- a/nymea-app/ui/utils/NymeaUtils.qml
+++ b/nymea-app/ui/utils/NymeaUtils.qml
@@ -23,9 +23,10 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
pragma Singleton
-import QtQuick 2.9
-import Nymea 1.0
-import QtCharts 2.2
+
+import QtQuick
+import Nymea
+import QtCharts
Item {
id: root
diff --git a/packaging/android/AndroidManifest.xml b/packaging/android/AndroidManifest.xml
index fec56141..e242d9ea 100644
--- a/packaging/android/AndroidManifest.xml
+++ b/packaging/android/AndroidManifest.xml
@@ -1,141 +1,95 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -149,11 +103,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packaging/android/build.gradle b/packaging/android/build.gradle
index f2e95a3e..16e86bd3 100644
--- a/packaging/android/build.gradle
+++ b/packaging/android/build.gradle
@@ -12,6 +12,7 @@ buildscript {
repositories {
jcenter()
google()
+ mavenCentral()
}
dependencies {
@@ -33,10 +34,10 @@ allprojects {
}
}
-apply plugin: 'com.android.application'
+apply plugin: qtGradlePluginType
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation 'org.reactivestreams:reactive-streams:1.0.3'
implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
implementation 'androidx.core:core:1.16.0'
@@ -61,50 +62,58 @@ android {
* The following variables:
* - androidBuildToolsVersion,
* - androidCompileSdkVersion
- * - qt5AndroidDir - holds the path to qt android files
+ * - qtAndroidDir - holds the path to qt android files
* needed to build any Qt application
* on Android.
+ * - qtGradlePluginType - whether to build an app or a library
*
* are defined in gradle.properties file. This file is
* updated by QtCreator and androiddeployqt tools.
* Changing them manually might break the compilation!
*******************************************************/
- compileSdkVersion androidCompileSdkVersion.toInteger()
- buildToolsVersion androidBuildToolsVersion
-
namespace 'io.guh.nymeaapp'
- buildFeatures.aidl = true
+ compileSdkVersion androidCompileSdkVersion
+ buildToolsVersion androidBuildToolsVersion
+ ndkVersion androidNdkVersion
- packagingOptions {
- jniLibs {
- useLegacyPackaging = true
- }
- }
+ // Extract native libraries from the APK
+ packagingOptions.jniLibs.useLegacyPackaging true
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = [
- qt5AndroidDir + '/src',
- nymeaAppRoot + '/androidservice/java',
- nymeaAppRoot + '/nymea-app/platformintegration/android/java',
- nymeaAppRoot + '/QtZeroConf/android',
- 'src',
- 'java']
- if ("${useFirebase}" == "true") {
- java.srcDirs += [nymeaAppRoot + '/nymea-app/platformintegration/android/java-firebase']
- }
-
- aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
- res.srcDirs = [qt5AndroidDir + '/res', 'res']
+ java.srcDirs = [qtAndroidDir + '/src', 'src', 'java']
+ aidl.srcDirs = [qtAndroidDir + '/src', 'src', 'aidl']
+ res.srcDirs = [qtAndroidDir + '/res', 'res']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
+
+ java.srcDirs = [
+ qt5AndroidDir + '/src',
+ nymeaAppRoot + '/nymea-app/platformintegration/android/java',
+ nymeaAppRoot + '/QtZeroConf/android',
+ 'src',
+ 'java']
+
+ if ("${useFirebase}" == "true") {
+ java.srcDirs += [nymeaAppRoot + '/nymea-app/platformintegration/android/java-firebase']
+ }
+
}
}
+ tasks.withType(JavaCompile) {
+ options.incremental = true
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
lintOptions {
abortOnError false
}
diff --git a/packaging/android/gradle/wrapper/gradle-wrapper.properties b/packaging/android/gradle/wrapper/gradle-wrapper.properties
index 2733ed5d..37f853b1 100644
--- a/packaging/android/gradle/wrapper/gradle-wrapper.properties
+++ b/packaging/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/packaging/android/res/values/libs.xml b/packaging/android/res/values/libs.xml
index 1437232f..fe63866f 100644
--- a/packaging/android/res/values/libs.xml
+++ b/packaging/android/res/values/libs.xml
@@ -1,29 +1,21 @@
-
- - https://download.qt.io/ministro/android/qt5/qt-5.8
-
-
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/packaging/android/res/values/styles.xml b/packaging/android/res/values/styles.xml
new file mode 100644
index 00000000..8873ed76
--- /dev/null
+++ b/packaging/android/res/values/styles.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/packaging/android/res/xml/qtprovider_paths.xml b/packaging/android/res/xml/qtprovider_paths.xml
new file mode 100644
index 00000000..3488bf27
--- /dev/null
+++ b/packaging/android/res/xml/qtprovider_paths.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packaging/ubuntu/debian-qt5/changelog b/packaging/ubuntu/debian-qt5/changelog
new file mode 100644
index 00000000..4e2b16e1
--- /dev/null
+++ b/packaging/ubuntu/debian-qt5/changelog
@@ -0,0 +1,4125 @@
+nymea-app (1.10.13) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Android: fix keyboard margins
+
+ -- jenkins Tue, 23 Sep 2025 15:15:25 +0200
+
+nymea-app (1.10.12) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Add power balance pi chart icon properties
+
+ -- jenkins Tue, 22 Jul 2025 09:48:45 +0200
+
+nymea-app (1.10.11) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Use Qt 5.12 as highest Qt version in QML
+
+ -- jenkins Mon, 21 Jul 2025 10:40:17 +0200
+
+nymea-app (1.10.8) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Add material icons and make icon set exchangable
+
+ -- jenkins Mon, 14 Jul 2025 14:24:57 +0200
+
+nymea-app (1.10.2) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Bump build number
+
+ -- jenkins Fri, 09 May 2025 12:04:43 +0200
+
+nymea-app (1.10.1) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Rework overlay
+
+ -- jenkins Tue, 06 May 2025 15:46:15 +0200
+
+nymea-app (1.9.22) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Add device code oauth handling
+
+ -- jenkins Sat, 29 Mar 2025 23:11:19 +0100
+
+nymea-app (1.9.21) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Remove deprecated forum link
+
+ -- jenkins Thu, 30 Jan 2025 16:54:56 +0100
+
+nymea-app (1.9.20) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Prevent unlocking yourself as admin user
+
+ -- jenkins Thu, 30 Jan 2025 10:46:59 +0100
+
+nymea-app (1.9.18) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Add additional imprint links
+
+ -- jenkins Thu, 16 Jan 2025 14:09:09 +0100
+
+nymea-app (1.9.17) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Bump version
+
+ -- jenkins Tue, 14 Jan 2025 11:01:20 +0100
+
+nymea-app (1.9.16) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Bump version to 1.9.16
+
+ -- jenkins Tue, 14 Jan 2025 09:48:22 +0100
+
+nymea-app (1.9.15) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Add server debug JSON RPC functionality
+
+ -- jenkins Fri, 20 Dec 2024 15:30:33 +0100
+
+nymea-app (1.9.14) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Fix multisection tabs font
+
+ -- jenkins Tue, 26 Nov 2024 16:36:23 +0100
+
+nymea-app (1.9.13) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Bump version
+
+ -- jenkins Tue, 12 Nov 2024 15:05:55 +0100
+
+nymea-app (1.9.12) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Adapt links to online privacy policy through configuration parameter
+
+ -- jenkins Fri, 25 Oct 2024 11:33:31 +0200
+
+nymea-app (1.9.11) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Clean up host information propertly once removed from settings
+ * Add wireless capabilities and disable wireless AP setting if not
+ capable
+
+ -- jenkins Thu, 24 Oct 2024 16:36:07 +0200
+
+nymea-app (1.9.10) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Update nymea-remoteproxy submodule
+
+ -- jenkins Tue, 01 Oct 2024 15:41:25 +0200
+
+nymea-app (1.9.9) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Add wifi networks filter duplicates option
+
+ -- jenkins Mon, 16 Sep 2024 15:29:10 +0200
+
+nymea-app (1.9.8) bionic; urgency=medium
+
+ [ martinlukas84 ]
+ * Introduce overview for states and events of things
+
+ -- jenkins Tue, 10 Sep 2024 16:20:28 +0200
+
+nymea-app (1.9.7) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Android: Update to firebase SDK 12.2.0
+
+ -- jenkins Mon, 09 Sep 2024 17:07:24 +0200
+
+nymea-app (1.9.6) bionic; urgency=medium
+
+ [ martinlukas84 ]
+ * Update Aboutpage regarding the licence term
+
+ -- jenkins Fri, 06 Sep 2024 12:28:31 +0200
+
+nymea-app (1.9.5) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Update to gradle 8 and android SDK 34
+
+ -- jenkins Thu, 05 Sep 2024 22:43:38 +0200
+
+nymea-app (1.9.3) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Update translations
+
+ -- jenkins Wed, 04 Sep 2024 21:27:51 +0200
+
+nymea-app (1.9.2) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Update tunnel proy configuration and german translation
+
+ -- jenkins Thu, 29 Aug 2024 12:15:19 +0200
+
+nymea-app (1.9.1) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Update gradl and android firbease SDK and GCM notification handling
+
+ -- jenkins Wed, 24 Jul 2024 08:39:47 +0200
+
+nymea-app (1.8.44) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Introduce font scaling mechanism
+
+ -- jenkins Thu, 11 Jul 2024 09:11:33 +0200
+
+nymea-app (1.8.43) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Update translations and company name
+
+ -- jenkins Mon, 17 Jun 2024 12:36:06 +0200
+
+nymea-app (1.8.42) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Update translations and fix german typos
+
+ -- jenkins Thu, 13 Jun 2024 17:25:38 +0200
+
+nymea-app (1.8.40) bionic; urgency=medium
+
+ [ Simon Stürz ]
+ * Remove deprecated documentations and links
+
+ -- jenkins Tue, 04 Jun 2024 15:50:40 +0200
+
+nymea-app (1.8.38) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Add Timer::restart() to script code completion
+ * Some layout fixes in the Sensor page
+
+ -- jenkins Tue, 14 May 2024 11:19:09 +0200
+
+nymea-app (1.8.37) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Fix kiosk systemd target
+
+ -- jenkins Mon, 01 Jan 2024 22:39:08 +0100
+
+nymea-app (1.8.36) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Fix removing window sensors in AC settings
+
+ -- jenkins Sun, 31 Dec 2023 13:56:22 +0100
+
+nymea-app (1.8.35) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * New thing status view
+
+ -- jenkins Sun, 31 Dec 2023 12:43:49 +0100
+
+nymea-app (1.8.33) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Fix ordering of live entries in logs
+
+ -- jenkins Fri, 29 Dec 2023 14:13:29 +0100
+
+nymea-app (1.8.31) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Only handle things as disconnected when they implement the
+ connectable interface
+ * Add copy to clipboard action to generic state delegates
+ * Improve ScriptEditor zoom keyboard keys
+
+ -- jenkins Tue, 28 Nov 2023 09:06:03 +0100
+
+nymea-app (1.8.30) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Fix bool charts after inverting them
+
+ -- jenkins Fri, 20 Oct 2023 23:33:55 +0200
+
+nymea-app (1.8.29) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Invert state chart painting
+
+ -- jenkins Tue, 17 Oct 2023 23:02:40 +0200
+
+nymea-app (1.8.28) bionic; urgency=medium
+
+ [ Daniel Frost ]
+ * fix typo dden to den
+
+ -- jenkins Sat, 14 Oct 2023 22:01:18 +0200
+
+nymea-app (1.8.27) bionic; urgency=medium
+
+ [ Michael Zanetti ]
+ * Allow editing rule exitActions
+
+ -- jenkins