Android: set displayManager listener after QtLayout is initialized

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ä <tinja.paavoseppa@qt.io>
This commit is contained in:
Assam Boudjelthia 2023-11-15 10:47:39 +02:00
parent 2c96f51771
commit d6861926a1
2 changed files with 24 additions and 3 deletions

View File

@ -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 {

View File

@ -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<int>("nativeOrientation");
QTest::addColumn<Qt::ScreenOrientation>("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<void>("setRequestedOrientation", nativeOrientation);
QTRY_COMPARE(qGuiApp->primaryScreen()->orientation(), expected);
}
QTEST_MAIN(tst_Android)
#include "tst_android.moc"