From 9aa6b05e12d4ba04be19b14e18de010f9fe20a27 Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 00:14:44 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[ADD/#49]=20AuthRepository=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/data/local/YelloDataStoreImpl.kt | 7 +++++ .../remote/interceptor/AuthInterceptor.kt | 3 +-- .../data/repository/AuthRepositoryImpl.kt | 27 +++++++++++++++++++ .../repository/RecommendRepositoryImpl.kt | 13 ++++----- .../java/com/example/domain/YelloDataStore.kt | 2 ++ .../domain/repository/AuthRepository.kt | 9 +++++++ 6 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt create mode 100644 domain/src/main/java/com/example/domain/repository/AuthRepository.kt diff --git a/data/src/main/java/com/example/data/local/YelloDataStoreImpl.kt b/data/src/main/java/com/example/data/local/YelloDataStoreImpl.kt index a22e816c2..c1e96c9eb 100644 --- a/data/src/main/java/com/example/data/local/YelloDataStoreImpl.kt +++ b/data/src/main/java/com/example/data/local/YelloDataStoreImpl.kt @@ -20,9 +20,16 @@ class YelloDataStoreImpl @Inject constructor( get() = dataStore.getBoolean(PREF_IS_LOGIN, false) set(value) = dataStore.edit { putBoolean(PREF_IS_LOGIN, value) } + override var yelloId: String + get() = dataStore.getString(PREF_YELLO_ID, "") ?: "" + set(value) = dataStore.edit { putString(PREF_YELLO_ID, value) } + + override fun clearLocalPref() = dataStore.edit { clear() } + companion object { private const val PREF_USER_TOKEN = "USER_TOKEN" private const val PREF_REFRESH_TOKEN = "REFRESH_TOKEN" private const val PREF_IS_LOGIN = "IS_LOGIN" + private const val PREF_YELLO_ID = "YELLO_ID" } } diff --git a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt index b119bfc69..3cba0d381 100644 --- a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt +++ b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt @@ -3,12 +3,12 @@ package com.example.data.remote.interceptor import com.example.data.model.response.onboarding.ResponseAuthToken import com.example.domain.YelloDataStore import com.yello.data.BuildConfig.BASE_URL -import javax.inject.Inject import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response import timber.log.Timber +import javax.inject.Inject class AuthInterceptor @Inject constructor( private val json: Json, @@ -67,7 +67,6 @@ class AuthInterceptor @Inject constructor( private fun Request.newAuthBuilder() = this.newBuilder().addHeader(HEADER_AUTHORIZATION, "Bearer ${dataStore.userToken}") - // datastore.usertoken 대신 eyJ0eXBlIjoiYWNjZXNzVG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyOTAyMTQ3MTY5IiwianRpIjoiMTYxIiwiaWF0IjoxNjg5NTMzMjgyLCJleHAiOjE2ODk2MTk2ODJ9.yzO71BRbZLoitkr0iv6R2JYEjp-e2RMUZVQHMm81RDI companion object { private const val CODE_TOKEN_EXPIRED = 401 diff --git a/data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt b/data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt new file mode 100644 index 000000000..9fd3b4b0d --- /dev/null +++ b/data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt @@ -0,0 +1,27 @@ +package com.example.data.repository + +import android.content.SharedPreferences +import com.example.domain.YelloDataStore +import com.example.domain.repository.AuthRepository +import javax.inject.Inject + +class AuthRepositoryImpl @Inject constructor( + private val dataStore: SharedPreferences, + private val yelloDataStore: YelloDataStore, +) : AuthRepository { + override fun setAutoLogin(userToken: String, refreshToken: String) { + yelloDataStore.isLogin = true + yelloDataStore.userToken = userToken + yelloDataStore.refreshToken = refreshToken + } + + override fun getAutoLogin(): Boolean = yelloDataStore.isLogin + + override fun setYelloId(yelloId: String) { + yelloDataStore.yelloId = yelloId + } + + override fun getYelloId(): String? = yelloDataStore.yelloId + + override fun clearLocalPref() = yelloDataStore.clearLocalPref() +} diff --git a/data/src/main/java/com/example/data/repository/RecommendRepositoryImpl.kt b/data/src/main/java/com/example/data/repository/RecommendRepositoryImpl.kt index 3166bbd13..93cce7ef8 100644 --- a/data/src/main/java/com/example/data/repository/RecommendRepositoryImpl.kt +++ b/data/src/main/java/com/example/data/repository/RecommendRepositoryImpl.kt @@ -9,25 +9,26 @@ import com.example.domain.repository.RecommendRepository import javax.inject.Inject class RecommendRepositoryImpl @Inject constructor( - private val recommendDataSource: RecommendDataSource + private val recommendDataSource: RecommendDataSource, ) : RecommendRepository { override suspend fun postToGetKakaoFriendList( - page: Int, request: RequestRecommendKakaoModel + page: Int, + request: RequestRecommendKakaoModel, ): RecommendModel? { return recommendDataSource.postToGetKakaoListData( - page, request.toRequestDto() + page, + request.toRequestDto(), ).data?.toRecommendModel() } override suspend fun getSchoolFriendList(page: Int): RecommendModel? { return recommendDataSource.getSchoolListData( - page + page, ).data?.toRecommendModel() } override suspend fun postFriendAdd(friendId: Long): RecommendAddModel { return recommendDataSource.postFriendAdd(friendId).toRecommendAddModel() } - -} \ No newline at end of file +} diff --git a/domain/src/main/java/com/example/domain/YelloDataStore.kt b/domain/src/main/java/com/example/domain/YelloDataStore.kt index b999f9351..1511af11b 100644 --- a/domain/src/main/java/com/example/domain/YelloDataStore.kt +++ b/domain/src/main/java/com/example/domain/YelloDataStore.kt @@ -4,4 +4,6 @@ interface YelloDataStore { var userToken: String var refreshToken: String var isLogin: Boolean + var yelloId: String + fun clearLocalPref() } diff --git a/domain/src/main/java/com/example/domain/repository/AuthRepository.kt b/domain/src/main/java/com/example/domain/repository/AuthRepository.kt new file mode 100644 index 000000000..d02e0860b --- /dev/null +++ b/domain/src/main/java/com/example/domain/repository/AuthRepository.kt @@ -0,0 +1,9 @@ +package com.example.domain.repository + +interface AuthRepository { + fun setAutoLogin(userToken: String, refreshToken: String) + fun getAutoLogin(): Boolean + fun setYelloId(yelloId: String) + fun getYelloId(): String? + fun clearLocalPref() +} From b759b98200f41e793acac0bd439d48109057c028 Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 00:23:39 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[FIX/#49]=20=ED=88=AC=ED=91=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=ED=95=98=EA=B8=B0=20colorIndex=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yello/presentation/main/yello/vote/VoteViewModel.kt | 2 +- .../src/main/java/com/example/data/datasource/VoteDataSource.kt | 2 +- .../com/example/data/datasource/remote/VoteDataSourceImpl.kt | 2 +- .../example/data/model/request/{ => vote}/RequestPostVoteDto.kt | 2 +- .../main/java/com/example/data/remote/service/VoteService.kt | 2 +- .../main/java/com/example/data/repository/VoteRepositoryImpl.kt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename data/src/main/java/com/example/data/model/request/{ => vote}/RequestPostVoteDto.kt (95%) diff --git a/app/src/main/java/com/yello/presentation/main/yello/vote/VoteViewModel.kt b/app/src/main/java/com/yello/presentation/main/yello/vote/VoteViewModel.kt index ef40408e1..056bbb100 100644 --- a/app/src/main/java/com/yello/presentation/main/yello/vote/VoteViewModel.kt +++ b/app/src/main/java/com/yello/presentation/main/yello/vote/VoteViewModel.kt @@ -204,7 +204,7 @@ class VoteViewModel @Inject constructor( private fun initCurrentChoice() { _currentChoice.value = Choice( questionId = voteList[currentNoteIndex].questionId, - backgroundIndex = backgroundIndex + currentNoteIndex, + backgroundIndex = (backgroundIndex + currentNoteIndex) % 12 + 1, ) } diff --git a/data/src/main/java/com/example/data/datasource/VoteDataSource.kt b/data/src/main/java/com/example/data/datasource/VoteDataSource.kt index 5bcc912c2..e7a2c9bcd 100644 --- a/data/src/main/java/com/example/data/datasource/VoteDataSource.kt +++ b/data/src/main/java/com/example/data/datasource/VoteDataSource.kt @@ -1,6 +1,6 @@ package com.example.data.datasource -import com.example.data.model.request.RequestPostVoteDto +import com.example.data.model.request.vote.RequestPostVoteDto import com.example.data.model.response.BaseResponse import com.example.data.model.response.vote.ResponseGetFriendShuffleDto import com.example.data.model.response.vote.ResponseGetVoteAvailableDto diff --git a/data/src/main/java/com/example/data/datasource/remote/VoteDataSourceImpl.kt b/data/src/main/java/com/example/data/datasource/remote/VoteDataSourceImpl.kt index 753489acd..c4fe86e38 100644 --- a/data/src/main/java/com/example/data/datasource/remote/VoteDataSourceImpl.kt +++ b/data/src/main/java/com/example/data/datasource/remote/VoteDataSourceImpl.kt @@ -1,7 +1,7 @@ package com.example.data.datasource.remote import com.example.data.datasource.VoteDataSource -import com.example.data.model.request.RequestPostVoteDto +import com.example.data.model.request.vote.RequestPostVoteDto import com.example.data.model.response.BaseResponse import com.example.data.model.response.vote.ResponseGetFriendShuffleDto import com.example.data.model.response.vote.ResponseGetVoteAvailableDto diff --git a/data/src/main/java/com/example/data/model/request/RequestPostVoteDto.kt b/data/src/main/java/com/example/data/model/request/vote/RequestPostVoteDto.kt similarity index 95% rename from data/src/main/java/com/example/data/model/request/RequestPostVoteDto.kt rename to data/src/main/java/com/example/data/model/request/vote/RequestPostVoteDto.kt index d467570d8..a0be01314 100644 --- a/data/src/main/java/com/example/data/model/request/RequestPostVoteDto.kt +++ b/data/src/main/java/com/example/data/model/request/vote/RequestPostVoteDto.kt @@ -1,4 +1,4 @@ -package com.example.data.model.request +package com.example.data.model.request.vote import com.example.domain.entity.vote.Choice import com.example.domain.entity.vote.ChoiceList diff --git a/data/src/main/java/com/example/data/remote/service/VoteService.kt b/data/src/main/java/com/example/data/remote/service/VoteService.kt index d8b43d662..a05bc9cba 100644 --- a/data/src/main/java/com/example/data/remote/service/VoteService.kt +++ b/data/src/main/java/com/example/data/remote/service/VoteService.kt @@ -1,6 +1,6 @@ package com.example.data.remote.service -import com.example.data.model.request.RequestPostVoteDto +import com.example.data.model.request.vote.RequestPostVoteDto import com.example.data.model.response.BaseResponse import com.example.data.model.response.vote.ResponseGetFriendShuffleDto import com.example.data.model.response.vote.ResponseGetVoteAvailableDto diff --git a/data/src/main/java/com/example/data/repository/VoteRepositoryImpl.kt b/data/src/main/java/com/example/data/repository/VoteRepositoryImpl.kt index 78ab0906e..6732315e7 100644 --- a/data/src/main/java/com/example/data/repository/VoteRepositoryImpl.kt +++ b/data/src/main/java/com/example/data/repository/VoteRepositoryImpl.kt @@ -1,7 +1,7 @@ package com.example.data.repository import com.example.data.datasource.VoteDataSource -import com.example.data.model.request.toRequestPostVoteDto +import com.example.data.model.request.vote.toRequestPostVoteDto import com.example.domain.entity.vote.ChoiceList import com.example.domain.entity.vote.Note import com.example.domain.entity.vote.Note.Friend From 9c483c3515a7d3e9ee2cb8efa507b3397b705bee Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 02:05:18 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[FEAT/#49]=20=EC=86=8C=EC=85=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=8B=9C=20=EC=9E=90=EB=8F=99=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/yello/di/DataSourceModule.kt | 2 +- app/src/main/java/com/yello/di/RepositoryModule.kt | 6 ++++++ .../com/yello/presentation/auth/SignInActivity.kt | 2 -- .../com/yello/presentation/auth/SignInViewModel.kt | 7 +++++++ .../example/domain/repository/RecommendRepository.kt | 12 +++++------- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/yello/di/DataSourceModule.kt b/app/src/main/java/com/yello/di/DataSourceModule.kt index 5bfec956a..bb1060985 100644 --- a/app/src/main/java/com/yello/di/DataSourceModule.kt +++ b/app/src/main/java/com/yello/di/DataSourceModule.kt @@ -35,4 +35,4 @@ object DataSourceModule { @Singleton fun provideRecommendDataSource(recommendDataSourceImpl: RecommendDataSourceImpl): RecommendDataSource = recommendDataSourceImpl -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/di/RepositoryModule.kt b/app/src/main/java/com/yello/di/RepositoryModule.kt index 847911d94..df962a89a 100644 --- a/app/src/main/java/com/yello/di/RepositoryModule.kt +++ b/app/src/main/java/com/yello/di/RepositoryModule.kt @@ -1,9 +1,11 @@ package com.yello.di +import com.example.data.repository.AuthRepositoryImpl import com.example.data.repository.OnboardingRepositoryImpl import com.example.data.repository.RecommendRepositoryImpl import com.example.data.repository.VoteRepositoryImpl import com.example.data.repository.YelloRepositoryImpl +import com.example.domain.repository.AuthRepository import com.example.domain.repository.OnboardingRepository import com.example.domain.repository.RecommendRepository import com.example.domain.repository.VoteRepository @@ -36,4 +38,8 @@ object RepositoryModule { @Singleton fun provideRecommendRepository(recommendRepositoryImpl: RecommendRepositoryImpl): RecommendRepository = recommendRepositoryImpl + + @Provides + @Singleton + fun provideAuthRepository(authRepositoryImpl: AuthRepositoryImpl): AuthRepository = authRepositoryImpl } \ No newline at end of file diff --git a/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt b/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt index 4f46ccd20..052b68d67 100644 --- a/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt +++ b/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt @@ -125,8 +125,6 @@ class SignInActivity : BindingActivity(R.layout.activity_ viewModel.postState.observe(this) { state -> when (state) { is UiState.Success -> { - // TODO: 서비스 토큰 값 저장 - val serviceAccessToken = state.data?.accessToken startMainActivity() } diff --git a/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt b/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt index 356b4d552..53a76a3ca 100644 --- a/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt +++ b/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.domain.entity.RequestServiceTokenModel import com.example.domain.entity.ServiceTokenModel +import com.example.domain.repository.AuthRepository import com.example.domain.repository.OnboardingRepository import com.example.ui.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel @@ -16,6 +17,7 @@ import javax.inject.Inject @HiltViewModel class SignInViewModel @Inject constructor( private val onboardingRepository: OnboardingRepository, + private val authRepository: AuthRepository ) : ViewModel() { private val _postState = MutableLiveData>() val postState: LiveData> = _postState @@ -46,7 +48,12 @@ class SignInViewModel @Inject constructor( RequestServiceTokenModel(accessToken, social), ) }.onSuccess { + if (it == null) { + _postState.value = UiState.Empty + return@launch + } _postState.value = UiState.Success(it) + authRepository.setAutoLogin(it.accessToken, it.refreshToken) }.onFailure { if (it is HttpException && it.code() == 403) { _postState.value = UiState.Failure("403") diff --git a/domain/src/main/java/com/example/domain/repository/RecommendRepository.kt b/domain/src/main/java/com/example/domain/repository/RecommendRepository.kt index c7d67b7b4..9672a5c2f 100644 --- a/domain/src/main/java/com/example/domain/repository/RecommendRepository.kt +++ b/domain/src/main/java/com/example/domain/repository/RecommendRepository.kt @@ -1,22 +1,20 @@ package com.example.domain.repository +import com.example.domain.entity.RecommendAddModel import com.example.domain.entity.RecommendModel import com.example.domain.entity.RequestRecommendKakaoModel -import com.example.domain.entity.RecommendAddModel interface RecommendRepository { - suspend fun postToGetKakaoFriendList( page: Int, - request: RequestRecommendKakaoModel + request: RequestRecommendKakaoModel, ): RecommendModel? suspend fun getSchoolFriendList( - page: Int + page: Int, ): RecommendModel? suspend fun postFriendAdd( - friendId: Long + friendId: Long, ): RecommendAddModel - -} \ No newline at end of file +} From 2ba6a992a4fd20126a44d5287d0e7e8910a7b8ef Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 02:44:30 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[FEAT/#49]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=20=EC=9E=90=EB=8F=99=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yello/presentation/auth/SignInActivity.kt | 24 ++++++++++--- .../presentation/auth/SignInViewModel.kt | 35 +++++++++++++++++-- .../activity/OnBoardingViewModel.kt | 4 +++ .../remote/interceptor/AuthInterceptor.kt | 1 - .../data/repository/ProfileRepositoryImpl.kt | 9 +++-- 5 files changed, 59 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt b/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt index 0d1600712..c2d7dd673 100644 --- a/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt +++ b/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt @@ -37,6 +37,7 @@ class SignInActivity : BindingActivity(R.layout.activity_ Timber.tag(TAG_AUTH).d(keyHash) initSignInButtonListener() + setupGetUserProfileState() } private fun initSignInButtonListener() { @@ -57,7 +58,6 @@ class SignInActivity : BindingActivity(R.layout.activity_ accountLoginCallback = { token, error -> if (error != null) { Timber.tag(TAG_AUTH).e(error, getString(R.string.sign_in_error_kakao_account_login)) - } else if (token != null) { setDataFromObserver(token) } else { @@ -125,20 +125,20 @@ class SignInActivity : BindingActivity(R.layout.activity_ viewModel.postState.observe(this) { state -> when (state) { is UiState.Success -> { - // 500(가입된 아이디): 온보딩뷰 생략하고 바로 메인화면으로 이동 - startMainActivity() + // 500(가입된 아이디): 온보딩 뷰 생략하고 바로 메인 화면으로 이동 + viewModel.getUserData() } is UiState.Failure -> { if (state.msg == "403") { - // 403(가입되지 않은 아이디): 온보딩뷰로 이동 + // 403(가입되지 않은 아이디): 온보딩 뷰로 이동 getKakaoInfo() startSocialSyncActivity() } else { // 401 : 에러 발생 yelloSnackbar( binding.root.rootView, - getString(R.string.sign_in_error_connection) + getString(R.string.sign_in_error_connection), ) } } @@ -186,6 +186,20 @@ class SignInActivity : BindingActivity(R.layout.activity_ finish() } + private fun setupGetUserProfileState() { + viewModel.getUserProfileState.observe(this) { state -> + when (state) { + is UiState.Success -> { + startMainActivity() + } + + is UiState.Failure -> { yelloSnackbar(binding.root, getString(R.string.msg_error)) } + is UiState.Empty -> { yelloSnackbar(binding.root, getString(R.string.msg_error)) } + is UiState.Loading -> {} + } + } + } + private fun startMainActivity() { Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) diff --git a/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt b/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt index 2dd2ec917..be007f274 100644 --- a/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt +++ b/app/src/main/java/com/yello/presentation/auth/SignInViewModel.kt @@ -8,21 +8,28 @@ import com.example.domain.entity.RequestServiceTokenModel import com.example.domain.entity.ServiceTokenModel import com.example.domain.repository.AuthRepository import com.example.domain.repository.OnboardingRepository +import com.example.domain.repository.ProfileRepository import com.example.ui.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.launch import retrofit2.HttpException -import javax.inject.Inject +import timber.log.Timber @HiltViewModel class SignInViewModel @Inject constructor( private val onboardingRepository: OnboardingRepository, - private val authRepository: AuthRepository + private val authRepository: AuthRepository, + private val profileRepository: ProfileRepository, ) : ViewModel() { private val _postState = MutableLiveData>() val postState: LiveData> = _postState + private val _getUserProfileState = MutableLiveData>() + val getUserProfileState: LiveData> + get() = _getUserProfileState + private val _kakaoUserId = MutableLiveData(-1) val kakaoUserId: LiveData get() = _kakaoUserId @@ -68,7 +75,29 @@ class SignInViewModel @Inject constructor( } } + fun getUserData() { + viewModelScope.launch { + runCatching { + profileRepository.getUserData() + }.onSuccess { profile -> + if (profile == null) { + _getUserProfileState.value = UiState.Empty + return@launch + } + + _getUserProfileState.value = UiState.Success(Unit) + authRepository.setYelloId(profile.yelloId) + } + .onFailure { t -> + if (t is HttpException) { + Timber.e("GET USER PROFILE FAILURE : $t") + _getUserProfileState.value = UiState.Failure(t.code().toString()) + } + } + } + } + private companion object { const val KAKAO = "KAKAO" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt b/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt index ebf1604d8..54908bb03 100644 --- a/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt +++ b/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt @@ -12,6 +12,7 @@ import com.example.domain.entity.onboarding.GroupList import com.example.domain.entity.onboarding.SchoolList import com.example.domain.entity.onboarding.SignupInfo import com.example.domain.entity.onboarding.UserInfo +import com.example.domain.repository.AuthRepository import com.example.domain.repository.OnboardingRepository import com.example.ui.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel @@ -24,6 +25,7 @@ import timber.log.Timber @HiltViewModel class OnBoardingViewModel @Inject constructor( private val onboardingRepository: OnboardingRepository, + private val authRepository: AuthRepository, ) : ViewModel() { private val _postSignupState = MutableLiveData>() val postSignupState: LiveData> @@ -230,6 +232,8 @@ class OnBoardingViewModel @Inject constructor( return@launch } _postSignupState.value = UiState.Success(userInfo) + authRepository.setAutoLogin(userInfo.accessToken, userInfo.refreshToken) + authRepository.setYelloId(userInfo.yelloId) } .onFailure { t -> if (t is HttpException) { diff --git a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt index 1b47003a9..1eaa80a03 100644 --- a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt +++ b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt @@ -66,7 +66,6 @@ class AuthInterceptor @Inject constructor( return response } - // TODO: Bearer ${dataStore.userToken} private fun Request.newAuthBuilder() = this.newBuilder().addHeader(HEADER_AUTHORIZATION, "Bearer ${dataStore.userToken}") diff --git a/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt b/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt index 99a473f76..c46c318f1 100644 --- a/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt +++ b/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt @@ -7,7 +7,7 @@ import com.example.domain.repository.ProfileRepository import javax.inject.Inject class ProfileRepositoryImpl @Inject constructor( - private val profileDataSource: ProfileDataSource + private val profileDataSource: ProfileDataSource, ) : ProfileRepository { override suspend fun getUserData(): ProfileUserModel? { @@ -18,12 +18,11 @@ class ProfileRepositoryImpl @Inject constructor( return profileDataSource.getFriendsData(page).data?.toProfileFriendsListModel() } - override suspend fun deleteUserData(): Unit { + override suspend fun deleteUserData() { return profileDataSource.deleteUserData().data ?: Unit } - override suspend fun deleteFriendData(friendId: Int): Unit { + override suspend fun deleteFriendData(friendId: Int) { return profileDataSource.deleteFriendData(friendId).data ?: Unit } - -} \ No newline at end of file +} From 93879bb2bcbda1f1523e96c201d2740c23528cec Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 04:57:01 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[FIX/#49]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yello/presentation/auth/SignInActivity.kt | 44 ++++++++++--------- .../presentation/auth/SocialSyncActivity.kt | 12 +++-- .../onboarding/activity/OnBoardingActivity.kt | 2 +- .../activity/OnBoardingViewModel.kt | 8 ++-- .../fragment/startapp/StartAppFragment.kt | 16 ++++--- .../onboarding/RequestPostSignupDto.kt | 7 +-- .../remote/interceptor/AuthInterceptor.kt | 5 +-- .../data/repository/AuthRepositoryImpl.kt | 2 - .../domain/entity/onboarding/SignupInfo.kt | 2 +- 9 files changed, 54 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt b/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt index c2d7dd673..203ef93ef 100644 --- a/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt +++ b/app/src/main/java/com/yello/presentation/auth/SignInActivity.kt @@ -133,7 +133,6 @@ class SignInActivity : BindingActivity(R.layout.activity_ if (state.msg == "403") { // 403(가입되지 않은 아이디): 온보딩 뷰로 이동 getKakaoInfo() - startSocialSyncActivity() } else { // 401 : 에러 발생 yelloSnackbar( @@ -162,30 +161,27 @@ class SignInActivity : BindingActivity(R.layout.activity_ private fun getKakaoInfo() { UserApiClient.instance.me { user, _ -> - if (user != null) { - viewModel.setKakaoInfo( - kakaoId = user.id?.toInt() ?: return@me, - email = user.kakaoAccount?.email ?: "", - profileImage = user.kakaoAccount?.profile?.thumbnailImageUrl ?: "", - ) - return@me + try { + if (user != null) { + Timber.d("KAKAO INFO : $user") + Intent(this, SocialSyncActivity::class.java).apply { + putExtra(EXTRA_KAKAO_ID, user.id) + putExtra(EXTRA_EMAIL, user.kakaoAccount?.email) + putExtra(EXTRA_PROFILE_IMAGE, user.kakaoAccount?.profile?.profileImageUrl) + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + startActivity(this) + } + finish() + return@me + } + } catch (e: IllegalArgumentException) { + yelloSnackbar(binding.root, getString(R.string.msg_error)) } } Timber.e("카카오 정보 불러오기 실패") yelloSnackbar(binding.root, getString(R.string.msg_error)) } - private fun startSocialSyncActivity() { - Intent(this, SocialSyncActivity::class.java).apply { - putExtra(EXTRA_KAKAO_ID, viewModel.kakaoUserId.value) - putExtra(EXTRA_EMAIL, viewModel.email.value) - putExtra(EXTRA_PROFILE_IMAGE, viewModel.profileImage.value) - addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - startActivity(this) - } - finish() - } - private fun setupGetUserProfileState() { viewModel.getUserProfileState.observe(this) { state -> when (state) { @@ -193,8 +189,14 @@ class SignInActivity : BindingActivity(R.layout.activity_ startMainActivity() } - is UiState.Failure -> { yelloSnackbar(binding.root, getString(R.string.msg_error)) } - is UiState.Empty -> { yelloSnackbar(binding.root, getString(R.string.msg_error)) } + is UiState.Failure -> { + yelloSnackbar(binding.root, getString(R.string.msg_error)) + } + + is UiState.Empty -> { + yelloSnackbar(binding.root, getString(R.string.msg_error)) + } + is UiState.Loading -> {} } } diff --git a/app/src/main/java/com/yello/presentation/auth/SocialSyncActivity.kt b/app/src/main/java/com/yello/presentation/auth/SocialSyncActivity.kt index 3468ff622..26cdc28f5 100644 --- a/app/src/main/java/com/yello/presentation/auth/SocialSyncActivity.kt +++ b/app/src/main/java/com/yello/presentation/auth/SocialSyncActivity.kt @@ -42,10 +42,14 @@ class SocialSyncActivity : private fun startOnBoardingActivity() { intent.apply { + val kakaoId = getLongExtra(EXTRA_KAKAO_ID, -1) + val email = getStringExtra(EXTRA_EMAIL) + val profileImage = getStringExtra(EXTRA_PROFILE_IMAGE) + Timber.d("KAKAO ID : $kakaoId, EMAIL : $email, PROFILE : $profileImage") Intent(this@SocialSyncActivity, OnBoardingActivity::class.java).apply { - putExtra(EXTRA_KAKAO_ID, getIntExtra(EXTRA_KAKAO_ID, -1)) - putExtra(EXTRA_EMAIL, getStringExtra(EXTRA_EMAIL)) - putExtra(EXTRA_PROFILE_IMAGE, getStringExtra(EXTRA_PROFILE_IMAGE)) + putExtra(EXTRA_KAKAO_ID, kakaoId) + putExtra(EXTRA_EMAIL, email) + putExtra(EXTRA_PROFILE_IMAGE, profileImage) addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) startActivity(this) } @@ -56,4 +60,4 @@ class SocialSyncActivity : private companion object { const val TAG_SYNC = "authSocialSync" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingActivity.kt b/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingActivity.kt index 486479311..b1ef70b08 100644 --- a/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingActivity.kt +++ b/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingActivity.kt @@ -26,7 +26,7 @@ class OnBoardingActivity : private fun getIntentExtraData() { intent.apply { - viewModel.kakaoId = getIntExtra(EXTRA_KAKAO_ID, -1) + viewModel.kakaoId = getLongExtra(EXTRA_KAKAO_ID, -1).toString() viewModel.email = getStringExtra(EXTRA_EMAIL) ?: "" viewModel.profileImg = getStringExtra(EXTRA_PROFILE_IMAGE) ?: "" } diff --git a/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt b/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt index 54908bb03..1bd75403e 100644 --- a/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt +++ b/app/src/main/java/com/yello/presentation/onboarding/activity/OnBoardingViewModel.kt @@ -16,11 +16,11 @@ import com.example.domain.repository.AuthRepository import com.example.domain.repository.OnboardingRepository import com.example.ui.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel -import java.util.regex.Pattern -import javax.inject.Inject import kotlinx.coroutines.launch import retrofit2.HttpException import timber.log.Timber +import java.util.regex.Pattern +import javax.inject.Inject @HiltViewModel class OnBoardingViewModel @Inject constructor( @@ -63,7 +63,7 @@ class OnBoardingViewModel @Inject constructor( val school: String get() = _school.value?.trim() ?: "" - var kakaoId: Int = -1 + var kakaoId: String = "" var email: String = "" var profileImg: String = "" @@ -231,9 +231,9 @@ class OnBoardingViewModel @Inject constructor( _postSignupState.value = UiState.Empty return@launch } - _postSignupState.value = UiState.Success(userInfo) authRepository.setAutoLogin(userInfo.accessToken, userInfo.refreshToken) authRepository.setYelloId(userInfo.yelloId) + _postSignupState.value = UiState.Success(userInfo) } .onFailure { t -> if (t is HttpException) { diff --git a/app/src/main/java/com/yello/presentation/onboarding/fragment/startapp/StartAppFragment.kt b/app/src/main/java/com/yello/presentation/onboarding/fragment/startapp/StartAppFragment.kt index 7ba73a706..18737ce84 100644 --- a/app/src/main/java/com/yello/presentation/onboarding/fragment/startapp/StartAppFragment.kt +++ b/app/src/main/java/com/yello/presentation/onboarding/fragment/startapp/StartAppFragment.kt @@ -1,18 +1,24 @@ package com.yello.presentation.onboarding.fragment.startapp +import android.content.Intent import android.os.Bundle import android.view.View -import androidx.fragment.app.activityViewModels import com.example.ui.base.BindingFragment +import com.example.ui.view.setOnSingleClickListener import com.yello.R import com.yello.databinding.FragmentStartappBinding -import com.yello.presentation.onboarding.activity.OnBoardingViewModel +import com.yello.presentation.main.MainActivity class StartAppFragment : BindingFragment(R.layout.fragment_startapp) { - - private val viewModel by activityViewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - // TODO 대부분의 로직은 여기에 구현합니다. + + binding.btnStartYello.setOnSingleClickListener { + Intent(activity, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + startActivity(this) + } + requireActivity().finish() + } } } diff --git a/data/src/main/java/com/example/data/model/request/onboarding/RequestPostSignupDto.kt b/data/src/main/java/com/example/data/model/request/onboarding/RequestPostSignupDto.kt index f1a16104c..98ab1b390 100644 --- a/data/src/main/java/com/example/data/model/request/onboarding/RequestPostSignupDto.kt +++ b/data/src/main/java/com/example/data/model/request/onboarding/RequestPostSignupDto.kt @@ -7,9 +7,9 @@ import kotlinx.serialization.Serializable @Serializable data class RequestPostSignupDto( @SerialName("social") - val social: String = "KAKAO", + val social: String, @SerialName("uuid") - val uuid: Int, + val uuid: String, @SerialName("email") val email: String, @SerialName("profileImage") @@ -31,6 +31,7 @@ data class RequestPostSignupDto( ) fun SignupInfo.toRequestPostSignupDto() = RequestPostSignupDto( + social = "KAKAO", uuid = kakaoId, email = email, profileImage = profileImg, @@ -38,7 +39,7 @@ fun SignupInfo.toRequestPostSignupDto() = RequestPostSignupDto( groupAdmissionYear = studentId, name = name, yelloId = yelloId, - gender = gender.toString(), + gender = gender, friends = friendList, recommendId = recommendId, ) diff --git a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt index 1eaa80a03..3cba0d381 100644 --- a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt +++ b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt @@ -3,12 +3,12 @@ package com.example.data.remote.interceptor import com.example.data.model.response.onboarding.ResponseAuthToken import com.example.domain.YelloDataStore import com.yello.data.BuildConfig.BASE_URL -import javax.inject.Inject import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response import timber.log.Timber +import javax.inject.Inject class AuthInterceptor @Inject constructor( private val json: Json, @@ -19,8 +19,7 @@ class AuthInterceptor @Inject constructor( val authRequest = if (dataStore.isLogin) { originalRequest.newAuthBuilder().build() } else { - // TODO: 수정 - originalRequest.newAuthBuilder().build() + originalRequest } val response = chain.proceed(authRequest) diff --git a/data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt b/data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt index 9fd3b4b0d..e222ada0f 100644 --- a/data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt +++ b/data/src/main/java/com/example/data/repository/AuthRepositoryImpl.kt @@ -1,12 +1,10 @@ package com.example.data.repository -import android.content.SharedPreferences import com.example.domain.YelloDataStore import com.example.domain.repository.AuthRepository import javax.inject.Inject class AuthRepositoryImpl @Inject constructor( - private val dataStore: SharedPreferences, private val yelloDataStore: YelloDataStore, ) : AuthRepository { override fun setAutoLogin(userToken: String, refreshToken: String) { diff --git a/domain/src/main/java/com/example/domain/entity/onboarding/SignupInfo.kt b/domain/src/main/java/com/example/domain/entity/onboarding/SignupInfo.kt index ea8464f56..693de8c31 100644 --- a/domain/src/main/java/com/example/domain/entity/onboarding/SignupInfo.kt +++ b/domain/src/main/java/com/example/domain/entity/onboarding/SignupInfo.kt @@ -1,7 +1,7 @@ package com.example.domain.entity.onboarding data class SignupInfo( - val kakaoId: Int, + val kakaoId: String, val email: String, val profileImg: String, val groupId: Long, From ab1b7d5c7296137754f663be2072e529eb000bd3 Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 06:17:37 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[FEAT/#49]=20=EC=9E=90=EB=8F=99=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EB=B0=8F=20=EB=A1=9C=EC=BB=AC=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../main/profile/ProfileViewModel.kt | 15 +++++++++---- .../profile/manage/ProfileManageActivity.kt | 7 +++++-- .../presentation/main/yello/YelloViewModel.kt | 3 --- .../main/yello/dialog/UnlockDialogFragment.kt | 4 +--- .../{main => splash}/SplashActivity.kt | 21 ++++++++++++++++++- .../presentation/splash/SplashViewModel.kt | 13 ++++++++++++ .../remote/interceptor/AuthInterceptor.kt | 2 +- 8 files changed, 52 insertions(+), 15 deletions(-) rename app/src/main/java/com/yello/presentation/{main => splash}/SplashActivity.kt (50%) create mode 100644 app/src/main/java/com/yello/presentation/splash/SplashViewModel.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c4af7d8c4..7868c8738 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,7 @@ android:usesCleartextTraffic="true" tools:targetApi="31"> diff --git a/app/src/main/java/com/yello/presentation/main/profile/ProfileViewModel.kt b/app/src/main/java/com/yello/presentation/main/profile/ProfileViewModel.kt index a7956740e..95940a4f4 100644 --- a/app/src/main/java/com/yello/presentation/main/profile/ProfileViewModel.kt +++ b/app/src/main/java/com/yello/presentation/main/profile/ProfileViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.domain.entity.ProfileFriendsListModel import com.example.domain.entity.ProfileUserModel +import com.example.domain.repository.AuthRepository import com.example.domain.repository.ProfileRepository import com.example.ui.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel @@ -16,7 +17,8 @@ import kotlin.math.ceil @HiltViewModel class ProfileViewModel @Inject constructor( - private val profileRepository: ProfileRepository + private val profileRepository: ProfileRepository, + private val authRepository: AuthRepository, ) : ViewModel() { private val _getState = MutableLiveData>() @@ -84,7 +86,7 @@ class ProfileViewModel @Inject constructor( if (isPagingFinish) return@launch runCatching { profileRepository.getFriendsData( - ++currentPage + ++currentPage, ) }.onSuccess { it ?: return@launch @@ -103,6 +105,7 @@ class ProfileViewModel @Inject constructor( _deleteUserState.value = UiState.Loading runCatching { profileRepository.deleteUserData() + clearLocalInfo() }.onSuccess { _deleteUserState.value = UiState.Success(it) }.onFailure { @@ -117,7 +120,7 @@ class ProfileViewModel @Inject constructor( _deleteFriendState.value = UiState.Loading runCatching { profileRepository.deleteFriendData( - friendId + friendId, ) }.onSuccess { _deleteFriendState.value = UiState.Success(it) @@ -126,4 +129,8 @@ class ProfileViewModel @Inject constructor( } } } -} \ No newline at end of file + + fun clearLocalInfo() { + authRepository.clearLocalPref() + } +} diff --git a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt index 88549d6f9..b25ab619d 100644 --- a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt +++ b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt @@ -4,15 +4,18 @@ import android.app.Activity import android.content.Context import android.content.Intent import android.os.Bundle +import androidx.activity.viewModels import com.example.ui.base.BindingActivity import com.example.ui.view.setOnSingleClickListener import com.kakao.sdk.user.UserApiClient import com.yello.R import com.yello.databinding.ActivityProfileManageBinding +import com.yello.presentation.main.profile.ProfileViewModel import timber.log.Timber class ProfileManageActivity : BindingActivity(R.layout.activity_profile_manage) { + private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -20,7 +23,6 @@ class ProfileManageActivity : initBackButton(this) initProfileQuitActivityWithoutFinish() - binding.btnProfileManageCenter.setOnSingleClickListener { // TODO: 버튼 3개 링크 설정 } @@ -51,6 +53,7 @@ class ProfileManageActivity : if (error != null) { Timber.d(getString(R.string.profile_error_logout)) } else { + viewModel.clearLocalInfo() restartApp(this) } } @@ -65,4 +68,4 @@ class ProfileManageActivity : context.startActivity(mainIntent) Runtime.getRuntime().exit(0) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt b/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt index e95ca01d0..469386bdb 100644 --- a/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt +++ b/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt @@ -44,9 +44,6 @@ class YelloViewModel @Inject constructor( init { getVoteState() - dataStore.isLogin = true - dataStore.userToken = - "eyJ0eXBlIjoiYWNjZXNzVG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyOTExNzI0MDAyIiwianRpIjoiMTQ4IiwiaWF0IjoxNjg5NjE5NzkzLCJleHAiOjE2ODk3MDYxOTN9.pBvnzLuwAg2wDZZ77HUBbdZvE0-Xvp6XRhqF9ZDA1xc" } fun decreaseTime() { diff --git a/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt b/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt index 492b2130c..132e59aa4 100644 --- a/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt +++ b/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt @@ -13,8 +13,6 @@ import com.kakao.sdk.share.ShareClient import com.kakao.sdk.share.WebSharerClient import com.yello.R import com.yello.databinding.FragmentUnlockDialogBinding -import com.yello.presentation.main.recommend.RecommendInviteDialog -import com.yello.util.context.yelloSnackbar import timber.log.Timber class UnlockDialogFragment : @@ -74,7 +72,7 @@ class UnlockDialogFragment : ShareClient.instance.shareCustom( context, templateId, - mapOf("KEY" to myYelloId) + mapOf("KEY" to myYelloId), ) { sharingResult, error -> if (error != null) { Timber.tag(TAG_SHARE).e(error, getString(R.string.invite_error_kakao)) diff --git a/app/src/main/java/com/yello/presentation/main/SplashActivity.kt b/app/src/main/java/com/yello/presentation/splash/SplashActivity.kt similarity index 50% rename from app/src/main/java/com/yello/presentation/main/SplashActivity.kt rename to app/src/main/java/com/yello/presentation/splash/SplashActivity.kt index 6c298c879..412a39473 100644 --- a/app/src/main/java/com/yello/presentation/main/SplashActivity.kt +++ b/app/src/main/java/com/yello/presentation/splash/SplashActivity.kt @@ -1,22 +1,41 @@ -package com.yello.presentation.main +package com.yello.presentation.splash import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper +import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import com.yello.R import com.yello.presentation.auth.SignInActivity +import com.yello.presentation.main.MainActivity +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { + val viewModel by viewModels() + super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash) Handler(Looper.getMainLooper()).postDelayed({ + if (viewModel.getIsAutoLogin()) { + navigateToMainScreen() + return@postDelayed + } + val intent = Intent(this, SignInActivity::class.java) startActivity(intent) finish() }, 3000) } + + private fun navigateToMainScreen() { + Intent(this@SplashActivity, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + startActivity(this) + } + finish() + } } diff --git a/app/src/main/java/com/yello/presentation/splash/SplashViewModel.kt b/app/src/main/java/com/yello/presentation/splash/SplashViewModel.kt new file mode 100644 index 000000000..5c3904808 --- /dev/null +++ b/app/src/main/java/com/yello/presentation/splash/SplashViewModel.kt @@ -0,0 +1,13 @@ +package com.yello.presentation.splash + +import androidx.lifecycle.ViewModel +import com.example.domain.repository.AuthRepository +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class SplashViewModel @Inject constructor( + private val authRepository: AuthRepository, +) : ViewModel() { + fun getIsAutoLogin(): Boolean = authRepository.getAutoLogin() +} diff --git a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt index b2f1f53d7..1f89ce7cb 100644 --- a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt +++ b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt @@ -3,12 +3,12 @@ package com.example.data.remote.interceptor import com.example.data.model.response.onboarding.ResponseAuthToken import com.example.domain.YelloDataStore import com.yello.data.BuildConfig.BASE_URL -import javax.inject.Inject import kotlinx.serialization.json.Json import okhttp3.Interceptor import okhttp3.Request import okhttp3.Response import timber.log.Timber +import javax.inject.Inject class AuthInterceptor @Inject constructor( private val json: Json, From dfd462afff7d898dc040ae3931616f455430b8d9 Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 17:58:12 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[FEAT/#49]=20=EC=98=90=EB=A1=9C=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EB=94=94=20=EB=B6=88=EB=9F=AC=EC=98=A4=EA=B8=B0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../profile/manage/ProfileManageActivity.kt | 4 +- .../main/profile/manage/ProfileQuitDialog.kt | 24 +++++------- .../manage/ProfileQuitForSureActivity.kt | 2 +- .../main/recommend/RecommendInviteDialog.kt | 31 ++++++++++++--- .../main/recommend/RecommendKakaoFragment.kt | 29 +++++++------- .../main/recommend/RecommendKakaoViewModel.kt | 14 ++++--- .../main/recommend/RecommendSchoolFragment.kt | 26 ++++++++----- .../recommend/RecommendSchoolViewModel.kt | 13 ++++--- .../presentation/main/yello/YelloViewModel.kt | 12 +++--- .../main/yello/dialog/UnlockDialogFragment.kt | 38 ++++++++++++++----- .../main/yello/lock/YelloLockFragment.kt | 5 ++- .../remote/interceptor/AuthInterceptor.kt | 1 + 12 files changed, 127 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt index b25ab619d..1ad36ce15 100644 --- a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt +++ b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileManageActivity.kt @@ -47,11 +47,10 @@ class ProfileManageActivity : } } - // 카카오 로그아웃 후 앱 재시작 private fun logoutKakaoAccount() { UserApiClient.instance.logout { error -> if (error != null) { - Timber.d(getString(R.string.profile_error_logout)) + Timber.d(getString(R.string.profile_error_logout) + ": $error") } else { viewModel.clearLocalInfo() restartApp(this) @@ -59,7 +58,6 @@ class ProfileManageActivity : } } - // 앱 재시작 로직 private fun restartApp(context: Context) { val packageManager = context.packageManager val intent = packageManager.getLaunchIntentForPackage(context.packageName) diff --git a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitDialog.kt b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitDialog.kt index badad24ef..140a2138b 100644 --- a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitDialog.kt +++ b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitDialog.kt @@ -17,7 +17,6 @@ import com.yello.presentation.main.profile.ProfileViewModel import com.yello.util.context.yelloSnackbar import timber.log.Timber - class ProfileQuitDialog : BindingDialogFragment(R.layout.fragment_profile_quit_dialog) { @@ -28,15 +27,6 @@ class ProfileQuitDialog : setDialogBackground() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - initQuitButtonListener() - initRejectButtonListener() - observeUserDeleteState() - } - - // 다이얼로그 배경 설정 private fun setDialogBackground() { val deviceWidth = Resources.getSystem().displayMetrics.widthPixels val dialogHorizontalMargin = (Resources.getSystem().displayMetrics.density * 16) * 2 @@ -44,7 +34,7 @@ class ProfileQuitDialog : dialog?.window?.apply { setLayout( (deviceWidth - dialogHorizontalMargin * 2).toInt(), - WindowManager.LayoutParams.WRAP_CONTENT + WindowManager.LayoutParams.WRAP_CONTENT, ) setBackgroundDrawableResource(R.color.transparent) } @@ -52,6 +42,14 @@ class ProfileQuitDialog : dialog?.setCancelable(true) } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + initQuitButtonListener() + initRejectButtonListener() + observeUserDeleteState() + } + private fun initRejectButtonListener() { binding.btnProfileDialogReject.setOnSingleClickListener { dismiss() @@ -87,7 +85,6 @@ class ProfileQuitDialog : } } - // 카카오 연결 해제 성공 시 앱 재시작 private fun unlinkKakaoAccount() { UserApiClient.instance.unlink { error -> if (error != null) { @@ -98,7 +95,6 @@ class ProfileQuitDialog : } } - // 앱 재시작 로직 private fun restartApp(context: Context) { val packageManager = context.packageManager val intent = packageManager.getLaunchIntentForPackage(context.packageName) @@ -107,4 +103,4 @@ class ProfileQuitDialog : context.startActivity(mainIntent) Runtime.getRuntime().exit(0) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitForSureActivity.kt b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitForSureActivity.kt index 5be7d7ef0..a155f4e66 100644 --- a/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitForSureActivity.kt +++ b/app/src/main/java/com/yello/presentation/main/profile/manage/ProfileQuitForSureActivity.kt @@ -33,4 +33,4 @@ class ProfileQuitForSureActivity : private companion object { const val DIALOG = "dialog" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/presentation/main/recommend/RecommendInviteDialog.kt b/app/src/main/java/com/yello/presentation/main/recommend/RecommendInviteDialog.kt index a524ae5e9..175cdd486 100644 --- a/app/src/main/java/com/yello/presentation/main/recommend/RecommendInviteDialog.kt +++ b/app/src/main/java/com/yello/presentation/main/recommend/RecommendInviteDialog.kt @@ -6,6 +6,8 @@ import android.content.ClipboardManager import android.content.Context import android.os.Bundle import android.view.View +import android.view.WindowManager +import androidx.core.os.bundleOf import com.example.ui.base.BindingDialogFragment import com.example.ui.view.setOnSingleClickListener import com.kakao.sdk.common.util.KakaoCustomTabsClient @@ -13,6 +15,7 @@ import com.kakao.sdk.share.ShareClient import com.kakao.sdk.share.WebSharerClient import com.yello.R import com.yello.databinding.FragmentRecommendInviteDialogBinding +import com.yello.presentation.main.yello.dialog.UnlockDialogFragment.Companion.ARGS_YELLO_ID import timber.log.Timber class RecommendInviteDialog : @@ -21,25 +24,35 @@ class RecommendInviteDialog : override fun onStart() { super.onStart() dialog?.window?.apply { + dialog?.window?.apply { + setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.WRAP_CONTENT, + ) + } setBackgroundDrawableResource(R.color.transparent) } } - // 사용자 정의 템플릿 ID & 공유할 url - // TODO: 추천인 아이디 설정 & 링크 생기면 넣기 private val templateId = 95890.toLong() - private val myYelloId: String = "sangho.kk" + private lateinit var myYelloId: String private val linkText: String = "여기다 링크 넣어주세요" override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + getBundleArgs() setRecommendId() initExitButton() initKakaoInviteButton() initLinkInviteButton() } + private fun getBundleArgs() { + arguments ?: return + myYelloId = arguments?.getString(ARGS_YELLO_ID) ?: "" + } + private fun setRecommendId() { binding.tvRecommendDialogInviteId.text = myYelloId } @@ -72,7 +85,7 @@ class RecommendInviteDialog : ShareClient.instance.shareCustom( context, templateId, - mapOf("KEY" to myYelloId) + mapOf("KEY" to myYelloId), ) { sharingResult, error -> if (error != null) { Timber.tag(TAG_SHARE).e(error, getString(R.string.invite_error_kakao)) @@ -101,7 +114,15 @@ class RecommendInviteDialog : } } - private companion object { + companion object { const val TAG_SHARE = "recommendInvite" + + @JvmStatic + fun newInstance(yelloId: String) = RecommendInviteDialog().apply { + val args = bundleOf( + ARGS_YELLO_ID to yelloId, + ) + arguments = args + } } } diff --git a/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoFragment.kt b/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoFragment.kt index f0e076b16..1fbf89bbe 100644 --- a/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoFragment.kt +++ b/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoFragment.kt @@ -33,8 +33,7 @@ class RecommendKakaoFragment : private val viewModel by viewModels() private var adapter: RecommendAdapter? = null - - private var recommendInviteDialog: RecommendInviteDialog = RecommendInviteDialog() + private var recommendInviteDialog: RecommendInviteDialog? = null private lateinit var friendsList: List private lateinit var kakaoFriendIdList: List @@ -60,14 +59,12 @@ class RecommendKakaoFragment : TalkApiClient.instance.friends { friends, error -> if (error != null) { Timber.e(error, getString(R.string.recommend_error_friends_list)) - } else if (friends != null) { val friendList: List? = friends.elements kakaoFriendIdList = friendList?.map { friend -> friend.id.toString() } ?: listOf() initFirstListWithAdapter(kakaoFriendIdList) setListWithInfinityScroll(kakaoFriendIdList) - } else { Timber.d(getString(R.string.recommend_error_no_kakao_friend)) } @@ -105,11 +102,12 @@ class RecommendKakaoFragment : } private fun initInviteButtonListener() { + recommendInviteDialog = RecommendInviteDialog.newInstance(viewModel.getYelloId()) binding.layoutInviteFriend.setOnSingleClickListener { - recommendInviteDialog.show(parentFragmentManager, DIALOG) + recommendInviteDialog?.show(parentFragmentManager, DIALOG) } binding.btnRecommendNoFriend.setOnSingleClickListener { - recommendInviteDialog.show(parentFragmentManager, DIALOG) + recommendInviteDialog?.show(parentFragmentManager, DIALOG) } } @@ -126,7 +124,10 @@ class RecommendKakaoFragment : is UiState.Failure -> { binding.layoutRecommendFriendsList.isVisible = false binding.layoutRecommendNoFriendsList.isVisible = true - yelloSnackbar(requireView(), getString(R.string.recommend_error_friend_connection)) + yelloSnackbar( + requireView(), + getString(R.string.recommend_error_friend_connection), + ) } is UiState.Loading -> {} @@ -155,14 +156,17 @@ class RecommendKakaoFragment : } is UiState.Failure -> { - yelloSnackbar(requireView(), getString(R.string.recommend_error_add_friend_connection)) + yelloSnackbar( + requireView(), + getString(R.string.recommend_error_add_friend_connection), + ) activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) } is UiState.Loading -> { activity?.window?.setFlags( WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, - WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, ) } @@ -175,14 +179,13 @@ class RecommendKakaoFragment : private fun setItemDivider() { binding.rvRecommendKakao.addItemDecoration( - RecommendItemDecoration(requireContext()) + RecommendItemDecoration(requireContext()), ) } private fun setDeleteAnimation() { binding.rvRecommendKakao.itemAnimator = object : DefaultItemAnimator() { override fun animateRemove(holder: RecyclerView.ViewHolder): Boolean { - holder.itemView.animation = AnimationUtils.loadAnimation(holder.itemView.context, R.anim.slide_out_right) @@ -192,7 +195,7 @@ class RecommendKakaoFragment : } private fun dismissDialog() { - if (recommendInviteDialog.isAdded) recommendInviteDialog.dismiss() + if (recommendInviteDialog?.isAdded == true) recommendInviteDialog?.dismiss() } // 삭제 시 체크 버튼으로 전환 후 0.3초 뒤 애니메이션 적용 @@ -218,4 +221,4 @@ class RecommendKakaoFragment : private companion object { const val DIALOG = "dialog" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoViewModel.kt b/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoViewModel.kt index bbde63a07..0ae01bded 100644 --- a/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoViewModel.kt +++ b/app/src/main/java/com/yello/presentation/main/recommend/RecommendKakaoViewModel.kt @@ -6,16 +6,18 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.domain.entity.RecommendModel import com.example.domain.entity.RequestRecommendKakaoModel +import com.example.domain.repository.AuthRepository import com.example.domain.repository.RecommendRepository import com.example.ui.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.launch import javax.inject.Inject import kotlin.math.ceil +import kotlinx.coroutines.launch @HiltViewModel class RecommendKakaoViewModel @Inject constructor( - private val recommendRepository: RecommendRepository + private val recommendRepository: RecommendRepository, + private val authRepository: AuthRepository, ) : ViewModel() { private val _postState = MutableLiveData>() @@ -44,7 +46,7 @@ class RecommendKakaoViewModel @Inject constructor( runCatching { recommendRepository.postToGetKakaoFriendList( ++currentPage, - RequestRecommendKakaoModel(friendKakaoId) + RequestRecommendKakaoModel(friendKakaoId), ) }.onSuccess { it ?: return@launch @@ -63,7 +65,7 @@ class RecommendKakaoViewModel @Inject constructor( _addState.value = UiState.Loading runCatching { recommendRepository.postFriendAdd( - friendId + friendId, ) }.onSuccess { _addState.value = UiState.Success(it) @@ -72,4 +74,6 @@ class RecommendKakaoViewModel @Inject constructor( } } } -} \ No newline at end of file + + fun getYelloId() = authRepository.getYelloId() ?: "" +} diff --git a/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolFragment.kt b/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolFragment.kt index b0e1fd3c6..9ee7625fb 100644 --- a/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolFragment.kt +++ b/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolFragment.kt @@ -31,7 +31,7 @@ class RecommendSchoolFragment : private val viewModel by viewModels() private var adapter: RecommendAdapter? = null - private var recommendInviteDialog: RecommendInviteDialog = RecommendInviteDialog() + private var recommendInviteDialog: RecommendInviteDialog? = null private lateinit var friendsList: List @@ -53,11 +53,12 @@ class RecommendSchoolFragment : } private fun initInviteButtonListener() { + recommendInviteDialog = RecommendInviteDialog.newInstance(viewModel.getYelloId()) binding.layoutInviteFriend.setOnSingleClickListener { - recommendInviteDialog.show(parentFragmentManager, DIALOG) + recommendInviteDialog?.show(parentFragmentManager, DIALOG) } binding.btnRecommendNoFriend.setOnSingleClickListener { - recommendInviteDialog.show(parentFragmentManager, DIALOG) + recommendInviteDialog?.show(parentFragmentManager, DIALOG) } } @@ -104,7 +105,10 @@ class RecommendSchoolFragment : is UiState.Failure -> { binding.layoutRecommendFriendsList.isVisible = false binding.layoutRecommendNoFriendsList.isVisible = true - yelloSnackbar(requireView(), getString(R.string.recommend_error_school_friend_connection)) + yelloSnackbar( + requireView(), + getString(R.string.recommend_error_school_friend_connection), + ) } is UiState.Loading -> {} @@ -133,14 +137,17 @@ class RecommendSchoolFragment : } is UiState.Failure -> { - yelloSnackbar(requireView(), getString(R.string.recommend_error_add_friend_connection)) + yelloSnackbar( + requireView(), + getString(R.string.recommend_error_add_friend_connection), + ) activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) } is UiState.Loading -> { activity?.window?.setFlags( WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, - WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE + WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, ) } @@ -153,14 +160,13 @@ class RecommendSchoolFragment : private fun setItemDivider() { binding.rvRecommendSchool.addItemDecoration( - RecommendItemDecoration(requireContext()) + RecommendItemDecoration(requireContext()), ) } private fun setDeleteAnimation() { binding.rvRecommendSchool.itemAnimator = object : DefaultItemAnimator() { override fun animateRemove(holder: RecyclerView.ViewHolder): Boolean { - holder.itemView.animation = AnimationUtils.loadAnimation(holder.itemView.context, R.anim.slide_out_right) @@ -170,7 +176,7 @@ class RecommendSchoolFragment : } private fun dismissDialog() { - if (recommendInviteDialog.isAdded) recommendInviteDialog.dismiss() + if (recommendInviteDialog?.isAdded == true) recommendInviteDialog?.dismiss() } // 삭제 시 체크 버튼으로 전환 후 0.3초 뒤 애니메이션 적용 @@ -196,4 +202,4 @@ class RecommendSchoolFragment : private companion object { const val DIALOG = "dialog" } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolViewModel.kt b/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolViewModel.kt index ba16b7ed6..dd3d73066 100644 --- a/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolViewModel.kt +++ b/app/src/main/java/com/yello/presentation/main/recommend/RecommendSchoolViewModel.kt @@ -5,17 +5,18 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.domain.entity.RecommendModel +import com.example.domain.repository.AuthRepository import com.example.domain.repository.RecommendRepository import com.example.ui.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.launch import javax.inject.Inject import kotlin.math.ceil - +import kotlinx.coroutines.launch @HiltViewModel class RecommendSchoolViewModel @Inject constructor( - private val recommendRepository: RecommendRepository + private val recommendRepository: RecommendRepository, + private val authRepository: AuthRepository, ) : ViewModel() { private val _postState = MutableLiveData>() @@ -43,7 +44,7 @@ class RecommendSchoolViewModel @Inject constructor( _postState.value = UiState.Loading runCatching { recommendRepository.getSchoolFriendList( - ++currentPage + ++currentPage, ) }.onSuccess { it ?: return@launch @@ -62,7 +63,7 @@ class RecommendSchoolViewModel @Inject constructor( _addState.value = UiState.Loading runCatching { recommendRepository.postFriendAdd( - friendId + friendId, ) }.onSuccess { _addState.value = UiState.Success(it) @@ -71,4 +72,6 @@ class RecommendSchoolViewModel @Inject constructor( } } } + + fun getYelloId() = authRepository.getYelloId() ?: "" } diff --git a/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt b/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt index 469386bdb..9318d9790 100644 --- a/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt +++ b/app/src/main/java/com/yello/presentation/main/yello/YelloViewModel.kt @@ -4,27 +4,27 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.example.domain.YelloDataStore import com.example.domain.entity.type.YelloState import com.example.domain.entity.type.YelloState.Lock import com.example.domain.entity.type.YelloState.Valid import com.example.domain.entity.type.YelloState.Wait +import com.example.domain.repository.AuthRepository import com.example.domain.repository.VoteRepository import com.example.ui.view.UiState import com.example.ui.view.UiState.Empty import com.example.ui.view.UiState.Failure import com.example.ui.view.UiState.Success import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject import kotlinx.coroutines.delay import kotlinx.coroutines.launch import retrofit2.HttpException import timber.log.Timber -import javax.inject.Inject @HiltViewModel class YelloViewModel @Inject constructor( private val voteRepository: VoteRepository, - private val dataStore: YelloDataStore, + private val authRepository: AuthRepository, ) : ViewModel() { val _yelloState = MutableLiveData>() val yelloState: LiveData> @@ -34,9 +34,7 @@ class YelloViewModel @Inject constructor( val leftTime: LiveData get() = _leftTime - val _point = MutableLiveData() - val point: Int - get() = _point.value ?: 0 + val _point = MutableLiveData(0) private val _isDecreasing = MutableLiveData(false) private val isDecreasing: Boolean @@ -95,6 +93,8 @@ class YelloViewModel @Inject constructor( } } + fun getYelloId() = authRepository.getYelloId() ?: "" + companion object { const val SEC_MAX_LOCK_TIME = 2400L diff --git a/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt b/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt index 132e59aa4..61c02f872 100644 --- a/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt +++ b/app/src/main/java/com/yello/presentation/main/yello/dialog/UnlockDialogFragment.kt @@ -6,6 +6,8 @@ import android.content.ClipboardManager import android.content.Context import android.os.Bundle import android.view.View +import android.view.WindowManager +import androidx.core.os.bundleOf import com.example.ui.base.BindingDialogFragment import com.example.ui.view.setOnSingleClickListener import com.kakao.sdk.common.util.KakaoCustomTabsClient @@ -17,29 +19,40 @@ import timber.log.Timber class UnlockDialogFragment : BindingDialogFragment(R.layout.fragment_unlock_dialog) { + + private val templateId = 95890.toLong() + private val url = "http://naver.com" + private lateinit var myYelloId: String + private val linkText: String = "여기다 링크 넣어주세요" + override fun onStart() { super.onStart() dialog?.window?.apply { + dialog?.window?.apply { + setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.WRAP_CONTENT, + ) + } setBackgroundDrawableResource(R.color.transparent) } } - // 사용자 정의 템플릿 ID & 공유할 url - // TODO: 추천인 아이디 설정 & 링크 생기면 넣기 - private val templateId = 95890.toLong() - private val url = "http://naver.com" - private val myYelloId: String = "sangho.kk" - private val linkText: String = "여기다 링크 넣어주세요" - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + getBundleArgs() setRecommendId() initExitButton() initKakaoInviteButton() initLinkInviteButton() } + private fun getBundleArgs() { + arguments ?: return + myYelloId = arguments?.getString(ARGS_YELLO_ID) ?: "" + } + private fun setRecommendId() { binding.tvUnlockInviteId.text = myYelloId } @@ -101,10 +114,17 @@ class UnlockDialogFragment : } } - private companion object { + companion object { const val TAG_SHARE = "UNLOCK" + const val ARGS_YELLO_ID = "YELLO_ID" + @JvmStatic - fun newInstance() = UnlockDialogFragment() + fun newInstance(yelloId: String) = UnlockDialogFragment().apply { + val args = bundleOf( + ARGS_YELLO_ID to yelloId, + ) + arguments = args + } } } diff --git a/app/src/main/java/com/yello/presentation/main/yello/lock/YelloLockFragment.kt b/app/src/main/java/com/yello/presentation/main/yello/lock/YelloLockFragment.kt index 96ff6af39..bf816cf3a 100644 --- a/app/src/main/java/com/yello/presentation/main/yello/lock/YelloLockFragment.kt +++ b/app/src/main/java/com/yello/presentation/main/yello/lock/YelloLockFragment.kt @@ -2,15 +2,18 @@ package com.yello.presentation.main.yello.lock import android.os.Bundle import android.view.View +import androidx.fragment.app.viewModels import com.example.ui.base.BindingFragment import com.example.ui.view.setOnSingleClickListener import com.yello.R import com.yello.databinding.FragmentYelloLockBinding +import com.yello.presentation.main.yello.YelloViewModel import com.yello.presentation.main.yello.dialog.UnlockDialogFragment import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class YelloLockFragment : BindingFragment(R.layout.fragment_yello_lock) { + private val viewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -20,7 +23,7 @@ class YelloLockFragment : BindingFragment(R.layout.fra private fun initInviteBtnClickListener() { binding.btnLockVote.setOnSingleClickListener { - UnlockDialogFragment().show(parentFragmentManager, TAG_UNLOCK_DIALOG) + UnlockDialogFragment.newInstance(viewModel.getYelloId()).show(parentFragmentManager, TAG_UNLOCK_DIALOG) } } diff --git a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt index 1f89ce7cb..de8f87f4c 100644 --- a/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt +++ b/data/src/main/java/com/example/data/remote/interceptor/AuthInterceptor.kt @@ -15,6 +15,7 @@ class AuthInterceptor @Inject constructor( private val dataStore: YelloDataStore, ) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { + Timber.d("ACCESS TOKEN : ${dataStore.userToken}") val originalRequest = chain.request() val authRequest = if (dataStore.isLogin) { originalRequest.newAuthBuilder().build() From f65d7f41dbea5789adb03328c7f25335bf01dd63 Mon Sep 17 00:00:00 2001 From: b1urrrr Date: Thu, 20 Jul 2023 18:14:27 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[FIX/#49]=20=EB=8C=80=EA=B8=B0=20=EB=B7=B0?= =?UTF-8?q?=20=EC=98=90=EB=A1=9C=20=EC=95=84=EC=9D=B4=EB=94=94=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yello/presentation/main/yello/wait/YelloWaitFragment.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/yello/presentation/main/yello/wait/YelloWaitFragment.kt b/app/src/main/java/com/yello/presentation/main/yello/wait/YelloWaitFragment.kt index 24a20cc6c..9286f32b3 100644 --- a/app/src/main/java/com/yello/presentation/main/yello/wait/YelloWaitFragment.kt +++ b/app/src/main/java/com/yello/presentation/main/yello/wait/YelloWaitFragment.kt @@ -33,7 +33,8 @@ class YelloWaitFragment : BindingFragment(R.layout.fra private fun initInviteBtnClickListener() { binding.btnWaitInvite.setOnSingleClickListener { - UnlockDialogFragment().show(parentFragmentManager, TAG_UNLOCK_DIALOG) + UnlockDialogFragment.newInstance(viewModel.getYelloId()) + .show(parentFragmentManager, TAG_UNLOCK_DIALOG) } }