diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml
index 3f911830..004e2fb7 100644
--- a/i18n/src/main/res/values/strings.xml
+++ b/i18n/src/main/res/values/strings.xml
@@ -617,6 +617,7 @@
Ignore media sessions of apps that are not music apps
Style
Customize search bar appearance
+ Color
Open keyboard
Automatically show the keyboard when opening the search
Hidden search results
diff --git a/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt
index 9e54e865..1737a70e 100644
--- a/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt
+++ b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt
@@ -2,6 +2,7 @@ package de.mm20.launcher2.preferences
import android.content.Context
import android.graphics.Color
+import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors
import scheme.Scheme
fun createFactorySettings(context: Context): Settings {
@@ -133,6 +134,7 @@ fun createFactorySettings(context: Context): Settings {
Settings.SearchBarSettings.newBuilder()
.setSearchBarStyle(Settings.SearchBarSettings.SearchBarStyle.Transparent)
.setAutoFocus(false)
+ .setColor(SearchBarColors.Auto)
.build()
)
.setIcons(
diff --git a/preferences/src/main/proto/settings.proto b/preferences/src/main/proto/settings.proto
index e5383b21..d12b9158 100644
--- a/preferences/src/main/proto/settings.proto
+++ b/preferences/src/main/proto/settings.proto
@@ -216,6 +216,12 @@ message Settings {
}
SearchBarStyle search_bar_style = 1;
bool auto_focus = 2;
+ enum SearchBarColors {
+ Auto = 0;
+ Light = 1;
+ Dark = 2;
+ }
+ SearchBarColors color = 3;
}
SearchBarSettings search_bar = 20;
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchBar.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchBar.kt
index ec999652..aaa18cc1 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchBar.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/search/SearchBar.kt
@@ -44,12 +44,14 @@ import coil.compose.AsyncImage
import de.mm20.launcher2.ktx.tryStartActivity
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings.SearchBarSettings
+import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors
import de.mm20.launcher2.search.data.Websearch
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.launcher.LauncherActivityVM
import de.mm20.launcher2.ui.layout.BottomReversed
import de.mm20.launcher2.ui.locals.LocalCardStyle
+import de.mm20.launcher2.ui.locals.LocalPreferDarkContentOverWallpaper
import de.mm20.launcher2.ui.settings.SettingsActivity
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.flow.map
@@ -72,6 +74,9 @@ fun SearchBar(
val style by remember { dataStore.data.map { it.searchBar.searchBarStyle } }
.collectAsState(SearchBarSettings.SearchBarStyle.Hidden)
+ val color by remember { dataStore.data.map { it.searchBar.color } }
+ .collectAsState(SearchBarSettings.SearchBarColors.Auto)
+
val focusManager = LocalFocusManager.current
val focusRequester = remember { FocusRequester() }
@@ -135,7 +140,8 @@ fun SearchBar(
onUnfocus = {
onFocusChange(false)
},
- reverse = reverse
+ reverse = reverse,
+ darkColors = color == SearchBarColors.Dark || color == SearchBarColors.Auto && LocalPreferDarkContentOverWallpaper.current
)
}
@@ -152,6 +158,7 @@ fun SearchBar(
onUnfocus: () -> Unit = {},
focusRequester: FocusRequester = remember { FocusRequester() },
reverse: Boolean = false,
+ darkColors: Boolean = false,
) {
val context = LocalContext.current
@@ -212,7 +219,7 @@ fun SearchBar(
}) {
when {
style != SearchBarSettings.SearchBarStyle.Transparent -> MaterialTheme.colorScheme.onSurface
- it == SearchBarLevel.Resting -> Color.White
+ it == SearchBarLevel.Resting -> if (darkColors) Color(0,0,0, 180) else Color.White
else -> MaterialTheme.colorScheme.onSurface
}
}
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt
index 733fef6f..01fe1275 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt
@@ -2,6 +2,7 @@ package de.mm20.launcher2.ui.settings.appearance
import android.graphics.drawable.ColorDrawable
import androidx.appcompat.app.AppCompatActivity
+import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.grid.GridCells
@@ -33,6 +34,8 @@ import de.mm20.launcher2.ktx.isAtLeastApiLevel
import de.mm20.launcher2.preferences.Settings.*
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.ColorScheme
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.Theme
+import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors
+import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarStyle
import de.mm20.launcher2.preferences.Settings.SystemBarsSettings.SystemBarColors
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.ShapedLauncherIcon
@@ -250,6 +253,21 @@ fun AppearanceSettingsScreen() {
viewModel.setSearchBarStyle(it)
}
)
+ AnimatedVisibility(searchBarStyle == SearchBarStyle.Transparent) {
+ val searchBarColor by viewModel.searchBarColor.observeAsState()
+ ListPreference(
+ title = stringResource(R.string.preference_search_bar_color),
+ value = searchBarColor,
+ items = listOf(
+ stringResource(R.string.preference_system_bar_icons_auto) to SearchBarColors.Auto,
+ stringResource(R.string.preference_system_bar_icons_light) to SearchBarColors.Light,
+ stringResource(R.string.preference_system_bar_icons_dark) to SearchBarColors.Dark,
+ ),
+ onValueChanged = {
+ if (it != null) viewModel.setSearchBarColor(it)
+ }
+ )
+ }
}
PreferenceCategory(stringResource(R.string.preference_category_system_bars)) {
val lightStatusBar by viewModel.statusBarIcons.observeAsState()
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt
index 8cc48e30..7ca67299 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreenVM.kt
@@ -13,6 +13,7 @@ import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.Settings.AppearanceSettings.*
import de.mm20.launcher2.preferences.Settings.SearchBarSettings
+import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors
import de.mm20.launcher2.preferences.Settings.SystemBarsSettings
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
@@ -218,6 +219,20 @@ class AppearanceSettingsScreenVM : ViewModel(), KoinComponent {
}
}
+ val searchBarColor = dataStore.data.map { it.searchBar.color }.asLiveData()
+ fun setSearchBarColor(color: SearchBarColors) {
+ viewModelScope.launch {
+ dataStore.updateData {
+ it.toBuilder()
+ .setSearchBar(
+ it.searchBar.toBuilder()
+ .setColor(color)
+ )
+ .build()
+ }
+ }
+ }
+
val statusBarIcons = dataStore.data.map { it.systemBars.statusBarColor }.asLiveData()
fun setLightStatusBar(statusBarColor: SystemBarsSettings.SystemBarColors) {
viewModelScope.launch {