@@ -5,13 +5,9 @@ import androidx.compose.animation.core.FastOutSlowInEasing
55import androidx.compose.animation.core.tween
66import androidx.compose.animation.fadeIn
77import androidx.compose.animation.fadeOut
8- import androidx.compose.foundation.background
9- import androidx.compose.foundation.layout.Arrangement
108import androidx.compose.foundation.layout.Box
119import androidx.compose.foundation.layout.Column
1210import androidx.compose.foundation.layout.fillMaxSize
13- import androidx.compose.material3.MaterialTheme
14- import androidx.compose.material3.Text
1511import androidx.compose.runtime.Composable
1612import androidx.compose.runtime.LaunchedEffect
1713import androidx.compose.runtime.collectAsState
@@ -23,31 +19,17 @@ import androidx.compose.runtime.setValue
2319import androidx.compose.runtime.snapshotFlow
2420import androidx.compose.ui.Alignment
2521import androidx.compose.ui.Modifier
26- import androidx.compose.ui.unit.sp
27- import androidx.hilt.navigation.compose.hiltViewModel
28- import androidx.lifecycle.ViewModel
29- import androidx.lifecycle.compose.collectAsStateWithLifecycle
30- import androidx.navigation.NavController
3122import androidx.navigation.compose.NavHost
3223import androidx.navigation.compose.composable
3324import androidx.navigation.compose.currentBackStackEntryAsState
3425import androidx.navigation.compose.navigation
3526import androidx.navigation.compose.rememberNavController
3627import androidx.navigation.navOptions
37- import com.lanpet.core.auth.AuthManager
3828import com.lanpet.core.auth.LocalAuthManager
3929import com.lanpet.core.common.widget.BottomNavItem
4030import com.lanpet.core.common.widget.LanPetBottomNavBar
41- import com.lanpet.core.designsystem.theme.VioletColor
42- import com.lanpet.core.designsystem.theme.WhiteColor
43- import com.lanpet.core.designsystem.theme.customTypography
44- import com.lanpet.domain.model.SocialAuthToken
45- import com.lanpet.domain.repository.AuthRepository
46- import com.lanpet.domain.repository.LandingRepository
47- import com.lanpet.feature.auth.navigation.Login
4831import com.lanpet.feature.auth.navigation.authNavGraph
4932import com.lanpet.feature.auth.navigation.navigateToLoginScreen
50- import com.lanpet.feature.landing.navigation.Landing
5133import com.lanpet.feature.landing.navigation.landingNavGraph
5234import com.lanpet.feature.myposts.navigation.myPostsNavGraph
5335import com.lanpet.feature.myposts.navigation.navigateToMyPosts
@@ -56,6 +38,8 @@ import com.lanpet.feature.settings.navigation.navigateToMemberLeave
5638import com.lanpet.feature.settings.navigation.navigateToMemberLeaveComplete
5739import com.lanpet.feature.settings.navigation.navigateToSettings
5840import com.lanpet.feature.settings.navigation.settingsNavGraph
41+ import com.lanpet.feature.splash.SplashScreen
42+ import com.lanpet.feature.splash.navigation.Splash
5943import com.lanpet.free.navigation.FreeBoard
6044import com.lanpet.free.navigation.freeNavGraph
6145import com.lanpet.free.navigation.navigateToFreeBoardBaseRoute
@@ -86,15 +70,9 @@ import com.lanpet.profile.navigation.profileNavGraph
8670import com.lanpet.wiki.navigation.Wiki
8771import com.lanpet.wiki.navigation.navigateToWikiBaseRoute
8872import com.lanpet.wiki.navigation.wikiNavGraph
89- import dagger.hilt.android.lifecycle.HiltViewModel
90- import kotlinx.coroutines.delay
91- import kotlinx.coroutines.flow.MutableStateFlow
9273import kotlinx.coroutines.flow.distinctUntilChanged
9374import kotlinx.coroutines.flow.drop
94- import kotlinx.coroutines.runBlocking
95- import kotlinx.serialization.Serializable
9675import timber.log.Timber
97- import javax.inject.Inject
9876
9977@Composable
10078fun AppNavigation (modifier : Modifier = Modifier ) {
@@ -348,83 +326,3 @@ fun AppNavigation(modifier: Modifier = Modifier) {
348326 }
349327 }
350328}
351-
352- @Serializable
353- data object Splash
354-
355- @Composable
356- fun SplashScreen (
357- navController : NavController ,
358- modifier : Modifier = Modifier ,
359- splashViewModel : SplashViewModel = hiltViewModel(),
360- ) {
361- val startDestination by splashViewModel.startDestination.collectAsStateWithLifecycle()
362-
363- LaunchedEffect (Unit ) {
364- if (startDestination != null ) {
365- startDestination?.let {
366- Timber .d(" startDestination: $it " )
367- navController.navigate(it)
368- }
369- }
370- }
371-
372- Column (
373- modifier =
374- modifier.then(Modifier ).fillMaxSize().background(
375- color = VioletColor .Violet500 ,
376- ),
377- horizontalAlignment = Alignment .CenterHorizontally ,
378- verticalArrangement = Arrangement .Center ,
379- ) {
380- Text (
381- " 랜펫" ,
382- style =
383- MaterialTheme .customTypography().title2SemiBoldMulti.copy(
384- color = WhiteColor .White ,
385- fontSize = 64 .sp,
386- ),
387- )
388- }
389- }
390-
391- @HiltViewModel
392- class SplashViewModel
393- @Inject
394- constructor (
395- private val landingRepository: LandingRepository ,
396- private val authRepository: AuthRepository ,
397- private val authManager: AuthManager ,
398- ) : ViewModel () {
399- val startDestination: MutableStateFlow <Any ?> = MutableStateFlow (null )
400-
401- init {
402- runBlocking {
403- delay(3_000L )
404-
405- if (landingRepository.getShouldShowLanding()) {
406- startDestination.value = Landing
407- return @runBlocking
408- }
409-
410- val token = authRepository.getAuthTokenFromDataStore()
411-
412- Timber .i(" token: $token " )
413-
414- if (token != null ) {
415- authManager.handleAuthentication(
416- SocialAuthToken (
417- socialAuthType = token.socialAuthType,
418- accessToken = token.accessToken,
419- refreshToken = token.refreshToken,
420- expiresIn = token.expiresIn,
421- expireDateTime = token.expireDateTime,
422- ),
423- )
424- return @runBlocking
425- }
426-
427- startDestination.value = Login
428- }
429- }
430- }
0 commit comments