Add option to not scroll the search bar out of view

This commit is contained in:
MM20 2023-01-21 14:00:30 +01:00
parent b0f3ddf325
commit 1ad18f14ad
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
9 changed files with 35 additions and 3 deletions

View File

@ -39,6 +39,7 @@ fun AssistantScaffold(
darkNavBarIcons: Boolean = false, darkNavBarIcons: Boolean = false,
bottomSearchBar: Boolean = false, bottomSearchBar: Boolean = false,
reverseSearchResults: Boolean = false, reverseSearchResults: Boolean = false,
fixedSearchBar: Boolean = false,
) { ) {
val viewModel: LauncherScaffoldVM = viewModel() val viewModel: LauncherScaffoldVM = viewModel()
@ -185,7 +186,7 @@ fun AssistantScaffold(
.windowInsetsPadding(WindowInsets.safeDrawing) .windowInsetsPadding(WindowInsets.safeDrawing)
.padding(8.dp) .padding(8.dp)
.offset { .offset {
if (searchBarFocused) IntOffset.Zero if (searchBarFocused || fixedSearchBar) IntOffset.Zero
else IntOffset( else IntOffset(
0, 0,
searchBarOffset.toInt() * if (bottomSearchBar) -1 else 1 searchBarOffset.toInt() * if (bottomSearchBar) -1 else 1

View File

@ -66,6 +66,7 @@ class LauncherScaffoldVM : ViewModel(), KoinComponent {
val baseLayout = dataStore.data.map { it.layout.baseLayout }.asLiveData() val baseLayout = dataStore.data.map { it.layout.baseLayout }.asLiveData()
val bottomSearchBar = dataStore.data.map { it.layout.bottomSearchBar }.asLiveData() val bottomSearchBar = dataStore.data.map { it.layout.bottomSearchBar }.asLiveData()
val reverseSearchResults = dataStore.data.map { it.layout.reverseSearchResults }.asLiveData() val reverseSearchResults = dataStore.data.map { it.layout.reverseSearchResults }.asLiveData()
val fixedSearchBar = dataStore.data.map { it.layout.fixedSearchBar }.asLiveData()
val isSearchOpen = MutableLiveData(false) val isSearchOpen = MutableLiveData(false)
val isWidgetEditMode = MutableLiveData(false) val isWidgetEditMode = MutableLiveData(false)

View File

@ -91,6 +91,7 @@ fun PagerScaffold(
reverse: Boolean = false, reverse: Boolean = false,
bottomSearchBar: Boolean = true, bottomSearchBar: Boolean = true,
reverseSearchResults: Boolean = true, reverseSearchResults: Boolean = true,
fixedSearchBar: Boolean = false,
) { ) {
val viewModel: LauncherScaffoldVM = viewModel() val viewModel: LauncherScaffoldVM = viewModel()
val searchVM: SearchVM = viewModel() val searchVM: SearchVM = viewModel()
@ -488,7 +489,7 @@ fun PagerScaffold(
.offset { .offset {
IntOffset( IntOffset(
0, 0,
if (focusSearchBar) 0 else searchBarOffset.value.toInt() * if (bottomSearchBar) 1 else -1 if (focusSearchBar || fixedSearchBar) 0 else searchBarOffset.value.toInt() * if (bottomSearchBar) 1 else -1
) )
} }
.offset(y = widgetEditModeOffset), .offset(y = widgetEditModeOffset),

View File

@ -88,6 +88,7 @@ fun PullDownScaffold(
darkNavBarIcons: Boolean = false, darkNavBarIcons: Boolean = false,
bottomSearchBar: Boolean = false, bottomSearchBar: Boolean = false,
reverseSearchResults: Boolean = false, reverseSearchResults: Boolean = false,
fixedSearchBar: Boolean = false,
) { ) {
val viewModel: LauncherScaffoldVM = viewModel() val viewModel: LauncherScaffoldVM = viewModel()
val searchVM: SearchVM = viewModel() val searchVM: SearchVM = viewModel()
@ -520,7 +521,7 @@ fun PullDownScaffold(
.offset { .offset {
IntOffset( IntOffset(
0, 0,
if (searchBarFocused) 0 else searchBarOffset.value.toInt() * (if (bottomSearchBar) 1 else -1) if (searchBarFocused || fixedSearchBar) 0 else searchBarOffset.value.toInt() * (if (bottomSearchBar) 1 else -1)
) )
} }
.offset { .offset {

View File

@ -125,6 +125,7 @@ abstract class SharedLauncherActivity(
val layout by viewModel.baseLayout.observeAsState(null) val layout by viewModel.baseLayout.observeAsState(null)
val bottomSearchBar by viewModel.bottomSearchBar.observeAsState(false) val bottomSearchBar by viewModel.bottomSearchBar.observeAsState(false)
val reverseSearchResults by viewModel.reverseSearchResults.observeAsState(false) val reverseSearchResults by viewModel.reverseSearchResults.observeAsState(false)
val fixedSearchBar by viewModel.fixedSearchBar.observeAsState(false)
val systemUiController = rememberSystemUiController() val systemUiController = rememberSystemUiController()
@ -182,6 +183,7 @@ abstract class SharedLauncherActivity(
darkNavBarIcons = lightNav, darkNavBarIcons = lightNav,
bottomSearchBar = bottomSearchBar, bottomSearchBar = bottomSearchBar,
reverseSearchResults = reverseSearchResults, reverseSearchResults = reverseSearchResults,
fixedSearchBar = fixedSearchBar,
) )
} }
} else { } else {
@ -202,6 +204,7 @@ abstract class SharedLauncherActivity(
darkNavBarIcons = lightNav, darkNavBarIcons = lightNav,
bottomSearchBar = bottomSearchBar, bottomSearchBar = bottomSearchBar,
reverseSearchResults = reverseSearchResults, reverseSearchResults = reverseSearchResults,
fixedSearchBar = fixedSearchBar,
) )
} }
} }
@ -222,6 +225,7 @@ abstract class SharedLauncherActivity(
reverse = layout == Settings.LayoutSettings.Layout.PagerReversed, reverse = layout == Settings.LayoutSettings.Layout.PagerReversed,
bottomSearchBar = bottomSearchBar, bottomSearchBar = bottomSearchBar,
reverseSearchResults = reverseSearchResults, reverseSearchResults = reverseSearchResults,
fixedSearchBar = fixedSearchBar,
) )
} }
} }

View File

@ -10,6 +10,7 @@ import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.preferences.ListPreference import de.mm20.launcher2.ui.component.preferences.ListPreference
import de.mm20.launcher2.ui.component.preferences.PreferenceCategory import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
@Composable @Composable
fun LayoutSettingsScreen() { fun LayoutSettingsScreen() {
@ -43,6 +44,15 @@ fun LayoutSettingsScreen() {
if (it != null) viewModel.setBottomSearchBar(it) if (it != null) viewModel.setBottomSearchBar(it)
}, },
) )
val fixedSearchBar by viewModel.fixedSearchBar.observeAsState()
SwitchPreference(
title = stringResource(R.string.preference_layout_fixed_search_bar),
summary = stringResource(R.string.preference_layout_fixed_search_bar_summary),
value = fixedSearchBar == true,
onValueChanged = {
viewModel.setFixedSearchBar(it)
},
)
val reverseSearchResults by viewModel.reverseSearchResults.observeAsState() val reverseSearchResults by viewModel.reverseSearchResults.observeAsState()
ListPreference(title = stringResource(R.string.preference_layout_search_results), ListPreference(title = stringResource(R.string.preference_layout_search_results),
items = listOf( items = listOf(

View File

@ -46,4 +46,15 @@ class LayoutSettingsScreenVM: ViewModel(), KoinComponent {
} }
} }
} }
val fixedSearchBar = dataStore.data.map { it.layout.fixedSearchBar }.asLiveData()
fun setFixedSearchBar(fixedSearchBar: Boolean) {
viewModelScope.launch {
dataStore.updateData {
it.toBuilder()
.setLayout(it.layout.toBuilder().setFixedSearchBar(fixedSearchBar))
.build()
}
}
}
} }

View File

@ -732,6 +732,8 @@
<string name="preference_layout_search_results">Arrangement of search results</string> <string name="preference_layout_search_results">Arrangement of search results</string>
<string name="search_results_order_top_down">Top-down</string> <string name="search_results_order_top_down">Top-down</string>
<string name="search_results_order_bottom_up">Bottom-up</string> <string name="search_results_order_bottom_up">Bottom-up</string>
<string name="preference_layout_fixed_search_bar">Fixed search bar</string>
<string name="preference_layout_fixed_search_bar_summary">Don\'t scroll the search bar out of view</string>
<string name="preference_screen_gestures">Gestures</string> <string name="preference_screen_gestures">Gestures</string>
<string name="preference_screen_gestures_summary">Gestures and gesture actions</string> <string name="preference_screen_gestures_summary">Gestures and gesture actions</string>
<string name="preference_gesture_swipe_down">Swipe down</string> <string name="preference_gesture_swipe_down">Swipe down</string>

View File

@ -297,6 +297,7 @@ message Settings {
Layout base_layout = 1; Layout base_layout = 1;
bool bottom_search_bar = 2; bool bottom_search_bar = 2;
bool reverse_search_results = 3; bool reverse_search_results = 3;
bool fixed_search_bar = 4;
} }
LayoutSettings layout = 27; LayoutSettings layout = 27;