Skip to content

Conversation

@DongChyeon
Copy link
Member

Related issue 🛠

closed #184

어떤 변경사항이 있었나요?

  • 🐞 BugFix Something isn't working
  • 🎨 Design Markup & styling
  • 📃 Docs Documentation writing and editing (README.md, etc.)
  • ✨ Feature Feature
  • 🔨 Refactor Code refactoring
  • ⚙️ Setting Development environment setup
  • ✅ Test Test related (Junit, etc.)

CheckPoint ✅

PR이 다음 요구 사항을 충족하는지 확인하세요.

  • PR 컨벤션에 맞게 작성했습니다. (필수)
  • merge할 브랜치의 위치를 확인해 주세요(main❌/develop⭕) (필수)
  • Approve된 PR은 assigner가 머지하고, 수정 요청이 온 경우 수정 후 다시 push를 합니다. (필수)
  • BugFix의 경우, 버그의 원인을 파악하였습니다. (선택)

Work Description ✏️

Screen_Recording_20250301_152536__.mp4
Screen_Recording_20250303_012647__.mp4
  • 스낵바 표시 중 즉각적인 이벤트 처리를 위해 collectLatest 적용
    • 기존 collect 사용 시 스낵바 표시 중 이벤트 처리 지연 발생
    • collectLatest 적용하여 최신 이벤트만 처리하도록 개선
    • 스낵바 이벤트가 중복발생 시 이전 스낵바 이벤트의 onDismiss가 동작하지 않음
    • 따라서 알람 정보를 UI에서 임시적으로 지웠다가 onDismiss에서 DB에서 지우는 것이 아닌 DB에 즉각 반영
private fun deleteAlarms(alarmIds: Set<Long>) {
    if (alarmIds.isEmpty()) return

    val alarmsToDelete = currentState.alarms
        .filter { it.id in alarmIds }

    viewModelScope.launch {
        alarmsToDelete.forEach { alarm ->
            alarmUseCase.deleteAlarm(alarm.id)
            alarmHelper.unScheduleAlarm(alarm)
        }
    }

    emitSideEffect(
        HomeContract.SideEffect.ShowSnackBar(
            message = resourceProvider.getString(R.string.alarm_deleted),
            label = resourceProvider.getString(R.string.alarm_delete_dialog_btn_cancel),
            iconRes = resourceProvider.getDrawable(core.designsystem.R.drawable.ic_check_green),
            onDismiss = { },
            onAction = {
                restoreDeletedAlarms(alarmsToDelete)
            },
        ),
    )
}

private fun restoreDeletedAlarms(alarmsWithIndex: List<Alarm>) {
    viewModelScope.launch {
        alarmsWithIndex.forEach { alarm ->
            alarmUseCase.insertAlarm(alarm)
            alarmHelper.scheduleAlarm(alarm)
        }
    }
}
  • 오늘이 반복 알람 요일임에도 다음 주로 알람 시간을 고려하는 문제 수정
  • Swipe to delete : 사용자가 알람을 오른쪽으로 스와이프하면 삭제
  • Hold to delete : 알람을 길게 누르면 삭제 옵션 표시

Uncompleted Tasks 😅

N/A

To Reviewers 📢

image

그럼 죽어라고 하기에는 코드가 복잡...

Copy link
Member

@MoonsuKang MoonsuKang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

훌륭합니다

Comment on lines +96 to +99
Handler(Looper.getMainLooper()).postDelayed({
onSwipe(id)
}, 200,)
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P4
궁금한데 이거 LaunchedEffect+delay 로 안되나요?
Compose 생명주기에 이게 더 적합할거 같아서

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

댓글 삭제 -> 복구 를 통해서
AlarmListItem이 사라지고 컴포지션이 되는데
그 이전 dismissState인 EndToStart 를 그대로 가져가더라고요.

스택 오버플로우의 글을 보고 confirmValueChange 를 통해 currentValue는 변화시키지 않되, EndToStart 상태로 이동하는 애니메이션 시간을 벌기 위해서 해당 코드를 썼습니다.

@DongChyeon DongChyeon merged commit fe2095c into develop Mar 3, 2025
1 check passed
@DongChyeon DongChyeon deleted the feat/#184-alarm-item-delete-actions branch June 10, 2025 08:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 알람 아이템 삭제 동작을 다양화합니다.

3 participants