refactor: move message field denial out of message field
Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
parent
b1fc97714b
commit
92a21296fe
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue