diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5b68197..81e9a6c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,8 +23,8 @@ val gitShortSha = safeGitOutput("rev-parse", "--short", "HEAD") ?: "unknown" // ═══════════════════════════════════════════════════════════ // Rosetta versioning — bump here on each release // ═══════════════════════════════════════════════════════════ -val rosettaVersionName = "1.5.0" -val rosettaVersionCode = 52 // Increment on each release +val rosettaVersionName = "1.5.1" +val rosettaVersionCode = 53 // Increment on each release val customWebRtcAar = file("libs/libwebrtc-custom.aar") android { diff --git a/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt b/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt index d9d663e..392ffda 100644 --- a/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt +++ b/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt @@ -17,12 +17,22 @@ object ReleaseNotes { val RELEASE_NOTICE = """ Update v$VERSION_PLACEHOLDER - - Исправлена расшифровка фото в группах (совместимость с Desktop v1.2.1) - - Исправлен статус доставки: галочки больше не откатываются на часики - - Исправлен просмотр фото из медиа-галереи профиля - - Зашифрованные ключи больше не отображаются как подпись к фото - - Анимация удаления сообщений (плавное сжатие + fade) - - Фильтрация пустых push-уведомлений + - Полностью переработан UX записи голосовых: удержание для записи, отправка по отпусканию, Slide to cancel + - Пересобрана панель записи ГС в Telegram-style с новым layout, волнами и анимациями + - Добавлена и доработана анимация удаления ГС (корзина), устранены рывки и визуальные артефакты + - Исправлены зависания/ANR при записи и отмене голосовых (race-condition, stuck-состояния, watchdog-сценарии) + - Исправлены скачки и наложения input-панели во время записи (включая Type message/overlay конфликты) + - Добавлены улучшения плеера голосовых: мини-плеер, интеграция в чат, корректная работа скоростей + - В чат-листе улучшено отображение и поведение активного воспроизведения голосовых + - Добавлена и отшлифована система выделения текста: handles, magnifier, toolbar (Copy/Select All), haptic + - Исправлены координаты и стабильность выделения текста в сложных сценариях + - Исправлена обработка reply в группах с Desktop (fallback на hex-ключ для reply blob) + - Оптимизированы тяжелые UI-сценарии: prewarm для circular reveal, ускорена анимация онбординга + - Улучшены миниатюры медиа через BlurHash и стабильность загрузки вложений + - Доработан экран звонков и related UI (включая пустой экран с Lottie-анимацией) + - Доработаны элементы профиля и сайдбара (включая обновления аккаунт-блока и действий) + - Добавлена смена иконки приложения (калькулятор, погода, заметки) через настройки + - Выполнен большой пакет фиксов по чатам/звонкам/коннекту и визуальному паритету с Telegram """.trimIndent() fun getNotice(version: String): String = diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt index de91f4c..7e6b998 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt @@ -1098,8 +1098,8 @@ fun ChatsListScreen( exit = shrinkVertically(animationSpec = tween(250)) + fadeOut(animationSpec = tween(200)) ) { Column(modifier = Modifier.fillMaxWidth()) { - // All accounts list (max 5 like Telegram sidebar behavior) - allAccounts.take(5).forEach { account -> + // All accounts list (limit to 3 in expanded sidebar) + allAccounts.take(3).forEach { account -> val isCurrentAccount = account.publicKey == effectiveCurrentPublicKey diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt index 3afdfb5..ef66da1 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/input/ChatDetailInput.kt @@ -2285,6 +2285,7 @@ fun MessageInputBar( } } androidx.compose.animation.AnimatedVisibility( + modifier = Modifier.graphicsLayer { clip = false }, visibleState = recordingPanelTransitionState, // Telegram-like smooth dissolve without any vertical resize. enter = fadeIn(tween(durationMillis = 170, easing = LinearOutSlowInEasing)), @@ -2300,9 +2301,11 @@ fun MessageInputBar( // Telegram-like proportions: large button that does not dominate the panel. val recordingActionVisualScale = 1.42f // 40dp -> ~57dp visual size val recordingActionInset = 34.dp - // Keep the scaled circle fully on-screen (no right-edge clipping). - val recordingActionOverflowX = 0.dp - val recordingActionOverflowY = 0.dp + // Keep scaled circle safely inside screen bounds (right/bottom). + val recordingActionVisualOverflow = + (recordingActionButtonBaseSize * (recordingActionVisualScale - 1f)) / 2f + val recordingActionOverflowX = -recordingActionVisualOverflow + 2.dp + val recordingActionOverflowY = -recordingActionVisualOverflow + 2.dp val voiceLevel = remember(voiceWaves) { voiceWaves.lastOrNull() ?: 0f } val cancelAnimProgress by animateFloatAsState( targetValue = if (isVoiceCancelAnimating || holdCancelVisualUntilHidden) 1f else 0f,