diff --git a/app/src/main/java/chat/revolt/components/chat/MessageField.kt b/app/src/main/java/chat/revolt/components/chat/MessageField.kt index 6c1e4886..7377cb9f 100644 --- a/app/src/main/java/chat/revolt/components/chat/MessageField.kt +++ b/app/src/main/java/chat/revolt/components/chat/MessageField.kt @@ -61,8 +61,6 @@ fun MessageField( forceSendButton: Boolean = false, disabled: Boolean = false, editMode: Boolean = false, - denied: Boolean = false, - denyReason: String? = null, cancelEdit: () -> Unit = {}, onFocusChange: (Boolean) -> Unit = {}, ) { @@ -75,7 +73,7 @@ fun MessageField( ChannelType.SavedMessages -> R.string.message_field_placeholder_notes } - val sendButtonVisible = (messageContent.isNotBlank() || forceSendButton) && !disabled && !denied + val sendButtonVisible = (messageContent.isNotBlank() || forceSendButton) && !disabled Row( modifier = Modifier @@ -86,7 +84,7 @@ fun MessageField( value = messageContent, onValueChange = onMessageContentChange, singleLine = false, - enabled = !disabled && !denied, + enabled = !disabled, textStyle = LocalTextStyle.current.copy(color = MaterialTheme.colorScheme.onSurface), cursorBrush = SolidColor(MaterialTheme.colorScheme.primary), modifier = modifier @@ -106,13 +104,6 @@ fun MessageField( visualTransformation = VisualTransformation.None, interactionSource = remember { MutableInteractionSource() }, placeholder = { - if (denied) { - Text( - text = denyReason - ?: stringResource(R.string.message_field_denied_generic), - overflow = TextOverflow.Ellipsis, - ) - } else { Text( text = stringResource( id = placeholderResource, @@ -121,7 +112,6 @@ fun MessageField( maxLines = 1, overflow = TextOverflow.Ellipsis, ) - } }, colors = TextFieldDefaults.colors( focusedIndicatorColor = Color.Transparent, @@ -137,7 +127,6 @@ fun MessageField( ), contentPadding = PaddingValues(16.dp), leadingIcon = { - if (!denied) { Icon( when { editMode -> Icons.Default.Close @@ -160,7 +149,6 @@ fun MessageField( .padding(4.dp) .testTag("add_attachment") ) - } }, trailingIcon = { AnimatedVisibility(sendButtonVisible, diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt index 21c41de1..6385e0c5 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -447,45 +448,61 @@ fun ChannelScreen( ) } - MessageField( - messageContent = viewModel.pendingMessageContent, - onMessageContentChange = { - viewModel.pendingMessageContent = it - }, - onSendMessage = viewModel::sendPendingMessage, - onAddAttachment = { - val isTiramisu = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU + Crossfade( + viewModel.denyMessageField, + label = "denyMessageField switch" + ) { denyMessageField -> + if (denyMessageField) { + Text( + text = stringResource(id = viewModel.denyMessageFieldReasonResource), + modifier = Modifier + .padding(8.dp) + .fillMaxWidth(), + style = MaterialTheme.typography.labelLarge, + textAlign = TextAlign.Center + ) + } else { + MessageField( + messageContent = viewModel.pendingMessageContent, + onMessageContentChange = { + viewModel.pendingMessageContent = it + }, + onSendMessage = viewModel::sendPendingMessage, + onAddAttachment = { + val isTiramisu = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU - @FeatureFlag("TiramisuFilePicker") - when { - FeatureFlags.filePickerType == FilePickerFeatureFlagVariates.TiramisuMediaPermissions - && isTiramisu -> { - focusManager.clearFocus() - viewModel.inbuiltFilePickerOpen = !viewModel.inbuiltFilePickerOpen - } + @FeatureFlag("TiramisuFilePicker") + when { + FeatureFlags.filePickerType == FilePickerFeatureFlagVariates.TiramisuMediaPermissions + && isTiramisu -> { + focusManager.clearFocus() + viewModel.inbuiltFilePickerOpen = + !viewModel.inbuiltFilePickerOpen + } - FeatureFlags.filePickerType == FilePickerFeatureFlagVariates.DocumentsUI - || !isTiramisu -> { - pickFileLauncher.launch(arrayOf("*/*")) - } - } - }, - channelType = channel.channelType, - channelName = channel.name ?: ChannelUtils.resolveDMName(channel) ?: stringResource( - R.string.unknown - ), - forceSendButton = viewModel.pendingAttachments.isNotEmpty(), - disabled = viewModel.pendingAttachments.isNotEmpty() && viewModel.isSendingMessage, - denied = viewModel.denyMessageField, - denyReason = stringResource(id = viewModel.denyMessageFieldReasonResource), - editMode = viewModel.editingMessage != null, - cancelEdit = viewModel::cancelEditingMessage, - onFocusChange = { nowFocused -> - if (nowFocused && viewModel.inbuiltFilePickerOpen) { - viewModel.inbuiltFilePickerOpen = false - } - }, - ) + FeatureFlags.filePickerType == FilePickerFeatureFlagVariates.DocumentsUI + || !isTiramisu -> { + pickFileLauncher.launch(arrayOf("*/*")) + } + } + }, + channelType = channel.channelType, + channelName = channel.name ?: ChannelUtils.resolveDMName(channel) + ?: stringResource( + R.string.unknown + ), + forceSendButton = viewModel.pendingAttachments.isNotEmpty(), + disabled = viewModel.pendingAttachments.isNotEmpty() && viewModel.isSendingMessage, + editMode = viewModel.editingMessage != null, + cancelEdit = viewModel::cancelEditingMessage, + onFocusChange = { nowFocused -> + if (nowFocused && viewModel.inbuiltFilePickerOpen) { + viewModel.inbuiltFilePickerOpen = false + } + }, + ) + } + } AnimatedVisibility(visible = viewModel.inbuiltFilePickerOpen) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {