Skip to content

Commit b32c60a

Browse files
authored
Merge pull request #692 from Team-WSS/feat/657
refactor: 소셜로그인(+토큰 관리) 재구현
2 parents f4e2826 + 4cb90f7 commit b32c60a

108 files changed

Lines changed: 1887 additions & 1148 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/build.gradle.kts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@ android {
4141
isDebuggable = true
4242
applicationIdSuffix = ".debug"
4343

44-
buildConfigs(rootDir) {
45-
string(name = "BASE_URL", key = "debug.base.url")
46-
}
47-
4844
manifestPlaceholders {
4945
"appName" to "@string/app_name_debug"
5046
"appIcon" to "@mipmap/ic_wss_logo_debug"
@@ -61,10 +57,6 @@ android {
6157
"proguard-rules.pro",
6258
)
6359

64-
buildConfigs(rootDir) {
65-
string(name = "BASE_URL", key = "release.base.url")
66-
}
67-
6860
manifestPlaceholders {
6961
"appName" to "@string/app_name"
7062
"appIcon" to "@mipmap/ic_wss_logo"
@@ -84,6 +76,14 @@ dependencies {
8476
// 프로젝트 의존성
8577
implementation(projects.core.resource)
8678
implementation(projects.core.designsystem)
79+
implementation(projects.core.common)
80+
implementation(projects.core.auth)
81+
implementation(projects.core.authKakao)
82+
implementation(projects.core.network)
83+
implementation(projects.core.datastore)
84+
85+
implementation(projects.feature.signin)
86+
implementation(projects.data.account)
8787

8888
// AndroidX 및 Jetpack 기본 라이브러리
8989
implementation(libs.androidx.core.ktx)

app/src/main/java/com/into/websoso/WebsosoApp.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,34 @@ package com.into.websoso
22

33
import android.app.Application
44
import androidx.appcompat.app.AppCompatDelegate
5+
import androidx.lifecycle.ProcessLifecycleOwner
56
import com.into.websoso.BuildConfig.KAKAO_APP_KEY
7+
import com.into.websoso.core.auth.AuthSessionManager
8+
import com.into.websoso.core.common.navigator.NavigatorProvider
9+
import com.into.websoso.core.common.util.collectWithLifecycle
610
import com.kakao.sdk.common.KakaoSdk
711
import dagger.hilt.android.HiltAndroidApp
12+
import javax.inject.Inject
813

914
@HiltAndroidApp
1015
class WebsosoApp : Application() {
16+
@Inject
17+
lateinit var sessionManager: AuthSessionManager
18+
19+
@Inject
20+
lateinit var navigatorProvider: NavigatorProvider
21+
1122
override fun onCreate() {
1223
super.onCreate()
1324
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
1425

26+
subscribeSessionState()
1527
KakaoSdk.init(this, KAKAO_APP_KEY)
1628
}
29+
30+
private fun subscribeSessionState() {
31+
sessionManager.sessionExpired.collectWithLifecycle(ProcessLifecycleOwner.get()) {
32+
navigatorProvider.navigateToLoginActivity(::startActivity)
33+
}
34+
}
1735
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.into.websoso.core.common.util.navigator
2+
3+
import android.content.Context
4+
import android.content.Intent
5+
import com.into.websoso.core.common.navigator.NavigatorProvider
6+
import com.into.websoso.ui.login.LoginActivity
7+
import com.into.websoso.ui.main.MainActivity
8+
import com.into.websoso.ui.onboarding.OnboardingActivity
9+
import dagger.Binds
10+
import dagger.Module
11+
import dagger.hilt.InstallIn
12+
import dagger.hilt.android.qualifiers.ApplicationContext
13+
import dagger.hilt.components.SingletonComponent
14+
import javax.inject.Inject
15+
import javax.inject.Singleton
16+
17+
internal class WebsosoNavigator
18+
@Inject
19+
constructor(
20+
@ApplicationContext private val context: Context,
21+
) : NavigatorProvider {
22+
override fun navigateToLoginActivity(startActivity: (Intent) -> Unit) {
23+
val intent = LoginActivity.getIntent(context)
24+
startActivity(intent)
25+
}
26+
27+
override fun navigateToMainActivity(startActivity: (Intent) -> Unit) {
28+
val intent = MainActivity.getIntent(context, true)
29+
startActivity(intent)
30+
}
31+
32+
override fun navigateToOnboardingActivity(startActivity: (Intent) -> Unit) {
33+
val intent = OnboardingActivity.getIntent(context)
34+
startActivity(intent)
35+
}
36+
}
37+
38+
@Module
39+
@InstallIn(SingletonComponent::class)
40+
internal interface NavigatorModule {
41+
@Binds
42+
@Singleton
43+
fun bindWebsosoNavigator(websosoNavigator: WebsosoNavigator): NavigatorProvider
44+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.into.websoso.core.common.util.sessionManager
2+
3+
import com.into.websoso.core.auth.AuthSessionManager
4+
import dagger.Binds
5+
import dagger.Module
6+
import dagger.hilt.InstallIn
7+
import dagger.hilt.components.SingletonComponent
8+
import kotlinx.coroutines.flow.MutableSharedFlow
9+
import kotlinx.coroutines.flow.SharedFlow
10+
import kotlinx.coroutines.flow.asSharedFlow
11+
import javax.inject.Inject
12+
import javax.inject.Singleton
13+
14+
internal class WebsosoAuthSessionManager
15+
@Inject
16+
constructor() : AuthSessionManager {
17+
private val _sessionExpired = MutableSharedFlow<Unit>(replay = 1, extraBufferCapacity = 1)
18+
override val sessionExpired: SharedFlow<Unit> get() = _sessionExpired.asSharedFlow()
19+
20+
override suspend fun onSessionExpired() {
21+
_sessionExpired.emit(Unit)
22+
}
23+
}
24+
25+
@Module
26+
@InstallIn(SingletonComponent::class)
27+
internal interface WebsosoAuthSessionManagerModule {
28+
@Binds
29+
@Singleton
30+
fun bindWebsosoAuthSessionManager(websosoAuthSessionManager: WebsosoAuthSessionManager): AuthSessionManager
31+
}

app/src/main/java/com/into/websoso/data/authenticator/WebsosoAuthenticator.kt

Lines changed: 0 additions & 56 deletions
This file was deleted.
Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.into.websoso.data.di
22

3-
import com.into.websoso.data.qualifier.Secured
4-
import com.into.websoso.data.qualifier.Unsecured
53
import com.into.websoso.data.remote.api.AuthApi
64
import com.into.websoso.data.remote.api.AvatarApi
75
import com.into.websoso.data.remote.api.FeedApi
@@ -24,61 +22,41 @@ import javax.inject.Singleton
2422
object ApiModule {
2523
@Provides
2624
@Singleton
27-
fun provideAuthApi(
28-
@Unsecured retrofit: Retrofit,
29-
): AuthApi = retrofit.create(AuthApi::class.java)
25+
fun provideAuthApi(retrofit: Retrofit): AuthApi = retrofit.create(AuthApi::class.java)
3026

3127
@Provides
3228
@Singleton
33-
fun provideNovelApi(
34-
@Secured retrofit: Retrofit,
35-
): NovelApi = retrofit.create(NovelApi::class.java)
29+
fun provideNovelApi(retrofit: Retrofit): NovelApi = retrofit.create(NovelApi::class.java)
3630

3731
@Provides
3832
@Singleton
39-
fun provideUserNovelApi(
40-
@Secured retrofit: Retrofit,
41-
): UserNovelApi = retrofit.create(UserNovelApi::class.java)
33+
fun provideUserNovelApi(retrofit: Retrofit): UserNovelApi = retrofit.create(UserNovelApi::class.java)
4234

4335
@Provides
4436
@Singleton
45-
fun provideNotificationApi(
46-
@Secured retrofit: Retrofit,
47-
): NotificationApi = retrofit.create(NotificationApi::class.java)
37+
fun provideNotificationApi(retrofit: Retrofit): NotificationApi = retrofit.create(NotificationApi::class.java)
4838

4939
@Provides
5040
@Singleton
51-
fun provideFeedApi(
52-
@Secured retrofit: Retrofit,
53-
): FeedApi = retrofit.create(FeedApi::class.java)
41+
fun provideFeedApi(retrofit: Retrofit): FeedApi = retrofit.create(FeedApi::class.java)
5442

5543
@Provides
5644
@Singleton
57-
fun provideUserApi(
58-
@Secured retrofit: Retrofit,
59-
): UserApi = retrofit.create(UserApi::class.java)
45+
fun provideUserApi(retrofit: Retrofit): UserApi = retrofit.create(UserApi::class.java)
6046

6147
@Provides
6248
@Singleton
63-
fun provideKeywordApi(
64-
@Secured retrofit: Retrofit,
65-
): KeywordApi = retrofit.create(KeywordApi::class.java)
49+
fun provideKeywordApi(retrofit: Retrofit): KeywordApi = retrofit.create(KeywordApi::class.java)
6650

6751
@Provides
6852
@Singleton
69-
fun provideAvatarApi(
70-
@Secured retrofit: Retrofit,
71-
): AvatarApi = retrofit.create(AvatarApi::class.java)
53+
fun provideAvatarApi(retrofit: Retrofit): AvatarApi = retrofit.create(AvatarApi::class.java)
7254

7355
@Provides
7456
@Singleton
75-
fun provideVersionApi(
76-
@Secured retrofit: Retrofit,
77-
): VersionApi = retrofit.create(VersionApi::class.java)
57+
fun provideVersionApi(retrofit: Retrofit): VersionApi = retrofit.create(VersionApi::class.java)
7858

7959
@Provides
8060
@Singleton
81-
fun providePushMessageApi(
82-
@Secured retrofit: Retrofit,
83-
): PushMessageApi = retrofit.create(PushMessageApi::class.java)
61+
fun providePushMessageApi(retrofit: Retrofit): PushMessageApi = retrofit.create(PushMessageApi::class.java)
8462
}

0 commit comments

Comments
 (0)