Merge PR #243: Also color the panel on android, fix iOS landscape mode
This commit is contained in:
commit
8373ee7561
@ -4,8 +4,24 @@
|
|||||||
#include <QtAndroid>
|
#include <QtAndroid>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
|
||||||
|
// WindowManager.LayoutParams
|
||||||
|
#define FLAG_TRANSLUCENT_STATUS 0x04000000
|
||||||
|
#define FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 0x80000000
|
||||||
|
// View
|
||||||
|
#define SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 0x00002000
|
||||||
|
|
||||||
|
|
||||||
static PlatformHelperAndroid *m_instance;
|
static PlatformHelperAndroid *m_instance;
|
||||||
|
|
||||||
|
static QAndroidJniObject getAndroidWindow()
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
||||||
PlatformHelperAndroid::PlatformHelperAndroid(QObject *parent) : PlatformHelper(parent)
|
PlatformHelperAndroid::PlatformHelperAndroid(QObject *parent) : PlatformHelper(parent)
|
||||||
{
|
{
|
||||||
m_instance = this;
|
m_instance = this;
|
||||||
@ -77,6 +93,33 @@ void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType
|
|||||||
QtAndroid::androidActivity().callMethod<void>("vibrate","(I)V", duration);
|
QtAndroid::androidActivity().callMethod<void>("vibrate","(I)V", duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlatformHelperAndroid::setTopPanelColor(const QColor &color)
|
||||||
|
{
|
||||||
|
PlatformHelper::setTopPanelColor(color);
|
||||||
|
|
||||||
|
if (QtAndroid::androidSdkVersion() < 21)
|
||||||
|
return;
|
||||||
|
|
||||||
|
QtAndroid::runOnAndroidThread([=]() {
|
||||||
|
QAndroidJniObject window = getAndroidWindow();
|
||||||
|
window.callMethod<void>("setStatusBarColor", "(I)V", color.rgba());
|
||||||
|
});
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
void PlatformHelperAndroid::permissionRequestFinished(const QtAndroid::PermissionResultMap &result)
|
void PlatformHelperAndroid::permissionRequestFinished(const QtAndroid::PermissionResultMap &result)
|
||||||
{
|
{
|
||||||
foreach (const QString &key, result.keys()) {
|
foreach (const QString &key, result.keys()) {
|
||||||
@ -84,3 +127,20 @@ void PlatformHelperAndroid::permissionRequestFinished(const QtAndroid::Permissio
|
|||||||
}
|
}
|
||||||
emit m_instance->permissionsRequestFinished();
|
emit m_instance->permissionsRequestFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlatformHelperAndroid::setTopPanelTheme(PlatformHelperAndroid::Theme theme)
|
||||||
|
{
|
||||||
|
if (QtAndroid::androidSdkVersion() < 23)
|
||||||
|
return;
|
||||||
|
|
||||||
|
QtAndroid::runOnAndroidThread([=]() {
|
||||||
|
QAndroidJniObject window = getAndroidWindow();
|
||||||
|
QAndroidJniObject view = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
|
||||||
|
int visibility = view.callMethod<int>("getSystemUiVisibility", "()I");
|
||||||
|
if (theme == Theme::Light)
|
||||||
|
visibility |= SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
|
||||||
|
else
|
||||||
|
visibility &= ~SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
|
||||||
|
view.callMethod<void>("setSystemUiVisibility", "(I)V", visibility);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
@ -9,6 +9,8 @@ class PlatformHelperAndroid : public PlatformHelper
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
enum Theme { Light, Dark };
|
||||||
|
|
||||||
explicit PlatformHelperAndroid(QObject *parent = nullptr);
|
explicit PlatformHelperAndroid(QObject *parent = nullptr);
|
||||||
|
|
||||||
Q_INVOKABLE void requestPermissions() override;
|
Q_INVOKABLE void requestPermissions() override;
|
||||||
@ -24,6 +26,10 @@ public:
|
|||||||
|
|
||||||
Q_INVOKABLE void vibrate(HapticsFeedback feedbackType) override;
|
Q_INVOKABLE void vibrate(HapticsFeedback feedbackType) override;
|
||||||
|
|
||||||
|
void setTopPanelColor(const QColor &color) override;
|
||||||
|
void setTopPanelTheme(Theme theme);
|
||||||
|
void setBottomPanelColor(const QColor &color) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void permissionRequestFinished(const QtAndroid::PermissionResultMap &);
|
static void permissionRequestFinished(const QtAndroid::PermissionResultMap &);
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,16 @@
|
|||||||
#include "platformhelperios.h"
|
#include "platformhelperios.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
PlatformHelperIOS::PlatformHelperIOS(QObject *parent) : PlatformHelper(parent)
|
PlatformHelperIOS::PlatformHelperIOS(QObject *parent) : PlatformHelper(parent)
|
||||||
{
|
{
|
||||||
|
QScreen *screen = qApp->primaryScreen();
|
||||||
|
screen->setOrientationUpdateMask(Qt::PortraitOrientation | Qt::LandscapeOrientation | Qt::InvertedPortraitOrientation | Qt::InvertedLandscapeOrientation);
|
||||||
|
QObject::connect(screen, &QScreen::orientationChanged, qApp, [this](Qt::ScreenOrientation) {
|
||||||
|
setBottomPanelColor(bottomPanelColor());
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,6 +89,13 @@ void PlatformHelperIOS::setTopPanelColor(const QColor &color)
|
|||||||
void PlatformHelperIOS::setBottomPanelColor(const QColor &color)
|
void PlatformHelperIOS::setBottomPanelColor(const QColor &color)
|
||||||
{
|
{
|
||||||
PlatformHelper::setBottomPanelColor(color);
|
PlatformHelper::setBottomPanelColor(color);
|
||||||
setBottomPanelColorInternal(color);
|
|
||||||
|
// In landscape, ignore settings and keep it to black. On notched devices it'll look crap otherwise
|
||||||
|
if (qApp->primaryScreen()->orientation() == Qt::LandscapeOrientation || qApp->primaryScreen()->orientation() == Qt::InvertedLandscapeOrientation) {
|
||||||
|
setBottomPanelColorInternal(QColor("black"));
|
||||||
|
} else {
|
||||||
|
setBottomPanelColorInternal(color);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -14,6 +14,7 @@ ApplicationWindow {
|
|||||||
minimumWidth: 360
|
minimumWidth: 360
|
||||||
minimumHeight: 480
|
minimumHeight: 480
|
||||||
visibility: kioskMode ? ApplicationWindow.FullScreen : settings.viewMode
|
visibility: kioskMode ? ApplicationWindow.FullScreen : settings.viewMode
|
||||||
|
color: Material.background
|
||||||
|
|
||||||
// Those variables must be present in the Style
|
// Those variables must be present in the Style
|
||||||
title: appName
|
title: appName
|
||||||
@ -49,6 +50,8 @@ ApplicationWindow {
|
|||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
styleController.setSystemFont(app.font)
|
styleController.setSystemFont(app.font)
|
||||||
|
PlatformHelper.topPanelColor = app.primaryColor
|
||||||
|
PlatformHelper.bottomPanelColor = Material.background
|
||||||
}
|
}
|
||||||
|
|
||||||
RootItem {
|
RootItem {
|
||||||
|
|||||||
@ -10,17 +10,6 @@ import "connection"
|
|||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
// Workaround flickering on pageStack animations when the white background shines through
|
|
||||||
Rectangle {
|
|
||||||
anchors.fill: parent
|
|
||||||
color: Material.background
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
PlatformHelper.topPanelColor = app.primaryColor
|
|
||||||
PlatformHelper.bottomPanelColor = color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleAndroidBackButton() {
|
function handleAndroidBackButton() {
|
||||||
return swipeView.currentItem.handleAndroidBackButton()
|
return swipeView.currentItem.handleAndroidBackButton()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user