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);
});
}
@UsedFromNativeCode
void registerSafeAreaMarginsListner(boolean isTopLevel, boolean isSameWindowAndScreenSize)
{
if (!(getContext() instanceof QtActivityBase))
return;
setOnApplyWindowInsetsListener((view, insets) -> {
Insets safeInsets = getSafeInsets(view, insets);
safeAreaMarginsChanged(safeInsets, getId());
return getConsumedInsets(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());
if (getContext() instanceof QtActivityBase) {
setOnApplyWindowInsetsListener((view, insets) -> {
Insets safeInsets;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
int types = WindowInsets.Type.displayCutout() | WindowInsets.Type.systemBars();
safeInsets = insets.getInsets(types);
} else {
safeInsets = getSafeInsetsPreAndroidR(view, insets);
}
QtNative.runAction(() -> safeAreaMarginsChanged(safeInsets, getId()));
return insets;
});
}
QtNative.runAction(() -> requestApplyInsets());
QtNative.runAction(() -> requestApplyInsets());
}
}
@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 top = 0;
int right = 0;

View File

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