summaryrefslogtreecommitdiffstats
path: root/mobile-widgets
diff options
context:
space:
mode:
Diffstat (limited to 'mobile-widgets')
-rw-r--r--mobile-widgets/qml/main.qml4
-rw-r--r--mobile-widgets/qmlmanager.cpp33
-rw-r--r--mobile-widgets/qmlmanager.h2
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);