From 450b6cb708ecb103c7b9c25bd631b5c33004d8c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=88=E1=85=A1=E1=86=BC=E1=84=8C?= =?UTF-8?q?=E1=85=AE?= Date: Sat, 4 Mar 2023 13:00:00 +0900 Subject: [PATCH 1/4] =?UTF-8?q?#203=20[refact]=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hous/release/android/di/RetrofitModule.kt | 9 +- .../presentation/hous/HousViewModel.kt | 2 +- .../presentation/login/LoginActivity.kt | 112 +++++++--------- .../presentation/login/LoginViewModel.kt | 124 +++++------------- .../android/util/KakaoLoginCallback.kt | 46 +++++++ .../data/repository/AuthRepositoryImpl.kt | 12 +- .../domain/repository/AuthRepository.kt | 2 - .../domain/usecase/InitTokenUseCase.kt | 11 -- 8 files changed, 130 insertions(+), 188 deletions(-) create mode 100644 app/src/main/java/hous/release/android/util/KakaoLoginCallback.kt delete mode 100644 domain/src/main/java/hous/release/domain/usecase/InitTokenUseCase.kt diff --git a/app/src/main/java/hous/release/android/di/RetrofitModule.kt b/app/src/main/java/hous/release/android/di/RetrofitModule.kt index 3779de3ff..47ca561df 100644 --- a/app/src/main/java/hous/release/android/di/RetrofitModule.kt +++ b/app/src/main/java/hous/release/android/di/RetrofitModule.kt @@ -60,9 +60,7 @@ object RetrofitModule { ): Interceptor = Interceptor { chain -> if (!context.isNetworkConnected()) { context.startActivity( - Intent( - context, NetworkErrorActivity::class.java - ).apply { + Intent(context, NetworkErrorActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) } ) @@ -71,10 +69,7 @@ object RetrofitModule { var response = chain.proceed( request .newBuilder() - .addHeader( - HEADER_AUTHORIZATION, - BEARER + localPrefTokenDataSource.accessToken - ) + .addHeader(HEADER_AUTHORIZATION, BEARER + localPrefTokenDataSource.accessToken) .addHeader(HEADER_OS_TYPE, OS_TYPE) .addHeader(HEADER_VERSION, BuildConfig.VERSION_NAME) .build() diff --git a/app/src/main/java/hous/release/android/presentation/hous/HousViewModel.kt b/app/src/main/java/hous/release/android/presentation/hous/HousViewModel.kt index b30f99cbe..728267cdd 100644 --- a/app/src/main/java/hous/release/android/presentation/hous/HousViewModel.kt +++ b/app/src/main/java/hous/release/android/presentation/hous/HousViewModel.kt @@ -29,7 +29,7 @@ class HousViewModel @Inject constructor( .onSuccess { response -> _hous.value = response _homies.value = response.homies - Timber.e("${hous.value.homies[0].homieId}") + Timber.d("${hous.value.homies[0].homieId}") } .onFailure { Timber.d(it.message.toString()) } } diff --git a/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt b/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt index d7f954862..11630927e 100644 --- a/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt +++ b/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt @@ -14,9 +14,9 @@ import hous.release.android.util.binding.BindingActivity import hous.release.android.util.dialog.ConfirmClickListener import hous.release.android.util.dialog.WarningDialogFragment import hous.release.android.util.dialog.WarningType -import hous.release.android.util.extension.EventObserver +import hous.release.android.util.extension.repeatOnStarted +import hous.release.android.util.extension.setOnSingleClickListener import hous.release.data.service.KakaoLoginService -import timber.log.Timber import javax.inject.Inject import kotlin.system.exitProcess @@ -30,35 +30,35 @@ class LoginActivity : BindingActivity(R.layout.activity_lo override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) initKakaoLoginBtnClickListener() - initIsSuccessKakaoLoginObserver() - initIsInitUserInfoObserver() initBackPressedCallback() - initIsJoiningRoomObserve() - initIsUserObserve() - initIsPermitAccessObserve() + collectIsJoiningRoom() + collectIsSignedUp() + collectIsKakaoLogin() + collectIsMiultipleAccess() } - private fun initIsUserObserve() { - loginViewModel.isJoiningRoom.observe(this) { - if (loginViewModel.isJoiningRoom.value == true) { - ToastMessageUtil.showToast(this@LoginActivity, getString(R.string.login_toast)) - val toMain = Intent(this, MainActivity::class.java) - startActivity(toMain) - finishAffinity() - } else { - val toEnterRoom = Intent(this, EnterRoomActivity::class.java) - startActivity(toEnterRoom) - finishAffinity() + private fun collectIsJoiningRoom() { + repeatOnStarted { + loginViewModel.isJoiningRoom.collect { joiningRoom -> + if (joiningRoom) { + ToastMessageUtil.showToast(this@LoginActivity, getString(R.string.login_toast)) + startActivity(Intent(this, MainActivity::class.java)) + finishAffinity() + } else { + startActivity(Intent(this@LoginActivity, EnterRoomActivity::class.java)) + finishAffinity() + } } } } - private fun initIsJoiningRoomObserve() { - loginViewModel.isUser.observe(this) { - if (loginViewModel.isUser.value == false) { - val toUserInput = Intent(this, UserInputActivity::class.java) - startActivity(toUserInput) - finishAffinity() + private fun collectIsSignedUp() { + repeatOnStarted { + loginViewModel.isSignedUp.collect { signedUp -> + if (!signedUp) { + startActivity(Intent(this@LoginActivity, UserInputActivity::class.java)) + finishAffinity() + } } } } @@ -80,52 +80,38 @@ class LoginActivity : BindingActivity(R.layout.activity_lo } private fun initKakaoLoginBtnClickListener() { - binding.btnLoginKakao.setOnClickListener { - startKakaoLogin() + binding.btnLoginKakao.setOnSingleClickListener { + kakaoLoginService.startKakaoLogin(loginViewModel.kakaoLoginCallback) } } - private fun startKakaoLogin() { - kakaoLoginService.startKakaoLogin(loginViewModel.kakaoLoginCallback) - } - - private fun initIsSuccessKakaoLoginObserver() { - loginViewModel.isSuccessKakaoLogin.observe( - this, - EventObserver { isSuccess -> - if (isSuccess) { - Timber.e("카카오 로그인 성공") - } else { - Timber.e("카카오 로그인 실패") + private fun collectIsKakaoLogin() { + repeatOnStarted { + loginViewModel.isKakaoLogin.collect { success -> + if (success) { + loginViewModel.postLogin() } } - ) - } - - private fun initIsInitUserInfoObserver() { - loginViewModel.isInitUserInfo.observe( - this, - EventObserver { isSuccess -> - if (isSuccess) loginViewModel.postLogin() - } - ) + } } - private fun initIsPermitAccessObserve() { - loginViewModel.isMultipleAccess.observe(this) { isMultipleAccess -> - if (isMultipleAccess == true) { - WarningDialogFragment().apply { - arguments = Bundle().apply { - putSerializable( - WarningDialogFragment.WARNING_TYPE, - WarningType.WARNING_SPLASH - ) - putParcelable( - WarningDialogFragment.CONFIRM_ACTION, - ConfirmClickListener(confirmAction = { loginViewModel.initIsPermitAccess() }) - ) - } - }.show(supportFragmentManager, WarningDialogFragment.DIALOG_WARNING) + private fun collectIsMiultipleAccess() { + repeatOnStarted { + loginViewModel.isMiultipleAccess.collect { accessLogin -> + if (accessLogin) { + WarningDialogFragment().apply { + arguments = Bundle().apply { + putSerializable( + WarningDialogFragment.WARNING_TYPE, + WarningType.WARNING_SPLASH + ) + putParcelable( + WarningDialogFragment.CONFIRM_ACTION, + ConfirmClickListener(confirmAction = { loginViewModel.postForceLogin() }) + ) + } + }.show(supportFragmentManager, WarningDialogFragment.DIALOG_WARNING) + } } } } diff --git a/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt b/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt index 7ebeb8376..45cdbdb30 100644 --- a/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt +++ b/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt @@ -1,21 +1,21 @@ package hous.release.android.presentation.login -import androidx.lifecycle.LiveData -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.kakao.sdk.auth.model.OAuthToken -import com.kakao.sdk.common.model.AuthErrorCause import dagger.hilt.android.lifecycle.HiltViewModel -import hous.release.android.util.extension.Event +import hous.release.android.util.KakaoLoginCallback import hous.release.domain.entity.SplashState import hous.release.domain.usecase.GetFcmTokenUseCase import hous.release.domain.usecase.InitHousTokenUseCase -import hous.release.domain.usecase.InitTokenUseCase import hous.release.domain.usecase.PostForceLoginUseCase import hous.release.domain.usecase.PostLoginUseCase import hous.release.domain.usecase.SetSplashStateUseCase +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch import retrofit2.HttpException import timber.log.Timber @@ -24,74 +24,31 @@ import javax.inject.Inject @HiltViewModel class LoginViewModel @Inject constructor( private val postLoginUseCase: PostLoginUseCase, - private val initTokenUseCase: InitTokenUseCase, private val initHousTokenUseCase: InitHousTokenUseCase, private val getFcmTokenUseCase: GetFcmTokenUseCase, private val postForceLoginUseCase: PostForceLoginUseCase, private val setSplashStateUseCase: SetSplashStateUseCase ) : ViewModel() { - private val kakaoToken = MutableLiveData() + private val kakaoToken = MutableStateFlow("") + private val fcmToken = MutableStateFlow("") - private val fcmToken = MutableLiveData() + private val _isSignedUp = MutableSharedFlow() + val isSignedUp = _isSignedUp.asSharedFlow() - private val _isSuccessKakaoLogin = MutableLiveData>() - val isSuccessKakaoLogin: LiveData> = _isSuccessKakaoLogin + private val _isJoiningRoom = MutableSharedFlow() + val isJoiningRoom = _isJoiningRoom.asSharedFlow() - private val _isJoiningRoom = MutableLiveData() - val isJoiningRoom: LiveData = _isJoiningRoom + private val _isMultipleAccess = MutableStateFlow(false) + val isMiultipleAccess = _isMultipleAccess.asStateFlow() - private val _isUser = MutableLiveData() - val isUser: LiveData = _isUser - - private val _isMultipleAccess = MutableLiveData() - val isMultipleAccess: LiveData = _isMultipleAccess - - private val _isInitUserInfo = MediatorLiveData>().apply { - addSource(kakaoToken) { token -> - value = Event(token.isNotBlank() && fcmToken.value != null) - } - addSource(fcmToken) { token -> - value = Event(token.isNotBlank() && kakaoToken.value != null) - } + val isKakaoLogin = combine(kakaoToken, fcmToken) { kakaoToken, fcmToken -> + kakaoToken.isNotBlank() && fcmToken.isNotBlank() } - val isInitUserInfo: LiveData> = _isInitUserInfo val kakaoLoginCallback: (OAuthToken?, Throwable?) -> Unit = { token, error -> - if (error != null) { - when { - error.toString() == AuthErrorCause.AccessDenied.toString() -> { - Timber.e(error, "접근이 거부 됨(동의 취소)") - } - error.toString() == AuthErrorCause.InvalidClient.toString() -> { - Timber.e(error, "유효하지 않은 앱") - } - error.toString() == AuthErrorCause.InvalidGrant.toString() -> { - Timber.e(error, "인증 수단이 유효하지 않아 인증할 수 없는 상태") - } - error.toString() == AuthErrorCause.InvalidRequest.toString() -> { - Timber.e(error, "요청 파라미터 오류") - } - error.toString() == AuthErrorCause.InvalidScope.toString() -> { - Timber.e(error, "유효하지 않은 scope ID") - } - error.toString() == AuthErrorCause.Misconfigured.toString() -> { - Timber.e(error, "설정이 올바르지 않음(android key hash)") - } - error.toString() == AuthErrorCause.ServerError.toString() -> { - Timber.e(error, "서버 내부 에러") - } - error.toString() == AuthErrorCause.Unauthorized.toString() -> { - Timber.e(error, "앱이 요청 권한이 없음") - } - else -> { - Timber.e(error, "기타 에러") - } - } - } else if (token != null) { - Timber.e("카카오 로그인 성공 ${token.accessToken}") - kakaoToken.value = token.accessToken - _isSuccessKakaoLogin.value = Event(true) - } + KakaoLoginCallback { accessToken -> + kakaoToken.value = accessToken + }.handleResult(token, error) } init { @@ -101,19 +58,12 @@ class LoginViewModel @Inject constructor( fun postLogin() { viewModelScope.launch { postLoginUseCase( - fcmToken = requireNotNull(fcmToken.value), - socialType = "KAKAO", - token = requireNotNull(kakaoToken.value) + fcmToken = fcmToken.value, + socialType = SOCIAL_TYPE, + token = kakaoToken.value ).onSuccess { response -> - initTokenUseCase( - fcmToken = requireNotNull(fcmToken.value), - socialType = SOCIAL_TYPE, - token = requireNotNull(kakaoToken.value) - ) - initHousTokenUseCase( - token = response.token - ) - _isJoiningRoom.value = response.isJoiningRoom + initHousTokenUseCase(token = response.token) + _isJoiningRoom.emit(response.isJoiningRoom) setSplashStateUseCase( if (response.isJoiningRoom) SplashState.MAIN else SplashState.ENTER_ROOM @@ -122,12 +72,7 @@ class LoginViewModel @Inject constructor( if (throwable is HttpException) { when (throwable.code()) { NOT_SIGN_UP -> { - initTokenUseCase( - fcmToken = requireNotNull(fcmToken.value), - socialType = SOCIAL_TYPE, - token = requireNotNull(kakaoToken.value) - ) - _isUser.value = false + _isSignedUp.emit(false) Timber.e(throwable.message) } ALREADY_LOGIN -> { @@ -142,22 +87,15 @@ class LoginViewModel @Inject constructor( } } - fun initIsPermitAccess() { + fun postForceLogin() { viewModelScope.launch { postForceLoginUseCase( - fcmToken = requireNotNull(fcmToken.value), - socialType = "KAKAO", - token = requireNotNull(kakaoToken.value) + fcmToken = fcmToken.value, + socialType = SOCIAL_TYPE, + token = kakaoToken.value ).onSuccess { response -> - _isJoiningRoom.value = response.isJoiningRoom - initTokenUseCase( - fcmToken = requireNotNull(fcmToken.value), - socialType = SOCIAL_TYPE, - token = requireNotNull(kakaoToken.value) - ) - initHousTokenUseCase( - token = response.token - ) + _isJoiningRoom.emit(response.isJoiningRoom) + initHousTokenUseCase(token = response.token) setSplashStateUseCase( if (response.isJoiningRoom) SplashState.MAIN else SplashState.ENTER_ROOM diff --git a/app/src/main/java/hous/release/android/util/KakaoLoginCallback.kt b/app/src/main/java/hous/release/android/util/KakaoLoginCallback.kt new file mode 100644 index 000000000..a2a483a4b --- /dev/null +++ b/app/src/main/java/hous/release/android/util/KakaoLoginCallback.kt @@ -0,0 +1,46 @@ +package hous.release.android.util + +import com.kakao.sdk.auth.model.OAuthToken +import com.kakao.sdk.common.model.AuthErrorCause +import timber.log.Timber + +class KakaoLoginCallback( + private val onSuccess: (accessToken: String) -> Unit +) { + fun handleResult(token: OAuthToken?, error: Throwable?) { + if (error != null) { + when { + error.toString() == AuthErrorCause.AccessDenied.toString() -> { + Timber.e(error, "접근이 거부 됨(동의 취소)") + } + error.toString() == AuthErrorCause.InvalidClient.toString() -> { + Timber.e(error, "유효하지 않은 앱") + } + error.toString() == AuthErrorCause.InvalidGrant.toString() -> { + Timber.e(error, "인증 수단이 유효하지 않아 인증할 수 없는 상태") + } + error.toString() == AuthErrorCause.InvalidRequest.toString() -> { + Timber.e(error, "요청 파라미터 오류") + } + error.toString() == AuthErrorCause.InvalidScope.toString() -> { + Timber.e(error, "유효하지 않은 scope ID") + } + error.toString() == AuthErrorCause.Misconfigured.toString() -> { + Timber.e(error, "설정이 올바르지 않음(android key hash)") + } + error.toString() == AuthErrorCause.ServerError.toString() -> { + Timber.e(error, "서버 내부 에러") + } + error.toString() == AuthErrorCause.Unauthorized.toString() -> { + Timber.e(error, "앱이 요청 권한이 없음") + } + else -> { + Timber.e(error, "기타 에러") + } + } + } else if (token != null) { + Timber.d("카카오 로그인 성공 ${token.accessToken}") + onSuccess(token.accessToken) + } + } +} diff --git a/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt b/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt index d03ae279f..9074404ac 100644 --- a/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt +++ b/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt @@ -11,8 +11,8 @@ import hous.release.domain.entity.Token import hous.release.domain.entity.response.Login import hous.release.domain.entity.response.SignUp import hous.release.domain.repository.AuthRepository -import javax.inject.Inject import timber.log.Timber +import javax.inject.Inject class AuthRepositoryImpl @Inject constructor( private val authDataSource: AuthDataSource, @@ -53,16 +53,6 @@ class AuthRepositoryImpl @Inject constructor( localPrefTokenDataSource.refreshToken = token.refreshToken } - override fun initToken( - fcmToken: String, - socialType: String, - token: String - ) { - localPrefTokenDataSource.fcmToken = fcmToken - localPrefTokenDataSource.socialType = socialType - localPrefTokenDataSource.token = token - } - override fun getFCMToken(setFCMToken: (String) -> Unit) { FirebaseMessaging.getInstance().token.addOnCompleteListener( OnCompleteListener { task -> diff --git a/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt b/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt index 8ecceb5ea..4d073e5a5 100644 --- a/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt +++ b/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt @@ -21,8 +21,6 @@ interface AuthRepository { fun initHousToken(token: Token) - fun initToken(fcmToken: String, socialType: String, token: String) - fun getFCMToken(setFCMToken: (String) -> Unit) suspend fun deleteUser(feedbackType: FeedbackType, comment: String): Result diff --git a/domain/src/main/java/hous/release/domain/usecase/InitTokenUseCase.kt b/domain/src/main/java/hous/release/domain/usecase/InitTokenUseCase.kt deleted file mode 100644 index 6aaca57de..000000000 --- a/domain/src/main/java/hous/release/domain/usecase/InitTokenUseCase.kt +++ /dev/null @@ -1,11 +0,0 @@ -package hous.release.domain.usecase - -import hous.release.domain.repository.AuthRepository -import javax.inject.Inject - -class InitTokenUseCase @Inject constructor( - private val authRepository: AuthRepository -) { - operator fun invoke(fcmToken: String, socialType: String, token: String) = - authRepository.initToken(fcmToken, socialType, token) -} From c9153563eb15cd36ac5d269d91971f5dba15f671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=88=E1=85=A1=E1=86=BC=E1=84=8C?= =?UTF-8?q?=E1=85=AE?= Date: Mon, 10 Apr 2023 03:25:25 +0900 Subject: [PATCH 2/4] =?UTF-8?q?#203=20[add]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=20=EC=A0=80=EC=9E=A5=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/presentation/login/LoginViewModel.kt | 7 +++++++ .../release/data/repository/AuthRepositoryImpl.kt | 10 ++++++++++ .../hous/release/domain/repository/AuthRepository.kt | 2 ++ .../release/domain/usecase/InitLoginTokenUseCase.kt | 11 +++++++++++ 4 files changed, 30 insertions(+) create mode 100644 domain/src/main/java/hous/release/domain/usecase/InitLoginTokenUseCase.kt diff --git a/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt b/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt index 45cdbdb30..b8dcd70f4 100644 --- a/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt +++ b/app/src/main/java/hous/release/android/presentation/login/LoginViewModel.kt @@ -8,6 +8,7 @@ import hous.release.android.util.KakaoLoginCallback import hous.release.domain.entity.SplashState import hous.release.domain.usecase.GetFcmTokenUseCase import hous.release.domain.usecase.InitHousTokenUseCase +import hous.release.domain.usecase.InitLoginTokenUseCase import hous.release.domain.usecase.PostForceLoginUseCase import hous.release.domain.usecase.PostLoginUseCase import hous.release.domain.usecase.SetSplashStateUseCase @@ -25,6 +26,7 @@ import javax.inject.Inject class LoginViewModel @Inject constructor( private val postLoginUseCase: PostLoginUseCase, private val initHousTokenUseCase: InitHousTokenUseCase, + private val initLoginTokenUseCase: InitLoginTokenUseCase, private val getFcmTokenUseCase: GetFcmTokenUseCase, private val postForceLoginUseCase: PostForceLoginUseCase, private val setSplashStateUseCase: SetSplashStateUseCase @@ -72,6 +74,11 @@ class LoginViewModel @Inject constructor( if (throwable is HttpException) { when (throwable.code()) { NOT_SIGN_UP -> { + initLoginTokenUseCase( + fcmToken = fcmToken.value, + socialType = SOCIAL_TYPE, + token = kakaoToken.value + ) _isSignedUp.emit(false) Timber.e(throwable.message) } diff --git a/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt b/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt index 9074404ac..df22f36b7 100644 --- a/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt +++ b/data/src/main/java/hous/release/data/repository/AuthRepositoryImpl.kt @@ -48,6 +48,16 @@ class AuthRepositoryImpl @Inject constructor( ) }.map { response -> response.data.toSignUp() } + override fun initLoginToken( + fcmToken: String, + socialType: String, + token: String + ) { + localPrefTokenDataSource.fcmToken = fcmToken + localPrefTokenDataSource.socialType = socialType + localPrefTokenDataSource.token = token + } + override fun initHousToken(token: Token) { localPrefTokenDataSource.accessToken = token.accessToken localPrefTokenDataSource.refreshToken = token.refreshToken diff --git a/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt b/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt index 4d073e5a5..940a351c7 100644 --- a/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt +++ b/domain/src/main/java/hous/release/domain/repository/AuthRepository.kt @@ -19,6 +19,8 @@ interface AuthRepository { nickname: String ): Result + fun initLoginToken(fcmToken: String, socialType: String, token: String) + fun initHousToken(token: Token) fun getFCMToken(setFCMToken: (String) -> Unit) diff --git a/domain/src/main/java/hous/release/domain/usecase/InitLoginTokenUseCase.kt b/domain/src/main/java/hous/release/domain/usecase/InitLoginTokenUseCase.kt new file mode 100644 index 000000000..9f5a31230 --- /dev/null +++ b/domain/src/main/java/hous/release/domain/usecase/InitLoginTokenUseCase.kt @@ -0,0 +1,11 @@ +package hous.release.domain.usecase + +import hous.release.domain.repository.AuthRepository +import javax.inject.Inject + +class InitLoginTokenUseCase @Inject constructor( + private val authRepository: AuthRepository +) { + operator fun invoke(fcmToken: String, socialType: String, token: String) = + authRepository.initLoginToken(fcmToken, socialType, token) +} From 1e2f67a3a47393bf4539c37a52f9ad80b87a476d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=88=E1=85=A1=E1=86=BC=E1=84=8C?= =?UTF-8?q?=E1=85=AE?= Date: Mon, 10 Apr 2023 03:31:40 +0900 Subject: [PATCH 3/4] =?UTF-8?q?#203=20[fix]=20startKakaoLogin=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=EB=A1=9C=20=EB=B9=BC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../release/android/presentation/login/LoginActivity.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt b/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt index 11630927e..e8a8d1e12 100644 --- a/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt +++ b/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt @@ -80,11 +80,15 @@ class LoginActivity : BindingActivity(R.layout.activity_lo } private fun initKakaoLoginBtnClickListener() { - binding.btnLoginKakao.setOnSingleClickListener { - kakaoLoginService.startKakaoLogin(loginViewModel.kakaoLoginCallback) + binding.btnLoginKakao.setOnClickListener { + startKakaoLogin() } } + private fun startKakaoLogin() { + kakaoLoginService.startKakaoLogin(loginViewModel.kakaoLoginCallback) + } + private fun collectIsKakaoLogin() { repeatOnStarted { loginViewModel.isKakaoLogin.collect { success -> From 271c7ee23b2c9ce8c3a7861c5552e0df1183fe9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=88=E1=85=A1=E1=86=BC=E1=84=8C?= =?UTF-8?q?=E1=85=AE?= Date: Mon, 10 Apr 2023 03:33:06 +0900 Subject: [PATCH 4/4] =?UTF-8?q?#203=20[fix]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EC=9D=B4=ED=9B=84=20=EC=9D=B8=ED=85=90=ED=8A=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=20=EC=B4=88=EA=B8=B0=ED=99=94=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/login/LoginActivity.kt | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt b/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt index e8a8d1e12..c12db16b4 100644 --- a/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt +++ b/app/src/main/java/hous/release/android/presentation/login/LoginActivity.kt @@ -15,7 +15,6 @@ import hous.release.android.util.dialog.ConfirmClickListener import hous.release.android.util.dialog.WarningDialogFragment import hous.release.android.util.dialog.WarningType import hous.release.android.util.extension.repeatOnStarted -import hous.release.android.util.extension.setOnSingleClickListener import hous.release.data.service.KakaoLoginService import javax.inject.Inject import kotlin.system.exitProcess @@ -42,11 +41,17 @@ class LoginActivity : BindingActivity(R.layout.activity_lo loginViewModel.isJoiningRoom.collect { joiningRoom -> if (joiningRoom) { ToastMessageUtil.showToast(this@LoginActivity, getString(R.string.login_toast)) - startActivity(Intent(this, MainActivity::class.java)) - finishAffinity() + startActivity( + Intent(this, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + } + ) } else { - startActivity(Intent(this@LoginActivity, EnterRoomActivity::class.java)) - finishAffinity() + startActivity( + Intent(this@LoginActivity, EnterRoomActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + } + ) } } } @@ -56,8 +61,11 @@ class LoginActivity : BindingActivity(R.layout.activity_lo repeatOnStarted { loginViewModel.isSignedUp.collect { signedUp -> if (!signedUp) { - startActivity(Intent(this@LoginActivity, UserInputActivity::class.java)) - finishAffinity() + startActivity( + Intent(this@LoginActivity, UserInputActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + } + ) } } }