From 3bb4de24a7e3c5b90e336733a9aaaa6505a93efd Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 14 May 2026 17:51:48 +0300 Subject: [PATCH] refactor: harden main shell state --- .../main/kotlin/dev/meloda/fast/MainViewModel.kt | 6 ++++-- .../dev/meloda/fast/presentation/MainScreen.kt | 16 ++++++++++------ .../kotlin/dev/meloda/fast/data/UserConfig.kt | 2 ++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/dev/meloda/fast/MainViewModel.kt b/app/src/main/kotlin/dev/meloda/fast/MainViewModel.kt index 7c0a3cc4..52796b70 100644 --- a/app/src/main/kotlin/dev/meloda/fast/MainViewModel.kt +++ b/app/src/main/kotlin/dev/meloda/fast/MainViewModel.kt @@ -82,6 +82,10 @@ class MainViewModelImpl( private var openNotificationsSettings = false private var openAppSettings = false + init { + listenLongPollState() + } + override fun onError(error: BaseError) { when (error) { BaseError.SessionExpired, @@ -205,8 +209,6 @@ class MainViewModelImpl( Log.d("MainViewModel", "currentAccount: $currentAccount") - listenLongPollState() - if (currentAccount != null) { UserConfig.apply { this.userId = currentAccount.userId diff --git a/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt b/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt index 678e0d24..d2ba13ec 100644 --- a/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt +++ b/app/src/main/kotlin/dev/meloda/fast/presentation/MainScreen.kt @@ -45,6 +45,7 @@ import dev.meloda.fast.friends.navigation.friendsScreen import dev.meloda.fast.model.BaseError import dev.meloda.fast.model.BottomNavigationItem import dev.meloda.fast.navigation.MainGraph +import dev.meloda.fast.profile.navigation.Profile import dev.meloda.fast.profile.navigation.profileScreen import dev.meloda.fast.ui.theme.LocalBottomPadding import dev.meloda.fast.ui.theme.LocalHazeState @@ -69,15 +70,18 @@ fun MainScreen( val theme = LocalThemeConfig.current val hazeState = remember { HazeState(true) } val navController = rememberNavController() - - var selectedItemIndex by rememberSaveable { - mutableIntStateOf(1) + val defaultTabIndex = remember(navigationItems) { + navigationItems.indexOfFirst { it.route == ConvoGraph }.takeIf { it >= 0 } ?: 0 } - BackHandler(enabled = selectedItemIndex != 1) { + var selectedItemIndex by rememberSaveable { + mutableIntStateOf(defaultTabIndex) + } + + BackHandler(enabled = selectedItemIndex != defaultTabIndex) { val currentRoute = navigationItems[selectedItemIndex].route - selectedItemIndex = 1 + selectedItemIndex = defaultTabIndex navController.navigate(navigationItems[selectedItemIndex].route) { popUpTo(route = currentRoute) { inclusive = true @@ -127,7 +131,7 @@ fun MainScreen( } }, icon = { - if (index == navigationItems.size - 1) { + if (item.route == Profile) { var isLoading by remember { mutableStateOf(true) } diff --git a/core/data/src/main/kotlin/dev/meloda/fast/data/UserConfig.kt b/core/data/src/main/kotlin/dev/meloda/fast/data/UserConfig.kt index f8fbce7b..2ebc4f88 100644 --- a/core/data/src/main/kotlin/dev/meloda/fast/data/UserConfig.kt +++ b/core/data/src/main/kotlin/dev/meloda/fast/data/UserConfig.kt @@ -24,6 +24,8 @@ object UserConfig { accessToken = "" fastToken = "" userId = -1 + trustedHash = null + exchangeToken = null } fun isLoggedIn(): Boolean {