Skip to content

Commit d8adfe3

Browse files
committed
Feat: 약관 동의 화면 웹뷰 연동
- 약관 동의 화면에서 '더보기' 버튼 클릭 시 웹뷰로 이동하도록 구현
1 parent cfd5170 commit d8adfe3

6 files changed

Lines changed: 69 additions & 8 deletions

File tree

app/src/main/java/com/threegap/bitnagil/MainNavHost.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import androidx.compose.runtime.Composable
44
import androidx.compose.ui.Modifier
55
import androidx.navigation.compose.NavHost
66
import androidx.navigation.compose.composable
7+
import androidx.navigation.toRoute
78
import com.threegap.bitnagil.presentation.home.HomeScreen
89
import com.threegap.bitnagil.presentation.intro.IntroScreenContainer
910
import com.threegap.bitnagil.presentation.login.LoginScreenContainer
1011
import com.threegap.bitnagil.presentation.splash.SplashScreenContainer
1112
import com.threegap.bitnagil.presentation.terms.TermsAgreementScreenContainer
13+
import com.threegap.bitnagil.presentation.webview.BitnagilWebViewScreen
1214

1315
@Composable
1416
fun MainNavHost(
@@ -42,6 +44,22 @@ fun MainNavHost(
4244

4345
composable<Route.TermsAgreement> {
4446
TermsAgreementScreenContainer(
47+
navigateToTermsOfService = {
48+
navigator.navController.navigate(
49+
Route.WebView(
50+
title = "약관 동의",
51+
url = "https://wooded-damselfly-4cc.notion.site/22fa2c11608680668ed7e3227b69812a",
52+
),
53+
)
54+
},
55+
navigateToPrivacyPolicy = {
56+
navigator.navController.navigate(
57+
Route.WebView(
58+
title = "약관 동의",
59+
url = "https://wooded-damselfly-4cc.notion.site/22fa2c11608680668ed7e3227b69812a",
60+
),
61+
)
62+
},
4563
navigateToOnBoarding = { },
4664
navigateToBack = { navigator.navController.popBackStack() },
4765
)
@@ -50,5 +68,14 @@ fun MainNavHost(
5068
composable<Route.Home> {
5169
HomeScreen()
5270
}
71+
72+
composable<Route.WebView> {
73+
val webViewRoute = it.toRoute<Route.WebView>()
74+
BitnagilWebViewScreen(
75+
title = webViewRoute.title,
76+
url = webViewRoute.url,
77+
onBackClick = { navigator.navController.popBackStack() },
78+
)
79+
}
5380
}
5481
}

app/src/main/java/com/threegap/bitnagil/Route.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,10 @@ sealed interface Route {
1818

1919
@Serializable
2020
data object Home : Route
21+
22+
@Serializable
23+
data class WebView(
24+
val title: String,
25+
val url: String,
26+
) : Route
2127
}

presentation/src/main/java/com/threegap/bitnagil/presentation/terms/TermsAgreementScreen.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import org.orbitmvi.orbit.compose.collectSideEffect
3636

3737
@Composable
3838
fun TermsAgreementScreenContainer(
39+
navigateToTermsOfService: () -> Unit,
40+
navigateToPrivacyPolicy: () -> Unit,
3941
navigateToOnBoarding: () -> Unit,
4042
navigateToBack: () -> Unit,
4143
viewmodel: TermsAgreementViewModel = hiltViewModel(),
@@ -44,6 +46,14 @@ fun TermsAgreementScreenContainer(
4446

4547
viewmodel.collectSideEffect { sideEffect ->
4648
when (sideEffect) {
49+
is TermsAgreementSideEffect.NavigateToPrivacyPolicy -> {
50+
navigateToPrivacyPolicy()
51+
}
52+
53+
is TermsAgreementSideEffect.NavigateToTermsOfService -> {
54+
navigateToTermsOfService()
55+
}
56+
4757
is TermsAgreementSideEffect.NavigateToOnBoarding -> {
4858
navigateToOnBoarding()
4959
}
@@ -68,6 +78,12 @@ fun TermsAgreementScreenContainer(
6878
onToggleOverFourteen = {
6979
viewmodel.sendIntent(TermsAgreementIntent.ToggleOverFourteen(it))
7080
},
81+
onShowTermsOfService = {
82+
viewmodel.sendIntent(TermsAgreementIntent.ShowTermsOfService)
83+
},
84+
onShowPrivacyPolicy = {
85+
viewmodel.sendIntent(TermsAgreementIntent.ShowPrivacyPolicy)
86+
},
7187
onStartButtonClick = {
7288
viewmodel.submitTermsAgreement()
7389
},
@@ -84,6 +100,8 @@ private fun TermsAgreementScreen(
84100
onToggleTermsOfService: (Boolean) -> Unit,
85101
onTogglePrivacyPolicy: (Boolean) -> Unit,
86102
onToggleOverFourteen: (Boolean) -> Unit,
103+
onShowTermsOfService: () -> Unit,
104+
onShowPrivacyPolicy: () -> Unit,
87105
onStartButtonClick: () -> Unit,
88106
onBackButtonClick: () -> Unit,
89107
modifier: Modifier = Modifier,
@@ -162,13 +180,15 @@ private fun TermsAgreementScreen(
162180
onCheckedChange = { onToggleTermsOfService(!uiState.agreedTermsOfService) },
163181
isChecked = uiState.agreedTermsOfService,
164182
showMore = true,
183+
onClickShowMore = onShowTermsOfService,
165184
)
166185

167186
TermsAgreementItem(
168187
title = "(필수) 개인정보 수집·이용 동의",
169188
onCheckedChange = { onTogglePrivacyPolicy(!uiState.agreedPrivacyPolicy) },
170189
isChecked = uiState.agreedPrivacyPolicy,
171190
showMore = true,
191+
onClickShowMore = onShowPrivacyPolicy,
172192
)
173193

174194
TermsAgreementItem(
@@ -202,6 +222,8 @@ private fun TermsAgreementScreenPreview() {
202222
onToggleTermsOfService = {},
203223
onTogglePrivacyPolicy = {},
204224
onToggleOverFourteen = {},
225+
onShowTermsOfService = {},
226+
onShowPrivacyPolicy = {},
205227
onStartButtonClick = {},
206228
onBackButtonClick = {},
207229
)

presentation/src/main/java/com/threegap/bitnagil/presentation/terms/TermsAgreementViewModel.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ class TermsAgreementViewModel @Inject constructor(
6666
}
6767
}
6868

69+
is TermsAgreementIntent.ShowTermsOfService -> {
70+
sendSideEffect(TermsAgreementSideEffect.NavigateToTermsOfService)
71+
null
72+
}
73+
74+
is TermsAgreementIntent.ShowPrivacyPolicy -> {
75+
sendSideEffect(TermsAgreementSideEffect.NavigateToPrivacyPolicy)
76+
null
77+
}
78+
6979
is TermsAgreementIntent.SubmitSuccess -> {
7080
sendSideEffect(TermsAgreementSideEffect.NavigateToOnBoarding)
7181
state.copy(isLoading = false)

presentation/src/main/java/com/threegap/bitnagil/presentation/terms/model/TermsAgreementIntent.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,13 @@ import com.threegap.bitnagil.presentation.common.mviviewmodel.MviIntent
44

55
sealed class TermsAgreementIntent : MviIntent {
66
data class SetLoading(val isLoading: Boolean) : TermsAgreementIntent()
7-
87
data class ToggleAllAgreements(val agreed: Boolean) : TermsAgreementIntent()
9-
108
data class ToggleTermsOfService(val agreed: Boolean) : TermsAgreementIntent()
11-
129
data class TogglePrivacyPolicy(val agreed: Boolean) : TermsAgreementIntent()
13-
1410
data class ToggleOverFourteen(val agreed: Boolean) : TermsAgreementIntent()
15-
11+
data object ShowTermsOfService : TermsAgreementIntent()
12+
data object ShowPrivacyPolicy : TermsAgreementIntent()
1613
data object SubmitSuccess : TermsAgreementIntent()
17-
1814
data object SubmitFailure : TermsAgreementIntent()
19-
2015
data object BackButtonClick : TermsAgreementIntent()
2116
}

presentation/src/main/java/com/threegap/bitnagil/presentation/terms/model/TermsAgreementSideEffect.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package com.threegap.bitnagil.presentation.terms.model
33
import com.threegap.bitnagil.presentation.common.mviviewmodel.MviSideEffect
44

55
sealed interface TermsAgreementSideEffect : MviSideEffect {
6+
data object NavigateToTermsOfService : TermsAgreementSideEffect
7+
data object NavigateToPrivacyPolicy : TermsAgreementSideEffect
68
data object NavigateToOnBoarding : TermsAgreementSideEffect
7-
89
data object NavigateToBack : TermsAgreementSideEffect
910
}

0 commit comments

Comments
 (0)