From 8736717370c397ff5dc5323799d7d4bafb2647fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Tue, 25 Nov 2025 15:41:15 +0100 Subject: [PATCH] Android: Make Edge To Edge work again for SDK >= 35 --- .../android/platformhelperandroid.cpp | 49 +++++++++++++------ .../android/platformhelperandroid.h | 3 ++ 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/nymea-app/platformintegration/android/platformhelperandroid.cpp b/nymea-app/platformintegration/android/platformhelperandroid.cpp index 3ad8a7e3..a0455e2d 100644 --- a/nymea-app/platformintegration/android/platformhelperandroid.cpp +++ b/nymea-app/platformintegration/android/platformhelperandroid.cpp @@ -29,6 +29,7 @@ #include #include #include +#include // WindowManager.LayoutParams #define FLAG_TRANSLUCENT_STATUS 0x04000000 @@ -89,8 +90,20 @@ PlatformHelperAndroid::PlatformHelperAndroid(QObject *parent) : PlatformHelper(p qCritical() << "----> Application state changed" << state; if (state == Qt::ApplicationActive) { emit locationServicesEnabledChanged(); + updateSafeAreaPadding(); } }); + + if (QScreen *screen = qApp->primaryScreen()) { + connect(screen, &QScreen::orientationChanged, this, [this](Qt::ScreenOrientation){ + updateSafeAreaPadding(); + }); + connect(screen, &QScreen::availableGeometryChanged, this, [this](const QRect &){ + updateSafeAreaPadding(); + }); + } + + QTimer::singleShot(0, this, &PlatformHelperAndroid::updateSafeAreaPadding); } void PlatformHelperAndroid::hideSplashScreen() @@ -266,26 +279,34 @@ void PlatformHelperAndroid::setBottomPanelTheme(Theme theme) // }); } +void PlatformHelperAndroid::updateSafeAreaPadding() +{ + int topPaddingPx = 0; + int bottomPaddingPx = 0; + + QJniObject context = QNativeInterface::QAndroidApplication::context(); + if (context.isValid()) { + topPaddingPx = context.callMethod("topPadding", "()I"); + bottomPaddingPx = context.callMethod("bottomPadding", "()I"); + } + + QScreen *screen = qApp->primaryScreen(); + qreal dpr = screen ? screen->devicePixelRatio() : 1.0; + if (dpr <= 0.0) { + dpr = 1.0; + } + + setSafeAreaPadding(qRound(topPaddingPx / dpr), 0, qRound(bottomPaddingPx / dpr), 0); +} + int PlatformHelperAndroid::topPadding() const { - // Edge to edge has been forced since android SDK 35 - // We don't want to handle it in earlied versions. - // if (QtAndroid::androidSdkVersion() < 35) - // return 0; - - //return QNativeInterface::QAndroidApplication::context().callMethod("topPadding") / QApplication::primaryScreen()->devicePixelRatio(); - return 0; + return PlatformHelper::topPadding(); } int PlatformHelperAndroid::bottomPadding() const { - // Edge to edge has been forced since android SDK 35 - // We don't want to handle it in earlied versions. - // if (QtAndroid::androidSdkVersion() < 35) - // return 0; - - // return QNativeInterface::QAndroidApplication::context().callMethod("bottomPadding") / QApplication::primaryScreen()->devicePixelRatio(); - return 0; + return PlatformHelper::bottomPadding(); } bool PlatformHelperAndroid::darkModeEnabled() const diff --git a/nymea-app/platformintegration/android/platformhelperandroid.h b/nymea-app/platformintegration/android/platformhelperandroid.h index 3edbaeda..bb60badd 100644 --- a/nymea-app/platformintegration/android/platformhelperandroid.h +++ b/nymea-app/platformintegration/android/platformhelperandroid.h @@ -68,6 +68,9 @@ public: static void notificationActionReceivedJNI(JNIEnv *env, jobject /*thiz*/, jstring data); static void locationServicesEnabledChangedJNI(); +private: + void updateSafeAreaPadding(); + }; #endif // PLATFORMHELPERANDROID_H