Skip to content

Commit a8a6add

Browse files
committed
[BOOK-354] refactor: ToggleItem 컴포넌트 분리 및 Toggle 이벤트 개선
1 parent 5fcdf20 commit a8a6add

File tree

4 files changed

+77
-33
lines changed

4 files changed

+77
-33
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.ninecraft.booket.feature.settings.component
2+
3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.Row
6+
import androidx.compose.foundation.layout.fillMaxWidth
7+
import androidx.compose.foundation.layout.padding
8+
import androidx.compose.material3.Text
9+
import androidx.compose.runtime.Composable
10+
import androidx.compose.ui.Alignment
11+
import androidx.compose.ui.Modifier
12+
import com.ninecraft.booket.core.designsystem.DevicePreview
13+
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
14+
15+
@Composable
16+
internal fun ToggleItem(
17+
title: String,
18+
description: String,
19+
isChecked: Boolean,
20+
onCheckedChange: (Boolean) -> Unit,
21+
modifier: Modifier = Modifier,
22+
) {
23+
Row(
24+
modifier = modifier
25+
.fillMaxWidth()
26+
.padding(
27+
vertical = ReedTheme.spacing.spacing4,
28+
horizontal = ReedTheme.spacing.spacing5,
29+
),
30+
verticalAlignment = Alignment.CenterVertically,
31+
horizontalArrangement = Arrangement.SpaceBetween,
32+
) {
33+
Column {
34+
Text(
35+
text = title,
36+
color = ReedTheme.colors.contentPrimary,
37+
style = ReedTheme.typography.body1Medium,
38+
)
39+
Text(
40+
text = description,
41+
color = ReedTheme.colors.contentTertiary,
42+
style = ReedTheme.typography.label1Medium,
43+
)
44+
}
45+
ReedSwitch(
46+
checked = isChecked,
47+
onCheckedChange = {
48+
onCheckedChange(!isChecked)
49+
},
50+
)
51+
}
52+
}
53+
54+
@DevicePreview
55+
@Composable
56+
private fun ToggleItemPreview() {
57+
ReedTheme {
58+
ToggleItem(
59+
title = "알림 받기",
60+
description = "리드에서 알림을 보내드려요",
61+
isChecked = true,
62+
onCheckedChange = {},
63+
)
64+
}
65+
}

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class NotificationPresenter @AssistedInject constructor(
2828
}
2929

3030
is NotificationUiEvent.OnNotificationToggle -> {
31-
isNotificationEnabled = !isNotificationEnabled
31+
isNotificationEnabled = event.enabled
3232
}
3333
}
3434
}

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package com.ninecraft.booket.feature.settings.notification
33
import android.content.Intent
44
import android.net.Uri
55
import android.provider.Settings
6-
import androidx.activity.result.contract.ActivityResultContracts
76
import androidx.activity.compose.rememberLauncherForActivityResult
7+
import androidx.activity.result.contract.ActivityResultContracts
88
import androidx.compose.foundation.background
99
import androidx.compose.foundation.layout.Arrangement
1010
import androidx.compose.foundation.layout.Column
@@ -32,7 +32,7 @@ import com.ninecraft.booket.core.ui.ReedScaffold
3232
import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar
3333
import com.ninecraft.booket.feature.screens.NotificationScreen
3434
import com.ninecraft.booket.feature.settings.R
35-
import com.ninecraft.booket.feature.settings.component.ReedSwitch
35+
import com.ninecraft.booket.feature.settings.component.ToggleItem
3636
import com.slack.circuit.codegen.annotations.CircuitInject
3737
import dagger.hilt.android.components.ActivityRetainedComponent
3838
import com.ninecraft.booket.core.designsystem.R as designR
@@ -62,35 +62,14 @@ internal fun NotificationUi(
6262
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing2))
6363
NotificationGuideItem()
6464
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing4))
65-
Row(
66-
modifier = modifier
67-
.fillMaxWidth()
68-
.padding(
69-
vertical = ReedTheme.spacing.spacing4,
70-
horizontal = ReedTheme.spacing.spacing5,
71-
),
72-
verticalAlignment = Alignment.CenterVertically,
73-
horizontalArrangement = Arrangement.SpaceBetween,
74-
) {
75-
Column {
76-
Text(
77-
text = stringResource(R.string.notification_toggle_title),
78-
color = ReedTheme.colors.contentPrimary,
79-
style = ReedTheme.typography.body1Medium,
80-
)
81-
Text(
82-
text = stringResource(R.string.notification_toggle_description),
83-
color = ReedTheme.colors.contentTertiary,
84-
style = ReedTheme.typography.label1Medium,
85-
)
86-
}
87-
ReedSwitch(
88-
checked = state.isNotificationEnabled,
89-
onCheckedChange = {
90-
state.eventSink(NotificationUiEvent.OnNotificationToggle)
91-
},
92-
)
93-
}
65+
ToggleItem(
66+
title = stringResource(R.string.notification_toggle_title),
67+
description = stringResource(R.string.notification_toggle_description),
68+
isChecked = state.isNotificationEnabled,
69+
onCheckedChange = { enabled ->
70+
state.eventSink(NotificationUiEvent.OnNotificationToggle(enabled))
71+
},
72+
)
9473
}
9574
}
9675
}

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUiState.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ data class NotificationUiState(
1010

1111
sealed interface NotificationUiEvent : CircuitUiEvent {
1212
data object OnBackClick : NotificationUiEvent
13-
data object OnNotificationToggle : NotificationUiEvent
13+
data class OnNotificationToggle(val enabled: Boolean) : NotificationUiEvent
1414
}

0 commit comments

Comments
 (0)