diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6e4e859..b6bd8e9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { implementation(project(":feature:friend")) implementation(project(":core:designsystem")) implementation(project(":core:navigation")) + implementation(project(":core:di")) implementation(project(":common:resource")) implementation(libs.androidx.core.splash) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 271dd64..df379bc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + + + \ No newline at end of file diff --git a/data/src/main/java/com/idiotfrogs/data/remote/LoginManager.kt b/core/social-login/src/main/java/com/skogkatt/social_login/LoginManager.kt similarity index 90% rename from data/src/main/java/com/idiotfrogs/data/remote/LoginManager.kt rename to core/social-login/src/main/java/com/skogkatt/social_login/LoginManager.kt index 5547db3..1a3f091 100644 --- a/data/src/main/java/com/idiotfrogs/data/remote/LoginManager.kt +++ b/core/social-login/src/main/java/com/skogkatt/social_login/LoginManager.kt @@ -1,4 +1,4 @@ -package com.idiotfrogs.data.remote +package com.skogkatt.social_login import android.content.Context import androidx.credentials.CredentialManager @@ -11,9 +11,10 @@ import com.google.firebase.auth.AuthResult import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuthWebException import com.google.firebase.auth.OAuthProvider -import com.idiotfrogs.data.BuildConfig +import com.idiotfrogs.data.datasource.auth.AuthDataSource import com.idiotfrogs.data.exception.LoginCancelledException import com.idiotfrogs.extension.findActivity +import com.idiotfrogs.model.auth.AuthTokenRequest import dagger.hilt.android.qualifiers.ActivityContext import dagger.hilt.android.scopes.ActivityScoped import kotlinx.coroutines.suspendCancellableCoroutine @@ -24,7 +25,8 @@ import kotlin.coroutines.resumeWithException @ActivityScoped class LoginManager @Inject constructor( // 필요한 파라미터? (ex. 내부저장소 로직) - @ActivityContext private val context: Context + @ActivityContext private val context: Context, + private val authDataSource: AuthDataSource ) { suspend fun googleLogin() { val credentialManager = CredentialManager.create(context) @@ -48,8 +50,11 @@ class LoginManager @Inject constructor( ?: throw Exception("Unexpected type of credential") val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data) - // TODO: idToken 관련 처리 - } catch (exception: GetCredentialCancellationException) { + + val tokenResponse = authDataSource.socialGoogleLogin( + AuthTokenRequest(googleIdTokenCredential.idToken) + ) + } catch (_: GetCredentialCancellationException) { throw LoginCancelledException() } catch (exception: Exception) { throw exception diff --git a/core/social-login/src/test/java/com/skogkatt/social_login/ExampleUnitTest.kt b/core/social-login/src/test/java/com/skogkatt/social_login/ExampleUnitTest.kt new file mode 100644 index 0000000..a7a20bc --- /dev/null +++ b/core/social-login/src/test/java/com/skogkatt/social_login/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.skogkatt.social_login + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 0c2c9d3..ecdb5f5 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -1,5 +1,3 @@ -import java.util.Properties - plugins { id("convention.android.library") id("convention.android.hilt") @@ -7,38 +5,18 @@ plugins { android { namespace = "com.idiotfrogs.data" - - buildFeatures { - buildConfig = true - } - - defaultConfig { - buildConfigField("String", "WEB_CLIENT_ID", getLocalProperty("WEB_CLIENT_ID")) - } } dependencies { + implementation(project(":core:model")) + implementation(project(":core:network")) implementation(project(":common:extension")) + implementation(libs.okhttp) + implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) testImplementation(libs.junit) androidTestImplementation(libs.androidx.test.ext) androidTestImplementation(libs.androidx.test.espresso) - - // 구글 로그인 - implementation(libs.androidx.credentials) - implementation(libs.androidx.credentials.play.service) - implementation(libs.identity.google.id) - - // 애플 로그인 - implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.auth) -} - -fun getLocalProperty(name: String): String { - val propertiesFile = rootProject.file("local.properties") - val properties = Properties() - properties.load(propertiesFile.inputStream()) - return properties.getProperty(name) } \ No newline at end of file diff --git a/data/src/main/java/com/idiotfrogs/data/datasource/auth/AuthDataSource.kt b/data/src/main/java/com/idiotfrogs/data/datasource/auth/AuthDataSource.kt new file mode 100644 index 0000000..fac83cd --- /dev/null +++ b/data/src/main/java/com/idiotfrogs/data/datasource/auth/AuthDataSource.kt @@ -0,0 +1,8 @@ +package com.idiotfrogs.data.datasource.auth + +import com.idiotfrogs.model.auth.AuthTokenRequest +import com.idiotfrogs.model.auth.AuthTokenResponse + +interface AuthDataSource { + suspend fun socialGoogleLogin(authTokenRequest: AuthTokenRequest): AuthTokenResponse +} \ No newline at end of file diff --git a/data/src/main/java/com/idiotfrogs/data/datasource/auth/AuthDataSourceImpl.kt b/data/src/main/java/com/idiotfrogs/data/datasource/auth/AuthDataSourceImpl.kt new file mode 100644 index 0000000..7af63ed --- /dev/null +++ b/data/src/main/java/com/idiotfrogs/data/datasource/auth/AuthDataSourceImpl.kt @@ -0,0 +1,14 @@ +package com.idiotfrogs.data.datasource.auth + +import com.idiotfrogs.model.auth.AuthTokenRequest +import com.idiotfrogs.model.auth.AuthTokenResponse +import com.idiotfrogs.network.AuthService +import javax.inject.Inject + +class AuthDataSourceImpl @Inject constructor( + private val authService: AuthService +) : AuthDataSource { + override suspend fun socialGoogleLogin(authTokenRequest: AuthTokenRequest): AuthTokenResponse { + return authService.socialGoogleLogin(authTokenRequest) + } +} \ No newline at end of file diff --git a/core/model/src/main/java/com/idiotfrogs/model/domain/.gitkeep b/data/src/main/java/com/idiotfrogs/data/remote/.gitkeep similarity index 100% rename from core/model/src/main/java/com/idiotfrogs/model/domain/.gitkeep rename to data/src/main/java/com/idiotfrogs/data/remote/.gitkeep diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index d02300a..49885a5 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -1,5 +1,6 @@ plugins { id("convention.android.library") + id("convention.android.hilt") } android { @@ -8,6 +9,7 @@ android { dependencies { implementation(project(":data")) + implementation(project(":core:model")) implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) diff --git a/domain/src/main/java/com/idiotfrogs/domain/repository/impl/.gitkeep b/domain/src/main/java/com/idiotfrogs/domain/.gitkeep similarity index 100% rename from domain/src/main/java/com/idiotfrogs/domain/repository/impl/.gitkeep rename to domain/src/main/java/com/idiotfrogs/domain/.gitkeep diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts index 4074056..07605bb 100644 --- a/feature/auth/build.gradle.kts +++ b/feature/auth/build.gradle.kts @@ -7,6 +7,8 @@ android { } dependencies { + implementation(project(":core:social-login")) + implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) testImplementation(libs.junit) diff --git a/feature/auth/src/main/java/com/idiotfrogs/auth/util/RememberLoginManager.kt b/feature/auth/src/main/java/com/idiotfrogs/auth/util/RememberLoginManager.kt index 89c4cb4..147c4b7 100644 --- a/feature/auth/src/main/java/com/idiotfrogs/auth/util/RememberLoginManager.kt +++ b/feature/auth/src/main/java/com/idiotfrogs/auth/util/RememberLoginManager.kt @@ -3,7 +3,7 @@ package com.idiotfrogs.auth.util import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.idiotfrogs.data.remote.LoginManager +import com.skogkatt.social_login.LoginManager import dagger.hilt.EntryPoint import dagger.hilt.InstallIn import dagger.hilt.android.EntryPointAccessors diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0040f75..cb12422 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -62,6 +62,7 @@ hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.r hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltNavigation" } hilt-gradlePlugin = { group = "com.google.dagger", name = "hilt-android-gradle-plugin", version.ref = "hilt" } +okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } okhttp-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } retrofit-kotlin-serialization = { group = "com.squareup.retrofit2", name = "converter-kotlinx-serialization", version.ref = "retrofit" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 599aae0..e797520 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -34,6 +34,7 @@ include(":core:model") include(":core:designsystem") include(":core:di") include(":core:util") +include(":core:social-login") include(":feature:auth") include(":feature:home") include(":feature:detail")