diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/composables/TypeaheadTextField.kt b/app/src/main/java/me/zobrist/tichucounter/ui/composables/TypeaheadTextField.kt index 310d206..35e9902 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/composables/TypeaheadTextField.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/composables/TypeaheadTextField.kt @@ -31,15 +31,6 @@ fun TypeaheadTextField( var isFocused by remember { mutableStateOf(false) } val focusManager = LocalFocusManager.current - var filtered = items.filter { it.isNotEmpty() && it != value } - - if(value.isNotEmpty()) - { - filtered = filtered.filter { it.contains(value) } - } - - filtered = filtered.sorted().sortedBy { it.length }.take(5) - ExposedDropdownMenuBox( expanded = isFocused, modifier = modifier, @@ -79,13 +70,13 @@ fun TypeaheadTextField( colors = colors ) ExposedDropdownMenu( - expanded = isFocused && filtered.isNotEmpty(), + expanded = isFocused && items.isNotEmpty(), modifier = Modifier .width(with(LocalDensity.current){dropDownWidth.toDp()}), onDismissRequest = { } ) { - filtered.forEach { + items.forEach { DropdownMenuItem( onClick = { onValueChange(it) diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt index 8496b43..d838b89 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterView.kt @@ -35,7 +35,8 @@ fun Landscape(viewModel: ICounterViewModel) { TeamNamesView( viewModel.teamNameA, viewModel.teamNameB, - viewModel.distinctTeamNames, + viewModel.teamNameSuggestionsA, + viewModel.teamNameSuggestionsB, { viewModel.updateNameA(it) }, { viewModel.updateNameB(it) } ) @@ -65,7 +66,8 @@ fun Portrait(viewModel: ICounterViewModel) { TeamNamesView( viewModel.teamNameA, viewModel.teamNameB, - viewModel.distinctTeamNames, + viewModel.teamNameSuggestionsA, + viewModel.teamNameSuggestionsB, { viewModel.updateNameA(it) }, { viewModel.updateNameB(it) } ) @@ -113,7 +115,8 @@ internal class PreviewViewModel : ICounterViewModel { override var activeValue: String = currentScoreA override var inactiveValue: String = currentScoreB override var keyboardHidden: Boolean = false - override val distinctTeamNames: List = listOf("TeamA", "asdffd", "TeamB", "really really long Team Name that is way too long") + override val teamNameSuggestionsA: List = listOf("TeamA", "asdffd", "TeamB", "really really long Team Name that is way too long") + override val teamNameSuggestionsB: List = listOf("TeamA", "asdffd", "TeamB", "really really long Team Name that is way too long") override fun focusLastInput() { } diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt index fca9096..249c9b2 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/CounterViewModel.kt @@ -34,7 +34,6 @@ interface IKeyBoardViewModel { val activeValue: String val inactiveValue: String val keyboardHidden: Boolean - val distinctTeamNames: List fun focusLastInput() fun updateOtherScore() @@ -59,6 +58,8 @@ interface ICounterViewModel : IKeyBoardViewModel { val totalScoreB: Int val teamNameA: String val teamNameB: String + val teamNameSuggestionsA: List + val teamNameSuggestionsB: List fun updateNameA(value: String) fun updateNameB(value: String) @@ -109,7 +110,10 @@ class CounterViewModel @Inject constructor( override var keyboardHidden by mutableStateOf(false) private set - override var distinctTeamNames by mutableStateOf(listOf()) + override var teamNameSuggestionsA by mutableStateOf(listOf()) + private set + + override var teamNameSuggestionsB by mutableStateOf(listOf()) private set override var activeValue: String @@ -151,6 +155,8 @@ class CounterViewModel @Inject constructor( private var deleteJob: Job? = null + private var distinctTeamNames = listOf() + init { viewModelScope.launch { gameRepository.getActiveGameFlow().collect { @@ -164,6 +170,9 @@ class CounterViewModel @Inject constructor( teamNameA = it.game.nameA teamNameB = it.game.nameB + + buildTeamNameSuggestions() + } } } @@ -171,6 +180,8 @@ class CounterViewModel @Inject constructor( viewModelScope.launch { gameRepository.getDistinctTeamNames().collect() { distinctTeamNames = it + + buildTeamNameSuggestions() } } } @@ -339,4 +350,20 @@ class CounterViewModel @Inject constructor( } } } + + private fun buildTeamNameSuggestions(){ + teamNameSuggestionsA = buildTypeaheadList(distinctTeamNames, teamNameA) + teamNameSuggestionsB = buildTypeaheadList(distinctTeamNames, teamNameB) + } + + private fun buildTypeaheadList(rawList: List, currentInput: String ): List { + var filtered = rawList.filter { it.isNotEmpty() && it != currentInput } + + if(currentInput.isNotEmpty()) + { + filtered = filtered.filter { it.contains(currentInput) } + } + + return filtered.sorted().sortedBy { it.length }.take(10) + } } \ No newline at end of file diff --git a/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt b/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt index 58037ef..c8eae5b 100644 --- a/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt +++ b/app/src/main/java/me/zobrist/tichucounter/ui/counter/TeamNamesView.kt @@ -19,7 +19,8 @@ import me.zobrist.tichucounter.ui.composables.TypeaheadTextField fun TeamNamesView( nameA: String, nameB: String, - nameSuggestions: List, + nameSuggestionsA: List, + nameSuggestionsB: List, updateA: (String) -> Unit, updateB: (String) -> Unit ) { @@ -32,7 +33,7 @@ fun TeamNamesView( TypeaheadTextField( value = nameA, - items = nameSuggestions, + items = nameSuggestionsA, onValueChange = { updateA(it) }, modifier = Modifier.weight(1f), colors = color, @@ -41,7 +42,7 @@ fun TeamNamesView( TypeaheadTextField( value = nameB, - items = nameSuggestions, + items = nameSuggestionsB, onValueChange = { updateB(it) }, modifier = Modifier.weight(1f), colors = color, @@ -57,6 +58,6 @@ fun TeamNamesView( @Composable private fun TeamNamesViewPreview() { AppTheme { - TeamNamesView("TeamA", "TeamB", listOf("Test1", "Test3"), {}, {}) + TeamNamesView("TeamA", "TeamB", listOf("Test1", "Test3"), listOf("Test3", "Test5"), {}, {}) } }