Skip to content

Commit

Permalink
[REFACTOR/#48] 여러 바텀 시트를 하나의 바텀 시트 상태로 관리
Browse files Browse the repository at this point in the history
  • Loading branch information
DongChyeon committed Jan 20, 2025
1 parent d1e7abc commit 5aa3478
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ sealed class AlarmAddEditContract {
val holidayState: AlarmHolidayState = AlarmHolidayState(),
val snoozeState: AlarmSnoozeState = AlarmSnoozeState(),
val soundState: AlarmSoundState = AlarmSoundState(),
val bottomSheetState: BottomSheetType? = null,
) : UiState

data class AlarmTimeState(
Expand All @@ -35,7 +36,6 @@ sealed class AlarmAddEditContract {
val isSnoozeEnabled: Boolean = true,
val snoozeIntervalIndex: Int = 2,
val snoozeCountIndex: Int = 1,
val isBottomSheetOpen: Boolean = false,
val snoozeIntervals: List<String> = listOf("1분", "3분", "5분", "10분", "15분"),
val snoozeCounts: List<String> = listOf("1회", "3회", "5회", "10회", "무한"),
)
Expand All @@ -46,7 +46,6 @@ sealed class AlarmAddEditContract {
val soundVolume: Int = 70,
val soundIndex: Int = 0,
val sounds: List<String> = (1..7).map { "기본 알람음 $it" },
val isBottomSheetOpen: Boolean = false,
)

sealed class Action {
Expand All @@ -57,15 +56,19 @@ sealed class AlarmAddEditContract {
data object ToggleWeekendsChecked : Action()
data class ToggleDaySelection(val day: AlarmDay) : Action()
data object ToggleDisableHolidayChecked : Action()
data object ToggleSnoozeSettingBottomSheetOpen : Action()
data object ToggleSnoozeEnabled : Action()
data class UpdateSnoozeInterval(val index: Int) : Action()
data class UpdateSnoozeCount(val index: Int) : Action()
data object ToggleVibrationEnabled : Action()
data object ToggleSoundEnabled : Action()
data class UpdateSoundVolume(val volume: Int) : Action()
data class UpdateSoundIndex(val index: Int) : Action()
data object ToggleSoundSettingBottomSheetOpen : Action()
data class ToggleBottomSheetOpen(val sheetType: BottomSheetType) : Action()
}

sealed class BottomSheetType {
data object SnoozeSetting : BottomSheetType()
data object SoundSetting : BottomSheetType()
}

sealed class SideEffect : com.yapp.ui.base.SideEffect {
Expand Down
16 changes: 8 additions & 8 deletions feature/home/src/main/java/com/yapp/alarm/AlarmAddEditScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -136,15 +136,15 @@ fun AlarmAddEditScreen(
scope.launch {
snoozeBottomSheetState.hide()
}.invokeOnCompletion {
eventDispatcher(AlarmAddEditContract.Action.ToggleSnoozeSettingBottomSheetOpen)
eventDispatcher(AlarmAddEditContract.Action.ToggleBottomSheetOpen(AlarmAddEditContract.BottomSheetType.SnoozeSetting))
}
},
isSheetOpen = snoozeState.isBottomSheetOpen,
isSheetOpen = state.bottomSheetState == AlarmAddEditContract.BottomSheetType.SnoozeSetting,
onDismiss = {
scope.launch {
snoozeBottomSheetState.hide()
}.invokeOnCompletion {
eventDispatcher(AlarmAddEditContract.Action.ToggleSnoozeSettingBottomSheetOpen)
eventDispatcher(AlarmAddEditContract.Action.ToggleBottomSheetOpen(AlarmAddEditContract.BottomSheetType.SnoozeSetting))
}
},
)
Expand All @@ -163,15 +163,15 @@ fun AlarmAddEditScreen(
scope.launch {
soundBottomSheetState.hide()
}.invokeOnCompletion {
eventDispatcher(AlarmAddEditContract.Action.ToggleSoundSettingBottomSheetOpen)
eventDispatcher(AlarmAddEditContract.Action.ToggleBottomSheetOpen(AlarmAddEditContract.BottomSheetType.SoundSetting))
}
},
isSheetOpen = state.soundState.isBottomSheetOpen,
isSheetOpen = state.bottomSheetState == AlarmAddEditContract.BottomSheetType.SoundSetting,
onDismiss = {
scope.launch {
soundBottomSheetState.hide()
}.invokeOnCompletion {
eventDispatcher(AlarmAddEditContract.Action.ToggleSoundSettingBottomSheetOpen)
eventDispatcher(AlarmAddEditContract.Action.ToggleBottomSheetOpen(AlarmAddEditContract.BottomSheetType.SoundSetting))
}
},
)
Expand Down Expand Up @@ -250,7 +250,7 @@ private fun AlarmAddEditSettingsSection(
} else {
stringResource(id = R.string.alarm_add_edit_alarm_selected_option_none)
},
onClick = { processAction(AlarmAddEditContract.Action.ToggleSnoozeSettingBottomSheetOpen) },
onClick = { processAction(AlarmAddEditContract.Action.ToggleBottomSheetOpen(AlarmAddEditContract.BottomSheetType.SnoozeSetting)) },
)
Spacer(
modifier = Modifier.fillMaxWidth()
Expand All @@ -268,7 +268,7 @@ private fun AlarmAddEditSettingsSection(
state.soundState.isVibrationEnabled -> stringResource(id = R.string.alarm_add_edit_vibration)
else -> stringResource(id = R.string.alarm_add_edit_alarm_selected_option_none)
},
onClick = { processAction(AlarmAddEditContract.Action.ToggleSoundSettingBottomSheetOpen) },
onClick = { processAction(AlarmAddEditContract.Action.ToggleBottomSheetOpen(AlarmAddEditContract.BottomSheetType.SoundSetting)) },
)
}
}
Expand Down
20 changes: 8 additions & 12 deletions feature/home/src/main/java/com/yapp/alarm/AlarmAddEditViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@ class AlarmAddEditViewModel @Inject constructor() : BaseViewModel<AlarmAddEditCo
is AlarmAddEditContract.Action.ToggleSnoozeEnabled -> toggleSnoozeEnabled()
is AlarmAddEditContract.Action.UpdateSnoozeInterval -> updateSnoozeInterval(action.index)
is AlarmAddEditContract.Action.UpdateSnoozeCount -> updateSnoozeCount(action.index)
is AlarmAddEditContract.Action.ToggleSnoozeSettingBottomSheetOpen -> toggleSnoozeSettingBottomSheet()
is AlarmAddEditContract.Action.ToggleVibrationEnabled -> toggleVibrationEnabled()
is AlarmAddEditContract.Action.ToggleSoundEnabled -> toggleSoundEnabled()
is AlarmAddEditContract.Action.UpdateSoundVolume -> updateSoundVolume(action.volume)
is AlarmAddEditContract.Action.UpdateSoundIndex -> updateSoundIndex(action.index)
is AlarmAddEditContract.Action.ToggleSoundSettingBottomSheetOpen -> toggleSoundSettingBottomSheet()
is AlarmAddEditContract.Action.ToggleBottomSheetOpen -> toggleBottomSheet(action.sheetType)
}
}

Expand Down Expand Up @@ -147,13 +146,6 @@ class AlarmAddEditViewModel @Inject constructor() : BaseViewModel<AlarmAddEditCo
}
}

private fun toggleSnoozeSettingBottomSheet() {
val newSnoozeState = currentState.snoozeState.copy(isBottomSheetOpen = !currentState.snoozeState.isBottomSheetOpen)
updateState {
copy(snoozeState = newSnoozeState)
}
}

private fun updateSnoozeInterval(index: Int) {
val newSnoozeState = currentState.snoozeState.copy(snoozeIntervalIndex = index)
updateState {
Expand Down Expand Up @@ -196,10 +188,14 @@ class AlarmAddEditViewModel @Inject constructor() : BaseViewModel<AlarmAddEditCo
}
}

private fun toggleSoundSettingBottomSheet() {
val newSoundState = currentState.soundState.copy(isBottomSheetOpen = !currentState.soundState.isBottomSheetOpen)
private fun toggleBottomSheet(sheetType: AlarmAddEditContract.BottomSheetType) {
val newBottomSheetState = if (currentState.bottomSheetState == sheetType) {
null
} else {
sheetType
}
updateState {
copy(soundState = newSoundState)
copy(bottomSheetState = newBottomSheetState)
}
}

Expand Down

0 comments on commit 5aa3478

Please sign in to comment.