diff --git a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java index 74155fb0b12..1ba03ca4755 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java @@ -89,15 +89,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { setOnApplyWindowInsetsListener((view, insets) -> { WindowInsets windowInsets = view.onApplyWindowInsets(insets); - ViewTreeObserver.OnPreDrawListener listener = new ViewTreeObserver.OnPreDrawListener() { - @Override - public boolean onPreDraw() { - reportSafeAreaMargins(windowInsets, getId()); - m_firstSafeMarginsDelivered = true; - return true; - } - }; - getViewTreeObserver().addOnPreDrawListener(listener); + reportSafeAreaMargins(windowInsets, getId()); return windowInsets; }); @@ -127,11 +119,6 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { ViewTreeObserver.OnPreDrawListener listener = new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - if (m_firstSafeMarginsDelivered) { - getViewTreeObserver().removeOnPreDrawListener(this); - return true; - } - if (isAttachedToWindow()) { WindowInsets insets = getRootWindowInsets(); if (insets != null) { @@ -149,6 +136,12 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { }; getViewTreeObserver().addOnPreDrawListener(listener); } + + addOnLayoutChangeListener((view, l, t, r, b, oldl, oldt, oldr, oldb) -> { + WindowInsets insets = getRootWindowInsets(); + if (insets != null) + getRootView().post(() -> reportSafeAreaMargins(insets, getId())); + }); } @SuppressWarnings("deprecation") diff --git a/tests/auto/corelib/platform/android/tst_android.cpp b/tests/auto/corelib/platform/android/tst_android.cpp index 5b709a23f40..7cb18d1e018 100644 --- a/tests/auto/corelib/platform/android/tst_android.cpp +++ b/tests/auto/corelib/platform/android/tst_android.cpp @@ -232,14 +232,14 @@ void tst_Android::safeAreaWithWindowFlagsAndStates_data() << Qt::WindowStates(Qt::WindowNoState) << Qt::WindowFlags(); - QTest::newRow("Fullscreen") - << Qt::WindowStates(Qt::WindowFullScreen) - << Qt::WindowFlags(); - QTest::newRow("Expanded Client Area") << Qt::WindowStates(Qt::WindowNoState) << Qt::WindowFlags(Qt::ExpandedClientAreaHint); + QTest::newRow("Fullscreen") + << Qt::WindowStates(Qt::WindowFullScreen) + << Qt::WindowFlags(); + QTest::newRow("Fullscreen and Expanded Client Area") << Qt::WindowStates(Qt::WindowFullScreen) << Qt::WindowFlags(Qt::ExpandedClientAreaHint);