mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-04 12:45:03 +01:00 
			
		
		
		
	Merge pull request #11392 from t895/layout-troubles
android: Emulation activity fixes
This commit is contained in:
		
						commit
						2f18fa5cd1
					
				@ -56,7 +56,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
 | 
			
		||||
            android:name="org.yuzu.yuzu_emu.activities.EmulationActivity"
 | 
			
		||||
            android:theme="@style/Theme.Yuzu.Main"
 | 
			
		||||
            android:launchMode="singleTop"
 | 
			
		||||
            android:screenOrientation="userLandscape"
 | 
			
		||||
            android:supportsPictureInPicture="true"
 | 
			
		||||
            android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|uiMode"
 | 
			
		||||
            android:exported="true">
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,6 @@ import android.view.View
 | 
			
		||||
import android.view.ViewGroup.MarginLayoutParams
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import androidx.activity.OnBackPressedCallback
 | 
			
		||||
import androidx.activity.result.ActivityResultLauncher
 | 
			
		||||
import androidx.activity.viewModels
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity
 | 
			
		||||
import androidx.core.view.ViewCompat
 | 
			
		||||
@ -246,17 +245,5 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
 | 
			
		||||
            settings.putExtra(ARG_GAME_ID, gameId)
 | 
			
		||||
            context.startActivity(settings)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fun launch(
 | 
			
		||||
            context: Context,
 | 
			
		||||
            launcher: ActivityResultLauncher<Intent>,
 | 
			
		||||
            menuTag: String?,
 | 
			
		||||
            gameId: String?
 | 
			
		||||
        ) {
 | 
			
		||||
            val settings = Intent(context, SettingsActivity::class.java)
 | 
			
		||||
            settings.putExtra(ARG_MENU_TAG, menuTag)
 | 
			
		||||
            settings.putExtra(ARG_GAME_ID, gameId)
 | 
			
		||||
            launcher.launch(settings)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,6 @@ import android.annotation.SuppressLint
 | 
			
		||||
import android.app.AlertDialog
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.content.DialogInterface
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.content.SharedPreferences
 | 
			
		||||
import android.content.pm.ActivityInfo
 | 
			
		||||
import android.content.res.Configuration
 | 
			
		||||
@ -19,8 +18,6 @@ import android.util.Rational
 | 
			
		||||
import android.view.*
 | 
			
		||||
import android.widget.TextView
 | 
			
		||||
import androidx.activity.OnBackPressedCallback
 | 
			
		||||
import androidx.activity.result.ActivityResultLauncher
 | 
			
		||||
import androidx.activity.result.contract.ActivityResultContracts
 | 
			
		||||
import androidx.appcompat.widget.PopupMenu
 | 
			
		||||
import androidx.core.content.res.ResourcesCompat
 | 
			
		||||
import androidx.core.graphics.Insets
 | 
			
		||||
@ -66,8 +63,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
 | 
			
		||||
    private var isInFoldableLayout = false
 | 
			
		||||
 | 
			
		||||
    private lateinit var onReturnFromSettings: ActivityResultLauncher<Intent>
 | 
			
		||||
 | 
			
		||||
    override fun onAttach(context: Context) {
 | 
			
		||||
        super.onAttach(context)
 | 
			
		||||
        if (context is EmulationActivity) {
 | 
			
		||||
@ -81,11 +76,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
                        .collect { updateFoldableLayout(context, it) }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            onReturnFromSettings = context.activityResultRegistry.register(
 | 
			
		||||
                "SettingsResult",
 | 
			
		||||
                ActivityResultContracts.StartActivityForResult()
 | 
			
		||||
            ) { updateScreenLayout() }
 | 
			
		||||
        } else {
 | 
			
		||||
            throw IllegalStateException("EmulationFragment must have EmulationActivity parent")
 | 
			
		||||
        }
 | 
			
		||||
@ -149,12 +139,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                R.id.menu_settings -> {
 | 
			
		||||
                    SettingsActivity.launch(
 | 
			
		||||
                        requireContext(),
 | 
			
		||||
                        onReturnFromSettings,
 | 
			
		||||
                        SettingsFile.FILE_NAME_CONFIG,
 | 
			
		||||
                        ""
 | 
			
		||||
                    )
 | 
			
		||||
                    SettingsActivity.launch(requireContext(), SettingsFile.FILE_NAME_CONFIG, "")
 | 
			
		||||
                    true
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,6 @@ import android.content.Context
 | 
			
		||||
import android.util.AttributeSet
 | 
			
		||||
import android.util.Rational
 | 
			
		||||
import android.view.SurfaceView
 | 
			
		||||
import kotlin.math.roundToInt
 | 
			
		||||
 | 
			
		||||
class FixedRatioSurfaceView @JvmOverloads constructor(
 | 
			
		||||
    context: Context,
 | 
			
		||||
@ -22,27 +21,44 @@ class FixedRatioSurfaceView @JvmOverloads constructor(
 | 
			
		||||
     */
 | 
			
		||||
    fun setAspectRatio(ratio: Rational?) {
 | 
			
		||||
        aspectRatio = ratio?.toFloat() ?: 0f
 | 
			
		||||
        requestLayout()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
 | 
			
		||||
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
 | 
			
		||||
        val width = MeasureSpec.getSize(widthMeasureSpec)
 | 
			
		||||
        val height = MeasureSpec.getSize(heightMeasureSpec)
 | 
			
		||||
        val displayWidth: Float = MeasureSpec.getSize(widthMeasureSpec).toFloat()
 | 
			
		||||
        val displayHeight: Float = MeasureSpec.getSize(heightMeasureSpec).toFloat()
 | 
			
		||||
        if (aspectRatio != 0f) {
 | 
			
		||||
            val newWidth: Int
 | 
			
		||||
            val newHeight: Int
 | 
			
		||||
            if (height * aspectRatio < width) {
 | 
			
		||||
                newWidth = (height * aspectRatio).roundToInt()
 | 
			
		||||
                newHeight = height
 | 
			
		||||
            val displayAspect = displayWidth / displayHeight
 | 
			
		||||
            if (displayAspect < aspectRatio) {
 | 
			
		||||
                // Max out width
 | 
			
		||||
                val halfHeight = displayHeight / 2
 | 
			
		||||
                val surfaceHeight = displayWidth / aspectRatio
 | 
			
		||||
                val newTop: Float = halfHeight - (surfaceHeight / 2)
 | 
			
		||||
                val newBottom: Float = halfHeight + (surfaceHeight / 2)
 | 
			
		||||
                super.onMeasure(
 | 
			
		||||
                    widthMeasureSpec,
 | 
			
		||||
                    MeasureSpec.makeMeasureSpec(
 | 
			
		||||
                        newBottom.toInt() - newTop.toInt(),
 | 
			
		||||
                        MeasureSpec.EXACTLY
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
                return
 | 
			
		||||
            } else {
 | 
			
		||||
                newWidth = width
 | 
			
		||||
                newHeight = (width / aspectRatio).roundToInt()
 | 
			
		||||
                // Max out height
 | 
			
		||||
                val halfWidth = displayWidth / 2
 | 
			
		||||
                val surfaceWidth = displayHeight * aspectRatio
 | 
			
		||||
                val newLeft: Float = halfWidth - (surfaceWidth / 2)
 | 
			
		||||
                val newRight: Float = halfWidth + (surfaceWidth / 2)
 | 
			
		||||
                super.onMeasure(
 | 
			
		||||
                    MeasureSpec.makeMeasureSpec(
 | 
			
		||||
                        newRight.toInt() - newLeft.toInt(),
 | 
			
		||||
                        MeasureSpec.EXACTLY
 | 
			
		||||
                    ),
 | 
			
		||||
                    heightMeasureSpec
 | 
			
		||||
                )
 | 
			
		||||
                return
 | 
			
		||||
            }
 | 
			
		||||
            val left = (width - newWidth) / 2
 | 
			
		||||
            val top = (height - newHeight) / 2
 | 
			
		||||
            setLeftTopRightBottom(left, top, left + newWidth, top + newHeight)
 | 
			
		||||
        } else {
 | 
			
		||||
            setLeftTopRightBottom(0, 0, width, height)
 | 
			
		||||
        }
 | 
			
		||||
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user