Релиз 1.2.9: fullscreen фото edge-to-edge без черных бордеров
Some checks failed
Android Kernel Build / build (push) Failing after 9m58s
Some checks failed
Android Kernel Build / build (push) Failing after 9m58s
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user