From 48cbeb0993d0b3853d51a2602d6f58c074a17fe1 Mon Sep 17 00:00:00 2001 From: David Griswold Date: Sat, 3 Jan 2026 16:09:45 +0300 Subject: [PATCH] Android: Bug fix for incorrect screen size detection (#1495) --- .../settings/ui/SettingsFragmentPresenter.kt | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt index 2b823986a..cb41525a1 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -44,7 +44,6 @@ import org.citra.citra_emu.utils.BirthdayMonth import org.citra.citra_emu.utils.Log import org.citra.citra_emu.utils.SystemSaveGame import org.citra.citra_emu.utils.ThemeUtil -import org.citra.citra_emu.utils.EmulationMenuSettings class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) { private var menuTag: String? = null @@ -111,20 +110,24 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) } /** Returns the portrait mode width */ - private fun getWidth(): Int { - val dm = Resources.getSystem().displayMetrics; - return if (dm.widthPixels < dm.heightPixels) - dm.widthPixels - else - dm.heightPixels + private fun getDimensions(): IntArray { + val dm = Resources.getSystem().displayMetrics + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val wm = settingsActivity.windowManager.maximumWindowMetrics + val height = wm.bounds.height().coerceAtLeast(dm.heightPixels) + val width = wm.bounds.width().coerceAtLeast(dm.widthPixels) + intArrayOf(width, height) + } else { + intArrayOf(dm.widthPixels, dm.heightPixels) + } } - private fun getHeight(): Int { - val dm = Resources.getSystem().displayMetrics; - return if (dm.widthPixels < dm.heightPixels) - dm.heightPixels - else - dm.widthPixels + private fun getSmallerDimension(): Int { + return getDimensions().min() + } + + private fun getLargerDimension(): Int { + return getDimensions().max() } private fun addConfigSettings(sl: ArrayList) { @@ -1405,7 +1408,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_x, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.LANDSCAPE_TOP_X.key, IntSetting.LANDSCAPE_TOP_X.defaultValue.toFloat() @@ -1417,7 +1420,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_y, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.LANDSCAPE_TOP_Y.key, IntSetting.LANDSCAPE_TOP_Y.defaultValue.toFloat() @@ -1429,7 +1432,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_width, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.LANDSCAPE_TOP_WIDTH.key, IntSetting.LANDSCAPE_TOP_WIDTH.defaultValue.toFloat() @@ -1441,7 +1444,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_height, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.LANDSCAPE_TOP_HEIGHT.key, IntSetting.LANDSCAPE_TOP_HEIGHT.defaultValue.toFloat() @@ -1454,7 +1457,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_x, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.LANDSCAPE_BOTTOM_X.key, IntSetting.LANDSCAPE_BOTTOM_X.defaultValue.toFloat() @@ -1466,7 +1469,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_y, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.LANDSCAPE_BOTTOM_Y.key, IntSetting.LANDSCAPE_BOTTOM_Y.defaultValue.toFloat() @@ -1478,7 +1481,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_width, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.LANDSCAPE_BOTTOM_WIDTH.key, IntSetting.LANDSCAPE_BOTTOM_WIDTH.defaultValue.toFloat() @@ -1490,7 +1493,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_height, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.LANDSCAPE_BOTTOM_HEIGHT.key, IntSetting.LANDSCAPE_BOTTOM_HEIGHT.defaultValue.toFloat() @@ -1510,7 +1513,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_x, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.PORTRAIT_TOP_X.key, IntSetting.PORTRAIT_TOP_X.defaultValue.toFloat() @@ -1522,7 +1525,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_y, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.PORTRAIT_TOP_Y.key, IntSetting.PORTRAIT_TOP_Y.defaultValue.toFloat() @@ -1534,7 +1537,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_width, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.PORTRAIT_TOP_WIDTH.key, IntSetting.PORTRAIT_TOP_WIDTH.defaultValue.toFloat() @@ -1546,7 +1549,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_height, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.PORTRAIT_TOP_HEIGHT.key, IntSetting.PORTRAIT_TOP_HEIGHT.defaultValue.toFloat() @@ -1559,7 +1562,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_x, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.PORTRAIT_BOTTOM_X.key, IntSetting.PORTRAIT_BOTTOM_X.defaultValue.toFloat() @@ -1571,7 +1574,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_y, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.PORTRAIT_BOTTOM_Y.key, IntSetting.PORTRAIT_BOTTOM_Y.defaultValue.toFloat() @@ -1583,7 +1586,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_width, 0, 0, - getWidth(), + getSmallerDimension(), "px", IntSetting.PORTRAIT_BOTTOM_WIDTH.key, IntSetting.PORTRAIT_BOTTOM_WIDTH.defaultValue.toFloat() @@ -1595,7 +1598,7 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) R.string.emulation_custom_layout_height, 0, 0, - getHeight(), + getLargerDimension(), "px", IntSetting.PORTRAIT_BOTTOM_HEIGHT.key, IntSetting.PORTRAIT_BOTTOM_HEIGHT.defaultValue.toFloat()