From 17ee46c2ff2ca387bd4bdc2e3ff38d9811b295ad Mon Sep 17 00:00:00 2001 From: Craig Carnell <1188869+cscd98@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:16:06 +0100 Subject: [PATCH] android: fix rotation bug --- .../retroactivity/RetroActivityFuture.java | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/pkg/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityFuture.java b/pkg/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityFuture.java index 1b22a1ecc0e..6050705b662 100644 --- a/pkg/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityFuture.java +++ b/pkg/android/phoenix/src/com/retroarch/browser/retroactivity/RetroActivityFuture.java @@ -1,7 +1,9 @@ package com.retroarch.browser.retroactivity; +import android.content.res.Configuration; import android.graphics.Rect; import android.util.Log; +import android.view.Display; import android.view.DisplayCutout; import android.view.Gravity; import android.view.PointerIcon; @@ -163,35 +165,32 @@ && getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.VANILLA_ICE_CREA updateDisplayCutoutSafeWindow(!writeOverNotch); } + @SuppressWarnings("deprecation") private void updateDisplayCutoutSafeWindow(boolean avoidDisplayCutout) { if (!avoidDisplayCutout) { - mDecorView.setOnApplyWindowInsetsListener(null); setDisplayCutoutSafeWindow(0, 0, 0, 0); return; } - mDecorView.setOnApplyWindowInsetsListener( - new View.OnApplyWindowInsetsListener() { - @Override - public WindowInsets onApplyWindowInsets(View view, WindowInsets insets) { - DisplayCutout cutout = insets.getDisplayCutout(); - - if (cutout != null) - setDisplayCutoutSafeWindow( - cutout.getSafeInsetLeft(), - cutout.getSafeInsetTop(), - cutout.getSafeInsetRight(), - cutout.getSafeInsetBottom()); - - return insets; - } - }); - mDecorView.requestApplyInsets(); + Display display = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) + ? getDisplay() + : getWindowManager().getDefaultDisplay(); + + DisplayCutout cutout = (display != null) ? display.getCutout() : null; + + if (cutout != null) + setDisplayCutoutSafeWindow( + cutout.getSafeInsetLeft(), + cutout.getSafeInsetTop(), + cutout.getSafeInsetRight(), + cutout.getSafeInsetBottom()); + else + setDisplayCutoutSafeWindow(0, 0, 0, 0); } private void setDisplayCutoutSafeWindow( int left, int top, int right, int bottom) { - WindowMetrics metrics = getWindowManager().getMaximumWindowMetrics(); + WindowMetrics metrics = getWindowManager().getCurrentWindowMetrics(); Rect bounds = metrics.getBounds(); boolean fullDisplay = left == 0 && top == 0 && right == 0 && bottom == 0; @@ -221,6 +220,17 @@ private void setDisplayCutoutSafeWindow( getWindow().setAttributes(params); } + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + runOnUiThread(new Runnable() { + @Override + public void run() { + updateDisplayCutoutMode(); + } + }); + } + @Override public void onStop() { super.onStop();