Close keyboard when textfields lose focus

This commit is contained in:
Florian Renaud 2023-05-12 00:24:03 +02:00
parent 52f2a32bf8
commit 4fa0329ccd

View file

@ -17,6 +17,7 @@
package io.element.android.features.createroom.impl.configureroom package io.element.android.features.createroom.impl.configureroom
import android.net.Uri import android.net.Uri
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
@ -33,6 +34,10 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@ -68,6 +73,7 @@ fun ConfigureRoomView(
onRoomCreated: (RoomId) -> Unit = {}, onRoomCreated: (RoomId) -> Unit = {},
) { ) {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
val focusManager = LocalFocusManager.current
val itemActionsBottomSheetState = rememberModalBottomSheetState( val itemActionsBottomSheetState = rememberModalBottomSheetState(
initialValue = ModalBottomSheetValue.Hidden, initialValue = ModalBottomSheetValue.Hidden,
) )
@ -79,18 +85,20 @@ fun ConfigureRoomView(
} }
fun onAvatarClicked() { fun onAvatarClicked() {
focusManager.clearFocus()
coroutineScope.launch { coroutineScope.launch {
itemActionsBottomSheetState.show() itemActionsBottomSheetState.show()
} }
} }
Scaffold( Scaffold(
modifier = modifier, modifier = modifier.clearFocusOnTap(focusManager),
topBar = { topBar = {
ConfigureRoomToolbar( ConfigureRoomToolbar(
isNextActionEnabled = state.isCreateButtonEnabled, isNextActionEnabled = state.isCreateButtonEnabled,
onBackPressed = onBackPressed, onBackPressed = onBackPressed,
onNextPressed = { onNextPressed = {
focusManager.clearFocus()
state.eventSink(ConfigureRoomEvents.CreateRoom(state.config)) state.eventSink(ConfigureRoomEvents.CreateRoom(state.config))
}, },
) )
@ -121,7 +129,10 @@ fun ConfigureRoomView(
SelectedUsersList( SelectedUsersList(
contentPadding = PaddingValues(horizontal = 24.dp), contentPadding = PaddingValues(horizontal = 24.dp),
selectedUsers = state.config.invites, selectedUsers = state.config.invites,
onUserRemoved = { state.eventSink(ConfigureRoomEvents.RemoveFromSelection(it)) }, onUserRemoved = {
focusManager.clearFocus()
state.eventSink(ConfigureRoomEvents.RemoveFromSelection(it))
},
) )
} }
} }
@ -129,7 +140,10 @@ fun ConfigureRoomView(
RoomPrivacyOptions( RoomPrivacyOptions(
modifier = Modifier.padding(bottom = 40.dp), modifier = Modifier.padding(bottom = 40.dp),
selected = state.config.privacy, selected = state.config.privacy,
onOptionSelected = { state.eventSink(ConfigureRoomEvents.RoomPrivacyChanged(it.privacy)) }, onOptionSelected = {
focusManager.clearFocus()
state.eventSink(ConfigureRoomEvents.RoomPrivacyChanged(it.privacy))
},
) )
} }
} }
@ -268,3 +282,11 @@ private fun ContentToPreview(state: ConfigureRoomState) {
state = state, state = state,
) )
} }
private fun Modifier.clearFocusOnTap(focusManager: FocusManager) = composed {
pointerInput(Unit) {
detectTapGestures(onTap = {
focusManager.clearFocus()
})
}
}