From d6861926a12e3ee8eb3e1c8c90e9c6483b997d45 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Wed, 15 Nov 2023 10:47:39 +0200 Subject: [PATCH] Android: set displayManager listener after QtLayout is initialized MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the QtDisplayManager listener uses m_layout but it can be called before m_layout is actually initialized, so set the listener after the layout has been initialized. Task-number: QTBUG-118077 Fixes: QTBUG-119007 Fixes: QTBUG-119134 Change-Id: Icebc350f09210c12dbd011f86ce88a90b6f27d12 Reviewed-by: Tinja Paavoseppä --- .../qt/android/QtActivityDelegate.java | 6 +++--- .../corelib/platform/android/tst_android.cpp | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java index 1d671170442..b57576fa464 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -63,8 +63,6 @@ public class QtActivityDelegate setActionBarVisibility(false); - m_displayManager.registerDisplayListener(m_activity, m_layout); - QtInputDelegate.KeyboardVisibilityListener keyboardVisibilityListener = new QtInputDelegate.KeyboardVisibilityListener() { @Override @@ -190,13 +188,15 @@ public class QtActivityDelegate initMembers(startApplication); } - + private void initMembers(Runnable startApplicationRunnable) { m_quitApp = true; m_layout = new QtLayout(m_activity, startApplicationRunnable); + m_displayManager.registerDisplayListener(m_activity, m_layout); + int orientation = m_activity.getResources().getConfiguration().orientation; try { diff --git a/tests/auto/corelib/platform/android/tst_android.cpp b/tests/auto/corelib/platform/android/tst_android.cpp index 8d0bf1e72cc..9a503fafc58 100644 --- a/tests/auto/corelib/platform/android/tst_android.cpp +++ b/tests/auto/corelib/platform/android/tst_android.cpp @@ -26,6 +26,8 @@ private slots: void testAndroidActivity(); void testRunOnAndroidMainThread(); void testFullScreenDimensions(); + void orientationChange_data(); + void orientationChange(); }; void tst_Android::assetsRead() @@ -299,6 +301,25 @@ void tst_Android::testFullScreenDimensions() } } +void tst_Android::orientationChange_data() +{ + QTest::addColumn("nativeOrientation"); + QTest::addColumn("expected"); + + QTest::newRow("Landscape") << 0 << Qt::LandscapeOrientation; + QTest::newRow("Portrait") << 1 << Qt::PortraitOrientation; +} + +void tst_Android::orientationChange() +{ + QFETCH(int, nativeOrientation); + QFETCH(Qt::ScreenOrientation, expected); + + auto context = QNativeInterface::QAndroidApplication::context(); + context.callMethod("setRequestedOrientation", nativeOrientation); + QTRY_COMPARE(qGuiApp->primaryScreen()->orientation(), expected); +} + QTEST_MAIN(tst_Android) #include "tst_android.moc"