From ea53d3cb1dfcdef5e341de07a4ffe3f37ffb2113 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Mon, 24 Oct 2022 14:15:20 +0200 Subject: [PATCH] Add modifier parameter to composables For context, see: https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/docs/compose-api-guidelines.md#elements-accept-and-respect-a-modifier-parameter > Element functions MUST accept a parameter of type Modifier. > This parameter MUST be named modifier and MUST appear as the > first optional parameter in the element function's parameter list --- .../java/dev/lonami/talaria/TalariaApp.kt | 8 +- .../lonami/talaria/ui/screens/ChatScreen.kt | 21 ++-- .../lonami/talaria/ui/screens/DialogScreen.kt | 17 ++- .../lonami/talaria/ui/screens/LoginScreen.kt | 106 ++++++++++-------- 4 files changed, 89 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/dev/lonami/talaria/TalariaApp.kt b/app/src/main/java/dev/lonami/talaria/TalariaApp.kt index b55168c..9fb0776 100644 --- a/app/src/main/java/dev/lonami/talaria/TalariaApp.kt +++ b/app/src/main/java/dev/lonami/talaria/TalariaApp.kt @@ -60,7 +60,7 @@ fun DrawerAction( } @Composable -fun Drawer(modifier: Modifier = Modifier, onSelect: (DrawerAction) -> Unit) { +fun Drawer(onSelect: (DrawerAction) -> Unit, modifier: Modifier = Modifier) { Column( modifier = modifier .fillMaxSize() @@ -115,7 +115,8 @@ fun TalariaAppBar( currentScreen: TalariaScreen, canNavigateBack: Boolean, navigateUp: () -> Unit, - openDrawer: () -> Unit + openDrawer: () -> Unit, + modifier: Modifier = Modifier, ) { TopAppBar( title = { Text(stringResource(currentScreen.title)) }, @@ -140,7 +141,7 @@ fun TalariaAppBar( } @Composable -fun TalariaApp() { +fun TalariaApp(modifier: Modifier = Modifier) { val navController = rememberNavController() val backStackEntry by navController.currentBackStackEntryAsState() val currentScreen = @@ -162,6 +163,7 @@ fun TalariaApp() { } Scaffold( + modifier = modifier, topBar = { TalariaAppBar( currentScreen, diff --git a/app/src/main/java/dev/lonami/talaria/ui/screens/ChatScreen.kt b/app/src/main/java/dev/lonami/talaria/ui/screens/ChatScreen.kt index d7ef413..4583348 100644 --- a/app/src/main/java/dev/lonami/talaria/ui/screens/ChatScreen.kt +++ b/app/src/main/java/dev/lonami/talaria/ui/screens/ChatScreen.kt @@ -25,10 +25,10 @@ import dev.lonami.talaria.ui.theme.TalariaTheme import kotlinx.coroutines.launch @Composable -fun MessageCard(message: Message) { +fun MessageCard(message: Message, modifier: Modifier = Modifier) { Card( elevation = 4.dp, - modifier = Modifier + modifier = modifier .fillMaxWidth() .padding(8.dp) ) { @@ -44,8 +44,8 @@ fun MessageCard(message: Message) { } @Composable -fun MessageList(messages: List, modifier: Modifier, listState: LazyListState) { - LazyColumn(modifier, state = listState) { +fun MessageList(messages: List, listState: LazyListState, modifier: Modifier = Modifier) { + LazyColumn(modifier = modifier, state = listState) { items(messages.size) { MessageCard(messages[it]) } } } @@ -54,9 +54,10 @@ fun MessageList(messages: List, modifier: Modifier, listState: LazyList fun MessageInputField( messageText: String, onMessageChanged: (String) -> Unit, - onSendMessage: () -> Unit + onSendMessage: () -> Unit, + modifier: Modifier = Modifier, ) { - Row { + Row(modifier = modifier) { TextField( messageText, placeholder = { Text(stringResource(R.string.write_message)) }, @@ -78,13 +79,17 @@ fun MessageInputField( } @Composable -fun ChatScreen(selectedDialog: String, chatViewModel: ChatViewModel = viewModel()) { +fun ChatScreen( + selectedDialog: String, + modifier: Modifier = Modifier, + chatViewModel: ChatViewModel = viewModel(), +) { val chatUiState by chatViewModel.uiState.collectAsState() var messageText by remember { mutableStateOf("") } val messageListState = rememberLazyListState() val coroutineScope = rememberCoroutineScope() - Column(modifier = Modifier.fillMaxSize()) { + Column(modifier = modifier.fillMaxSize()) { MessageList( chatUiState.messages, modifier = Modifier.weight(1.0f), diff --git a/app/src/main/java/dev/lonami/talaria/ui/screens/DialogScreen.kt b/app/src/main/java/dev/lonami/talaria/ui/screens/DialogScreen.kt index ac60e14..4524ab7 100644 --- a/app/src/main/java/dev/lonami/talaria/ui/screens/DialogScreen.kt +++ b/app/src/main/java/dev/lonami/talaria/ui/screens/DialogScreen.kt @@ -31,9 +31,9 @@ import java.time.format.DateTimeFormatter import java.time.format.FormatStyle @Composable -fun Dialog(dialog: Dialog, onDialogSelected: () -> Unit) { +fun Dialog(dialog: Dialog, onDialogSelected: () -> Unit, modifier: Modifier = Modifier) { Row( - modifier = Modifier + modifier = modifier .padding(4.dp) .clickable(onClick = onDialogSelected) ) { @@ -98,8 +98,12 @@ fun Dialog(dialog: Dialog, onDialogSelected: () -> Unit) { } @Composable -fun DialogList(dialogs: List, onDialogSelected: (String) -> Unit) { - LazyColumn { +fun DialogList( + dialogs: List, + onDialogSelected: (String) -> Unit, + modifier: Modifier = Modifier, +) { + LazyColumn(modifier = modifier) { items(dialogs.size) { Dialog(dialogs[it], onDialogSelected = { onDialogSelected(dialogs[it].id) @@ -112,10 +116,11 @@ fun DialogList(dialogs: List, onDialogSelected: (String) -> Unit) { @Composable fun DialogScreen( onDialogSelected: (String) -> Unit, - dialogViewModel: DialogViewModel = viewModel() + modifier: Modifier = Modifier, + dialogViewModel: DialogViewModel = viewModel(), ) { val dialogUiState by dialogViewModel.uiState.collectAsState() - Surface { + Surface(modifier = modifier) { DialogList(dialogUiState.dialogs, onDialogSelected = onDialogSelected) } } diff --git a/app/src/main/java/dev/lonami/talaria/ui/screens/LoginScreen.kt b/app/src/main/java/dev/lonami/talaria/ui/screens/LoginScreen.kt index 1890ab1..f401f0e 100644 --- a/app/src/main/java/dev/lonami/talaria/ui/screens/LoginScreen.kt +++ b/app/src/main/java/dev/lonami/talaria/ui/screens/LoginScreen.kt @@ -30,63 +30,77 @@ fun isPhoneValid(phone: String): Boolean = phone.trim('+', ' ').isNotEmpty() fun isLoginCodeValid(code: String): Boolean = code.trim().count { it.isDigit() } == 5 @Composable -fun PhoneInput(phone: String, onPhoneChanged: (String) -> Unit, onSendCode: () -> Unit) { +fun PhoneInput( + phone: String, + onPhoneChanged: (String) -> Unit, + onSendCode: () -> Unit, + modifier: Modifier = Modifier, +) { val focusManager = LocalFocusManager.current - Text(stringResource(R.string.enter_phone)) - TextField( - phone, - label = { Text(stringResource(R.string.phone_international)) }, - placeholder = { Text(stringResource(R.string.phone_example)) }, - singleLine = true, - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Phone, - imeAction = ImeAction.Done - ), - keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }), - modifier = Modifier.fillMaxWidth(), - onValueChange = onPhoneChanged - ) - Spacer(Modifier.height(16.dp)) - Button( - enabled = isPhoneValid(phone), - modifier = Modifier.fillMaxWidth(), - onClick = onSendCode - ) { - Text(stringResource(R.string.send_otp)) + Column(modifier = modifier) { + Text(stringResource(R.string.enter_phone)) + TextField( + phone, + label = { Text(stringResource(R.string.phone_international)) }, + placeholder = { Text(stringResource(R.string.phone_example)) }, + singleLine = true, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Phone, + imeAction = ImeAction.Done + ), + keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }), + modifier = Modifier.fillMaxWidth(), + onValueChange = onPhoneChanged + ) + Spacer(Modifier.height(16.dp)) + Button( + enabled = isPhoneValid(phone), + modifier = Modifier.fillMaxWidth(), + onClick = onSendCode + ) { + Text(stringResource(R.string.send_otp)) + } } } @Composable -fun OtpInput(otp: String, onOtpChanged: (String) -> Unit, onConfirmOtp: () -> Unit) { +fun OtpInput( + otp: String, + onOtpChanged: (String) -> Unit, + onConfirmOtp: () -> Unit, + modifier: Modifier = Modifier, +) { val focusManager = LocalFocusManager.current - Text(stringResource(R.string.enter_otp)) - TextField( - otp, - label = { Text(stringResource(R.string.otp)) }, - placeholder = { Text(stringResource(R.string.otp_example)) }, - singleLine = true, - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Number, - imeAction = ImeAction.Done - ), - keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }), - modifier = Modifier.fillMaxWidth(), - onValueChange = onOtpChanged - ) - Spacer(Modifier.height(16.dp)) - Button( - enabled = isLoginCodeValid(otp), - modifier = Modifier.fillMaxWidth(), - onClick = onConfirmOtp - ) { - Text(stringResource(R.string.do_login)) + Column(modifier = modifier) { + Text(stringResource(R.string.enter_otp)) + TextField( + otp, + label = { Text(stringResource(R.string.otp)) }, + placeholder = { Text(stringResource(R.string.otp_example)) }, + singleLine = true, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Number, + imeAction = ImeAction.Done + ), + keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }), + modifier = Modifier.fillMaxWidth(), + onValueChange = onOtpChanged + ) + Spacer(Modifier.height(16.dp)) + Button( + enabled = isLoginCodeValid(otp), + modifier = Modifier.fillMaxWidth(), + onClick = onConfirmOtp + ) { + Text(stringResource(R.string.do_login)) + } } } @Composable -fun LoginScreen(onConfirmOtp: () -> Unit) { +fun LoginScreen(onConfirmOtp: () -> Unit, modifier: Modifier = Modifier) { var stage by remember { mutableStateOf(LoginStage.ASK_PHONE) } var phone by remember { mutableStateOf("") } var otp by remember { mutableStateOf("") } @@ -94,7 +108,7 @@ fun LoginScreen(onConfirmOtp: () -> Unit) { var tokenPtr by remember { mutableStateOf(0L) } Column( - modifier = Modifier + modifier = modifier .fillMaxSize() .padding(16.dp), verticalArrangement = Arrangement.Center