diff options
Diffstat (limited to 'mobile-widgets')
-rw-r--r-- | mobile-widgets/qml/main.qml | 4 | ||||
-rw-r--r-- | mobile-widgets/qmlmanager.cpp | 33 | ||||
-rw-r--r-- | mobile-widgets/qmlmanager.h | 2 |
3 files changed, 39 insertions, 0 deletions
diff --git a/mobile-widgets/qml/main.qml b/mobile-widgets/qml/main.qml index 3f4fe17d1..af8992dd9 100644 --- a/mobile-widgets/qml/main.qml +++ b/mobile-widgets/qml/main.qml @@ -336,6 +336,7 @@ Kirigami.ApplicationWindow { subsurfaceTheme.lightPrimaryTextColor = "#212121" subsurfaceTheme.backgroundColor = "#eff0f1" subsurfaceTheme.diveListTextColor = subsurfaceTheme.lightPrimaryTextColor + manager.setStatusbarColor(subsurfaceTheme.darkPrimaryColor) } function pinkTheme() { @@ -347,6 +348,7 @@ Kirigami.ApplicationWindow { subsurfaceTheme.lightPrimaryTextColor = "#212121" subsurfaceTheme.backgroundColor = "#eff0f1" subsurfaceTheme.diveListTextColor = subsurfaceTheme.lightPrimaryTextColor + manager.setStatusbarColor(subsurfaceTheme.darkPrimaryColor) } function darkTheme() { @@ -358,6 +360,7 @@ Kirigami.ApplicationWindow { subsurfaceTheme.lightPrimaryTextColor = "#212121" subsurfaceTheme.backgroundColor = "#000000" subsurfaceTheme.diveListTextColor = subsurfaceTheme.primaryTextColor + manager.setStatusbarColor(subsurfaceTheme.darkPrimaryColor) } QtObject { @@ -383,6 +386,7 @@ Kirigami.ApplicationWindow { Kirigami.Theme.highlighedTextColor = Qt.binding(function() { return darkPrimaryTextColor }) Kirigami.Theme.backgroundColor = Qt.binding(function() { return backgroundColor }) Kirigami.Theme.textColor = Qt.binding(function() { return diveListTextColor }) + manager.setStatusbarColor(darkPrimaryColor) } } property Item stackView: pageStack diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp index fef7e72ce..9c78b2eb0 100644 --- a/mobile-widgets/qmlmanager.cpp +++ b/mobile-widgets/qmlmanager.cpp @@ -1490,3 +1490,36 @@ void QMLManager::setShowPin(bool enable) m_showPin = enable; emit showPinChanged(); } + +#if defined (Q_OS_ANDROID) + + +//HACK to color the system bar on Android, use qtandroidextras and call the appropriate Java methods +//this code is based on code in the Kirigami example app for Android (under LGPL-2) Copyright 2017 Marco Martin + +#include <QtAndroid> + +// there doesn't appear to be an include that defines these in an easily accessible way +// WindowManager.LayoutParams +#define FLAG_TRANSLUCENT_STATUS 0x04000000 +#define FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 0x80000000 +// View +#define SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 0x00002000 + +void QMLManager::setStatusbarColor(QColor color) +{ + QtAndroid::runOnAndroidThread([=]() { + QAndroidJniObject window = QtAndroid::androidActivity().callObjectMethod("getWindow", "()Landroid/view/Window;"); + window.callMethod<void>("addFlags", "(I)V", FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.callMethod<void>("clearFlags", "(I)V", FLAG_TRANSLUCENT_STATUS); + window.callMethod<void>("setStatusBarColor", "(I)V", color.rgba()); + window.callMethod<void>("setNavigationBarColor", "(I)V", color.rgba()); + }); +} +#else +void QMLManager::setStatusbarColor(QColor color) +{ + // noop +} + +#endif diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h index 53b3634d6..f1ccf6403 100644 --- a/mobile-widgets/qmlmanager.h +++ b/mobile-widgets/qmlmanager.h @@ -7,6 +7,7 @@ #include <QNetworkAccessManager> #include <QScreen> #include <QElapsedTimer> +#include <QColor> #include "core/btdiscovery.h" #include "core/gpslocation.h" @@ -115,6 +116,7 @@ public: QStringList cylinderInit() const; bool showPin() const; void setShowPin(bool enable); + Q_INVOKABLE void setStatusbarColor(QColor color); public slots: void applicationStateChanged(Qt::ApplicationState state); |