From 09cdda952760c42ff489e435552d227703a2d684 Mon Sep 17 00:00:00 2001 From: Jani Heikkinen Date: Tue, 3 Jun 2025 04:37:33 +0000 Subject: [PATCH] Revert "Android: consider DecorView insets at app startup" This reverts commit e96a4b84e136d065054600c07bf5fae17f3049ce. Reason for revert: QTBUG-137306 Change-Id: Id5718737f3f426de49ad109d214af1c920e5ae22 Reviewed-by: Volker Hilsheimer (cherry picked from commit 05f8abc61dd2429d7041a87d5bfc7bffbb105f12) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit 0b69f2f7ab290a293cd2deb6759f934f3bf28c12) --- .../org/qtproject/qt/android/QtWindow.java | 58 +++++-------------- .../android/qandroidplatformwindow.cpp | 5 -- 2 files changed, 14 insertions(+), 49 deletions(-) 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 1f5ae6c2ad9..d17768c8b1d 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java @@ -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; diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index e904145a7c9..e22f336bc51 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -96,11 +96,6 @@ void QAndroidPlatformWindow::initialize() } qCDebug(lcQpaWindow) << "Window" << m_nativeViewId << "using surface container type" << static_cast(m_surfaceContainerType); - - const bool isSameWindowAndScreenSize = geometry().size() == screen()->geometry().size(); - m_nativeQtWindow.callMethod("registerSafeAreaMarginsListner", - window->isTopLevel(), isSameWindowAndScreenSize); - } QAndroidPlatformWindow::~QAndroidPlatformWindow()