Skip to content

Commit

Permalink
Introduce Display Mode Option on Display Settings, That Can Change Re…
Browse files Browse the repository at this point in the history
…solution Options Between 4:3, 16:9 and Native Aspect Ratios, Small Code Improvement
  • Loading branch information
KreitinnSoftware committed Jan 31, 2025
1 parent 3cf61a3 commit 074c5b5
Show file tree
Hide file tree
Showing 11 changed files with 124 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,8 @@ class GeneralSettingsActivity : AppCompatActivity() {
const val SELECTED_DXVK_HUD_PRESET_DEFAULT_VALUE = ""
const val SELECTED_MESA_VK_WSI_PRESENT_MODE = "MESA_VK_WSI_PRESENT_MODE"
const val SELECTED_MESA_VK_WSI_PRESENT_MODE_DEFAULT_VALUE = "mailbox"
const val DISPLAY_MODE = "displayMode"
const val DISPLAY_MODE_DEFAULT_VALUE = "16:9"
const val DISPLAY_RESOLUTION = "displayResolution"
const val DISPLAY_RESOLUTION_DEFAULT_VALUE = "1280x720"
const val DEAD_ZONE = "deadZone"
Expand Down
15 changes: 9 additions & 6 deletions app/src/main/java/com/micewine/emu/activities/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -967,9 +967,12 @@ class MainActivity : AppCompatActivity() {
const val ACTION_INSTALL_RAT = "com.micewine.emu.ACTION_INSTALL_RAT"
const val ACTION_STOP_ALL = "com.micewine.emu.ACTION_STOP_ALL"
const val ACTION_SELECT_FILE_MANAGER = "com.micewine.emu.ACTION_SELECT_FILE_MANAGER"
const val RAM_COUNTER_KEY = "ramCounter"
const val CPU_COUNTER_KEY = "cpuCounter"
const val ENABLE_DEBUG_INFO_KEY = "debugInfo"
const val RAM_COUNTER = "ramCounter"
const val RAM_COUNTER_DEFAULT_VALUE = true
const val CPU_COUNTER = "cpuCounter"
const val CPU_COUNTER_DEFAULT_VALUE = false
const val ENABLE_DEBUG_INFO = "debugInfo"
const val ENABLE_DEBUG_INFO_DEFAULT_VALUE = true

fun setupWinePrefix() {
if (!winePrefix.exists()) {
Expand Down Expand Up @@ -1064,9 +1067,9 @@ class MainActivity : AppCompatActivity() {
selectedMesaVkWsiPresentMode = preferences.getString(SELECTED_MESA_VK_WSI_PRESENT_MODE, SELECTED_MESA_VK_WSI_PRESENT_MODE_DEFAULT_VALUE)
selectedTuDebugPreset = preferences.getString(SELECTED_TU_DEBUG_PRESET, SELECTED_TU_DEBUG_PRESET_DEFAULT_VALUE)
selectedResolution = preferences.getString(DISPLAY_RESOLUTION, DISPLAY_RESOLUTION_DEFAULT_VALUE)
enableRamCounter = preferences.getBoolean(RAM_COUNTER_KEY, true)
enableCpuCounter = preferences.getBoolean(CPU_COUNTER_KEY, false)
enableDebugInfo = preferences.getBoolean(ENABLE_DEBUG_INFO_KEY, true)
enableRamCounter = preferences.getBoolean(RAM_COUNTER, RAM_COUNTER_DEFAULT_VALUE)
enableCpuCounter = preferences.getBoolean(CPU_COUNTER, CPU_COUNTER_DEFAULT_VALUE)
enableDebugInfo = preferences.getBoolean(ENABLE_DEBUG_INFO, ENABLE_DEBUG_INFO_DEFAULT_VALUE)

cpuAffinity = preferences.getString(CPU_AFFINITY, availableCPUs.joinToString(","))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,21 @@ import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.RecyclerView
import com.micewine.emu.R
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.CHECKBOX
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE_DEFAULT_VALUE
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_RESOLUTION
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SPINNER
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SWITCH
import com.micewine.emu.fragments.DisplaySettingsFragment.Companion.getNativeResolutions
import com.micewine.emu.fragments.DisplaySettingsFragment.Companion.resolutions16_9
import com.micewine.emu.fragments.DisplaySettingsFragment.Companion.resolutions4_3
import com.micewine.emu.fragments.InfoDialogFragment

class AdapterSettingsPreferences(private val settingsList: List<SettingsListSpinner>, private val activity: FragmentActivity) :
class AdapterSettingsPreferences(
private val settingsList: List<SettingsListSpinner>,
private val activity: FragmentActivity,
private val recyclerView: RecyclerView
) :
RecyclerView.Adapter<AdapterSettingsPreferences.ViewHolder>() {

val preferences = PreferenceManager.getDefaultSharedPreferences(activity)!!
Expand All @@ -41,6 +51,22 @@ class AdapterSettingsPreferences(private val settingsList: List<SettingsListSpin
holder.settingsDescription.visibility = View.GONE
}

if (sList.key == DISPLAY_RESOLUTION) {
val aspectRatio = preferences.getString(DISPLAY_MODE, DISPLAY_MODE_DEFAULT_VALUE)

when (aspectRatio) {
"4:3" -> {
sList.spinnerOptions = resolutions4_3
}
"16:9" -> {
sList.spinnerOptions = resolutions16_9
}
"Native" -> {
sList.spinnerOptions = getNativeResolutions(activity).toTypedArray()
}
}
}

when (sList.type) {
SWITCH -> {
holder.spinnerOptions.visibility = View.GONE
Expand Down Expand Up @@ -87,6 +113,12 @@ class AdapterSettingsPreferences(private val settingsList: List<SettingsListSpin
putString(sList.key, selectedItem)
apply()
}

if (sList.key == DISPLAY_MODE) {
activity.runOnUiThread {
recyclerView.adapter?.notifyItemRangeChanged(holder.adapterPosition + 1, recyclerView.adapter?.itemCount!!)
}
}
}

override fun onNothingSelected(parent: AdapterView<*>?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class Box64SettingsFragment : Fragment() {
}

private fun setAdapter() {
val adapterSettingsPreferences = AdapterSettingsPreferences(settingsList, requireActivity())
val adapterSettingsPreferences = AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!)

recyclerView?.setAdapter(adapterSettingsPreferences)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
package com.micewine.emu.fragments

import android.app.Activity
import android.os.Bundle
import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.micewine.emu.R
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_MODE_DEFAULT_VALUE
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_RESOLUTION
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.DISPLAY_RESOLUTION_DEFAULT_VALUE
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SPINNER
import com.micewine.emu.activities.GeneralSettingsActivity.Companion.SWITCH
import com.micewine.emu.activities.MainActivity.Companion.CPU_COUNTER_KEY
import com.micewine.emu.activities.MainActivity.Companion.ENABLE_DEBUG_INFO_KEY
import com.micewine.emu.activities.MainActivity.Companion.RAM_COUNTER_KEY
import com.micewine.emu.activities.MainActivity.Companion.CPU_COUNTER
import com.micewine.emu.activities.MainActivity.Companion.CPU_COUNTER_DEFAULT_VALUE
import com.micewine.emu.activities.MainActivity.Companion.ENABLE_DEBUG_INFO
import com.micewine.emu.activities.MainActivity.Companion.ENABLE_DEBUG_INFO_DEFAULT_VALUE
import com.micewine.emu.activities.MainActivity.Companion.RAM_COUNTER
import com.micewine.emu.activities.MainActivity.Companion.RAM_COUNTER_DEFAULT_VALUE
import com.micewine.emu.adapters.AdapterSettingsPreferences
import com.micewine.emu.adapters.AdapterSettingsPreferences.SettingsListSpinner

Expand All @@ -40,27 +48,72 @@ class DisplaySettingsFragment : Fragment() {
}

private fun setAdapter() {
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity()))
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!))

settingsList.clear()

addToAdapter(R.string.display_resolution_title, R.string.display_resolution_description, arrayOf(
"640x480", "800x600",
"960x540", "1024x768",
"1280x720", "1440x720",
"1600x900", "1800x900",
"1920x1080", "2160x1080"
addToAdapter(R.string.display_mode_title, R.string.display_mode_description, arrayOf(
"16:9", "4:3", "Native"
),
SPINNER, "1280x720", DISPLAY_RESOLUTION)
SPINNER, DISPLAY_MODE_DEFAULT_VALUE, DISPLAY_MODE)
addToAdapter(R.string.display_resolution_title, R.string.display_resolution_description, null,
SPINNER, DISPLAY_RESOLUTION_DEFAULT_VALUE, DISPLAY_RESOLUTION)
addToAdapter(R.string.enable_ram_counter, R.string.enable_ram_counter_description, null,
SWITCH, "true", RAM_COUNTER_KEY)
SWITCH, RAM_COUNTER_DEFAULT_VALUE, RAM_COUNTER)
addToAdapter(R.string.enable_cpu_counter, R.string.enable_cpu_counter_description, null,
SWITCH, "false", CPU_COUNTER_KEY)
SWITCH, CPU_COUNTER_DEFAULT_VALUE, CPU_COUNTER)
addToAdapter(R.string.enable_debug_info, R.string.enable_debug_info_description, null,
SWITCH, "true", ENABLE_DEBUG_INFO_KEY)
SWITCH, ENABLE_DEBUG_INFO_DEFAULT_VALUE, ENABLE_DEBUG_INFO)
}

private fun addToAdapter(titleId: Int, descriptionId: Int, valuesArray: Array<String>?, type: Int, defaultValue: Any, keyId: String) {
settingsList.add(SettingsListSpinner(titleId, descriptionId, valuesArray, type, defaultValue.toString(), keyId))
}

private fun addToAdapter(titleId: Int, descriptionId: Int, valuesArray: Array<String>?, type: Int, defaultValue: String, keyId: String) {
settingsList.add(SettingsListSpinner(titleId, descriptionId, valuesArray, type, defaultValue, keyId))
companion object {
val resolutions16_9 = arrayOf(
"640x360", "854x480",
"960x540", "1280x720",
"1366x768", "1600x900",
"1920x1080", "2560x1440",
"3840x2160"
)

val resolutions4_3 = arrayOf(
"640x480", "800x600",
"1024x768", "1280x960",
"1400x1050", "1600x1200"
)

@Suppress("DEPRECATION")
private fun getNativeResolution(activity: Activity): String {
val displayMetrics = DisplayMetrics()
activity.windowManager.defaultDisplay.getRealMetrics(displayMetrics)
return "${displayMetrics.widthPixels}x${displayMetrics.heightPixels}"
}

private fun getPercentOfResolution(original: String, percent: Int): String {
val resolution = original.split("x")
val width = resolution[0].toInt() * percent / 100
val height = resolution[1].toInt() * percent / 100

return "${width}x${height}"
}

fun getNativeResolutions(activity: Activity): List<String> {
val parsedResolutions = mutableListOf<String>()
val nativeResolution = getNativeResolution(activity)

parsedResolutions.add(nativeResolution)
parsedResolutions.add(getPercentOfResolution(nativeResolution, 90))
parsedResolutions.add(getPercentOfResolution(nativeResolution, 80))
parsedResolutions.add(getPercentOfResolution(nativeResolution, 70))
parsedResolutions.add(getPercentOfResolution(nativeResolution, 60))
parsedResolutions.add(getPercentOfResolution(nativeResolution, 50))
parsedResolutions.add(getPercentOfResolution(nativeResolution, 40))
parsedResolutions.add(getPercentOfResolution(nativeResolution, 30))

return parsedResolutions
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class DriversSettingsFragment : Fragment() {
}

private fun setAdapter() {
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity()))
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!))

settingsList.clear()
dxvkVersions.clear()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class WineSettingsFragment : Fragment() {
}

private fun setAdapter() {
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity()))
recyclerView?.setAdapter(AdapterSettingsPreferences(settingsList, requireActivity(), recyclerView!!))

settingsList.clear()

Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values-pt-rBR/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -152,4 +152,6 @@
<string name="application_version">Versão do Aplicativo</string>
<string name="rootfs_version">Versão do RootFS</string>
<string name="wine_version">Versão do Wine</string>
<string name="display_mode_title">Modo do Display</string>
<string name="display_mode_description">Alterar o Modo de Proporção de Tela</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,6 @@
<string name="application_version">Версия приложения</string>
<string name="rootfs_version">Версия RootFS</string>
<string name="wine_version">Версия Wine</string>
<string name="display_mode_title">Режим отображения</string>
<string name="display_mode_description">Изменить режим соотношения сторон экрана</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -152,4 +152,6 @@
<string name="application_version">应用程序版本</string>
<string name="rootfs_version">RootFS 版本</string>
<string name="wine_version">Wine 版本</string>
<string name="display_mode_title">显示模式</string>
<string name="display_mode_description">更改显示比例模式</string>
</resources>
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,6 @@
<string name="application_version">Application Version</string>
<string name="rootfs_version">RootFS Version</string>
<string name="wine_version">Wine Version</string>
<string name="display_mode_title">Display Mode</string>
<string name="display_mode_description">Change Display Aspect Ratio Mode</string>
</resources>

0 comments on commit 074c5b5

Please sign in to comment.