feat: Add delivery confirmation for incoming messages in ProtocolManager
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
package com.rosetta.messenger.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.airbnb.lottie.compose.*
|
||||
|
||||
/**
|
||||
* Компонент для отображения анимированных эмодзи Telegram в формате TGS
|
||||
*
|
||||
* TGS - это Lottie анимации (JSON), сжатые через gzip.
|
||||
* Библиотека Lottie автоматически распаковывает и проигрывает их.
|
||||
*
|
||||
* @param tgsFileName Имя файла из папки assets/emoji (например: "5431456783947234.tgs")
|
||||
* @param modifier Модификатор для кастомизации размера и других параметров
|
||||
* @param size Размер эмодзи (по умолчанию 32.dp)
|
||||
* @param iterations Количество повторений анимации (LottieConstants.IterateForever для бесконечного)
|
||||
* @param speed Скорость воспроизведения анимации (1.0f = нормальная скорость)
|
||||
*/
|
||||
@Composable
|
||||
fun TelegramAnimatedEmoji(
|
||||
tgsFileName: String,
|
||||
modifier: Modifier = Modifier,
|
||||
size: Dp = 32.dp,
|
||||
iterations: Int = LottieConstants.IterateForever,
|
||||
speed: Float = 1.0f
|
||||
) {
|
||||
// Путь к файлу в assets/emoji/
|
||||
val animationPath = "emoji/$tgsFileName"
|
||||
|
||||
// Загружаем анимацию из assets
|
||||
val composition by rememberLottieComposition(
|
||||
LottieCompositionSpec.Asset(animationPath)
|
||||
)
|
||||
|
||||
// Настраиваем воспроизведение
|
||||
val progress by animateLottieCompositionAsState(
|
||||
composition = composition,
|
||||
iterations = iterations,
|
||||
speed = speed,
|
||||
restartOnPlay = true
|
||||
)
|
||||
|
||||
// Отображаем Lottie анимацию
|
||||
LottieAnimation(
|
||||
composition = composition,
|
||||
progress = { progress },
|
||||
modifier = modifier.size(size)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Упрощенный вариант для быстрого использования с ID документа
|
||||
*
|
||||
* @param documentId ID документа из Telegram (например: 5431456783947234)
|
||||
*/
|
||||
@Composable
|
||||
fun TelegramAnimatedEmojiById(
|
||||
documentId: Long,
|
||||
modifier: Modifier = Modifier,
|
||||
size: Dp = 32.dp
|
||||
) {
|
||||
TelegramAnimatedEmoji(
|
||||
tgsFileName = "$documentId.tgs",
|
||||
modifier = modifier,
|
||||
size = size
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Вариант с возможностью остановки/запуска анимации
|
||||
*
|
||||
* @param isPlaying Управление воспроизведением анимации
|
||||
*/
|
||||
@Composable
|
||||
fun TelegramAnimatedEmojiPlayable(
|
||||
tgsFileName: String,
|
||||
isPlaying: Boolean = true,
|
||||
modifier: Modifier = Modifier,
|
||||
size: Dp = 32.dp,
|
||||
speed: Float = 1.0f
|
||||
) {
|
||||
val animationPath = "emoji/$tgsFileName"
|
||||
|
||||
val composition by rememberLottieComposition(
|
||||
LottieCompositionSpec.Asset(animationPath)
|
||||
)
|
||||
|
||||
val progress by animateLottieCompositionAsState(
|
||||
composition = composition,
|
||||
isPlaying = isPlaying,
|
||||
iterations = LottieConstants.IterateForever,
|
||||
speed = speed,
|
||||
restartOnPlay = true
|
||||
)
|
||||
|
||||
LottieAnimation(
|
||||
composition = composition,
|
||||
progress = { progress },
|
||||
modifier = modifier.size(size)
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user