diff --git a/app/src/main/java/com/into/websoso/ui/splash/SplashActivity.kt b/app/src/main/java/com/into/websoso/ui/splash/SplashActivity.kt index c8b3091d5..9e31ec612 100644 --- a/app/src/main/java/com/into/websoso/ui/splash/SplashActivity.kt +++ b/app/src/main/java/com/into/websoso/ui/splash/SplashActivity.kt @@ -9,6 +9,7 @@ import com.into.websoso.databinding.ActivityLoginBinding import com.into.websoso.ui.login.LoginActivity import com.into.websoso.ui.main.MainActivity import com.into.websoso.ui.splash.dialog.MinimumVersionDialogFragment +import com.kakao.sdk.user.UserApiClient import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -21,27 +22,42 @@ class SplashActivity : BaseActivity(R.layout.activity_spla super.onCreate(savedInstanceState) setupObserver() - splashViewModel.autoLogin() } private fun setupObserver() { + splashViewModel.isUpdateRequired.observe(this) { isUpdateRequired -> + if (isUpdateRequired) { + showMinimumVersionDialog() + return@observe + } + splashViewModel.updateMyProfile() + } + + splashViewModel.error.observe(this) { isError -> + if (isError) { + UserApiClient.instance.logout { + startActivity(LoginActivity.getIntent(this)) + } + } + } + splashViewModel.isAutoLogin.observe(this) { isAutoLogin -> lifecycleScope.launch { delay(1000L) - splashViewModel.updateMinimumVersion { isUpdateRequired -> - if (isUpdateRequired) { - showMinimumVersionDialog() - } else { - when (isAutoLogin) { - true -> navigateToMainActivity() - false -> navigateToLoginActivity() - } - } + when (isAutoLogin) { + true -> navigateToMainActivity() + false -> navigateToLoginActivity() } } } } + private fun showMinimumVersionDialog() { + val dialog = MinimumVersionDialogFragment.newInstance() + dialog.isCancelable = false + dialog.show(supportFragmentManager, MINIMUM_VERSION_TAG) + } + private fun navigateToMainActivity() { startActivity(MainActivity.getIntent(this, true)) finish() @@ -52,12 +68,6 @@ class SplashActivity : BaseActivity(R.layout.activity_spla finish() } - private fun showMinimumVersionDialog() { - val dialog = MinimumVersionDialogFragment.newInstance() - dialog.isCancelable = false - dialog.show(supportFragmentManager, MINIMUM_VERSION_TAG) - } - companion object { private const val MINIMUM_VERSION_TAG = "MinimumVersionDialog" } diff --git a/app/src/main/java/com/into/websoso/ui/splash/SplashViewModel.kt b/app/src/main/java/com/into/websoso/ui/splash/SplashViewModel.kt index a6e062e51..6bfd69506 100644 --- a/app/src/main/java/com/into/websoso/ui/splash/SplashViewModel.kt +++ b/app/src/main/java/com/into/websoso/ui/splash/SplashViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.into.websoso.data.repository.AuthRepository +import com.into.websoso.data.repository.UserRepository import com.into.websoso.data.repository.VersionRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -14,12 +15,46 @@ import javax.inject.Inject class SplashViewModel @Inject constructor( private val authRepository: AuthRepository, private val versionRepository: VersionRepository, + private val userRepository: UserRepository, ) : ViewModel() { + private val _isUpdateRequired: MutableLiveData = MutableLiveData() + val isUpdateRequired: LiveData get() = _isUpdateRequired - private var _isAutoLogin = MutableLiveData(false) + private var _isAutoLogin: MutableLiveData = MutableLiveData() val isAutoLogin: LiveData get() = _isAutoLogin - fun autoLogin() { + private var _error: MutableLiveData = MutableLiveData(false) + val error: LiveData get() = _error + + init { + checkAndUpdateVersion() + } + + private fun checkAndUpdateVersion() { + viewModelScope.launch { + runCatching { + versionRepository.isUpdateRequired() + }.onSuccess { isRequired -> + _isUpdateRequired.value = isRequired + } + } + } + + // 토큰 만료 확인용 - 추후 로직 수정 필요 + fun updateMyProfile() { + viewModelScope.launch { + runCatching { + userRepository.fetchMyProfile() + }.onSuccess { + autoLogin() + }.onFailure { + authRepository.clearTokens() + _error.value = true + } + } + } + + private fun autoLogin() { viewModelScope.launch { if (authRepository.isAutoLogin) { runCatching { @@ -34,16 +69,4 @@ class SplashViewModel @Inject constructor( } } } - - fun updateMinimumVersion(onUpdateRequired: (Boolean) -> Unit) { - viewModelScope.launch { - runCatching { - versionRepository.isUpdateRequired() - }.onSuccess { isUpdateRequired -> - onUpdateRequired(isUpdateRequired) - }.onFailure { - onUpdateRequired(false) - } - } - } -} \ No newline at end of file +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b632106ca..596bd34d1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] # App Versioning -versionCode = "10008" -versionName = "1.0.8" +versionCode = "10011" +versionName = "1.0.9" # Gradle Plugin & Kotlin android-gradle-plugin = "8.1.3"