commit 92cedcdf7289196c2d09c665e981d36431cf8a82
parent 6285e5d4535e12588f1ae27d228ed8a43687ce0c
Author: Harrison Oglesby <oglesby.harrison@gmail.com>
Date: Wed, 3 Dec 2025 23:57:39 +0000
Bug 2003636 - Scrolling search results dismisses keyboard in Settings Search r=android-reviewers,petru
Differential Revision: https://phabricator.services.mozilla.com/D274847
Diffstat:
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchScreen.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchScreen.kt
@@ -15,16 +15,20 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
+import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -125,9 +129,21 @@ private fun SearchResults(
modifier: Modifier = Modifier,
) {
val state by store.observeAsComposableState { it }
+ val focusManager = LocalFocusManager.current
+ val listState = rememberLazyListState()
+
+ LaunchedEffect(listState) {
+ snapshotFlow { listState.isScrollInProgress }
+ .collect { isScrolling ->
+ if (isScrolling) {
+ focusManager.clearFocus()
+ }
+ }
+ }
LazyColumn(
modifier = modifier,
+ state = listState,
) {
state.groupedResults.forEach { (header, items) ->
item {
@@ -168,6 +184,17 @@ private fun RecentSearchesContent(
modifier: Modifier = Modifier,
) {
val state by store.observeAsComposableState { it }
+ val focusManager = LocalFocusManager.current
+ val listState = rememberLazyListState()
+
+ LaunchedEffect(listState) {
+ snapshotFlow { listState.isScrollInProgress }
+ .collect { isScrolling ->
+ if (isScrolling) {
+ focusManager.clearFocus()
+ }
+ }
+ }
Column(
modifier = modifier,
@@ -201,7 +228,9 @@ private fun RecentSearchesContent(
)
}
}
- LazyColumn {
+ LazyColumn(
+ state = listState,
+ ) {
items(state.recentSearches.size) { index ->
val searchItem = state.recentSearches[index]