diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt index 21dc51513d..79cfed1cd0 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt @@ -58,7 +58,9 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting { SHOW_APP_RAM_USAGE("show_app_ram_usage"), SHOW_SYSTEM_RAM_USAGE("show_system_ram_usage"), SHOW_BAT_TEMPERATURE("show_bat_temperature"), + SHOW_POWER_INFO("show_power_info"), SHOW_SHADERS_BUILDING("show_shaders_building"), + DEBUG_FLUSH_BY_LINE("flush_lines"), USE_LRU_CACHE("use_lru_cache"),; diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt index 63206e0bee..a674857bc1 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/IntSetting.kt @@ -42,7 +42,7 @@ enum class IntSetting(override val key: String) : AbstractIntSetting { FAST_CPU_TIME("fast_cpu_time"), CPU_TICKS("cpu_ticks"), FAST_GPU_TIME("fast_gpu_time"), - + BAT_TEMPERATURE_UNIT("bat_temperature_unit"), CABINET_APPLET("cabinet_applet_mode"), CONTROLLER_APPLET("controller_applet_mode"), DATA_ERASE_APPLET("data_erase_applet_mode"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index f225d8d8b7..4e206ab541 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -78,7 +78,7 @@ abstract class SettingsItem( val needsRuntimeGlobal: Boolean get() = NativeLibrary.isRunning() && !setting.global && - !NativeConfig.isPerGameConfigLoaded() + !NativeConfig.isPerGameConfigLoaded() val clearable: Boolean get() = !setting.global && NativeConfig.isPerGameConfigLoaded() @@ -260,12 +260,12 @@ abstract class SettingsItem( ) ) put( - SwitchSetting( - BooleanSetting.CORE_SYNC_CORE_SPEED, - titleId = R.string.use_sync_core, - descriptionId = R.string.use_sync_core_description - ) - ) + SwitchSetting( + BooleanSetting.CORE_SYNC_CORE_SPEED, + titleId = R.string.use_sync_core, + descriptionId = R.string.use_sync_core_description + ) + ) put( SingleChoiceSetting( @@ -443,6 +443,21 @@ abstract class SettingsItem( descriptionId = R.string.show_bat_temperature_description ) ) + put( + SingleChoiceSetting( + IntSetting.BAT_TEMPERATURE_UNIT, + R.string.bat_temperature_unit, + choicesId = R.array.temperatureUnitEntries, + valuesId = R.array.temperatureUnitValues + ) + ) + put( + SwitchSetting( + BooleanSetting.SHOW_POWER_INFO, + R.string.show_power_info, + descriptionId = R.string.show_power_info_description + ) + ) put( SwitchSetting( BooleanSetting.SHOW_SHADERS_BUILDING, @@ -688,12 +703,12 @@ abstract class SettingsItem( ) ) put( - SwitchSetting( - BooleanSetting.USE_AUTO_STUB, - titleId = R.string.use_auto_stub, - descriptionId = R.string.use_auto_stub_description - ) - ) + SwitchSetting( + BooleanSetting.USE_AUTO_STUB, + titleId = R.string.use_auto_stub, + descriptionId = R.string.use_auto_stub_description + ) + ) put( SwitchSetting( BooleanSetting.CPU_DEBUG_MODE, @@ -705,7 +720,7 @@ abstract class SettingsItem( val fastmem = object : AbstractBooleanSetting { override fun getBoolean(needsGlobal: Boolean): Boolean = BooleanSetting.FASTMEM.getBoolean() && - BooleanSetting.FASTMEM_EXCLUSIVES.getBoolean() + BooleanSetting.FASTMEM_EXCLUSIVES.getBoolean() override fun setBoolean(value: Boolean) { BooleanSetting.FASTMEM.setBoolean(value) @@ -720,7 +735,7 @@ abstract class SettingsItem( override var global: Boolean get() { return BooleanSetting.FASTMEM.global && - BooleanSetting.FASTMEM_EXCLUSIVES.global + BooleanSetting.FASTMEM_EXCLUSIVES.global } set(value) { BooleanSetting.FASTMEM.global = value diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 0cf7be74d3..430e2f3426 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -260,6 +260,8 @@ class SettingsFragmentPresenter( add(BooleanSetting.SHOW_APP_RAM_USAGE.key) add(BooleanSetting.SHOW_SYSTEM_RAM_USAGE.key) add(BooleanSetting.SHOW_BAT_TEMPERATURE.key) + add(IntSetting.BAT_TEMPERATURE_UNIT.key) + add(BooleanSetting.SHOW_POWER_INFO.key) add(BooleanSetting.SHOW_SHADERS_BUILDING.key) } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt index 9ba2d9e625..05c14e278d 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt @@ -17,6 +17,7 @@ import android.content.pm.ActivityInfo import android.content.res.Configuration import android.net.Uri import android.os.BatteryManager +import android.os.BatteryManager.* import android.os.Build import android.os.Bundle import android.os.Handler @@ -574,12 +575,13 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { if (emulationViewModel.emulationStarted.value && !emulationViewModel.isEmulationStopping.value ) { + val needsGlobal = NativeConfig.isPerGameConfigLoaded() sb.setLength(0) val perfStats = NativeLibrary.getPerfStats() val actualFps = perfStats[FPS] - if (BooleanSetting.SHOW_FPS.getBoolean(NativeConfig.isPerGameConfigLoaded())) { + if (BooleanSetting.SHOW_FPS.getBoolean(needsGlobal)) { val enableFrameInterpolation = BooleanSetting.FRAME_INTERPOLATION.getBoolean() // val enableFrameSkipping = BooleanSetting.FRAME_SKIPPING.getBoolean() @@ -597,7 +599,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { sb.append(fpsText) } - if (BooleanSetting.SHOW_FRAMETIME.getBoolean(NativeConfig.isPerGameConfigLoaded())) { + if (BooleanSetting.SHOW_FRAMETIME.getBoolean(needsGlobal)) { if (sb.isNotEmpty()) sb.append(" | ") sb.append( String.format( @@ -607,13 +609,14 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { ) } - if (BooleanSetting.SHOW_APP_RAM_USAGE.getBoolean(NativeConfig.isPerGameConfigLoaded())) { + if (BooleanSetting.SHOW_APP_RAM_USAGE.getBoolean(needsGlobal)) { if (sb.isNotEmpty()) sb.append(" | ") - val appRamUsage = File("/proc/self/statm").readLines()[0].split(' ')[1].toLong() * 4096 / 1000000 + val appRamUsage = + File("/proc/self/statm").readLines()[0].split(' ')[1].toLong() * 4096 / 1000000 sb.append(getString(R.string.process_ram, appRamUsage)) } - if (BooleanSetting.SHOW_SYSTEM_RAM_USAGE.getBoolean(NativeConfig.isPerGameConfigLoaded())) { + if (BooleanSetting.SHOW_SYSTEM_RAM_USAGE.getBoolean(needsGlobal)) { if (sb.isNotEmpty()) sb.append(" | ") context?.let { ctx -> val activityManager = @@ -625,16 +628,35 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } } - if (BooleanSetting.SHOW_BAT_TEMPERATURE.getBoolean(NativeConfig.isPerGameConfigLoaded())) { + if (BooleanSetting.SHOW_BAT_TEMPERATURE.getBoolean(needsGlobal)) { if (sb.isNotEmpty()) sb.append(" | ") + val batteryTemp = getBatteryTemperature() - val tempF = celsiusToFahrenheit(batteryTemp) - sb.append(String.format("%.1f°C/%.1f°F", batteryTemp, tempF)) + when (IntSetting.BAT_TEMPERATURE_UNIT.getInt(needsGlobal)) { + 0 -> sb.append(String.format("%.1f°C", batteryTemp)) + 1 -> sb.append(String.format("%.1f°F", celsiusToFahrenheit(batteryTemp))) + } + } + + if (BooleanSetting.SHOW_POWER_INFO.getBoolean(needsGlobal)) { + if (sb.isNotEmpty()) sb.append(" | ") + + val battery: BatteryManager = + requireContext().getSystemService(Context.BATTERY_SERVICE) as BatteryManager + + val capacity = battery.getIntProperty(BATTERY_PROPERTY_CAPACITY) + val nowUAmps = battery.getIntProperty(BATTERY_PROPERTY_CURRENT_NOW) + + sb.append(String.format("%.1fA (%d%%)", nowUAmps / 1000000.0, capacity)) + + if (battery.isCharging || nowUAmps > 0.0) { + sb.append(" ${getString(R.string.charging)}") + } } val shadersBuilding = NativeLibrary.getShadersBuilding() - if (BooleanSetting.SHOW_SHADERS_BUILDING.getBoolean(NativeConfig.isPerGameConfigLoaded()) && shadersBuilding != 0) { + if (BooleanSetting.SHOW_SHADERS_BUILDING.getBoolean(needsGlobal) && shadersBuilding != 0) { if (sb.isNotEmpty()) sb.append(" | ") val prefix = getString(R.string.shaders_prefix) @@ -642,7 +664,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { sb.append(String.format("$prefix %d $suffix", shadersBuilding)) } - if (BooleanSetting.PERF_OVERLAY_BACKGROUND.getBoolean(NativeConfig.isPerGameConfigLoaded())) { + if (BooleanSetting.PERF_OVERLAY_BACKGROUND.getBoolean(needsGlobal)) { binding.showStatsOverlayText.setBackgroundResource(R.color.yuzu_transparent_black) } else { binding.showStatsOverlayText.setBackgroundResource(0) diff --git a/src/android/app/src/main/jni/android_settings.h b/src/android/app/src/main/jni/android_settings.h index e7401a8947..cd18f1e5b3 100644 --- a/src/android/app/src/main/jni/android_settings.h +++ b/src/android/app/src/main/jni/android_settings.h @@ -9,6 +9,7 @@ #include #include "common/common_types.h" #include "common/settings_setting.h" +#include "common/settings_enums.h" namespace AndroidSettings { @@ -79,9 +80,10 @@ namespace AndroidSettings { Settings::Specialization::Paired, true, true}; Settings::Setting perf_overlay_background{linkage, false, "perf_overlay_background", - Settings::Category::Overlay, - Settings::Specialization::Default, true, true, - &show_performance_overlay}; + Settings::Category::Overlay, + Settings::Specialization::Default, true, + true, + &show_performance_overlay}; Settings::Setting perf_overlay_position{linkage, 0, "perf_overlay_position", Settings::Category::Overlay, Settings::Specialization::Default, true, true, @@ -107,10 +109,23 @@ namespace AndroidSettings { Settings::Category::Overlay, Settings::Specialization::Default, true, true, &show_performance_overlay}; + Settings::Setting bat_temperature_unit{linkage, + Settings::TemperatureUnits::Celsius, + "bat_temperature_unit", + Settings::Category::Overlay, + Settings::Specialization::Default, + true, true, + &show_bat_temperature}; + Settings::Setting show_power_info{linkage, false, "show_power_info", + Settings::Category::Overlay, + Settings::Specialization::Default, true, true, + &show_performance_overlay}; Settings::Setting show_shaders_building{linkage, true, "show_shaders_building", Settings::Category::Overlay, Settings::Specialization::Default, true, true, &show_performance_overlay}; + + Settings::Setting show_input_overlay{linkage, true, "show_input_overlay", Settings::Category::Overlay}; Settings::Setting touchscreen{linkage, true, "touchscreen", @@ -125,14 +140,14 @@ namespace AndroidSettings { Settings::Specialization::Paired, true, true}; Settings::Setting show_device_model{linkage, true, "show_device_model", - Settings::Category::Overlay, - Settings::Specialization::Default, true, true, - &show_soc_overlay}; + Settings::Category::Overlay, + Settings::Specialization::Default, true, true, + &show_performance_overlay}; Settings::Setting show_gpu_model{linkage, true, "show_gpu_model", - Settings::Category::Overlay, - Settings::Specialization::Default, true, true, - &show_soc_overlay}; + Settings::Category::Overlay, + Settings::Specialization::Default, true, true, + &show_performance_overlay}; Settings::Setting show_soc_model{linkage, true, "show_soc_model", Settings::Category::Overlay, @@ -140,18 +155,19 @@ namespace AndroidSettings { &show_soc_overlay}; Settings::Setting show_fw_version{linkage, true, "show_firmware_version", - Settings::Category::Overlay, - Settings::Specialization::Default, true, true, - &show_soc_overlay}; + Settings::Category::Overlay, + Settings::Specialization::Default, true, true, + &show_performance_overlay}; Settings::Setting soc_overlay_background{linkage, false, "soc_overlay_background", - Settings::Category::Overlay, - Settings::Specialization::Default, true, true, - &show_soc_overlay}; + Settings::Category::Overlay, + Settings::Specialization::Default, true, + true, + &show_soc_overlay}; Settings::Setting soc_overlay_position{linkage, 2, "soc_overlay_position", - Settings::Category::Overlay, - Settings::Specialization::Default, true, true, - &show_soc_overlay}; + Settings::Category::Overlay, + Settings::Specialization::Default, true, true, + &show_soc_overlay}; Settings::Setting dont_show_eden_veil_warning{linkage, false, "dont_show_eden_veil_warning", diff --git a/src/android/app/src/main/res/values-sr/strings.xml b/src/android/app/src/main/res/values-sr/strings.xml index 814466a707..d0cb8d5d14 100644 --- a/src/android/app/src/main/res/values-sr/strings.xml +++ b/src/android/app/src/main/res/values-sr/strings.xml @@ -14,6 +14,8 @@ Зграда Схадер (с) Систем: + (Пуњење) + Покажи Статистика перформанси Статистика Прилагођавање Видљивост @@ -31,7 +33,10 @@ Прикажи употребу система меморије Прикажите износ РАМ-а који користи систем Прикажи температуру батерије - Прикажи тренутну температуру батерије у Целзијусу и Фахренхеиту + Прикажи тренутну температуру батерије + Јединице за температуру батерије + Прикажи информације о батерији + Приказ тренутне потрошње енергије и преостали капацитет батерије Прикажи Схадерс Буилдинг Прикажи тренутни број саграђених Схадера Положај прекривања @@ -98,11 +103,11 @@ Изглед меморије (Експериментално) Промените изглед емулираног меморије. Ово постављање неће повећати перформансе, али може помоћи у играма које користе високе резолуције путем модова. Не користите на телефонима са 8 ГБ РАМ-а или мање. Ради само на динамичком (ЈИТ) бацкенд-у. - Семпловање сенчења - Омогућава фрагмент шејдеру да се извршава по узорку у вишеузорачном фрагменту уместо једном по фрагменту. Побољшава квалитет графике на рачун перформанси. Само Vulkan 1.1+ уређаји подржавају ову екстензију. - Прилагођени CPU тактови - Поставите прилагођену вредност CPU тактова. Веће вредности могу повећати перформансе, али могу изазвати залеђивање игре. Препоручује се опсег 77–21000. - Тактови + Семпловање сенчења + Омогућава фрагмент шејдеру да се извршава по узорку у вишеузорачном фрагменту уместо једном по фрагменту. Побољшава квалитет графике на рачун перформанси. Само Vulkan 1.1+ уређаји подржавају ову екстензију. + Прилагођени CPU тактови + Поставите прилагођену вредност CPU тактова. Веће вредности могу повећати перформансе, али могу изазвати залеђивање игре. Препоручује се опсег 77–21000. + Тактови Схадер Бацкенд @@ -205,23 +210,23 @@ Није пронађена није пронађена игара Морате одабрати преферирану игру да бисте угостили собу. Мора бити дугачко 48 знакова и садржати само мала слова a-z - Тип лобија - Јавно - Неприказано - Име је прекратко - Неисправна адреса - Мора бити између 4–20 знакова + Тип лобија + Јавно + Неприказано + Име је прекратко + Неисправна адреса + Мора бити између 4–20 знакова Отказати У реду Освежити Листа соба Придружујем се… - Креирам… - Обавезно - Потребан је веб токен, идите на Напредне поставке -> Систем -> Мрежа - Неисправан ИП формат - Мора бити између 1 и 65535 - Мора бити између 3 и 20 знакова + Креирам… + Обавезно + Потребан је веб токен, идите на Напредне поставке -> Систем -> Мрежа + Неисправан ИП формат + Мора бити између 1 и 65535 + Мора бити између 3 и 20 знакова Добродошли! @@ -428,16 +433,16 @@ Генериши - Веб корисничко име - Корисничко име које ће бити приказано у мултиплејер лобијима. Мора бити дугачко 4–20 знакова. + Веб корисничко име + Корисничко име које ће бити приказано у мултиплејер лобијима. Мора бити дугачко 4–20 знакова. Веб токен Веб токен који се користи за стварање јавних лобија. То је низ од 48 знакова који садржи само мала слова А-З. Мрежа Бекенд - Приказ - Постпроцесирање + Приказ + Постпроцесирање ВИП: Фрамескип Пребацивање оквира прескакање да бисте побољшали перформансе смањењем броја пружених оквира. Ова функција се и даље ради и биће омогућена у будућим издањима. Ниво тачности @@ -791,6 +796,10 @@ Средња (256) Висок (512) + + Целзијус + Фаренхајт + 日本語 English @@ -979,8 +988,8 @@ Софтверска тастатура - Авионски режим - Прослеђује авионски режим на Switch OS + Авионски режим + Прослеђује авионски режим на Switch OS Лиценце diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index 23514a0a23..42dcfbc68b 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -471,4 +471,14 @@ 1 2 + + + @string/temperature_celsius + @string/temperature_fahrenheit + + + + 0 + 1 + diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 454e633cc3..658dfedc6b 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -14,6 +14,8 @@ Process RAM: %1$d MB Building Shader(s) + (Charging) + System: Show Performance Stats Overlay Customization @@ -32,7 +34,10 @@ Show System Memory Usage Display the amount of RAM used by the system Show Battery Temperature - Display current Battery temperature in Celsius and Fahrenheit + Display current battery temperature + Battery Temperature Units + Show Battery Info + Display current power draw and remaining capacity on battery Show Shaders Building Display current number of shaders being built Overlay Position @@ -818,6 +823,10 @@ Medium (256) High (512) + + Celsius + Fahrenheit + 日本語 English diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index f0c5c96cc4..c2347f74d0 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -178,6 +178,8 @@ ENUM(SpirvOptimizeMode, Never, OnLoad, Always); ENUM(GpuOverclock, Low, Medium, High) +ENUM(TemperatureUnits, Celsius, Fahrenheit) + template inline std::string CanonicalizeEnum(Type id) { const auto group = EnumMetadata::Canonicalizations();