From c89be0dfabf2350a9966297cc558afd5e295f433 Mon Sep 17 00:00:00 2001
From: Abandoned Cart <twistedumbrella@gmail.com>
Date: Fri, 16 Jun 2023 09:56:10 -0400
Subject: [PATCH] android: Fix aspect ratio when rotating screen

---
 src/android/app/src/main/AndroidManifest.xml  |  1 +
 .../yuzu_emu/fragments/EmulationFragment.kt   | 47 ++++++++-----------
 2 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/src/android/app/src/main/AndroidManifest.xml b/src/android/app/src/main/AndroidManifest.xml
index a6f87fc2ec..e31ad69e20 100644
--- a/src/android/app/src/main/AndroidManifest.xml
+++ b/src/android/app/src/main/AndroidManifest.xml
@@ -53,6 +53,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
         <activity
             android:name="org.yuzu.yuzu_emu.activities.EmulationActivity"
             android:theme="@style/Theme.Yuzu.Main"
+            android:screenOrientation="userLandscape"
             android:supportsPictureInPicture="true"
             android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|uiMode"
             android:exported="true">
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
index 42e2e5b750..4643418c11 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
@@ -85,20 +85,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
             onReturnFromSettings = context.activityResultRegistry.register(
                 "SettingsResult",
                 ActivityResultContracts.StartActivityForResult()
-            ) {
-                binding.surfaceEmulation.setAspectRatio(
-                    when (IntSetting.RENDERER_ASPECT_RATIO.int) {
-                        0 -> Rational(16, 9)
-                        1 -> Rational(4, 3)
-                        2 -> Rational(21, 9)
-                        3 -> Rational(16, 10)
-                        4 -> null // Stretch
-                        else -> Rational(16, 9)
-                    }
-                )
-                emulationActivity?.buildPictureInPictureParams()
-                updateScreenLayout()
-            }
+            ) { updateScreenLayout() }
         } else {
             throw IllegalStateException("EmulationFragment must have EmulationActivity parent")
         }
@@ -242,17 +229,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
             DirectoryInitialization.start(requireContext())
         }
 
-        binding.surfaceEmulation.setAspectRatio(
-            when (IntSetting.RENDERER_ASPECT_RATIO.int) {
-                0 -> Rational(16, 9)
-                1 -> Rational(4, 3)
-                2 -> Rational(21, 9)
-                3 -> Rational(16, 10)
-                4 -> null // Stretch
-                else -> Rational(16, 9)
-            }
-        )
-
         updateScreenLayout()
 
         emulationState.run(emulationActivity!!.isActivityRecreated)
@@ -315,7 +291,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
     }
 
     @SuppressLint("SourceLockedOrientationActivity")
-    private fun updateScreenLayout() {
+    private fun updateOrientation() {
         emulationActivity?.let {
             it.requestedOrientation = when (IntSetting.RENDERER_SCREEN_LAYOUT.int) {
                 Settings.LayoutOption_MobileLandscape ->
@@ -326,7 +302,21 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                 else -> ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
             }
         }
-        onConfigurationChanged(resources.configuration)
+    }
+
+    private fun updateScreenLayout() {
+        binding.surfaceEmulation.setAspectRatio(
+            when (IntSetting.RENDERER_ASPECT_RATIO.int) {
+                0 -> Rational(16, 9)
+                1 -> Rational(4, 3)
+                2 -> Rational(21, 9)
+                3 -> Rational(16, 10)
+                4 -> null // Stretch
+                else -> Rational(16, 9)
+            }
+        )
+        emulationActivity?.buildPictureInPictureParams()
+        updateOrientation()
     }
 
     private fun updateFoldableLayout(
@@ -359,7 +349,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
             binding.overlayContainer.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
             binding.inGameMenu.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
             isInFoldableLayout = false
-            updateScreenLayout()
+            updateOrientation()
+            onConfigurationChanged(resources.configuration)
         }
         binding.emulationContainer.requestLayout()
         binding.inputContainer.requestLayout()