diff options
Diffstat (limited to 'src/android/app/src/main/java')
3 files changed, 29 insertions, 11 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt index abeb01995..81474b824 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt @@ -7,6 +7,7 @@ import android.app.Activity import android.content.Context import android.content.DialogInterface import android.content.Intent +import android.content.res.Configuration import android.graphics.Rect import android.hardware.Sensor import android.hardware.SensorEvent @@ -31,6 +32,7 @@ import org.yuzu.yuzu_emu.features.settings.model.Settings import org.yuzu.yuzu_emu.fragments.EmulationFragment import org.yuzu.yuzu_emu.model.Game import org.yuzu.yuzu_emu.utils.ControllerMappingHelper +import org.yuzu.yuzu_emu.utils.EmulationMenuSettings import org.yuzu.yuzu_emu.utils.ForegroundService import org.yuzu.yuzu_emu.utils.InputHandler import org.yuzu.yuzu_emu.utils.NfcReader @@ -128,6 +130,11 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { super.onResume() nfcReader.startScanning() startMotionSensorListener() + + NativeLibrary.notifyOrientationChange( + EmulationMenuSettings.landscapeScreenLayout, + getAdjustedRotation() + ) } override fun onPause() { @@ -233,6 +240,23 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { override fun onAccuracyChanged(sensor: Sensor, i: Int) {} + private fun getAdjustedRotation():Int { + val rotation = windowManager.defaultDisplay.rotation; + val config: Configuration = resources.configuration + + if ((config.screenLayout and Configuration.SCREENLAYOUT_LONG_YES) != 0 || + (config.screenLayout and Configuration.SCREENLAYOUT_LONG_NO) == 0) { + return rotation; + } + when (rotation) { + Surface.ROTATION_0 -> return Surface.ROTATION_90; + Surface.ROTATION_90 -> return Surface.ROTATION_0; + Surface.ROTATION_180 -> return Surface.ROTATION_270; + Surface.ROTATION_270 -> return Surface.ROTATION_180; + } + return rotation; + } + private fun restoreState(savedInstanceState: Bundle) { game = savedInstanceState.parcelable(EXTRA_SELECTED_GAME)!! } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt index 783122860..72e2cce2a 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt @@ -118,12 +118,6 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView { override fun onStop() { super.onStop() presenter.onStop(isFinishing) - - // Update framebuffer layout when closing the settings - NativeLibrary.notifyOrientationChange( - EmulationMenuSettings.landscapeScreenLayout, - windowManager.defaultDisplay.rotation - ) } override fun showSettingsFragment(menuTag: String, addToStack: Boolean, gameId: String) { diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt index 693e70973..c9f5797ac 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt @@ -767,10 +767,11 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context var cutoutBottom = 0 val insets = context.windowManager.currentWindowMetrics.windowInsets.displayCutout if (insets != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - maxY = - if (insets.boundingRectTop.bottom != 0) insets.boundingRectTop.bottom.toFloat() else maxY - maxX = - if (insets.boundingRectRight.left != 0) insets.boundingRectRight.left.toFloat() else maxX + if (insets.boundingRectTop.bottom != 0 && insets.boundingRectTop.bottom > maxY / 2) + insets.boundingRectTop.bottom.toFloat() else maxY + if (insets.boundingRectRight.left != 0 && insets.boundingRectRight.left > maxX / 2) + insets.boundingRectRight.left.toFloat() else maxX + minX = insets.boundingRectLeft.right - insets.boundingRectLeft.left minY = insets.boundingRectBottom.top - insets.boundingRectBottom.bottom @@ -778,7 +779,6 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context cutoutBottom = insets.boundingRectTop.top - insets.boundingRectTop.bottom } - // This makes sure that if we have an inset on one side of the screen, we mirror it on // the other side. Since removing space from one of the max values messes with the scale, // we also have to account for it using our min values. |