Skip to content

Commit e8f852f

Browse files
committed
[UI] 미션 선택 단계에서 선택된 미션을 표시하는 UI 추가
1 parent 62f0783 commit e8f852f

File tree

2 files changed

+53
-22
lines changed

2 files changed

+53
-22
lines changed

feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt

Lines changed: 50 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,15 @@ internal fun AlarmMissionBottomSheet(
7373
onSaveMission: (MissionType, Int) -> Unit,
7474
onPreviewMission: (MissionType, Int) -> Unit,
7575
) {
76+
val initialMissionType = missionState.missionType
77+
val initialMissionCount = missionState.missionCount
78+
7679
var stepStack by rememberSaveable(saver = StepStackSaver) {
7780
mutableStateOf(listOf(AlarmMissionSelectBottomSheetType.MISSION_SETTING))
7881
}
79-
var selectedMissionType by rememberSaveable { mutableStateOf(missionState.missionType) }
80-
var selectedMissionCount by rememberSaveable { mutableIntStateOf(missionState.missionCount) }
82+
83+
var currentSelectedMissionType by rememberSaveable { mutableStateOf(initialMissionType) }
84+
var currentSelectedMissionCount by rememberSaveable { mutableIntStateOf(initialMissionCount) }
8185

8286
fun push(step: AlarmMissionSelectBottomSheetType) {
8387
stepStack = stepStack + step
@@ -93,22 +97,22 @@ internal fun AlarmMissionBottomSheet(
9397

9498
when (currentStep) {
9599
AlarmMissionSelectBottomSheetType.MISSION_SETTING -> {
96-
if (selectedMissionType == MissionType.NONE) {
100+
if (currentSelectedMissionType == MissionType.NONE) {
97101
MissionAddContent {
98102
push(AlarmMissionSelectBottomSheetType.MISSION_SELECT)
99103
}
100104
} else {
101105
MissionSettingContent(
102-
missionType = selectedMissionType,
103-
missionCount = selectedMissionCount,
106+
missionType = currentSelectedMissionType,
107+
missionCount = currentSelectedMissionCount,
104108
onDetail = { push(AlarmMissionSelectBottomSheetType.MISSION_DETAIL) },
105109
onDelete = {
106-
selectedMissionType = MissionType.NONE
107-
onSaveMission(selectedMissionType, selectedMissionCount)
110+
currentSelectedMissionType = MissionType.NONE
111+
onSaveMission(currentSelectedMissionType, currentSelectedMissionCount)
108112
},
109113
onChange = { push(AlarmMissionSelectBottomSheetType.MISSION_SELECT) },
110114
onDone = {
111-
onSaveMission(selectedMissionType, selectedMissionCount)
115+
onSaveMission(currentSelectedMissionType, currentSelectedMissionCount)
112116
onDismiss()
113117
},
114118
)
@@ -118,31 +122,28 @@ internal fun AlarmMissionBottomSheet(
118122
AlarmMissionSelectBottomSheetType.MISSION_SELECT -> {
119123
MissionSelectContent(
120124
onBack = { pop() },
121-
onClose = {
122-
onDismiss()
123-
},
124-
onSelect = { mission ->
125-
selectedMissionType = mission
125+
onClose = { onDismiss() },
126+
initialMission = currentSelectedMissionType,
127+
onSelect = { selected ->
128+
currentSelectedMissionType = selected
126129
push(AlarmMissionSelectBottomSheetType.MISSION_DETAIL)
127130
},
128131
)
129132
}
130133

131134
AlarmMissionSelectBottomSheetType.MISSION_DETAIL -> {
132135
MissionDetailContent(
133-
missionType = selectedMissionType,
134-
selectedMissionCount = selectedMissionCount,
135-
onCountChange = { selectedMissionCount = it },
136+
missionType = currentSelectedMissionType,
137+
selectedMissionCount = currentSelectedMissionCount,
138+
onCountChange = { currentSelectedMissionCount = it },
136139
onBack = { pop() },
137-
onClose = {
138-
onDismiss()
139-
},
140+
onClose = { onDismiss() },
140141
onSave = {
141-
onSaveMission(selectedMissionType, selectedMissionCount)
142+
onSaveMission(currentSelectedMissionType, currentSelectedMissionCount)
142143
onDismiss()
143144
},
144145
onPreview = {
145-
onPreviewMission(selectedMissionType, selectedMissionCount)
146+
onPreviewMission(currentSelectedMissionType, currentSelectedMissionCount)
146147
},
147148
)
148149
}
@@ -390,6 +391,7 @@ private fun MissionCountChip(
390391
private fun MissionSelectContent(
391392
onBack: () -> Unit,
392393
onClose: () -> Unit,
394+
initialMission: MissionType,
393395
onSelect: (MissionType) -> Unit,
394396
) {
395397
Column(
@@ -401,7 +403,7 @@ private fun MissionSelectContent(
401403
Spacer(modifier = Modifier.height(14.dp))
402404

403405
MissionSelectTopAppBar(
404-
title = stringResource(id = feature.home.R.string.mission_bottom_sheet_title),
406+
title = stringResource(id = feature.home.R.string.mission_select_content_title),
405407
onBack = onBack,
406408
onClose = onClose,
407409
)
@@ -411,12 +413,14 @@ private fun MissionSelectContent(
411413
) {
412414
MissionTypeItem(
413415
missionType = MissionType.SHAKE,
416+
selected = initialMission == MissionType.SHAKE,
414417
onClick = {
415418
onSelect(MissionType.SHAKE)
416419
},
417420
)
418421
MissionTypeItem(
419422
missionType = MissionType.TAP,
423+
selected = initialMission == MissionType.TAP,
420424
onClick = {
421425
onSelect(MissionType.TAP)
422426
},
@@ -428,6 +432,7 @@ private fun MissionSelectContent(
428432
@Composable
429433
private fun MissionTypeItem(
430434
missionType: MissionType,
435+
selected: Boolean,
431436
onClick: () -> Unit,
432437
) {
433438
val (iconRes, titleRes) = missionType.displayData()
@@ -436,6 +441,7 @@ private fun MissionTypeItem(
436441
Row(
437442
modifier = Modifier
438443
.fillMaxWidth()
444+
.clip(RoundedCornerShape(12.dp))
439445
.clickable(
440446
onClick = onClick,
441447
)
@@ -458,6 +464,28 @@ private fun MissionTypeItem(
458464
style = OrbitTheme.typography.headline2SemiBold,
459465
color = OrbitTheme.colors.white,
460466
)
467+
468+
if (selected) {
469+
Spacer(modifier = Modifier.weight(1f))
470+
471+
Row(
472+
horizontalArrangement = Arrangement.spacedBy(2.dp),
473+
verticalAlignment = Alignment.CenterVertically,
474+
) {
475+
Icon(
476+
modifier = Modifier.size(16.dp),
477+
painter = painterResource(id = R.drawable.ic_check),
478+
tint = OrbitTheme.colors.white.copy(alpha = 0.5f),
479+
contentDescription = null,
480+
)
481+
482+
Text(
483+
text = stringResource(id = feature.home.R.string.mission_select_content_selected),
484+
style = OrbitTheme.typography.body2Medium,
485+
color = OrbitTheme.colors.white.copy(alpha = 0.4f),
486+
)
487+
}
488+
}
461489
}
462490
}
463491

feature/home/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@
4848
<string name="mission_setting_content_btn_change">미션 변경</string>
4949
<string name="mission_setting_content_btn_done">완료</string>
5050

51+
<string name="mission_select_content_title">미션 선택</string>
52+
<string name="mission_select_content_selected">선택됨</string>
53+
5154
<string name="mission_count_chip_format">%d회</string>
5255

5356
<string name="mission_detail_content_count_title">횟수</string>

0 commit comments

Comments
 (0)