diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
index 37a331b385..201582a5cd 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt
@@ -1,4 +1,4 @@
-// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
package org.yuzu.yuzu_emu.features.settings.model
@@ -104,6 +104,8 @@ object Settings {
const val PREF_THEME_MODE = "ThemeMode"
const val PREF_BLACK_BACKGROUNDS = "BlackBackgrounds"
const val PREF_STATIC_THEME_COLOR = "StaticThemeColor"
+ const val PREF_APP_FULLSCREEN = "AppFullscreen"
+ const val APP_FULLSCREEN_DEFAULT = false
enum class EmulationOrientation(val int: Int) {
Unspecified(0),
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
index dd932fcafb..ad1ecba64c 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt
@@ -1,4 +1,4 @@
-// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
@@ -103,6 +103,7 @@ class SettingsActivity : AppCompatActivity() {
)
setInsets()
+ applyFullscreenPreference()
}
fun navigateBack() {
@@ -122,6 +123,18 @@ class SettingsActivity : AppCompatActivity() {
}
}
+ override fun onResume() {
+ super.onResume()
+ applyFullscreenPreference()
+ }
+
+ override fun onWindowFocusChanged(hasFocus: Boolean) {
+ super.onWindowFocusChanged(hasFocus)
+ if (hasFocus) {
+ applyFullscreenPreference()
+ }
+ }
+
override fun onStop() {
super.onStop()
Log.info("[SettingsActivity] Settings activity stopping. Saving settings to INI...")
@@ -188,4 +201,8 @@ class SettingsActivity : AppCompatActivity() {
windowInsets
}
}
+
+ private fun applyFullscreenPreference() {
+ FullscreenHelper.applyToActivity(this)
+ }
}
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 77104e0614..34d18e2c42 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
@@ -31,6 +31,7 @@ import org.yuzu.yuzu_emu.utils.GpuDriverHelper
import org.yuzu.yuzu_emu.utils.InputHandler
import org.yuzu.yuzu_emu.utils.NativeConfig
import org.yuzu.yuzu_emu.utils.DirectoryInitialization
+import org.yuzu.yuzu_emu.utils.FullscreenHelper
import androidx.core.content.edit
import androidx.fragment.app.FragmentActivity
import org.yuzu.yuzu_emu.fragments.MessageDialogFragment
@@ -1201,6 +1202,39 @@ class SettingsFragmentPresenter(
)
)
+ val fullscreenSetting: AbstractBooleanSetting = object : AbstractBooleanSetting {
+ override fun getBoolean(needsGlobal: Boolean): Boolean =
+ FullscreenHelper.isFullscreenEnabled(context)
+
+ override fun setBoolean(value: Boolean) {
+ FullscreenHelper.setFullscreenEnabled(context, value)
+ settingsViewModel.setShouldRecreate(true)
+ }
+
+ override val key: String = Settings.PREF_APP_FULLSCREEN
+ override val isRuntimeModifiable: Boolean = true
+ override val pairedSettingKey: String = ""
+ override val isSwitchable: Boolean = false
+ override var global: Boolean = true
+ override val isSaveable: Boolean = true
+ override val defaultValue: Boolean = Settings.APP_FULLSCREEN_DEFAULT
+
+ override fun getValueAsString(needsGlobal: Boolean): String =
+ getBoolean(needsGlobal).toString()
+
+ override fun reset() {
+ setBoolean(defaultValue)
+ }
+ }
+
+ add(
+ SwitchSetting(
+ fullscreenSetting,
+ titleId = R.string.fullscreen_mode,
+ descriptionId = R.string.fullscreen_mode_description
+ )
+ )
+
add(HeaderSetting(R.string.buttons))
add(BooleanSetting.ENABLE_FOLDER_BUTTON.key)
add(BooleanSetting.ENABLE_QLAUNCH_BUTTON.key)
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
index db4cc0f60e..179b67d7c5 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
@@ -177,6 +177,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
checkForUpdates()
}
setInsets()
+ applyFullscreenPreference()
}
private fun checkForUpdates() {
@@ -353,6 +354,14 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
override fun onResume() {
ThemeHelper.setCorrectTheme(this)
super.onResume()
+ applyFullscreenPreference()
+ }
+
+ override fun onWindowFocusChanged(hasFocus: Boolean) {
+ super.onWindowFocusChanged(hasFocus)
+ if (hasFocus) {
+ applyFullscreenPreference()
+ }
}
private fun setInsets() = ViewCompat.setOnApplyWindowInsetsListener(
@@ -372,6 +381,10 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
windowInsets
}
+ private fun applyFullscreenPreference() {
+ FullscreenHelper.applyToActivity(this)
+ }
+
override fun setTheme(resId: Int) {
super.setTheme(resId)
themeId = resId
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FullscreenHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FullscreenHelper.kt
new file mode 100644
index 0000000000..22bda82497
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FullscreenHelper.kt
@@ -0,0 +1,39 @@
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package org.yuzu.yuzu_emu.utils
+
+import android.app.Activity
+import android.content.Context
+import androidx.core.content.edit
+import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.WindowInsetsControllerCompat
+import androidx.preference.PreferenceManager
+import org.yuzu.yuzu_emu.features.settings.model.Settings
+
+object FullscreenHelper {
+ fun isFullscreenEnabled(context: Context): Boolean {
+ return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
+ Settings.PREF_APP_FULLSCREEN,
+ Settings.APP_FULLSCREEN_DEFAULT
+ )
+ }
+
+ fun setFullscreenEnabled(context: Context, enabled: Boolean) {
+ PreferenceManager.getDefaultSharedPreferences(context).edit {
+ putBoolean(Settings.PREF_APP_FULLSCREEN, enabled)
+ }
+ }
+
+ fun applyToActivity(activity: Activity) {
+ val controller = WindowInsetsControllerCompat(activity.window, activity.window.decorView)
+
+ if (isFullscreenEnabled(activity)) {
+ controller.hide(WindowInsetsCompat.Type.systemBars())
+ controller.systemBarsBehavior =
+ WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
+ } else {
+ controller.show(WindowInsetsCompat.Type.systemBars())
+ }
+ }
+}
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 7d094effcb..8d2d525d50 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -1160,6 +1160,8 @@
Material You
App Settings
Theme And Color
+ Fullscreen mode
+ Hide Android system bars across app screens. Swipe from an edge to reveal them temporarily.
Change theme mode