Skip to content

Commit

Permalink
[TNT-176] feat: 세션 체크 결과에 따라 홈 화면, 로그인 화면 이동 결정 로직 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
hoyahozz committed Feb 1, 2025
1 parent abf0192 commit 5ab1392
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 5 deletions.
23 changes: 20 additions & 3 deletions feature/main/src/main/java/co/kr/tnt/main/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.compose.runtime.getValue
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import co.kr.tnt.designsystem.theme.TnTTheme
import co.kr.tnt.domain.monitor.SessionMonitor
import co.kr.tnt.main.ui.TnTApp
Expand All @@ -16,14 +20,27 @@ class MainActivity : ComponentActivity() {
@Inject
lateinit var sessionMonitor: SessionMonitor

private val viewModel: MainViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
val splashScreen = installSplashScreen()
super.onCreate(savedInstanceState)
enableEdgeToEdge()

splashScreen.setKeepOnScreenCondition { viewModel.uiState.value.showSplash }

setContent {
val appState = rememberTnTAppState(sessionMonitor = sessionMonitor)
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

if (uiState.showSplash.not()) {
val appState = rememberTnTAppState(
sessionMonitor = sessionMonitor,
startDestination = uiState.startDestination,
)

TnTTheme {
TnTApp(appState)
TnTTheme {
TnTApp(appState)
}
}
}
}
Expand Down
17 changes: 17 additions & 0 deletions feature/main/src/main/java/co/kr/tnt/main/MainContract.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package co.kr.tnt.main

import co.kr.tnt.navigation.Route
import co.kr.tnt.ui.base.UiEvent
import co.kr.tnt.ui.base.UiSideEffect
import co.kr.tnt.ui.base.UiState

internal class MainContract {
data class MainUiState(
val showSplash: Boolean = true,
val startDestination: Route = Route.Login,
) : UiState

data object MainUiEvent : UiEvent

data object MainSideEffect : UiSideEffect
}
38 changes: 38 additions & 0 deletions feature/main/src/main/java/co/kr/tnt/main/MainViewModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package co.kr.tnt.main

import androidx.lifecycle.viewModelScope
import co.kr.tnt.domain.repository.LoginRepository
import co.kr.tnt.main.MainContract.MainSideEffect
import co.kr.tnt.main.MainContract.MainUiEvent
import co.kr.tnt.main.MainContract.MainUiState
import co.kr.tnt.navigation.Route
import co.kr.tnt.ui.base.BaseViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
internal class MainViewModel @Inject constructor(
loginRepository: LoginRepository,
) :
BaseViewModel<MainUiState, MainUiEvent, MainSideEffect>(MainUiState()) {
init {
viewModelScope.launch {
val isNeedLogin = loginRepository.isNeedLogin()
val startDestination: Route = if (isNeedLogin) {
Route.Login
} else {
Route.HomeBase
}

updateState {
copy(
showSplash = false,
startDestination = startDestination,
)
}
}
}

override suspend fun handleEvent(event: MainUiEvent) = Unit
}
5 changes: 3 additions & 2 deletions feature/main/src/main/java/co/kr/tnt/main/ui/TnTAppState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ import co.kr.tnt.navigation.Route
fun rememberTnTAppState(
sessionMonitor: SessionMonitor,
navController: NavHostController = rememberNavController(),
startDestination: Route,
): TnTAppState {
return remember {
TnTAppState(
sessionMonitor,
navController,
startDestination,
)
}
}
Expand All @@ -28,10 +30,9 @@ fun rememberTnTAppState(
class TnTAppState(
val sessionMonitor: SessionMonitor,
val navController: NavHostController,
val startDestination: Route,
) {
private val currentDestination: NavDestination?
@Composable get() = navController
.currentBackStackEntryAsState().value?.destination

val startDestination = Route.TraineeMyPage
}

0 comments on commit 5ab1392

Please sign in to comment.