diff --git a/lawnchair/res/values/config.xml b/lawnchair/res/values/config.xml
index 1649908d55..de6f60229d 100644
--- a/lawnchair/res/values/config.xml
+++ b/lawnchair/res/values/config.xml
@@ -102,6 +102,7 @@
false
true
false
+ false
true
true
false
diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index 67ea81e33b..5566eca656 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -520,6 +520,8 @@
Status bar
Show status bar
Dark status bar
+ Status bar clock
+ Dynamically hide status bar clock in first screen
Text color
Light
diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
index ca9df9998a..6e6c613e6a 100644
--- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
+++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
@@ -176,10 +176,16 @@ class LawnchairLauncher : QuickstepLauncher() {
}
}.launchIn(scope = lifecycleScope)
- if (LawnchairApp.isRecentsEnabled) {
- launcher.stateManager.addStateListener(statusBarClockListener)
- } else {
- launcher.stateManager.removeStateListener(statusBarClockListener)
+ preferenceManager2.statusBarClock.get().distinctUntilChanged().onEach {
+ with(launcher.stateManager) {
+ if (it) {
+ addStateListener(statusBarClockListener)
+ } else {
+ removeStateListener(statusBarClockListener)
+ // Make sure status bar clock is restored when the preference is toggled off
+ LawnchairApp.instance.restoreClockInStatusBar()
+ }
+ }
}
preferenceManager2.rememberPosition.get().onEach {
with(launcher.stateManager) {
diff --git a/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt b/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt
index a3dc70b371..3e45d322dd 100644
--- a/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt
+++ b/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt
@@ -228,6 +228,12 @@ class PreferenceManager2 private constructor(private val context: Context) : Pre
defaultValue = context.resources.getBoolean(R.bool.config_default_show_status_bar),
)
+ val statusBarClock = preference(
+ key = booleanPreferencesKey(name = "status_bar_clock"),
+ defaultValue = context.resources.getBoolean(R.bool.config_default_dynamic_hide_status_bar_clock),
+ onSet = { reloadHelper.reloadGrid() },
+ )
+
val rememberPosition = preference(
key = booleanPreferencesKey(name = "all_apps_remember_position"),
defaultValue = context.resources.getBoolean(R.bool.config_default_remember_position),
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt
index 9c7b3a6802..8e5231199b 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/HomeScreenPreferences.kt
@@ -23,6 +23,7 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
+import app.lawnchair.LawnchairApp
import app.lawnchair.data.iconoverride.IconOverrideRepository
import app.lawnchair.nexuslauncher.OverlayCallbackImpl
import app.lawnchair.preferences.getAdapter
@@ -160,6 +161,13 @@ fun HomeScreenPreferences(
adapter = prefs2.darkStatusBar.getAdapter(),
label = stringResource(id = R.string.dark_status_bar_label),
)
+ if (LawnchairApp.isRecentsEnabled) {
+ SwitchPreference(
+ adapter = prefs2.statusBarClock.getAdapter(),
+ label = stringResource(id = R.string.status_bar_clock_label),
+ description = stringResource(id = R.string.status_bar_clock_description),
+ )
+ }
}
}
PreferenceGroup(heading = stringResource(id = R.string.icons)) {