summaryrefslogtreecommitdiffstats
path: root/mobile-widgets
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2017-06-23 07:31:44 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-06-23 08:42:45 -0700
commit57e365222b939668a54281f9edea34c7fdf3a152 (patch)
tree3f7fc5f8c2c2094e14a640fe467bb13711024162 /mobile-widgets
parentb109b51f7f1f764ef195726e9b676ef0c49d6add (diff)
downloadsubsurface-57e365222b939668a54281f9edea34c7fdf3a152.tar.gz
QML UI: color the status bar on Android
This code is based on code from Marco Martin from the Kirigami Android sample app. In order to simplify the QML code the QMLManager function is there for all OSs, but it's a no-op on anything but Android. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
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);