Релиз 1.2.9: fullscreen фото edge-to-edge без черных бордеров
Some checks failed
Android Kernel Build / build (push) Failing after 9m58s

This commit is contained in:
2026-03-22 02:21:03 +05:00
parent 7a188a2dbc
commit db55225d84
3 changed files with 6 additions and 23 deletions

View File

@@ -23,8 +23,8 @@ val gitShortSha = safeGitOutput("rev-parse", "--short", "HEAD") ?: "unknown"
// ═══════════════════════════════════════════════════════════
// Rosetta versioning — bump here on each release
// ═══════════════════════════════════════════════════════════
val rosettaVersionName = "1.2.8"
val rosettaVersionCode = 30 // Increment on each release
val rosettaVersionName = "1.2.9"
val rosettaVersionCode = 31 // Increment on each release
android {
namespace = "com.rosetta.messenger"

View File

@@ -17,20 +17,10 @@ object ReleaseNotes {
val RELEASE_NOTICE = """
Update v$VERSION_PLACEHOLDER
Emoji и совместимость iOS
- Входящие Unicode-эмодзи теперь стабильно рендерятся как наши Apple Emoji
- Поддержаны составные эмодзи (ZWJ), флаги, keycap и тон кожи
- Добавлена нормализация и fallback-резолв emoji asset кодов (fe0f/fe0e и вариации unified)
Стабильность
- Исправлен краш при вводе обычного текста/пароля в полях после обновления emoji-резолвера
Профиль и визуал
- Сделан чуть более тёмный blur-фон за аватаркой в экране чужого профиля для лучшей читаемости
Полноэкранный просмотр фото
- Добавлено kebab-меню в fullscreen фото с действием Save to Gallery
- Исправлено перекрытие системных чёрных зон: большие фото теперь корректно адаптируются во вьюпорте
- Убраны лишние искусственные отступы в fullscreen viewer
- Фото (включая большие скриншоты) снова открываются edge-to-edge, как в Telegram
- Исправлены большие чёрные бордеры вокруг изображения при открытии
""".trimIndent()
fun getNotice(version: String): String =

View File

@@ -339,14 +339,7 @@ fun ImageViewerScreen(
// Current image info
val currentImage = images.getOrNull(pagerState.currentPage)
val currentCaption = currentImage?.caption ?: ""
val dateFormat = remember { SimpleDateFormat("d MMMM, HH:mm", Locale.getDefault()) }
val statusBarsTopInset = WindowInsets.statusBars.asPaddingValues().calculateTopPadding()
val navigationBarBottomInset = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding()
// Reserve space for top controls + bottom area so large images never overlap black UI zones.
val imageViewportTopInset = statusBarsTopInset + 64.dp
val imageViewportBottomInset =
navigationBarBottomInset + if (currentCaption.isNotEmpty()) 84.dp else 16.dp
// Prefetch ближайших изображений, чтобы при свайпе не было спиннера.
LaunchedEffect(pagerState.currentPage, images, privateKey) {
@@ -389,7 +382,6 @@ fun ImageViewerScreen(
state = pagerState,
modifier = Modifier
.fillMaxSize()
.padding(top = imageViewportTopInset, bottom = imageViewportBottomInset)
.graphicsLayer {
alpha = dismissAlpha.value * edgeTapFadeAlpha.value
translationY = animatedOffsetY.value
@@ -641,6 +633,7 @@ fun ImageViewerScreen(
// ═══════════════════════════════════════════════════════════
// 📝 CAPTION BAR - Telegram-style снизу с анимацией
// ═══════════════════════════════════════════════════════════
val currentCaption = currentImage?.caption ?: ""
if (currentCaption.isNotEmpty()) {
AnimatedVisibility(
visible = showControls && animationState == 1 && !isClosing,