Чат, правки
This commit is contained in:
@@ -13,6 +13,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import ru.knot.messager.R
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
@@ -46,7 +48,8 @@ fun MessageBubble(
|
||||
onReactionClick: (String) -> Unit = {},
|
||||
autoPlay: Boolean = false,
|
||||
initialPlaybackSpeed: Float = 1.0f,
|
||||
onVoiceFinished: (Float) -> Unit = {}
|
||||
onVoiceFinished: (Float) -> Unit = {},
|
||||
onMediaClick: (chats.domain.model.Media) -> Unit = {}
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
var showReactionPicker by remember { mutableStateOf(false) }
|
||||
@@ -145,34 +148,40 @@ fun MessageBubble(
|
||||
if (mediaCount == 1) {
|
||||
val mediaItem = message.media[0]
|
||||
when {
|
||||
mediaItem.type.startsWith("image") || message.mediaType == MediaType.IMAGE -> {
|
||||
mediaItem.type.startsWith("image") || message.mediaType == MediaType.IMAGE || mediaItem.type.startsWith("image") -> {
|
||||
AsyncImage(
|
||||
model = mediaItem.url,
|
||||
imageLoader = core.utils.CoilUtils.getGifImageLoader(context),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(12.dp))
|
||||
.clickable { lightboxMediaIndex = 0 },
|
||||
contentScale = ContentScale.FillWidth
|
||||
.heightIn(max = 300.dp)
|
||||
.clip(RoundedCornerShape(8.dp))
|
||||
.clickable { onMediaClick(mediaItem) },
|
||||
contentScale = ContentScale.Crop
|
||||
)
|
||||
}
|
||||
mediaItem.type.startsWith("video") || message.mediaType == MediaType.VIDEO -> {
|
||||
message.mediaType == MediaType.VIDEO || mediaItem.type.startsWith("video") -> {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.height(200.dp)
|
||||
.clip(RoundedCornerShape(12.dp))
|
||||
.background(Color.Black)
|
||||
.clickable { lightboxMediaIndex = 0 },
|
||||
contentAlignment = Alignment.Center
|
||||
.height(240.dp)
|
||||
.clip(RoundedCornerShape(8.dp))
|
||||
) {
|
||||
AppVideoPlayer(
|
||||
url = mediaItem.url,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
useController = false,
|
||||
autoPlay = true,
|
||||
isMuted = true
|
||||
isMuted = true,
|
||||
autoPlay = true
|
||||
)
|
||||
// Прозрачный слой поверх видео для клика
|
||||
Box(modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(Color.Transparent)
|
||||
.clickable { onMediaClick(mediaItem) }
|
||||
)
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Default.VolumeOff,
|
||||
contentDescription = null,
|
||||
@@ -181,7 +190,7 @@ fun MessageBubble(
|
||||
)
|
||||
}
|
||||
}
|
||||
mediaItem.type.startsWith("audio") || mediaItem.filename?.endsWith(".mp3", true) == true || message.mediaType == MediaType.AUDIO -> {
|
||||
mediaItem.type.startsWith("audio") || mediaItem.filename?.endsWith(".mp2", true) == true || mediaItem.filename?.endsWith(".mp3", true) == true || message.mediaType == MediaType.AUDIO -> {
|
||||
AppAudioPlayer(
|
||||
url = mediaItem.url,
|
||||
name = mediaItem.filename,
|
||||
@@ -201,7 +210,7 @@ fun MessageBubble(
|
||||
// Multi-media grid
|
||||
PhotoGrid(
|
||||
message.media,
|
||||
onMediaClick = { index -> lightboxMediaIndex = index },
|
||||
onMediaClick = { index -> onMediaClick(message.media[index]) },
|
||||
modifier = Modifier.fillMaxWidth().height(300.dp).clip(RoundedCornerShape(12.dp))
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user