Revert "Android: consider DecorView insets at app startup"

This reverts commit e96a4b84e136d065054600c07bf5fae17f3049ce.

Reason for revert: QTBUG-137306

Change-Id: Id5718737f3f426de49ad109d214af1c920e5ae22
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 05f8abc61dd2429d7041a87d5bfc7bffbb105f12)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 0b69f2f7ab290a293cd2deb6759f934f3bf28c12)
This commit is contained in:
Jani Heikkinen 2025-06-03 04:37:33 +00:00 committed by Mitch Curtis
parent 87794df973
commit 09cdda9527
2 changed files with 14 additions and 49 deletions

View File

@ -75,57 +75,27 @@ class QtWindow extends QtLayout implements QtSurfaceInterface {
}); });
m_gestureDetector.setIsLongpressEnabled(true); m_gestureDetector.setIsLongpressEnabled(true);
}); });
}
@UsedFromNativeCode if (getContext() instanceof QtActivityBase) {
void registerSafeAreaMarginsListner(boolean isTopLevel, boolean isSameWindowAndScreenSize) setOnApplyWindowInsetsListener((view, insets) -> {
{ Insets safeInsets;
if (!(getContext() instanceof QtActivityBase)) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
return; int types = WindowInsets.Type.displayCutout() | WindowInsets.Type.systemBars();
safeInsets = insets.getInsets(types);
setOnApplyWindowInsetsListener((view, insets) -> { } else {
Insets safeInsets = getSafeInsets(view, insets); safeInsets = getSafeInsetsPreAndroidR(view, insets);
safeAreaMarginsChanged(safeInsets, getId()); }
return getConsumedInsets(insets); QtNative.runAction(() -> safeAreaMarginsChanged(safeInsets, getId()));
}); return insets;
// NOTE: if the window size fits the screen geometry (i.e. edge-to-edge case),
// assume this window is the main window and initialize its safe margins with
// the insets of the decor view.
if (isTopLevel && isSameWindowAndScreenSize) {
QtNative.runAction(() -> {
// NOTE: The callback onApplyWindowInsetsListener() is not being triggered during
// startup, so this is a Workaround to get the safe area margins at startup.
// Initially, set the root view insets to the current window, then if the insets
// change later, we can rely on setOnApplyWindowInsetsListener() being called.
View decorView = ((Activity) getContext()).getWindow().getDecorView();
WindowInsets rootInsets = decorView.getRootWindowInsets();
Insets rootSafeInsets = getSafeInsets(decorView, rootInsets);
safeAreaMarginsChanged(rootSafeInsets, getId());
}); });
}
QtNative.runAction(() -> requestApplyInsets()); QtNative.runAction(() -> requestApplyInsets());
}
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
WindowInsets getConsumedInsets(WindowInsets insets) Insets getSafeInsetsPreAndroidR(View view, WindowInsets insets)
{ {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
return WindowInsets.CONSUMED;
else
return insets.consumeSystemWindowInsets();
}
@SuppressWarnings("deprecation")
Insets getSafeInsets(View view, WindowInsets insets)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
int types = WindowInsets.Type.displayCutout() | WindowInsets.Type.systemBars();
return insets.getInsets(types);
}
// Android R and older
int left = 0; int left = 0;
int top = 0; int top = 0;
int right = 0; int right = 0;

View File

@ -96,11 +96,6 @@ void QAndroidPlatformWindow::initialize()
} }
qCDebug(lcQpaWindow) << "Window" << m_nativeViewId << "using surface container type" qCDebug(lcQpaWindow) << "Window" << m_nativeViewId << "using surface container type"
<< static_cast<int>(m_surfaceContainerType); << static_cast<int>(m_surfaceContainerType);
const bool isSameWindowAndScreenSize = geometry().size() == screen()->geometry().size();
m_nativeQtWindow.callMethod<void>("registerSafeAreaMarginsListner",
window->isTopLevel(), isSameWindowAndScreenSize);
} }
QAndroidPlatformWindow::~QAndroidPlatformWindow() QAndroidPlatformWindow::~QAndroidPlatformWindow()