refactor: move message field denial out of message field

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2023-09-17 01:08:03 +02:00
parent b1fc97714b
commit 92a21296fe
2 changed files with 56 additions and 51 deletions

View File

@ -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,

View File

@ -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) {