From 8e2209f3b04f3e82022cd8d328f2e6971a1104c5 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Wed, 30 Oct 2024 04:15:00 +0200 Subject: [PATCH] Android: refactor tst_Android::testFullScreenDimensions() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pick-to: 6.5 Change-Id: Iea06638d1c8eebf36ae010dad23fbeab4b890597 Reviewed-by: Petri Virkkunen (cherry picked from commit ebdc01c1861667116aa09914b46df1ac8504baf9) Reviewed-by: Tor Arne Vestbø --- .../corelib/platform/android/tst_android.cpp | 111 +++++++++--------- 1 file changed, 56 insertions(+), 55 deletions(-) diff --git a/tests/auto/corelib/platform/android/tst_android.cpp b/tests/auto/corelib/platform/android/tst_android.cpp index 76811a31ad4..d6e7ebbc5fa 100644 --- a/tests/auto/corelib/platform/android/tst_android.cpp +++ b/tests/auto/corelib/platform/android/tst_android.cpp @@ -17,6 +17,13 @@ using namespace Qt::StringLiterals; +Q_DECLARE_JNI_CLASS(Display, "android/view/Display") +Q_DECLARE_JNI_CLASS(Point, "android/graphics/Point") +Q_DECLARE_JNI_CLASS(View, "android/view/View") +Q_DECLARE_JNI_CLASS(Window, "android/view/Window") +Q_DECLARE_JNI_CLASS(WindowInsets, "android/view/WindowInsets") +Q_DECLARE_JNI_CLASS(WindowManager, "android/view/WindowManager") + class tst_Android : public QObject { Q_OBJECT @@ -203,103 +210,97 @@ void tst_Android::testRunOnAndroidMainThread() } } -Q_DECLARE_JNI_CLASS(QtActivityDelegateBase, "org/qtproject/qt/android/QtActivityDelegateBase") - -void setSystemUiVisibility(int visibility) -{ - QNativeInterface::QAndroidApplication::runOnAndroidMainThread([visibility] { - auto context = QNativeInterface::QAndroidApplication::context(); - auto activityDelegate = context.callMethod("getActivityDelegate"); - activityDelegate.callMethod("setSystemUiVisibility", jint(visibility)); - }).waitForFinished(); -} - // QTBUG-107604 void tst_Android::testFullScreenDimensions() { - static int SYSTEM_UI_VISIBILITY_NORMAL = 0; - static int SYSTEM_UI_VISIBILITY_FULLSCREEN = 1; - static int SYSTEM_UI_VISIBILITY_TRANSLUCENT = 2; - - // this will trigger new layout updates - setSystemUiVisibility(SYSTEM_UI_VISIBILITY_FULLSCREEN); - setSystemUiVisibility(SYSTEM_UI_VISIBILITY_NORMAL); - QJniObject activity = QNativeInterface::QAndroidApplication::context(); QVERIFY(activity.isValid()); - QJniObject windowManager = - activity.callObjectMethod("getWindowManager", "()Landroid/view/WindowManager;"); + QJniObject windowManager = activity.callMethod("getWindowManager"); QVERIFY(windowManager.isValid()); - QJniObject display = windowManager.callObjectMethod("getDefaultDisplay", "()Landroid/view/Display;"); + QJniObject display = windowManager.callMethod("getDefaultDisplay"); QVERIFY(display.isValid()); - QJniObject appSize("android/graphics/Point"); + QtJniTypes::Point appSize{}; QVERIFY(appSize.isValid()); + display.callMethod("getSize", appSize); - display.callMethod("getSize", "(Landroid/graphics/Point;)V", appSize.object()); - - QJniObject realSize("android/graphics/Point"); + QtJniTypes::Point realSize{}; QVERIFY(realSize.isValid()); + display.callMethod("getRealSize", realSize); - display.callMethod("getRealSize", "(Landroid/graphics/Point;)V", realSize.object()); - + QWidget widget; QPlatformScreen *screen = QGuiApplication::primaryScreen()->handle(); - { // Normal - // available geometry == app size (system bars visible and removed from available geometry) + widget.showNormal(); QCoreApplication::processEvents(); - QJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;"); + QJniObject window = activity.callMethod("getWindow"); QVERIFY(window.isValid()); - QJniObject decorView = window.callObjectMethod("getDecorView", "()Landroid/view/View;"); + QJniObject decorView = window.callMethod("getDecorView"); QVERIFY(decorView.isValid()); - QJniObject insets = - decorView.callObjectMethod("getRootWindowInsets", "()Landroid/view/WindowInsets;"); + QJniObject insets = decorView.callMethod("getRootWindowInsets"); QVERIFY(insets.isValid()); - int insetsWidth = insets.callMethod("getSystemWindowInsetRight") - + insets.callMethod("getSystemWindowInsetLeft"); + int insetRight = insets.callMethod("getSystemWindowInsetRight"); + int insetLeft = insets.callMethod("getSystemWindowInsetLeft"); + int insetsWidth = insetRight + insetLeft; - int insetsHeight = insets.callMethod("getSystemWindowInsetTop") - + insets.callMethod("getSystemWindowInsetBottom"); + int insetTop = insets.callMethod("getSystemWindowInsetTop"); + int insetBottom = insets.callMethod("getSystemWindowInsetBottom"); + int insetsHeight = insetTop + insetBottom; - QTRY_COMPARE(screen->availableGeometry().width(), - int(appSize.getField("x")) - insetsWidth); - QTRY_COMPARE(screen->availableGeometry().height(), - int(appSize.getField("y")) - insetsHeight); + int expectedWidth = appSize.getField("x") - insetsWidth; + QTRY_COMPARE(screen->availableGeometry().width(), expectedWidth); - QTRY_COMPARE(screen->geometry().width(), int(realSize.getField("x"))); - QTRY_COMPARE(screen->geometry().height(), int(realSize.getField("y"))); + int expectedHeight = appSize.getField("y") - insetsHeight; + QTRY_COMPARE(screen->availableGeometry().height(), expectedHeight); + + QTRY_COMPARE(screen->geometry().width(), realSize.getField("x")); + QTRY_COMPARE(screen->geometry().height(), realSize.getField("y")); } { - setSystemUiVisibility(SYSTEM_UI_VISIBILITY_FULLSCREEN); - // Fullscreen // available geometry == full display size (system bars hidden) + widget.showFullScreen(); QCoreApplication::processEvents(); - QTRY_COMPARE(screen->availableGeometry().width(), int(realSize.getField("x"))); - QTRY_COMPARE(screen->availableGeometry().height(), int(realSize.getField("y"))); + QTRY_COMPARE(screen->availableGeometry().width(), realSize.getField("x")); + QTRY_COMPARE(screen->availableGeometry().height(), realSize.getField("y")); - QTRY_COMPARE(screen->geometry().width(), int(realSize.getField("x"))); - QTRY_COMPARE(screen->geometry().height(), int(realSize.getField("y"))); + QTRY_COMPARE(screen->geometry().width(), realSize.getField("x")); + QTRY_COMPARE(screen->geometry().height(), realSize.getField("y")); + widget.showNormal(); } { - setSystemUiVisibility(SYSTEM_UI_VISIBILITY_TRANSLUCENT); - // Translucent // available geometry == full display size (system bars visible but drawable under) + widget.setWindowFlags(widget.windowFlags() | Qt::MaximizeUsingFullscreenGeometryHint); + widget.show(); QCoreApplication::processEvents(); - QTRY_COMPARE(screen->availableGeometry().width(), int(realSize.getField("x"))); - QTRY_COMPARE(screen->availableGeometry().height(), int(realSize.getField("y"))); + QTRY_COMPARE(screen->availableGeometry().width(), realSize.getField("x")); + QTRY_COMPARE(screen->availableGeometry().height(), realSize.getField("y")); - QTRY_COMPARE(screen->geometry().width(), int(realSize.getField("x"))); - QTRY_COMPARE(screen->geometry().height(), int(realSize.getField("y"))); + QTRY_COMPARE(screen->geometry().width(), realSize.getField("x")); + QTRY_COMPARE(screen->geometry().height(), realSize.getField("y")); + widget.showNormal(); + } + + { + // Translucent + // available geometry == full display size (system bars visible but drawable under) + widget.showMaximized(); + QCoreApplication::processEvents(); + QTRY_COMPARE(screen->availableGeometry().width(), realSize.getField("x")); + QTRY_COMPARE(screen->availableGeometry().height(), realSize.getField("y")); + + QTRY_COMPARE(screen->geometry().width(), realSize.getField("x")); + QTRY_COMPARE(screen->geometry().height(), realSize.getField("y")); } }