Explorar el Código

Merge pull request #12571 from t895/apply-orientation-on-start

android: Expose more orientation options
liamwhite hace 2 años
padre
commit
519904e8a8

+ 14 - 3
src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt

@@ -79,7 +79,18 @@ object Settings {
     const val PREF_THEME_MODE = "ThemeMode"
     const val PREF_BLACK_BACKGROUNDS = "BlackBackgrounds"
 
-    const val LayoutOption_Unspecified = 0
-    const val LayoutOption_MobilePortrait = 4
-    const val LayoutOption_MobileLandscape = 5
+    enum class EmulationOrientation(val int: Int) {
+        Unspecified(0),
+        SensorLandscape(5),
+        Landscape(1),
+        ReverseLandscape(2),
+        SensorPortrait(6),
+        Portrait(4),
+        ReversePortrait(3);
+
+        companion object {
+            fun from(int: Int): EmulationOrientation =
+                entries.firstOrNull { it.int == int } ?: Unspecified
+        }
+    }
 }

+ 20 - 8
src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt

@@ -50,6 +50,7 @@ import org.yuzu.yuzu_emu.databinding.FragmentEmulationBinding
 import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting
 import org.yuzu.yuzu_emu.features.settings.model.IntSetting
 import org.yuzu.yuzu_emu.features.settings.model.Settings
+import org.yuzu.yuzu_emu.features.settings.model.Settings.EmulationOrientation
 import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile
 import org.yuzu.yuzu_emu.model.DriverViewModel
 import org.yuzu.yuzu_emu.model.Game
@@ -99,6 +100,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
      */
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        updateOrientation()
 
         val intentUri: Uri? = requireActivity().intent.data
         var intentGame: Game? = null
@@ -458,13 +460,23 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
     @SuppressLint("SourceLockedOrientationActivity")
     private fun updateOrientation() {
         emulationActivity?.let {
-            it.requestedOrientation = when (IntSetting.RENDERER_SCREEN_LAYOUT.getInt()) {
-                Settings.LayoutOption_MobileLandscape ->
+            val orientationSetting =
+                EmulationOrientation.from(IntSetting.RENDERER_SCREEN_LAYOUT.getInt())
+            it.requestedOrientation = when (orientationSetting) {
+                EmulationOrientation.Unspecified -> ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
+                EmulationOrientation.SensorLandscape ->
                     ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
-                Settings.LayoutOption_MobilePortrait ->
-                    ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
-                Settings.LayoutOption_Unspecified -> ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
-                else -> ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
+
+                EmulationOrientation.Landscape -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+                EmulationOrientation.ReverseLandscape ->
+                    ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
+
+                EmulationOrientation.SensorPortrait ->
+                    ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
+
+                EmulationOrientation.Portrait -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+                EmulationOrientation.ReversePortrait ->
+                    ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
             }
         }
     }
@@ -651,7 +663,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
     @SuppressLint("SourceLockedOrientationActivity")
     private fun startConfiguringControls() {
         // Lock the current orientation to prevent editing inconsistencies
-        if (IntSetting.RENDERER_SCREEN_LAYOUT.getInt() == Settings.LayoutOption_Unspecified) {
+        if (IntSetting.RENDERER_SCREEN_LAYOUT.getInt() == EmulationOrientation.Unspecified.int) {
             emulationActivity?.let {
                 it.requestedOrientation =
                     if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
@@ -669,7 +681,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
         binding.doneControlConfig.visibility = View.GONE
         binding.surfaceInputOverlay.setIsInEditMode(false)
         // Unlock the orientation if it was locked for editing
-        if (IntSetting.RENDERER_SCREEN_LAYOUT.getInt() == Settings.LayoutOption_Unspecified) {
+        if (IntSetting.RENDERER_SCREEN_LAYOUT.getInt() == EmulationOrientation.Unspecified.int) {
             emulationActivity?.let {
                 it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
             }

+ 10 - 2
src/android/app/src/main/res/values/arrays.xml

@@ -118,15 +118,23 @@
     </integer-array>
 
     <string-array name="rendererScreenLayoutNames">
+        <item>@string/screen_layout_auto</item>
+        <item>@string/screen_layout_sensor_landscape</item>
         <item>@string/screen_layout_landscape</item>
+        <item>@string/screen_layout_reverse_landscape</item>
+        <item>@string/screen_layout_sensor_portrait</item>
         <item>@string/screen_layout_portrait</item>
-        <item>@string/screen_layout_auto</item>
+        <item>@string/screen_layout_reverse_portrait</item>
     </string-array>
 
     <integer-array name="rendererScreenLayoutValues">
+        <item>0</item>
         <item>5</item>
+        <item>1</item>
+        <item>2</item>
+        <item>6</item>
         <item>4</item>
-        <item>0</item>
+        <item>3</item>
     </integer-array>
 
     <string-array name="rendererAspectRatioNames">

+ 5 - 1
src/android/app/src/main/res/values/strings.xml

@@ -463,9 +463,13 @@
     <string name="anti_aliasing_smaa">SMAA</string>
 
     <!-- Screen Layouts -->
+    <string name="screen_layout_auto">Auto</string>
+    <string name="screen_layout_sensor_landscape">Sensor landscape</string>
     <string name="screen_layout_landscape">Landscape</string>
+    <string name="screen_layout_reverse_landscape">Reverse landscape</string>
+    <string name="screen_layout_sensor_portrait">Sensor portrait</string>
     <string name="screen_layout_portrait">Portrait</string>
-    <string name="screen_layout_auto">Auto</string>
+    <string name="screen_layout_reverse_portrait">Reverse portrait</string>
 
     <!-- Aspect Ratios -->
     <string name="ratio_default">Default (16:9)</string>