Skip to content

Commit cb10efe

Browse files
committed
[BOOK-155] feat: 개인정보처리방침, 이용약관을 보여주기 위한 웹뷰 이동 구현
1 parent f6ac5a6 commit cb10efe

File tree

15 files changed

+251
-34
lines changed

15 files changed

+251
-34
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ dependencies {
5353
projects.feature.login,
5454
projects.feature.search,
5555
projects.feature.settings,
56+
projects.feature.webview,
5657

5758
libs.androidx.activity.compose,
5859
libs.androidx.startup,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.ninecraft.booket.core.common.constants
2+
3+
enum class WebViewConstants(val url: String, val title: String) {
4+
PRIVACY_POLICY("https://www.google.com", "개인정보처리방침"),
5+
TERMS_OF_SERVICE("https://m.naver.com", "이용약관"),
6+
}

feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementPresenter.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import androidx.compose.runtime.getValue
66
import androidx.compose.runtime.mutableStateOf
77
import androidx.compose.runtime.remember
88
import androidx.compose.runtime.setValue
9+
import com.ninecraft.booket.core.common.constants.WebViewConstants
910
import com.ninecraft.booket.feature.screens.BottomNavigationScreen
1011
import com.ninecraft.booket.feature.screens.TermsAgreementScreen
12+
import com.ninecraft.booket.feature.screens.WebViewScreen
1113
import com.slack.circuit.codegen.annotations.CircuitInject
1214
import com.slack.circuit.retained.rememberRetained
1315
import com.slack.circuit.runtime.Navigator
@@ -50,8 +52,14 @@ class TermsAgreementPresenter @AssistedInject constructor(
5052
navigator.pop()
5153
}
5254

53-
is TermsAgreementUiEvent.OnTermDetailClick -> {
54-
// TODO: 웹뷰 화면으로 이동
55+
is TermsAgreementUiEvent.OnPolicyClick -> {
56+
val policy = WebViewConstants.PRIVACY_POLICY
57+
navigator.goTo(WebViewScreen(url = policy.url, title = policy.title))
58+
}
59+
60+
is TermsAgreementUiEvent.OnTermClick -> {
61+
val terms = WebViewConstants.TERMS_OF_SERVICE
62+
navigator.goTo(WebViewScreen(url = terms.url, title = terms.title))
5563
}
5664

5765
is TermsAgreementUiEvent.OnStartButtonClick -> {

feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementScreen.kt

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ internal fun TermsAgreement(
4545
state: TermsAgreementUiState,
4646
modifier: Modifier = Modifier,
4747
) {
48+
val termsTitles = stringArrayResource(id = R.array.terms_agreement_items)
49+
4850
Column(
4951
modifier = modifier
5052
.fillMaxSize()
@@ -96,21 +98,34 @@ internal fun TermsAgreement(
9698
)
9799
}
98100
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing4))
99-
100-
val termsTitles = stringArrayResource(id = R.array.terms_agreement_items)
101-
102-
termsTitles.forEachIndexed { index, title ->
103-
TermItem(
104-
title = title,
105-
checked = state.agreedTerms[index],
106-
onCheckClick = {
107-
state.eventSink(TermsAgreementUiEvent.OnTermItemClick(index))
108-
},
109-
onDetailClick = {
110-
state.eventSink(TermsAgreementUiEvent.OnTermDetailClick(""))
111-
},
112-
)
113-
}
101+
TermItem(
102+
title = termsTitles[0],
103+
checked = state.agreedTerms[0],
104+
onCheckClick = {
105+
state.eventSink(TermsAgreementUiEvent.OnTermItemClick(0))
106+
},
107+
onDetailClick = {
108+
state.eventSink(TermsAgreementUiEvent.OnPolicyClick)
109+
},
110+
)
111+
TermItem(
112+
title = termsTitles[1],
113+
checked = state.agreedTerms[1],
114+
onCheckClick = {
115+
state.eventSink(TermsAgreementUiEvent.OnTermItemClick(1))
116+
},
117+
onDetailClick = {
118+
state.eventSink(TermsAgreementUiEvent.OnTermClick)
119+
},
120+
)
121+
TermItem(
122+
title = termsTitles[2],
123+
checked = state.agreedTerms[2],
124+
hasDetailAction = false,
125+
onCheckClick = {
126+
state.eventSink(TermsAgreementUiEvent.OnTermItemClick(1))
127+
},
128+
)
114129
}
115130
ReedButton(
116131
onClick = {
@@ -134,17 +149,16 @@ internal fun TermsAgreement(
134149
@Composable
135150
private fun TermItem(
136151
title: String,
152+
onCheckClick: () -> Unit,
137153
modifier: Modifier = Modifier,
138154
checked: Boolean = false,
139-
onCheckClick: () -> Unit = {},
155+
hasDetailAction: Boolean = true,
140156
onDetailClick: () -> Unit = {},
141157
) {
142158
Row(
143159
modifier = modifier
144160
.fillMaxWidth()
145-
.clickableSingle {
146-
onDetailClick()
147-
}
161+
.clickableSingle { onDetailClick() }
148162
.padding(
149163
start = ReedTheme.spacing.spacing5,
150164
end = ReedTheme.spacing.spacing3,
@@ -164,11 +178,14 @@ private fun TermItem(
164178
color = ReedTheme.colors.contentPrimary,
165179
style = ReedTheme.typography.body1Medium,
166180
)
167-
Icon(
168-
imageVector = ImageVector.vectorResource(id = com.ninecraft.booket.core.designsystem.R.drawable.ic_chevron_right),
169-
contentDescription = "Navigation Icon",
170-
tint = Color.Unspecified,
171-
)
181+
182+
if (hasDetailAction) {
183+
Icon(
184+
imageVector = ImageVector.vectorResource(id = com.ninecraft.booket.core.designsystem.R.drawable.ic_chevron_right),
185+
contentDescription = "Navigation Icon",
186+
tint = Color.Unspecified,
187+
)
188+
}
172189
}
173190
}
174191

feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUiState.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ sealed interface TermsAgreementUiEvent : CircuitUiEvent {
1414
data object OnAllTermsAgreedClick : TermsAgreementUiEvent
1515
data class OnTermItemClick(val index: Int) : TermsAgreementUiEvent
1616
data object OnBackClick : TermsAgreementUiEvent
17-
data class OnTermDetailClick(val url: String) : TermsAgreementUiEvent
17+
data object OnPolicyClick : TermsAgreementUiEvent
18+
data object OnTermClick : TermsAgreementUiEvent
1819
data object OnStartButtonClick : TermsAgreementUiEvent
1920
}

feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,9 @@ data object SettingsScreen : ReedScreen(name = "Settings()")
3030

3131
@Parcelize
3232
data object OssLicensesScreen : ReedScreen(name = "OssLicenses()")
33+
34+
@Parcelize
35+
data class WebViewScreen(
36+
val url: String,
37+
val title: String,
38+
) : ReedScreen(name = "WebView()")

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import androidx.compose.runtime.getValue
55
import androidx.compose.runtime.mutableStateOf
66
import androidx.compose.runtime.rememberCoroutineScope
77
import androidx.compose.runtime.setValue
8+
import com.ninecraft.booket.core.common.constants.WebViewConstants
89
import com.ninecraft.booket.core.common.utils.handleException
910
import com.ninecraft.booket.core.data.api.repository.AuthRepository
1011
import com.ninecraft.booket.feature.screens.LoginScreen
1112
import com.ninecraft.booket.feature.screens.OssLicensesScreen
1213
import com.ninecraft.booket.feature.screens.SettingsScreen
14+
import com.ninecraft.booket.feature.screens.WebViewScreen
1315
import com.orhanobut.logger.Logger
1416
import com.slack.circuit.codegen.annotations.CircuitInject
1517
import com.slack.circuit.retained.rememberRetained
@@ -45,8 +47,14 @@ class SettingsPresenter @AssistedInject constructor(
4547
navigator.pop()
4648
}
4749

48-
is SettingsUiEvent.OnTermDetailClick -> {
49-
// TODO: 웹뷰 화면으로 이동
50+
is SettingsUiEvent.OnPolicyClick -> {
51+
val policy = WebViewConstants.PRIVACY_POLICY
52+
navigator.goTo(WebViewScreen(url = policy.url, title = policy.title))
53+
}
54+
55+
is SettingsUiEvent.OnTermClick -> {
56+
val terms = WebViewConstants.TERMS_OF_SERVICE
57+
navigator.goTo(WebViewScreen(url = terms.url, title = terms.title))
5058
}
5159

5260
is SettingsUiEvent.OnOssLicensesClick -> {

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import androidx.compose.foundation.layout.fillMaxSize
99
import androidx.compose.foundation.layout.fillMaxWidth
1010
import androidx.compose.foundation.layout.height
1111
import androidx.compose.foundation.layout.padding
12-
import androidx.compose.material3.CircularProgressIndicator
1312
import androidx.compose.foundation.layout.systemBarsPadding
13+
import androidx.compose.material3.CircularProgressIndicator
1414
import androidx.compose.material3.ExperimentalMaterial3Api
1515
import androidx.compose.material3.Icon
1616
import androidx.compose.material3.Text
@@ -32,8 +32,8 @@ import com.ninecraft.booket.core.designsystem.component.appbar.ReedBackTopAppBar
3232
import com.ninecraft.booket.core.designsystem.component.divider.ReedDivider
3333
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
3434
import com.ninecraft.booket.core.designsystem.theme.White
35-
import com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheet
3635
import com.ninecraft.booket.feature.screens.SettingsScreen
36+
import com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheet
3737
import com.slack.circuit.codegen.annotations.CircuitInject
3838
import dagger.hilt.android.components.ActivityRetainedComponent
3939
import kotlinx.coroutines.launch
@@ -77,7 +77,7 @@ internal fun Settings(
7777
SettingItem(
7878
title = stringResource(R.string.settings_privacy_policy),
7979
onItemClick = {
80-
state.eventSink(SettingsUiEvent.OnTermDetailClick(""))
80+
state.eventSink(SettingsUiEvent.OnPolicyClick)
8181
},
8282
action = {
8383
Icon(
@@ -90,7 +90,7 @@ internal fun Settings(
9090
SettingItem(
9191
title = stringResource(R.string.settings_terms_of_service),
9292
onItemClick = {
93-
state.eventSink(SettingsUiEvent.OnTermDetailClick(""))
93+
state.eventSink(SettingsUiEvent.OnTermClick)
9494
},
9595
action = {
9696
Icon(

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ sealed interface SettingsSideEffect {
1919
sealed interface SettingsUiEvent : CircuitUiEvent {
2020
data object InitSideEffect : SettingsUiEvent
2121
data object OnBackClick : SettingsUiEvent
22-
data class OnTermDetailClick(val title: String) : SettingsUiEvent
22+
data object OnPolicyClick : SettingsUiEvent
23+
data object OnTermClick : SettingsUiEvent
2324
data object OnOssLicensesClick : SettingsUiEvent
2425
data object OnLogoutClick : SettingsUiEvent
2526
data object OnWithdrawClick : SettingsUiEvent

feature/webview/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

0 commit comments

Comments
 (0)