diff options
author | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2022-08-02 12:09:36 +0200 |
---|---|---|
committer | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2022-09-05 18:29:09 +0200 |
commit | 76abdaafb540be90e87c6689cc64040e95147777 (patch) | |
tree | 51d3a9275a72d5ee41a06910eabeca311c3c9508 /src/plugins/platforms/android | |
parent | 60829b0b257e62056aa32a7e58863b2c30bbdc89 (diff) |
Android: Light/dark modes detection
After commit: 2248487c6ca9d5459c70a16868d5aeee07d96157 light/dark mode
detection is supported by Windows and macOS. This commit add similar
implementation on the Android side.
Task-number: QTBUG-83185
Pick-to: 6.4 6.3 6.2
Change-Id: Id1ece98e91a31759b58d651ef62b3715ea25d85f
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/plugins/platforms/android')
5 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index 92d3d6f62a..876c7c6c32 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -752,6 +752,12 @@ static void handleRefreshRateChanged(JNIEnv */*env*/, jclass /*cls*/, jfloat ref m_androidPlatformIntegration->setRefreshRate(refreshRate); } +static void handleUiDarkModeChanged(JNIEnv */*env*/, jobject /*thiz*/, jint newUiMode) +{ + QAndroidPlatformIntegration::setAppearance( + (newUiMode == 1 ) ? QPlatformTheme::Appearance::Dark : QPlatformTheme::Appearance::Light); +} + static void onActivityResult(JNIEnv */*env*/, jclass /*cls*/, jint requestCode, jint resultCode, @@ -781,6 +787,7 @@ static JNINativeMethod methods[] = { { "setSurface", "(ILjava/lang/Object;II)V", (void *)setSurface }, { "updateWindow", "()V", (void *)updateWindow }, { "updateApplicationState", "(I)V", (void *)updateApplicationState }, + { "handleUiDarkModeChanged", "(I)V", (void *)handleUiDarkModeChanged }, { "handleOrientationChanged", "(II)V", (void *)handleOrientationChanged }, { "onActivityResult", "(IILandroid/content/Intent;)V", (void *)onActivityResult }, { "onNewIntent", "(Landroid/content/Intent;)V", (void *)onNewIntent }, diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index 6b9a44e9f1..335d0ba11e 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -488,6 +488,15 @@ void QAndroidPlatformIntegration::setScreenSize(int width, int height) QMetaObject::invokeMethod(m_primaryScreen, "setSize", Qt::AutoConnection, Q_ARG(QSize, QSize(width, height))); } +QPlatformTheme::Appearance QAndroidPlatformIntegration::m_appearance = QPlatformTheme::Appearance::Light; + +void QAndroidPlatformIntegration::setAppearance(QPlatformTheme::Appearance newAppearance) +{ + if (m_appearance == newAppearance) + return; + m_appearance = newAppearance; +} + void QAndroidPlatformIntegration::setScreenSizeParameters(const QSize &physicalSize, const QSize &screenSize, const QRect &availableGeometry) diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h index 6e87c9c02b..1b26710d73 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.h +++ b/src/plugins/platforms/android/qandroidplatformintegration.h @@ -13,6 +13,7 @@ #include <qpa/qplatformnativeinterface.h> #include <qpa/qplatformopenglcontext.h> #include <qpa/qplatformoffscreensurface.h> +#include <qpa/qplatformtheme.h> #include <EGL/egl.h> #include <memory> @@ -103,6 +104,8 @@ public: void flushPendingUpdates(); + static void setAppearance(QPlatformTheme::Appearance newAppearance); + static QPlatformTheme::Appearance appearance() { return m_appearance; } #if QT_CONFIG(vulkan) QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance) const override; #endif @@ -115,6 +118,8 @@ private: QThread *m_mainThread; + static QPlatformTheme::Appearance m_appearance; + static QRect m_defaultAvailableGeometry; static QSize m_defaultPhysicalSize; static QSize m_defaultScreenSize; diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp index c5b9ba9dee..73cff62e81 100644 --- a/src/plugins/platforms/android/qandroidplatformtheme.cpp +++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp @@ -358,6 +358,11 @@ void QAndroidPlatformTheme::showPlatformMenuBar() QtAndroidMenu::openOptionsMenu(); } +QPlatformTheme::Appearance QAndroidPlatformTheme::appearance() const +{ + return QAndroidPlatformIntegration::appearance(); +} + static inline int paletteType(QPlatformTheme::Palette type) { switch (type) { diff --git a/src/plugins/platforms/android/qandroidplatformtheme.h b/src/plugins/platforms/android/qandroidplatformtheme.h index ec39ed4794..e495e6d5cc 100644 --- a/src/plugins/platforms/android/qandroidplatformtheme.h +++ b/src/plugins/platforms/android/qandroidplatformtheme.h @@ -35,6 +35,7 @@ public: QPlatformMenu *createPlatformMenu() const override; QPlatformMenuItem *createPlatformMenuItem() const override; void showPlatformMenuBar() override; + Appearance appearance() const override; const QPalette *palette(Palette type = SystemPalette) const override; const QFont *font(Font type = SystemFont) const override; QVariant themeHint(ThemeHint hint) const override; |