diff --git a/app/src/main/java/com/into/websoso/WebsosoApp.kt b/app/src/main/java/com/into/websoso/WebsosoApp.kt index a376f4375..60a47000e 100644 --- a/app/src/main/java/com/into/websoso/WebsosoApp.kt +++ b/app/src/main/java/com/into/websoso/WebsosoApp.kt @@ -29,7 +29,7 @@ class WebsosoApp : Application() { private fun subscribeSessionState() { sessionManager.sessionExpired.collectWithLifecycle(ProcessLifecycleOwner.get()) { - navigatorProvider.navigateToLoginActivity() + navigatorProvider.navigateToLoginActivity(::startActivity) } } } diff --git a/app/src/main/java/com/into/websoso/core/common/util/navigator/WebsosoNavigator.kt b/app/src/main/java/com/into/websoso/core/common/util/navigator/WebsosoNavigator.kt index e719ccfae..b23329455 100644 --- a/app/src/main/java/com/into/websoso/core/common/util/navigator/WebsosoNavigator.kt +++ b/app/src/main/java/com/into/websoso/core/common/util/navigator/WebsosoNavigator.kt @@ -1,6 +1,7 @@ package com.into.websoso.core.common.util.navigator import android.content.Context +import android.content.Intent import com.into.websoso.core.common.navigator.NavigatorProvider import com.into.websoso.ui.login.LoginActivity import com.into.websoso.ui.main.MainActivity @@ -18,19 +19,19 @@ internal class WebsosoNavigator constructor( @ApplicationContext private val context: Context, ) : NavigatorProvider { - override fun navigateToLoginActivity() { + override fun navigateToLoginActivity(startActivity: (Intent) -> Unit) { val intent = LoginActivity.getIntent(context) - context.startActivity(intent) + startActivity(intent) } - override fun navigateToMainActivity() { + override fun navigateToMainActivity(startActivity: (Intent) -> Unit) { val intent = MainActivity.getIntent(context, true) - context.startActivity(intent) + startActivity(intent) } - override fun navigateToOnboardingActivity() { + override fun navigateToOnboardingActivity(startActivity: (Intent) -> Unit) { val intent = OnboardingActivity.getIntent(context) - context.startActivity(intent) + startActivity(intent) } } diff --git a/app/src/main/java/com/into/websoso/data/di/RepositoryModule.kt b/app/src/main/java/com/into/websoso/data/di/RepositoryModule.kt index a6176452f..37d6b60cd 100644 --- a/app/src/main/java/com/into/websoso/data/di/RepositoryModule.kt +++ b/app/src/main/java/com/into/websoso/data/di/RepositoryModule.kt @@ -1,9 +1,7 @@ package com.into.websoso.data.di -import android.content.SharedPreferences import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences -import com.into.websoso.data.remote.api.AuthApi import com.into.websoso.data.remote.api.FeedApi import com.into.websoso.data.remote.api.NovelApi import com.into.websoso.data.remote.api.PushMessageApi @@ -39,13 +37,6 @@ object RepositoryModule { @Singleton fun provideNovelRepository(novelApi: NovelApi): NovelRepository = NovelRepository(novelApi) - @Provides - @Singleton - fun provideAuthRepository( - authApi: AuthApi, - preferences: SharedPreferences, - ): AuthRepository = AuthRepository(authApi, preferences) - @Provides @Singleton fun provideVersionRepository(versionApi: VersionApi): VersionRepository = VersionRepository(versionApi) diff --git a/app/src/main/java/com/into/websoso/data/remote/api/AuthApi.kt b/app/src/main/java/com/into/websoso/data/remote/api/AuthApi.kt index 825c99d00..234bbe8ca 100644 --- a/app/src/main/java/com/into/websoso/data/remote/api/AuthApi.kt +++ b/app/src/main/java/com/into/websoso/data/remote/api/AuthApi.kt @@ -5,26 +5,22 @@ import com.into.websoso.data.remote.request.UserProfileRequestDto import com.into.websoso.data.remote.response.UserNicknameValidityResponseDto import retrofit2.http.Body import retrofit2.http.GET -import retrofit2.http.Header import retrofit2.http.POST import retrofit2.http.Query interface AuthApi { @GET("users/nickname/check") suspend fun getNicknameValidity( - @Header("Authorization") authorization: String, @Query("nickname") nickname: String, ): UserNicknameValidityResponseDto @POST("users/profile") suspend fun postUserProfile( - @Header("Authorization") authorization: String, @Body userProfileRequestDto: UserProfileRequestDto, ) @POST("users/fcm-token") suspend fun postFCMToken( - @Header("Authorization") authorization: String, @Body fcmTokenRequestDto: FCMTokenRequestDto, ) } 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 8e6b2f08e..c3b446690 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 @@ -1,75 +1,39 @@ package com.into.websoso.data.repository -import android.content.SharedPreferences import com.into.websoso.data.remote.api.AuthApi import com.into.websoso.data.remote.request.FCMTokenRequestDto import com.into.websoso.data.remote.request.UserProfileRequestDto import javax.inject.Inject +import javax.inject.Singleton +@Singleton class AuthRepository @Inject constructor( private val authApi: AuthApi, - private val authStorage: SharedPreferences, ) { - var accessToken: String - get() = authStorage.getString(ACCESS_TOKEN_KEY, "").orEmpty() - private set(value) = authStorage.edit().putString(ACCESS_TOKEN_KEY, value).apply() - - var refreshToken: String - get() = authStorage.getString(REFRESH_TOKEN_KEY, "").orEmpty() - private set(value) = authStorage.edit().putString(REFRESH_TOKEN_KEY, value).apply() - - var isAutoLogin: Boolean - get() = authStorage.getBoolean(AUTO_LOGIN_KEY, false) - private set(value) = authStorage.edit().putBoolean(AUTO_LOGIN_KEY, value).apply() - - suspend fun fetchNicknameValidity( - authorization: String, - nickname: String, - ): Boolean = authApi.getNicknameValidity("Bearer $authorization", nickname).isValid + suspend fun fetchNicknameValidity(nickname: String): Boolean = authApi.getNicknameValidity(nickname).isValid suspend fun signUp( - authorization: String, nickname: String, gender: String, birth: Int, genrePreferences: List, ) { authApi.postUserProfile( - "Bearer $authorization", UserProfileRequestDto(nickname, gender, birth, genrePreferences), ) } - fun updateAccessToken(accessToken: String) { - this.accessToken = accessToken - } - - fun updateRefreshToken(refreshToken: String) { - this.refreshToken = refreshToken - } - - fun updateIsAutoLogin(isAutoLogin: Boolean) { - this.isAutoLogin = isAutoLogin - } - suspend fun saveFCMToken( fcmToken: String, deviceIdentifier: String, ) { authApi.postFCMToken( - authorization = "Bearer $accessToken", FCMTokenRequestDto( fcmToken = fcmToken, deviceIdentifier = deviceIdentifier, ), ) } - - companion object { - private const val ACCESS_TOKEN_KEY = "ACCESS_TOKEN" - private const val REFRESH_TOKEN_KEY = "REFRESH_TOKEN" - private const val AUTO_LOGIN_KEY = "AUTO_LOGIN" - } } diff --git a/app/src/main/java/com/into/websoso/ui/accountInfo/LogoutDialogFragment.kt b/app/src/main/java/com/into/websoso/ui/accountInfo/LogoutDialogFragment.kt index d85308b5a..ead894514 100644 --- a/app/src/main/java/com/into/websoso/ui/accountInfo/LogoutDialogFragment.kt +++ b/app/src/main/java/com/into/websoso/ui/accountInfo/LogoutDialogFragment.kt @@ -33,7 +33,7 @@ class LogoutDialogFragment : BaseDialogFragment(R.layout.di private fun collectUiEffect() { accountInfoViewModel.uiEffect.collectWithLifecycle(viewLifecycleOwner) { uiEffect -> when (uiEffect) { - UiEffect.NavigateToLogin -> websosoNavigator.navigateToLoginActivity() + UiEffect.NavigateToLogin -> websosoNavigator.navigateToLoginActivity(::startActivity) } } } diff --git a/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingActivity.kt b/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingActivity.kt index 5d09232c2..209f2fb14 100644 --- a/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingActivity.kt +++ b/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingActivity.kt @@ -91,8 +91,6 @@ class OnboardingActivity : BaseActivity(R.layout.acti companion object { private const val ANIMATION_PROPERTY_NAME = "progress" private const val ANIMATION_DURATION_TIME = 200L - const val ACCESS_TOKEN_KEY = "ACCESS_TOKEN" - const val REFRESH_TOKEN_KEY = "REFRESH_TOKEN" fun getIntent(context: Context): Intent = Intent(context, OnboardingActivity::class.java) } diff --git a/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingViewModel.kt b/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingViewModel.kt index fb31415d8..e736c69ff 100644 --- a/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingViewModel.kt +++ b/app/src/main/java/com/into/websoso/ui/onboarding/OnboardingViewModel.kt @@ -2,15 +2,12 @@ package com.into.websoso.ui.onboarding import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.into.websoso.data.repository.AuthRepository import com.into.websoso.domain.model.NicknameValidationResult import com.into.websoso.domain.usecase.CheckNicknameValidityUseCase import com.into.websoso.domain.usecase.ValidateNicknameUseCase -import com.into.websoso.ui.onboarding.OnboardingActivity.Companion.ACCESS_TOKEN_KEY -import com.into.websoso.ui.onboarding.OnboardingActivity.Companion.REFRESH_TOKEN_KEY import com.into.websoso.ui.onboarding.first.model.NicknameInputType import com.into.websoso.ui.onboarding.first.model.OnboardingFirstUiState import com.into.websoso.ui.onboarding.model.OnboardingPage @@ -27,7 +24,6 @@ class OnboardingViewModel private val authRepository: AuthRepository, private val validateNicknameUseCase: ValidateNicknameUseCase, private val checkNicknameValidityUseCase: CheckNicknameValidityUseCase, - private val savedStateHandle: SavedStateHandle, ) : ViewModel() { private val _currentPage = MutableLiveData(OnboardingPage.FIRST) val currentPage: LiveData get() = _currentPage @@ -60,18 +56,6 @@ class OnboardingViewModel private val _isUserProfileSubmit = MutableLiveData(false) val isUserProfileSubmit: LiveData get() = _isUserProfileSubmit - var accessToken: String - get() = savedStateHandle[ACCESS_TOKEN_KEY] ?: "" - private set(value) { - savedStateHandle[ACCESS_TOKEN_KEY] = value - } - - var refreshToken: String - get() = savedStateHandle[REFRESH_TOKEN_KEY] ?: "" - private set(value) { - savedStateHandle[REFRESH_TOKEN_KEY] = value - } - fun validateNickname() { val currentInput: String = currentNicknameInput.value.orEmpty() if (currentInput.isEmpty()) { @@ -113,7 +97,7 @@ class OnboardingViewModel private fun dispatchNicknameDuplication(nickname: String) { viewModelScope.launch { runCatching { - authRepository.fetchNicknameValidity(accessToken, nickname) + authRepository.fetchNicknameValidity(nickname) }.onSuccess { isNicknameValid -> when (isNicknameValid) { true -> { @@ -237,7 +221,6 @@ class OnboardingViewModel ) userProfile.value?.let { profile -> authRepository.signUp( - authorization = accessToken, nickname = profile.nickname, gender = profile.gender, birth = profile.birthYear, @@ -245,9 +228,6 @@ class OnboardingViewModel ) } }.onSuccess { - authRepository.updateAccessToken(accessToken) - authRepository.updateRefreshToken(refreshToken) - authRepository.updateIsAutoLogin(true) _isUserProfileSubmit.value = true }.onFailure { exception -> exception.printStackTrace() 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 a3aeb1e9e..3f35cedca 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 @@ -39,8 +39,8 @@ class SplashActivity : AppCompatActivity(R.layout.activity_splash) { private fun collectUiEffect() { splashViewModel.uiEffect.collectWithLifecycle(this) { uiEffect -> when (uiEffect) { - NavigateToLogin -> websosoNavigator.navigateToLoginActivity() - NavigateToMain -> websosoNavigator.navigateToMainActivity() + NavigateToLogin -> websosoNavigator.navigateToLoginActivity(::startActivity) + NavigateToMain -> websosoNavigator.navigateToMainActivity(::startActivity) ShowDialog -> showMinimumVersionDialog() } } diff --git a/app/src/main/java/com/into/websoso/ui/withdraw/second/WithdrawSecondActivity.kt b/app/src/main/java/com/into/websoso/ui/withdraw/second/WithdrawSecondActivity.kt index 8f87c075a..8bed304d1 100644 --- a/app/src/main/java/com/into/websoso/ui/withdraw/second/WithdrawSecondActivity.kt +++ b/app/src/main/java/com/into/websoso/ui/withdraw/second/WithdrawSecondActivity.kt @@ -104,7 +104,7 @@ class WithdrawSecondActivity : BaseActivity(activ } withdrawSecondViewModel.isWithDrawSuccess.observe(this) { isWithdrawSuccess -> - if (isWithdrawSuccess) websosoNavigator.navigateToLoginActivity() + if (isWithdrawSuccess) websosoNavigator.navigateToLoginActivity(::startActivity) } } diff --git a/core/common/src/main/java/com/into/websoso/core/common/navigator/NavigatorProvider.kt b/core/common/src/main/java/com/into/websoso/core/common/navigator/NavigatorProvider.kt index 86308dc32..fefdd2414 100644 --- a/core/common/src/main/java/com/into/websoso/core/common/navigator/NavigatorProvider.kt +++ b/core/common/src/main/java/com/into/websoso/core/common/navigator/NavigatorProvider.kt @@ -1,15 +1,16 @@ package com.into.websoso.core.common.navigator +import android.content.Intent import dagger.hilt.EntryPoint import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent interface NavigatorProvider { - fun navigateToLoginActivity() + fun navigateToLoginActivity(startActivity: (Intent) -> Unit) - fun navigateToMainActivity() + fun navigateToMainActivity(startActivity: (Intent) -> Unit) - fun navigateToOnboardingActivity() + fun navigateToOnboardingActivity(startActivity: (Intent) -> Unit) } @EntryPoint diff --git a/feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt b/feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt index 279a865b2..9d05b7aa4 100644 --- a/feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt +++ b/feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -36,6 +37,7 @@ fun SignInScreen( websosoNavigator: NavigatorProvider, signInViewModel: SignInViewModel = hiltViewModel(), ) { + val context = LocalContext.current val latestEvent by rememberUpdatedState(signInViewModel.uiEvent) val pagerState = rememberPagerState { Onboarding_Images.size } @@ -51,9 +53,9 @@ fun SignInScreen( // TODO: 실패 시 커스텀 스낵 바 구현 } - NavigateToHome -> websosoNavigator.navigateToMainActivity() + NavigateToHome -> websosoNavigator.navigateToMainActivity(context::startActivity) - NavigateToOnboarding -> websosoNavigator.navigateToOnboardingActivity() + NavigateToOnboarding -> websosoNavigator.navigateToOnboardingActivity(context::startActivity) } }