From 7166f3275c838f7855a7b94751dc6df46160f7db Mon Sep 17 00:00:00 2001 From: Hameed Habeeblahi Gbolahan Date: Mon, 25 May 2026 15:50:47 +0100 Subject: [PATCH] SA-308: add inline Search button to search bar --- .../soundscape/components/MainSearchBar.kt | 25 +++++++++++++------ app/src/main/res/values/strings.xml | 2 ++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/scottishtecharmy/soundscape/components/MainSearchBar.kt b/app/src/main/java/org/scottishtecharmy/soundscape/components/MainSearchBar.kt index 694a2ac75..c2d547694 100644 --- a/app/src/main/java/org/scottishtecharmy/soundscape/components/MainSearchBar.kt +++ b/app/src/main/java/org/scottishtecharmy/soundscape/components/MainSearchBar.kt @@ -20,6 +20,7 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment @@ -104,6 +105,15 @@ fun MainSearchBar( // Get keyboard controller inside Popup since it has its own window val keyboardController = LocalSoftwareKeyboardController.current + val triggerSearch = { + val trimmed = query.trim() + if (trimmed.isNotEmpty()) { + searchLocation.value = userLocation + keyboardController?.hide() + searchFunctions.onTriggerSearch(trimmed) + } + } + // Request focus on the text field when the search overlay opens LaunchedEffect(expanded) { if (expanded) { @@ -148,14 +158,7 @@ fun MainSearchBar( textStyle = textStyle, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions( - onSearch = { - val trimmed = query.trim() - if (trimmed.isNotEmpty()) { - searchLocation.value = userLocation - keyboardController?.hide() - searchFunctions.onTriggerSearch(trimmed) - } - } + onSearch = { triggerSearch() } ), modifier = Modifier .weight(1f) @@ -174,6 +177,12 @@ fun MainSearchBar( ) if (query.isNotEmpty()) { + TextButton(onClick = { triggerSearch() }) { + Text( + text = stringResource(R.string.search_button_label), + color = colors.primary + ) + } IconButton( onClick = { query = "" } ) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 744e9919f..5ed0c5740 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -38,6 +38,8 @@ "Metric (Meters)" "Search" + +"Search" "Type a destination name or address"