force60Hrz option

This commit is contained in:
Kleidis 2025-12-03 17:24:11 +01:00 committed by OpenSauce
parent 5537f6c60a
commit 77910cc2f9
4 changed files with 23 additions and 5 deletions

View File

@ -10,6 +10,7 @@ import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.InputDevice
import android.view.KeyEvent
@ -47,6 +48,7 @@ import org.citra.citra_emu.utils.FileBrowserHelper
import org.citra.citra_emu.utils.EmulationLifecycleUtil
import org.citra.citra_emu.utils.EmulationMenuSettings
import org.citra.citra_emu.utils.Log
import org.citra.citra_emu.utils.MaxRefreshRate
import org.citra.citra_emu.utils.ThemeUtil
import org.citra.citra_emu.viewmodel.EmulationViewModel
@ -84,6 +86,10 @@ class EmulationActivity : AppCompatActivity() {
ThemeUtil.setTheme(this)
settingsViewModel.settings.loadSettings()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
MaxRefreshRate.set(this, forceSixtyHrz = true)
}
super.onCreate(savedInstanceState)
secondaryDisplay = SecondaryDisplay(this)
secondaryDisplay.updateDisplay()

View File

@ -58,7 +58,7 @@ class SettingsActivity : AppCompatActivity(), SettingsActivityView {
binding = ActivitySettingsBinding.inflate(layoutInflater)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
MaxRefreshRate.set(this)
MaxRefreshRate.set(this, forceSixtyHrz = false)
}
setContentView(binding.root)

View File

@ -90,7 +90,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
binding = ActivityMainBinding.inflate(layoutInflater)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
MaxRefreshRate.set(this)
MaxRefreshRate.set(this, forceSixtyHrz = false)
}
setContentView(binding.root)

View File

@ -8,18 +8,30 @@ import android.os.Build
import androidx.annotation.RequiresApi
object MaxRefreshRate {
//Since Android 15, google automatically forces "games" to be 60 hrz.
// This functions sets the refresh rate to max supported rate, unless forced to 60 hrz.
@RequiresApi(Build.VERSION_CODES.R)
fun set(activity: Activity) {
fun set(activity: Activity, forceSixtyHrz: Boolean) {
val display = activity.display
val window = activity.window
display?.let {
// Get all supported modes and find the one with the highest refresh rate
val supportedModes = it.supportedModes
val maxRefreshRate = supportedModes.maxByOrNull { mode -> mode.refreshRate }
if (maxRefreshRate != null) {
val layoutParams = window.attributes
layoutParams.preferredDisplayModeId = maxRefreshRate.modeId
window.attributes = layoutParams
val modeId = if (forceSixtyHrz) {
supportedModes.firstOrNull { mode -> mode.refreshRate == 60f }?.modeId
} else {
// Set the preferred display mode to the one with the highest refresh rate
maxRefreshRate.modeId
}
if (modeId != null) {
layoutParams.preferredDisplayModeId = modeId
window.attributes = layoutParams
}
}
}
}