Skip to content

Commit f7b8c0d

Browse files
authored
Merge pull request #91 from YAPP-Github/feat/#80-login-onboarding
[feat] #80 스플래시~이용약관 프로세스 구성
2 parents 788a694 + 2d07b32 commit f7b8c0d

58 files changed

Lines changed: 3130 additions & 255 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.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.neki.android.app
2+
3+
import androidx.compose.foundation.layout.fillMaxSize
4+
import androidx.compose.foundation.layout.navigationBarsPadding
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.material3.Scaffold
7+
import androidx.compose.runtime.Composable
8+
import androidx.compose.runtime.snapshots.SnapshotStateList
9+
import androidx.compose.ui.Modifier
10+
import androidx.navigation3.runtime.NavEntry
11+
import androidx.navigation3.runtime.NavKey
12+
import androidx.navigation3.ui.NavDisplay
13+
14+
@Composable
15+
fun AuthScreen(
16+
entries: SnapshotStateList<NavEntry<NavKey>>,
17+
onBack: () -> Unit,
18+
) {
19+
Scaffold(
20+
modifier = Modifier
21+
.fillMaxSize()
22+
.navigationBarsPadding(),
23+
) { innerPadding ->
24+
NavDisplay(
25+
modifier = Modifier.padding(innerPadding),
26+
entries = entries,
27+
onBack = onBack,
28+
)
29+
}
30+
}

app/src/main/java/com/neki/android/app/MainActivity.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import com.neki.android.core.navigation.result.ResultEventBus
2020
import com.neki.android.core.navigation.root.RootNavKey
2121
import com.neki.android.core.navigation.root.RootNavigationState
2222
import com.neki.android.core.navigation.toEntries
23-
import com.neki.android.feature.auth.impl.LoginRoute
23+
import com.neki.android.core.navigation.auth.AuthNavigatorImpl
24+
import com.neki.android.core.navigation.auth.toEntries
25+
import com.neki.android.feature.auth.impl.navigation.authEntryProvider
2426
import dagger.hilt.android.AndroidEntryPoint
2527
import kotlinx.coroutines.launch
2628
import javax.inject.Inject
@@ -31,6 +33,9 @@ class MainActivity : ComponentActivity() {
3133
@Inject
3234
lateinit var rootNavigationState: RootNavigationState
3335

36+
@Inject
37+
lateinit var authNavigator: AuthNavigatorImpl
38+
3439
@Inject
3540
lateinit var navigator: NavigatorImpl
3641

@@ -52,9 +57,14 @@ class MainActivity : ComponentActivity() {
5257
NekiTheme {
5358
CompositionLocalProvider(LocalResultEventBus provides resultBus) {
5459
when (rootNavigationState.currentRootKey) {
55-
RootNavKey.Login -> {
56-
LoginRoute(
57-
navigateToMain = { navigator.navigateRoot(RootNavKey.Main) },
60+
RootNavKey.Auth -> {
61+
AuthScreen(
62+
entries = authNavigator.state.toEntries(
63+
entryProvider = entryProvider {
64+
authEntryProvider(authNavigator).invoke(this)
65+
},
66+
),
67+
onBack = { authNavigator.goBack() },
5868
)
5969
}
6070

@@ -70,7 +80,7 @@ class MainActivity : ComponentActivity() {
7080
),
7181
onTabSelected = { navigator.navigate(it) },
7282
onBack = { navigator.goBack() },
73-
navigateToLogin = { navigator.navigateRoot(RootNavKey.Login) },
83+
navigateToLogin = { navigator.navigateRoot(RootNavKey.Auth) },
7484
)
7585
}
7686
}
@@ -92,7 +102,7 @@ class MainActivity : ComponentActivity() {
92102
Toast.LENGTH_SHORT,
93103
).show()
94104

95-
navigator.navigateRoot(RootNavKey.Login)
105+
navigator.navigateRoot(RootNavKey.Auth)
96106
}
97107
}
98108
}
Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.neki.android.app.navigation.di
22

3+
import com.neki.android.app.navigation.keys.START_AUTH_NAV_KEY
34
import com.neki.android.app.navigation.keys.START_NAV_KEY
45
import com.neki.android.app.navigation.keys.START_ROOT_NAV_KEY
56
import com.neki.android.app.navigation.keys.TOP_LEVEL_NAV_KEYS
67
import com.neki.android.core.navigation.NavigationState
8+
import com.neki.android.core.navigation.auth.AuthNavigationState
79
import com.neki.android.core.navigation.root.RootNavigationState
810
import dagger.Module
911
import dagger.Provides
@@ -17,18 +19,26 @@ internal object NavigationModule {
1719

1820
@Provides
1921
@ActivityRetainedScoped
20-
fun providesNavigationState(): NavigationState {
21-
return NavigationState(
22-
startKey = START_NAV_KEY,
23-
topLevelKeys = TOP_LEVEL_NAV_KEYS.toSet(),
22+
fun providesRootNavigationState(): RootNavigationState {
23+
return RootNavigationState(
24+
startKey = START_ROOT_NAV_KEY,
2425
)
2526
}
2627

2728
@Provides
2829
@ActivityRetainedScoped
29-
fun providesRootNavigationState(): RootNavigationState {
30-
return RootNavigationState(
31-
startKey = START_ROOT_NAV_KEY,
30+
fun providesAuthNavigationState(): AuthNavigationState {
31+
return AuthNavigationState(
32+
startKey = START_AUTH_NAV_KEY,
33+
)
34+
}
35+
36+
@Provides
37+
@ActivityRetainedScoped
38+
fun providesNavigationState(): NavigationState {
39+
return NavigationState(
40+
startKey = START_NAV_KEY,
41+
topLevelKeys = TOP_LEVEL_NAV_KEYS.toSet(),
3242
)
3343
}
3444
}

app/src/main/java/com/neki/android/app/navigation/keys/Keys.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package com.neki.android.app.navigation.keys
33
import com.neki.android.app.navigation.TopLevelNavItem
44
import com.neki.android.core.navigation.root.RootNavKey
55
import com.neki.android.feature.archive.api.ArchiveNavKey
6+
import com.neki.android.feature.auth.api.AuthNavKey
67

7-
internal val START_ROOT_NAV_KEY = RootNavKey.Login
8+
internal val START_ROOT_NAV_KEY = RootNavKey.Auth
9+
internal val START_AUTH_NAV_KEY = AuthNavKey.Splash
810
internal val START_NAV_KEY = ArchiveNavKey.Archive
911
internal val TOP_LEVEL_NAV_KEYS = TopLevelNavItem.entries.map { it.navKey }

core/common/src/main/java/com/neki/android/core/common/kakao/KakaoAuthHelper.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package com.neki.android.core.common.kakao
33
import android.content.Context
44
import com.kakao.sdk.user.UserApiClient
55

6-
class KakaoAuthHelper(
7-
private val context: Context,
8-
) {
6+
object KakaoAuthHelper {
97
fun login(
8+
context: Context,
109
onSuccess: (String) -> Unit,
1110
onFailure: (String) -> Unit,
1211
) {

core/data-api/src/main/java/com/neki/android/core/dataapi/datastore/DataStoreKey.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.neki.android.core.dataapi.repository
22

33
import com.neki.android.core.model.Auth
4+
import kotlinx.coroutines.flow.Flow
45

56
interface AuthRepository {
67
suspend fun loginWithKakao(idToken: String): Result<Auth>
78
suspend fun updateAccessToken(refreshToken: String): Result<Auth>
89
suspend fun withdrawAccount(): Result<Unit>
10+
11+
fun hasCompletedOnboarding(): Flow<Boolean>
12+
suspend fun setCompletedOnboarding(value: Boolean)
913
}

core/data-api/src/main/java/com/neki/android/core/dataapi/repository/DataStoreRepository.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.

core/data-api/src/main/java/com/neki/android/core/dataapi/repository/TokenRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ interface TokenRepository {
77
accessToken: String,
88
refreshToken: String,
99
)
10-
fun isSavedTokens(): Flow<Boolean>
10+
fun hasTokens(): Flow<Boolean>
1111
fun getAccessToken(): Flow<String>
1212
fun getRefreshToken(): Flow<String>
1313
suspend fun clearTokens()

core/data/src/main/java/com/neki/android/core/data/remote/di/NetworkModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ internal object NetworkModule {
8888
install(Auth) {
8989
bearer {
9090
loadTokens {
91-
if (tokenRepository.isSavedTokens().first()) {
91+
if (tokenRepository.hasTokens().first()) {
9292
BearerTokens(
9393
accessToken = tokenRepository.getAccessToken().first(),
9494
refreshToken = tokenRepository.getRefreshToken().first(),

0 commit comments

Comments
 (0)