From 7bf4d3aadf31ef7574cb08a658ab35eff152eddd Mon Sep 17 00:00:00 2001 From: Infi Date: Sun, 19 Mar 2023 01:43:54 +0100 Subject: [PATCH] feat: auto hide keyboard when drawer is opened --- .../revolt/screens/chat/ChatRouterScreen.kt | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt index 4b2172e0..ba3b11dd 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -4,26 +4,43 @@ import android.widget.Toast import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.Crossfade import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add -import androidx.compose.material3.* +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.ViewModel import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController -import androidx.navigation.compose.* +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.dialog +import androidx.navigation.compose.rememberNavController import chat.revolt.R import chat.revolt.api.RevoltAPI import chat.revolt.api.realtime.DisconnectionState @@ -32,6 +49,7 @@ import chat.revolt.components.chat.DisconnectedNotice import chat.revolt.components.generic.UserAvatar import chat.revolt.components.generic.presenceFromStatus import chat.revolt.components.screens.chat.DoubleDrawer +import chat.revolt.components.screens.chat.DoubleDrawerOpenState import chat.revolt.components.screens.chat.drawer.channel.ChannelList import chat.revolt.components.screens.chat.drawer.server.DrawerServer import chat.revolt.components.screens.chat.drawer.server.DrawerServerlikeIcon @@ -48,6 +66,7 @@ import com.google.accompanist.navigation.material.ExperimentalMaterialNavigation import com.google.accompanist.navigation.material.ModalBottomSheetLayout import com.google.accompanist.navigation.material.bottomSheet import com.google.accompanist.navigation.material.rememberBottomSheetNavigator +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch class ChatRouterViewModel : ViewModel() { @@ -80,16 +99,27 @@ class ChatRouterViewModel : ViewModel() { } } -@OptIn(ExperimentalMaterialNavigationApi::class) +@OptIn(ExperimentalMaterialNavigationApi::class, ExperimentalComposeUiApi::class) @Composable fun ChatRouterScreen(topNav: NavController, viewModel: ChatRouterViewModel = viewModel()) { val drawerState = rememberDoubleDrawerState() val scope = rememberCoroutineScope() val context = LocalContext.current + val keyboardController = LocalSoftwareKeyboardController.current val bottomSheetNavigator = rememberBottomSheetNavigator() val navController = rememberNavController(bottomSheetNavigator) + LaunchedEffect(drawerState) { + snapshotFlow { drawerState.currentValue } + .distinctUntilChanged() + .collect { state -> + if (state != DoubleDrawerOpenState.Center) { + keyboardController?.hide() + } + } + } + ModalBottomSheetLayout( sheetShape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), sheetBackgroundColor = MaterialTheme.colorScheme.surface,