Skip to content

Commit

Permalink
[FEATURE] #87 : 스플래쉬 화면에서 자동 로그인 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
jeongjaino committed Jan 11, 2024
1 parent cdeca18 commit 766ea8f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.wap.wapp.feature.splash

import android.app.Activity
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
Expand All @@ -8,18 +9,29 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.hilt.navigation.compose.hiltViewModel
import com.wap.designsystem.WappTheme
import com.wap.wapp.core.commmon.extensions.showToast
import com.wap.wapp.core.commmon.extensions.toSupportingText

@Composable
internal fun SplashRoute(
viewModel: SplashViewModel = hiltViewModel(),
navigateToAuth: () -> Unit,
navigateToNotice: () -> Unit,
) {
val context = LocalContext.current as Activity

LaunchedEffect(true) {
viewModel.eventFlow.collect { event ->
viewModel.splashUiEvent.collect { event ->
when (event) {
is SplashViewModel.SplashEvent.TimerDone -> navigateToAuth()
is SplashViewModel.SplashEvent.SignInUser -> { navigateToNotice() }
is SplashViewModel.SplashEvent.NonSignInUser -> { navigateToAuth() }
is SplashViewModel.SplashEvent.Failure -> {
navigateToAuth()
context.showToast(event.throwable.toSupportingText())
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.wap.wapp.feature.splash

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wap.wapp.core.domain.usecase.auth.IsUserSignInUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableSharedFlow
Expand All @@ -10,20 +11,37 @@ import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class SplashViewModel @Inject constructor() : ViewModel() {
private val _eventFlow = MutableSharedFlow<SplashEvent>()
val eventFlow = _eventFlow.asSharedFlow()

fun event(event: SplashEvent) = viewModelScope.launch { _eventFlow.emit(event) }
class SplashViewModel @Inject constructor(
private val isUserSignInUseCase: IsUserSignInUseCase,
) : ViewModel() {
private val _splashUiEvent = MutableSharedFlow<SplashEvent>()
val splashUiEvent = _splashUiEvent.asSharedFlow()

init {
viewModelScope.launch {
delay(2000)
event(SplashEvent.TimerDone)
isUserSignIn()
}
}

private fun isUserSignIn() {
viewModelScope.launch {
isUserSignInUseCase()
.onSuccess { isSignIn ->
if (isSignIn) {
_splashUiEvent.emit(SplashEvent.SignInUser)
} else {
_splashUiEvent.emit(SplashEvent.NonSignInUser)
}
}.onFailure { throwable ->
_splashUiEvent.emit(SplashEvent.Failure(throwable))
}
}
}

sealed class SplashEvent {
object TimerDone : SplashEvent()
data object SignInUser : SplashEvent()
data object NonSignInUser : SplashEvent()
data class Failure(val throwable: Throwable) : SplashEvent()
}
}

0 comments on commit 766ea8f

Please sign in to comment.