From 8cc0cdfe9753821cecd8eb1bd892ab7c8d18c162 Mon Sep 17 00:00:00 2001 From: m6z1 Date: Fri, 24 Jan 2025 02:11:14 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20401=20=ED=86=A0=ED=81=B0=20=EB=A7=8C?= =?UTF-8?q?=EB=A3=8C=20=EC=97=90=EB=9F=AC=20=EC=8B=9C=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=EB=B7=B0=EB=A1=9C=20=EC=9D=B4=EB=8F=99=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../authenticator/WebsosoAuthenticator.kt | 2 +- .../websoso/data/repository/AuthRepository.kt | 2 + .../data/repository/VersionRepository.kt | 2 +- .../into/websoso/ui/splash/SplashActivity.kt | 42 +++++++++------ .../into/websoso/ui/splash/SplashViewModel.kt | 53 +++++++++++++------ 5 files changed, 68 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/into/websoso/data/authenticator/WebsosoAuthenticator.kt b/app/src/main/java/com/into/websoso/data/authenticator/WebsosoAuthenticator.kt index 18a9fddeb..c7754c0a8 100644 --- a/app/src/main/java/com/into/websoso/data/authenticator/WebsosoAuthenticator.kt +++ b/app/src/main/java/com/into/websoso/data/authenticator/WebsosoAuthenticator.kt @@ -1,9 +1,9 @@ package com.into.websoso.data.authenticator import android.content.Context -import com.kakao.sdk.user.UserApiClient import com.into.websoso.data.repository.AuthRepository import com.into.websoso.ui.login.LoginActivity +import com.kakao.sdk.user.UserApiClient import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.runBlocking import okhttp3.Authenticator diff --git a/app/src/main/java/com/into/websoso/data/repository/AuthRepository.kt b/app/src/main/java/com/into/websoso/data/repository/AuthRepository.kt index 5136aecbc..ff04457fe 100644 --- a/app/src/main/java/com/into/websoso/data/repository/AuthRepository.kt +++ b/app/src/main/java/com/into/websoso/data/repository/AuthRepository.kt @@ -91,11 +91,13 @@ class AuthRepository @Inject constructor( refreshToken = response.refreshToken response.authorization }.getOrElse { + it.printStackTrace() null } } + fun updateAccessToken(accessToken: String) { this.accessToken = accessToken } diff --git a/app/src/main/java/com/into/websoso/data/repository/VersionRepository.kt b/app/src/main/java/com/into/websoso/data/repository/VersionRepository.kt index 70e1ff9b3..525d7da5d 100644 --- a/app/src/main/java/com/into/websoso/data/repository/VersionRepository.kt +++ b/app/src/main/java/com/into/websoso/data/repository/VersionRepository.kt @@ -37,4 +37,4 @@ class VersionRepository @Inject constructor( companion object { private const val OS = "android" } -} \ No newline at end of file +} 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..ab95212b1 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 +}