Skip to content

Commit b2d3e4f

Browse files
committed
Merge remote-tracking branch 'origin/develop' into develop
2 parents e884b08 + 1770e2a commit b2d3e4f

35 files changed

Lines changed: 256 additions & 199 deletions

File tree

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

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,17 @@ import androidx.navigation3.runtime.entryProvider
1313
import com.neki.android.core.dataapi.auth.AuthEvent
1414
import com.neki.android.core.dataapi.auth.AuthEventManager
1515
import com.neki.android.core.designsystem.ui.theme.NekiTheme
16-
import com.neki.android.core.navigation.EntryProviderInstaller
17-
import com.neki.android.core.navigation.NavigatorImpl
16+
import com.neki.android.core.navigation.auth.AuthNavigator
17+
import com.neki.android.core.navigation.auth.toEntries
18+
import com.neki.android.core.navigation.main.EntryProviderInstaller
19+
import com.neki.android.core.navigation.main.MainNavigator
20+
import com.neki.android.core.navigation.main.toEntries
1821
import com.neki.android.core.navigation.result.LocalResultEventBus
1922
import com.neki.android.core.navigation.result.ResultEventBus
2023
import com.neki.android.core.navigation.root.RootNavKey
2124
import com.neki.android.core.navigation.root.RootNavigationState
22-
import com.neki.android.core.navigation.toEntries
23-
import com.neki.android.core.navigation.auth.AuthNavigatorImpl
24-
import com.neki.android.core.navigation.auth.toEntries
25+
import com.neki.android.core.navigation.root.RootNavigator
26+
import com.neki.android.feature.auth.api.AuthNavKey
2527
import com.neki.android.feature.auth.impl.navigation.authEntryProvider
2628
import dagger.hilt.android.AndroidEntryPoint
2729
import kotlinx.coroutines.launch
@@ -34,10 +36,13 @@ class MainActivity : ComponentActivity() {
3436
lateinit var rootNavigationState: RootNavigationState
3537

3638
@Inject
37-
lateinit var authNavigator: AuthNavigatorImpl
39+
lateinit var rootNavigator: RootNavigator
40+
41+
@Inject
42+
lateinit var authNavigator: AuthNavigator
3843

3944
@Inject
40-
lateinit var navigator: NavigatorImpl
45+
lateinit var mainNavigator: MainNavigator
4146

4247
@Inject
4348
lateinit var entryProviderScopes: Set<@JvmSuppressWildcards EntryProviderInstaller>
@@ -57,11 +62,11 @@ class MainActivity : ComponentActivity() {
5762
NekiTheme {
5863
CompositionLocalProvider(LocalResultEventBus provides resultBus) {
5964
when (rootNavigationState.currentRootKey) {
60-
RootNavKey.Auth -> {
65+
is RootNavKey.Auth -> {
6166
AuthScreen(
6267
entries = authNavigator.state.toEntries(
6368
entryProvider = entryProvider {
64-
authEntryProvider(authNavigator).invoke(this)
69+
authEntryProvider(rootNavigator, authNavigator).invoke(this)
6570
},
6671
),
6772
onBack = { authNavigator.goBack() },
@@ -70,17 +75,16 @@ class MainActivity : ComponentActivity() {
7075

7176
RootNavKey.Main -> {
7277
MainScreen(
73-
currentKey = navigator.state.currentKey,
74-
currentTopLevelKey = navigator.state.currentTopLevelKey,
75-
topLevelKeys = navigator.state.topLevelKeys,
76-
entries = navigator.state.toEntries(
78+
currentKey = mainNavigator.state.currentKey,
79+
currentTopLevelKey = mainNavigator.state.currentTopLevelKey,
80+
topLevelKeys = mainNavigator.state.topLevelKeys,
81+
entries = mainNavigator.state.toEntries(
7782
entryProvider = entryProvider {
7883
entryProviderScopes.forEach { builder -> this.builder() }
7984
},
8085
),
81-
onTabSelected = { navigator.navigate(it) },
82-
onBack = { navigator.goBack() },
83-
navigateToLogin = { navigator.navigateRoot(RootNavKey.Auth) },
86+
onTabSelected = { mainNavigator.navigate(it) },
87+
onBack = { mainNavigator.goBack() },
8488
)
8589
}
8690
}
@@ -102,7 +106,7 @@ class MainActivity : ComponentActivity() {
102106
Toast.LENGTH_SHORT,
103107
).show()
104108

105-
navigator.navigateRoot(RootNavKey.Auth)
109+
rootNavigator.navigateToAuth(AuthNavKey.Login)
106110
}
107111
}
108112
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ fun MainScreen(
2525
entries: SnapshotStateList<NavEntry<NavKey>>,
2626
onTabSelected: (NavKey) -> Unit,
2727
onBack: () -> Unit,
28-
navigateToLogin: () -> Unit,
2928
) {
3029
val shouldShowBottomBar by remember(currentKey) {
3130
mutableStateOf(currentKey in topLevelKeys)

app/src/main/java/com/neki/android/app/navigation/di/AppModule.kt

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

app/src/main/java/com/neki/android/app/navigation/di/NavigationModule.kt renamed to app/src/main/java/com/neki/android/app/navigation/di/NavigationStateModule.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.neki.android.app.navigation.di
22

33
import com.neki.android.app.navigation.keys.START_AUTH_NAV_KEY
4-
import com.neki.android.app.navigation.keys.START_NAV_KEY
4+
import com.neki.android.app.navigation.keys.START_MAIN_NAV_KEY
55
import com.neki.android.app.navigation.keys.START_ROOT_NAV_KEY
6-
import com.neki.android.app.navigation.keys.TOP_LEVEL_NAV_KEYS
7-
import com.neki.android.core.navigation.NavigationState
6+
import com.neki.android.app.navigation.keys.TOP_LEVEL_MAIN_NAV_KEYS
87
import com.neki.android.core.navigation.auth.AuthNavigationState
8+
import com.neki.android.core.navigation.main.MainNavigationState
99
import com.neki.android.core.navigation.root.RootNavigationState
1010
import dagger.Module
1111
import dagger.Provides
@@ -15,7 +15,7 @@ import dagger.hilt.android.scopes.ActivityRetainedScoped
1515

1616
@Module
1717
@InstallIn(ActivityRetainedComponent::class)
18-
internal object NavigationModule {
18+
internal object NavigationStateModule {
1919

2020
@Provides
2121
@ActivityRetainedScoped
@@ -35,10 +35,10 @@ internal object NavigationModule {
3535

3636
@Provides
3737
@ActivityRetainedScoped
38-
fun providesNavigationState(): NavigationState {
39-
return NavigationState(
40-
startKey = START_NAV_KEY,
41-
topLevelKeys = TOP_LEVEL_NAV_KEYS.toSet(),
38+
fun providesMainNavigationState(): MainNavigationState {
39+
return MainNavigationState(
40+
startKey = START_MAIN_NAV_KEY,
41+
topLevelKeys = TOP_LEVEL_MAIN_NAV_KEYS.toSet(),
4242
)
4343
}
4444
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.neki.android.app.navigation.di
2+
3+
import com.neki.android.core.navigation.auth.AuthNavigator
4+
import com.neki.android.core.navigation.auth.AuthNavigatorImpl
5+
import com.neki.android.core.navigation.main.MainNavigator
6+
import com.neki.android.core.navigation.main.MainNavigatorImpl
7+
import com.neki.android.core.navigation.root.RootNavigator
8+
import com.neki.android.core.navigation.root.RootNavigatorImpl
9+
import dagger.Binds
10+
import dagger.Module
11+
import dagger.hilt.InstallIn
12+
import dagger.hilt.android.components.ActivityRetainedComponent
13+
14+
@Module
15+
@InstallIn(ActivityRetainedComponent::class)
16+
internal interface NavigatorModule {
17+
18+
@Binds
19+
fun bindRootNavigator(impl: RootNavigatorImpl): RootNavigator
20+
21+
@Binds
22+
fun bindAuthNavigator(impl: AuthNavigatorImpl): AuthNavigator
23+
24+
@Binds
25+
fun bindMainNavigator(impl: MainNavigatorImpl): MainNavigator
26+
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.neki.android.core.navigation.root.RootNavKey
55
import com.neki.android.feature.archive.api.ArchiveNavKey
66
import com.neki.android.feature.auth.api.AuthNavKey
77

8-
internal val START_ROOT_NAV_KEY = RootNavKey.Auth
98
internal val START_AUTH_NAV_KEY = AuthNavKey.Splash
10-
internal val START_NAV_KEY = ArchiveNavKey.Archive
11-
internal val TOP_LEVEL_NAV_KEYS = TopLevelNavItem.entries.map { it.navKey }
9+
internal val START_MAIN_NAV_KEY = ArchiveNavKey.Archive
10+
internal val START_ROOT_NAV_KEY = RootNavKey.Auth(START_AUTH_NAV_KEY)
11+
internal val TOP_LEVEL_MAIN_NAV_KEYS = TopLevelNavItem.entries.map { it.navKey }

core/common/src/main/java/com/neki/android/core/common/permission/NekiPermission.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
package com.neki.android.core.common.permission
22

33
enum class NekiPermission(
4-
val title: String,
4+
val type: String,
55
val subTitle: String,
6+
val dialogTitle: String,
67
val dialogContent: String,
78
) {
89
CAMERA(
9-
title = "카메라",
10+
type = "카메라",
1011
subTitle = "QR 촬영에 필요해요.",
12+
dialogTitle = "카메라 권한",
1113
dialogContent = "QR 인식을 위해 카메라 접근이 필요해요",
1214
),
1315
LOCATION(
14-
title = "위치",
16+
type = "위치",
1517
subTitle = "주변 포토부스 탐색에 필요해요.",
16-
dialogContent = "주변 포토부스를 찾기 위해 \n위치 사용 권한이 필요해요",
18+
dialogTitle = "위치 권한",
19+
dialogContent = "주변 포토부스를 찾기 위해\n위치 사용 권한이 필요해요",
1720
),
1821
NOTIFICATION(
19-
title = "알림",
22+
type = "알림",
2023
subTitle = "저장 사진 및 추억 리마인드에 필요해요.",
24+
dialogTitle = "알림 권한",
2125
dialogContent = "사진 저장 완료·오류 안내를 알려드리기 위해\n알림 권한이 필요해요",
2226
),
2327
;
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
package com.neki.android.core.navigation
22

3-
import androidx.navigation3.runtime.EntryProviderScope
43
import androidx.navigation3.runtime.NavKey
5-
import com.neki.android.core.navigation.root.RootNavKey
6-
7-
typealias EntryProviderInstaller = EntryProviderScope<NavKey>.() -> Unit
84

95
interface Navigator {
10-
fun navigateRoot(rootNavKey: RootNavKey)
116
fun navigate(key: NavKey)
127
fun goBack()
138
fun remove(key: NavKey)
9+
fun clear()
1410
}
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package com.neki.android.core.navigation.auth
22

3-
import androidx.navigation3.runtime.NavKey
4-
import com.neki.android.core.navigation.root.RootNavKey
3+
import com.neki.android.core.navigation.Navigator
54

6-
interface AuthNavigator {
7-
fun navigateRoot(rootNavKey: RootNavKey)
8-
fun navigate(key: NavKey)
9-
fun navigateAndClear(key: NavKey)
10-
fun goBack(): Boolean
5+
interface AuthNavigator : Navigator {
6+
val state: AuthNavigationState
117
}
Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,27 @@
11
package com.neki.android.core.navigation.auth
22

33
import androidx.navigation3.runtime.NavKey
4-
import com.neki.android.core.navigation.root.RootNavKey
5-
import com.neki.android.core.navigation.root.RootNavigationState
64
import dagger.hilt.android.scopes.ActivityRetainedScoped
75
import javax.inject.Inject
86

97
@ActivityRetainedScoped
108
class AuthNavigatorImpl @Inject constructor(
11-
private val rootState: RootNavigationState,
12-
val state: AuthNavigationState,
9+
override val state: AuthNavigationState,
1310
) : AuthNavigator {
14-
override fun navigateRoot(rootNavKey: RootNavKey) {
15-
state.stack.clear()
16-
state.stack.add(state.startKey)
17-
rootState.stack.clear()
18-
rootState.stack.add(rootNavKey)
19-
}
2011

2112
override fun navigate(key: NavKey) {
2213
state.stack.add(key)
2314
}
2415

25-
override fun navigateAndClear(key: NavKey) {
26-
state.stack.clear()
27-
state.stack.add(key)
16+
override fun goBack() {
17+
state.stack.removeLastOrNull()
2818
}
2919

30-
override fun goBack(): Boolean {
31-
return if (state.stack.size > 1) {
32-
state.stack.removeLastOrNull()
33-
true
34-
} else false
20+
override fun remove(key: NavKey) {
21+
state.stack.remove(key)
22+
}
23+
24+
override fun clear() {
25+
state.stack.clear()
3526
}
3627
}

0 commit comments

Comments
 (0)