diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
index c216911..aacff13 100644
--- a/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
+++ b/app/src/main/java/de/jrpie/android/launcher/preferences/LauncherPreferences$Config.java
@@ -61,6 +61,7 @@ import eu.jonahbauer.android.preference.annotations.Preferences;
@Preference(name = "screen_timeout_disabled", type = boolean.class, defaultValue = "false"),
@Preference(name = "full_screen", type = boolean.class, defaultValue = "true"),
@Preference(name = "rotate_screen", type = boolean.class, defaultValue = "true"),
+ @Preference(name = "hide_navigation_bar", type = boolean.class, defaultValue = "false"),
}),
@PreferenceGroup(name = "functionality", prefix = "settings_functionality_", suffix = "_key", value = {
@Preference(name = "search_auto_launch", type = boolean.class, defaultValue = "true"),
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
index 973e0ca..1d807fd 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt
@@ -9,6 +9,7 @@ import android.util.DisplayMetrics
import android.view.KeyEvent
import android.view.MotionEvent
import android.view.View
+import android.view.Window
import android.window.OnBackInvokedDispatcher
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
@@ -99,6 +100,38 @@ class HomeActivity : UIObject, AppCompatActivity() {
}
+ override fun onWindowFocusChanged(hasFocus: Boolean) {
+ super.onWindowFocusChanged(hasFocus)
+
+ if (hasFocus && LauncherPreferences.display().hideNavigationBar()) {
+ hideNavigationBar()
+ }
+ }
+
+ @Suppress("DEPRECATION")
+ private fun hideNavigationBar() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ val windowInsetsController = window.insetsController ?: return
+ windowInsetsController.hide(android.view.WindowInsets.Type.navigationBars())
+ windowInsetsController.systemBarsBehavior =
+ android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
+ } else {
+ val decorView = window.decorView
+ val uiOptions =
+ (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_IMMERSIVE or View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
+
+ // Try to hide the navigation bar but do not hide the status bar
+ decorView.systemUiVisibility = uiOptions
+
+ // Add listener to hide the navigation bar
+ decorView.setOnSystemUiVisibilityChangeListener { visibility ->
+ if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
+ decorView.systemUiVisibility = uiOptions
+ }
+ }
+ }
+ }
+
private fun updateSettingsFallbackButtonVisibility() {
// If µLauncher settings can not be reached from any action bound to an enabled gesture,
// show the fallback button.
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 6ebdf63..ec87cf8 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -137,6 +137,7 @@
display.disable_timeout
display.use_full_screen
display.rotate_screen
+ display.hide_navigation
enabled_gestures.double_actions
enabled_gestures.edge_actions
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 687aed1..870e202 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -155,6 +155,7 @@
Keep screen on
Use full screen
Rotate screen
+ Hide navigation bar
Functionality
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 406f81a..180a261 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -180,6 +180,10 @@
android:key="@string/settings_display_screen_timeout_disabled_key"
android:defaultValue="false"
android:title="@string/settings_display_screen_timeout_disabled"/>
+