From d4eedf111b3a271ad9223454d3e01f3792d55d8c Mon Sep 17 00:00:00 2001 From: minseong-PC Date: Thu, 2 Oct 2025 14:53:56 +0900 Subject: [PATCH 1/4] mod/#147 credential manager provide --- app/src/main/java/com/paw/key/data/di/AppModule.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/com/paw/key/data/di/AppModule.kt b/app/src/main/java/com/paw/key/data/di/AppModule.kt index fcb2ad21..3748a6fd 100644 --- a/app/src/main/java/com/paw/key/data/di/AppModule.kt +++ b/app/src/main/java/com/paw/key/data/di/AppModule.kt @@ -2,6 +2,7 @@ package com.paw.key.data.di import android.content.ContentResolver import android.content.Context +import androidx.credentials.CredentialManager import com.paw.key.BuildConfig import dagger.Module import dagger.Provides @@ -26,4 +27,12 @@ object AppModule { fun provideContentResolver(@ApplicationContext context: Context): ContentResolver { return context.contentResolver } + + @Provides + @Singleton + fun provideCredentialManager( + @ApplicationContext context: Context + ): CredentialManager { + return CredentialManager.create(context) + } } \ No newline at end of file From 22f360518bc1e9132c6c847be9b3cc74729a1bdc Mon Sep 17 00:00:00 2001 From: minseong-PC Date: Thu, 2 Oct 2025 14:54:32 +0900 Subject: [PATCH 2/4] =?UTF-8?q?mod/#147=20context=20=EC=A3=BC=EC=9E=85?= =?UTF-8?q?=EC=9D=84=20datastore=EB=A5=BC=20=EC=B6=94=EC=83=81=ED=99=94=20?= =?UTF-8?q?=EC=8B=9C=EC=BC=9C=EC=84=9C=20=EA=B1=B0=EA=B8=B0=EC=84=9C=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=ED=95=98=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../local/datasource/UserLocalDataSource.kt | 5 +++++ .../datasourceimpl/UserLocalDataSourceImpl.kt | 17 +++++++++++++++++ .../repositoryimpl/login/AuthRepositoryImpl.kt | 15 ++++++--------- 3 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/paw/key/data/local/datasource/UserLocalDataSource.kt create mode 100644 app/src/main/java/com/paw/key/data/local/datasourceimpl/UserLocalDataSourceImpl.kt diff --git a/app/src/main/java/com/paw/key/data/local/datasource/UserLocalDataSource.kt b/app/src/main/java/com/paw/key/data/local/datasource/UserLocalDataSource.kt new file mode 100644 index 00000000..828a4f40 --- /dev/null +++ b/app/src/main/java/com/paw/key/data/local/datasource/UserLocalDataSource.kt @@ -0,0 +1,5 @@ +package com.paw.key.data.local.datasource + +interface UserLocalDataSource { + suspend fun saveTokens(accessToken: String, refreshToken: String) +} \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/data/local/datasourceimpl/UserLocalDataSourceImpl.kt b/app/src/main/java/com/paw/key/data/local/datasourceimpl/UserLocalDataSourceImpl.kt new file mode 100644 index 00000000..9b454e2b --- /dev/null +++ b/app/src/main/java/com/paw/key/data/local/datasourceimpl/UserLocalDataSourceImpl.kt @@ -0,0 +1,17 @@ +package com.paw.key.data.local.datasourceimpl + +import android.content.Context +import com.paw.key.core.util.UserDataStore +import com.paw.key.data.local.datasource.UserLocalDataSource +import dagger.hilt.android.qualifiers.ApplicationContext +import javax.inject.Inject + +class UserLocalDataSourceImpl @Inject constructor( + @ApplicationContext private val context: Context +) : UserLocalDataSource { + + override suspend fun saveTokens(accessToken: String, refreshToken: String) { + UserDataStore.saveAcessToken(context, accessToken) + UserDataStore.saveRefreshToken(context, refreshToken) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/paw/key/data/repositoryimpl/login/AuthRepositoryImpl.kt b/app/src/main/java/com/paw/key/data/repositoryimpl/login/AuthRepositoryImpl.kt index b0b6a1bb..8ba84dc4 100644 --- a/app/src/main/java/com/paw/key/data/repositoryimpl/login/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/paw/key/data/repositoryimpl/login/AuthRepositoryImpl.kt @@ -1,9 +1,9 @@ package com.paw.key.data.repositoryimpl.login import android.content.Context -import com.paw.key.core.util.UserDataStore import com.paw.key.core.util.suspendRunCatching import com.paw.key.data.dto.response.LoginResponseDto +import com.paw.key.data.local.datasource.UserLocalDataSource import com.paw.key.data.remote.datasource.login.AuthRemoteDataSource import com.paw.key.data.remote.datasource.login.GoogleAuthDataSource import com.paw.key.domain.repository.login.AuthRepository @@ -12,7 +12,7 @@ import javax.inject.Inject class AuthRepositoryImpl @Inject constructor( private val authRemoteDataSource: AuthRemoteDataSource, private val googleAuthDataSource: GoogleAuthDataSource, - private val context: Context + private val userLocalDataSource: UserLocalDataSource ) : AuthRepository { override suspend fun signInWithGoogle(context: Context): Result = @@ -22,14 +22,11 @@ class AuthRepositoryImpl @Inject constructor( suspendRunCatching { val loginResponse = authRemoteDataSource.login(providerToken, provider).data - UserDataStore.saveAcessToken( - context = context, - token = loginResponse.AccessToken - ) - UserDataStore.saveRefreshToken( - context = context, - token = loginResponse.RefreshToken + userLocalDataSource.saveTokens( + accessToken = loginResponse.AccessToken, + refreshToken = loginResponse.RefreshToken ) + loginResponse } } \ No newline at end of file From 7f82148fe106421359cdba0b9cfb40a3143bab0f Mon Sep 17 00:00:00 2001 From: minseong-PC Date: Thu, 2 Oct 2025 14:54:45 +0900 Subject: [PATCH 3/4] =?UTF-8?q?mod/#147=20hiltviewmodel=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../paw/key/presentation/ui/login/viewmodel/LoginViewModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/paw/key/presentation/ui/login/viewmodel/LoginViewModel.kt b/app/src/main/java/com/paw/key/presentation/ui/login/viewmodel/LoginViewModel.kt index 4de58106..84bfcfa4 100644 --- a/app/src/main/java/com/paw/key/presentation/ui/login/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/com/paw/key/presentation/ui/login/viewmodel/LoginViewModel.kt @@ -4,11 +4,13 @@ import androidx.lifecycle.ViewModel import com.paw.key.domain.repository.login.AuthRepository import com.paw.key.presentation.ui.login.state.LoginSideEffect import com.paw.key.presentation.ui.login.state.LoginState +import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import javax.inject.Inject +@HiltViewModel class LoginViewModel @Inject constructor( private val authRepository: AuthRepository, ) : ViewModel() { From d52a6fcd85b825cce88cb0049b0508256739d08e Mon Sep 17 00:00:00 2001 From: minseong-PC Date: Thu, 2 Oct 2025 14:54:59 +0900 Subject: [PATCH 4/4] =?UTF-8?q?mod/#147=20datasource=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/paw/key/data/di/DataSourceModule.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 app/src/main/java/com/paw/key/data/di/DataSourceModule.kt diff --git a/app/src/main/java/com/paw/key/data/di/DataSourceModule.kt b/app/src/main/java/com/paw/key/data/di/DataSourceModule.kt new file mode 100644 index 00000000..8ea3b113 --- /dev/null +++ b/app/src/main/java/com/paw/key/data/di/DataSourceModule.kt @@ -0,0 +1,35 @@ +package com.paw.key.data.di + +import com.paw.key.data.local.datasource.UserLocalDataSource +import com.paw.key.data.local.datasourceimpl.UserLocalDataSourceImpl +import com.paw.key.data.remote.datasource.datasourceimpl.AuthRemoteDataSourceImpl +import com.paw.key.data.remote.datasource.datasourceimpl.GoogleAuthDataSourceImpl +import com.paw.key.data.remote.datasource.login.AuthRemoteDataSource +import com.paw.key.data.remote.datasource.login.GoogleAuthDataSource +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +abstract class DataSourceModule { + @Binds + @Singleton + abstract fun bindsUserDatasource( + userLocalDataSourceImpl: UserLocalDataSourceImpl + ) : UserLocalDataSource + + @Binds + @Singleton + abstract fun bindsAuthDatasource( + authRemoteDataSourceImpl: AuthRemoteDataSourceImpl + ) : AuthRemoteDataSource + + @Binds + @Singleton + abstract fun bindsGoogleDataSource( + googleAuthDataSourceImpl: GoogleAuthDataSourceImpl + ) : GoogleAuthDataSource +} \ No newline at end of file