refactor: Clean up OnboardingScreen code for improved readability and maintainability
This commit is contained in:
@@ -39,6 +39,7 @@ import com.rosetta.messenger.ui.chats.ChatsListScreen
|
||||
import com.rosetta.messenger.ui.chats.SearchScreen
|
||||
import com.rosetta.messenger.ui.components.OptimizedEmojiCache
|
||||
import com.rosetta.messenger.ui.onboarding.OnboardingScreen
|
||||
import com.rosetta.messenger.ui.settings.SettingsScreen
|
||||
import com.rosetta.messenger.ui.splash.SplashScreen
|
||||
import com.rosetta.messenger.ui.theme.RosettaAndroidTheme
|
||||
import java.text.SimpleDateFormat
|
||||
@@ -437,15 +438,18 @@ fun MainScreen(
|
||||
// Навигация между экранами
|
||||
var selectedUser by remember { mutableStateOf<SearchUser?>(null) }
|
||||
var showSearchScreen by remember { mutableStateOf(false) }
|
||||
var showSettingsScreen by remember { mutableStateOf(false) }
|
||||
|
||||
// 🔥 TELEGRAM-STYLE анимация - чистый slide БЕЗ прозрачности
|
||||
AnimatedContent(
|
||||
targetState = Triple(selectedUser, showSearchScreen, Unit),
|
||||
targetState = Triple(selectedUser, showSearchScreen, showSettingsScreen),
|
||||
transitionSpec = {
|
||||
val isEnteringChat = targetState.first != null && initialState.first == null
|
||||
val isExitingChat = targetState.first == null && initialState.first != null
|
||||
val isEnteringSearch = targetState.second && !initialState.second
|
||||
val isExitingSearch = !targetState.second && initialState.second
|
||||
val isEnteringSettings = targetState.third && !initialState.third
|
||||
val isExitingSettings = !targetState.third && initialState.third
|
||||
|
||||
when {
|
||||
// 🚀 Вход в чат - плавный fade
|
||||
@@ -478,6 +482,18 @@ fun MainScreen(
|
||||
fadeOut(animationSpec = tween(150))
|
||||
}
|
||||
|
||||
// ⚙️ Вход в Settings - плавный fade
|
||||
isEnteringSettings -> {
|
||||
fadeIn(animationSpec = tween(200)) togetherWith
|
||||
fadeOut(animationSpec = tween(150))
|
||||
}
|
||||
|
||||
// 🔙 Выход из Settings - плавный fade
|
||||
isExitingSettings -> {
|
||||
fadeIn(animationSpec = tween(200)) togetherWith
|
||||
fadeOut(animationSpec = tween(150))
|
||||
}
|
||||
|
||||
// Default - мгновенный переход
|
||||
else -> {
|
||||
EnterTransition.None togetherWith ExitTransition.None
|
||||
@@ -485,7 +501,7 @@ fun MainScreen(
|
||||
}
|
||||
},
|
||||
label = "screenNavigation"
|
||||
) { (currentUser, isSearchOpen, _) ->
|
||||
) { (currentUser, isSearchOpen, isSettingsOpen) ->
|
||||
when {
|
||||
currentUser != null -> {
|
||||
// Экран чата
|
||||
@@ -525,6 +541,41 @@ fun MainScreen(
|
||||
}
|
||||
)
|
||||
}
|
||||
isSettingsOpen -> {
|
||||
// Экран настроек
|
||||
SettingsScreen(
|
||||
isDarkTheme = isDarkTheme,
|
||||
accountName = accountName,
|
||||
accountPhone = accountPhone,
|
||||
accountPublicKey = accountPublicKey,
|
||||
onBack = { showSettingsScreen = false },
|
||||
onToggleTheme = onToggleTheme,
|
||||
onProfileClick = {
|
||||
// TODO: Navigate to profile editor
|
||||
},
|
||||
onPrivacySecurityClick = {
|
||||
// TODO: Navigate to privacy settings
|
||||
},
|
||||
onNotificationsClick = {
|
||||
// TODO: Navigate to notifications settings
|
||||
},
|
||||
onDataStorageClick = {
|
||||
// TODO: Navigate to data storage settings
|
||||
},
|
||||
onChatSettingsClick = {
|
||||
// TODO: Navigate to chat settings
|
||||
},
|
||||
onLanguageClick = {
|
||||
// TODO: Navigate to language selection
|
||||
},
|
||||
onHelpClick = {
|
||||
// TODO: Navigate to help center
|
||||
},
|
||||
onAboutClick = {
|
||||
// TODO: Show about dialog
|
||||
}
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
// Список чатов
|
||||
ChatsListScreen(
|
||||
@@ -558,9 +609,7 @@ fun MainScreen(
|
||||
online = 1
|
||||
)
|
||||
},
|
||||
onSettingsClick = {
|
||||
// TODO: Navigate to settings
|
||||
},
|
||||
onSettingsClick = { showSettingsScreen = true },
|
||||
onInviteFriendsClick = {
|
||||
// TODO: Share invite link
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user