feat: Optimize search animations and improve content rendering in SearchScreen; update Saved Messages icon handling in DialogItemContent

This commit is contained in:
k1ngsterr1
2026-01-18 13:12:43 +05:00
parent 5833237c3a
commit 89e5f3cfa2
15 changed files with 231 additions and 159 deletions

View File

@@ -171,8 +171,8 @@ class MainActivity : ComponentActivity() {
else -> "main"
},
transitionSpec = {
fadeIn(animationSpec = tween(600)) togetherWith
fadeOut(animationSpec = tween(600))
fadeIn(animationSpec = tween(300)) togetherWith
fadeOut(animationSpec = tween(200))
},
label = "screenTransition"
) { screen ->
@@ -375,20 +375,20 @@ fun MainScreen(
val isExitingSearch = !targetState.second && initialState.second
when {
// 🚀 Вход в чат - чистый slide справа (как Telegram/iOS)
// 🚀 Вход в чат - быстрый slide справа (как Telegram/iOS)
// Новый экран полностью покрывает старый, никакой прозрачности
isEnteringChat -> {
slideInHorizontally(
initialOffsetX = { fullWidth -> fullWidth }, // Начинаем за экраном справа
initialOffsetX = { fullWidth -> fullWidth },
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMediumLow // Плавно но быстро
stiffness = Spring.StiffnessHigh // 🔥 Быстрее для плавности
)
) togetherWith slideOutHorizontally(
targetOffsetX = { fullWidth -> -fullWidth / 4 }, // Старый экран уходит влево на 25%
targetOffsetX = { fullWidth -> -fullWidth / 5 }, // Меньше смещение
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMediumLow
stiffness = Spring.StiffnessHigh
)
)
}
@@ -396,33 +396,33 @@ fun MainScreen(
// 🔙 Выход из чата - обратный slide
isExitingChat -> {
slideInHorizontally(
initialOffsetX = { fullWidth -> -fullWidth / 4 }, // Список возвращается слева
initialOffsetX = { fullWidth -> -fullWidth / 5 },
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMedium // Чуть быстрее при выходе
stiffness = Spring.StiffnessHigh
)
) togetherWith slideOutHorizontally(
targetOffsetX = { fullWidth -> fullWidth }, // Чат уходит за экран вправо
targetOffsetX = { fullWidth -> fullWidth },
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMedium
stiffness = Spring.StiffnessHigh
)
)
}
// 🔍 Вход в поиск - slide справа (как чаты)
// 🔍 Вход в поиск - быстрый slide справа
isEnteringSearch -> {
slideInHorizontally(
initialOffsetX = { fullWidth -> fullWidth }, // Начинаем за экраном справа
initialOffsetX = { fullWidth -> fullWidth },
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMediumLow
stiffness = Spring.StiffnessHigh // 🔥 Быстрее для плавности
)
) togetherWith slideOutHorizontally(
targetOffsetX = { fullWidth -> -fullWidth / 4 }, // Список уходит влево на 25%
targetOffsetX = { fullWidth -> -fullWidth / 5 }, // Меньше смещение
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMediumLow
stiffness = Spring.StiffnessHigh
)
)
}
@@ -430,16 +430,16 @@ fun MainScreen(
// ❌ Выход из поиска - обратный slide
isExitingSearch -> {
slideInHorizontally(
initialOffsetX = { fullWidth -> -fullWidth / 4 }, // Список возвращается слева
initialOffsetX = { fullWidth -> -fullWidth / 5 },
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMedium
stiffness = Spring.StiffnessHigh
)
) togetherWith slideOutHorizontally(
targetOffsetX = { fullWidth -> fullWidth }, // Поиск уходит за экран вправо
targetOffsetX = { fullWidth -> fullWidth },
animationSpec = spring(
dampingRatio = Spring.DampingRatioNoBouncy,
stiffness = Spring.StiffnessMedium
stiffness = Spring.StiffnessHigh
)
)
}