From cc56cc551172283afca62a87e774d1ebc17d8bb6 Mon Sep 17 00:00:00 2001 From: nyx-ynx Date: Sat, 27 Sep 2025 19:18:31 +0200 Subject: [PATCH] adapt auto hide setting for spinbox --- .../features/settings/model/BooleanSetting.kt | 2 ++ .../settings/model/view/SettingsItem.kt | 12 ++++++++--- .../settings/ui/SettingsFragmentPresenter.kt | 1 + .../yuzu_emu/fragments/EmulationFragment.kt | 21 ++++++++++--------- .../app/src/main/jni/android_settings.h | 9 ++++++-- .../app/src/main/res/values/strings.xml | 4 ++-- 6 files changed, 32 insertions(+), 17 deletions(-) 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 3c5b9003de..638e1101db 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 @@ -55,6 +55,8 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting { FRAME_INTERPOLATION("frame_interpolation"), // FRAME_SKIPPING("frame_skipping"), + ENABLE_INPUT_OVERLAY_AUTO_HIDE("enable_input_overlay_auto_hide"), + PERF_OVERLAY_BACKGROUND("perf_overlay_background"), SHOW_PERFORMANCE_OVERLAY("show_performance_overlay"), 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 c0b3629629..27f5d233bc 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 @@ -387,12 +387,18 @@ abstract class SettingsItem( ) ) put( - SingleChoiceSetting( + SwitchSetting( + BooleanSetting.ENABLE_INPUT_OVERLAY_AUTO_HIDE, + titleId = R.string.enable_input_overlay_auto_hide, + ) + ) + put( + SpinBoxSetting( IntSetting.INPUT_OVERLAY_AUTO_HIDE, titleId = R.string.overlay_auto_hide, descriptionId = R.string.overlay_auto_hide_description, - choicesId = R.array.overlayAutoHideEntries, - valuesId = R.array.overlayAutoHideValues, + min = 1, + max = 999 ) ) 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 c65ccd0582..715baec72f 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 @@ -275,6 +275,7 @@ class SettingsFragmentPresenter( private fun addInputOverlaySettings(sl: ArrayList) { sl.apply { + add(BooleanSetting.ENABLE_INPUT_OVERLAY_AUTO_HIDE.key) add(IntSetting.INPUT_OVERLAY_AUTO_HIDE.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 33aa5c8232..b02ed18414 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 @@ -1750,20 +1750,20 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { }, seconds * 1000L) } - fun handleScreenTap(isLongTap: Boolean) { val autoHideSeconds = IntSetting.INPUT_OVERLAY_AUTO_HIDE.getInt() + val shouldProceed = BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean() && BooleanSetting.ENABLE_INPUT_OVERLAY_AUTO_HIDE.getBoolean() - if (!BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()) { + if (!shouldProceed) { return } + // failsafe if (autoHideSeconds == 0) { showOverlay() return } - // Show overlay for quick taps when it's hidden if (!isOverlayVisible && !isLongTap) { showOverlay() } @@ -1772,14 +1772,15 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { } private fun initializeOverlayAutoHide() { - val autoHideSeconds = IntSetting.INPUT_OVERLAY_AUTO_HIDE.getInt() - if (autoHideSeconds > 0) { - handler.postDelayed({ - // since the timer starts only after touch input, we need to always force hide it - hideOverlay() - }, autoHideSeconds * 1000L) - } + val autoHideSeconds = IntSetting.INPUT_OVERLAY_AUTO_HIDE.getInt() + val autoHideEnabled = BooleanSetting.ENABLE_INPUT_OVERLAY_AUTO_HIDE.getBoolean() + val showOverlay = BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean() + + if (autoHideEnabled && showOverlay) { + showOverlay() + startOverlayAutoHideTimer(autoHideSeconds) } + } fun showOverlay() { diff --git a/src/android/app/src/main/jni/android_settings.h b/src/android/app/src/main/jni/android_settings.h index 23571421c6..0c6ba53d41 100644 --- a/src/android/app/src/main/jni/android_settings.h +++ b/src/android/app/src/main/jni/android_settings.h @@ -79,10 +79,15 @@ namespace AndroidSettings { Settings::Category::Overlay, Settings::Specialization::Paired, true, true}; + Settings::Setting enable_input_overlay_auto_hide{linkage, false, + "enable_input_overlay_auto_hide", + Settings::Category::Overlay, + Settings::Specialization::Default, true, + true,}; - Settings::Setting input_overlay_auto_hide{linkage, 0, "input_overlay_auto_hide", + Settings::Setting input_overlay_auto_hide{linkage, 5, "input_overlay_auto_hide", Settings::Category::Overlay, - Settings::Specialization::Default, true, true,}; + Settings::Specialization::Default, true, true, &enable_input_overlay_auto_hide}; Settings::Setting perf_overlay_background{linkage, false, "perf_overlay_background", Settings::Category::Overlay, Settings::Specialization::Default, true, diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 72b5f9ac37..2d9acbce2f 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -24,8 +24,8 @@ Overlay Auto Hide - Automatically hide the touch controls overlay after the specified time of inactivity. Select "Never" to keep the overlay always visible. - + Automatically hide the touch controls overlay after the specified time of inactivity. + Enable Overlay Auto Hide Never Instantly 5 seconds