Skip to content

Commit

Permalink
fix: templates alarm manager
Browse files Browse the repository at this point in the history
  • Loading branch information
v1tzor committed Nov 17, 2024
1 parent 7382116 commit ec540d2
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,33 +43,41 @@ sealed class RepeatTime : Parcelable {
@Serializable
data class WeekDays(val day: WeekDay) : RepeatTime() {

@IgnoredOnParcel override val repeatType = RepeatTimeType.WEEK_DAY
@IgnoredOnParcel
override val repeatType = RepeatTimeType.WEEK_DAY

@IgnoredOnParcel override val key = day.number
@IgnoredOnParcel
override val key = day.number
}

@Serializable
data class WeekDayInMonth(val day: WeekDay, val weekNumber: Int) : RepeatTime() {

@IgnoredOnParcel override val repeatType = RepeatTimeType.WEEK_DAY_IN_MONTH
@IgnoredOnParcel
override val repeatType = RepeatTimeType.WEEK_DAY_IN_MONTH

@IgnoredOnParcel override val key = day.number + weekNumber
@IgnoredOnParcel
override val key = day.number + weekNumber
}

@Serializable
data class MonthDay(val dayNumber: Int) : RepeatTime() {

@IgnoredOnParcel override val repeatType = RepeatTimeType.MONTH_DAY
@IgnoredOnParcel
override val repeatType = RepeatTimeType.MONTH_DAY

@IgnoredOnParcel override val key = dayNumber
@IgnoredOnParcel
override val key = dayNumber
}

@Serializable
data class YearDay(val month: Month, val dayNumber: Int) : RepeatTime() {

@IgnoredOnParcel override val repeatType = RepeatTimeType.YEAR_DAY
@IgnoredOnParcel
override val repeatType = RepeatTimeType.YEAR_DAY

@IgnoredOnParcel override val key = month.number + dayNumber
@IgnoredOnParcel
override val key = month.number + dayNumber
}

fun checkDateIsRepeat(date: Date) = when (this) {
Expand All @@ -81,14 +89,18 @@ sealed class RepeatTime : Parcelable {

fun nextDate(startTime: Date, current: Date = Date()): Date {
val calendar = Calendar.getInstance()
val firstDay = calendar.firstDayOfWeek
when (this) {
is WeekDays -> {
calendar.time = current
if (current.fetchWeekDay().priority >= day.priority) {
if (current.fetchWeekDay().priorityByFirstDayOfWeek(firstDay) >=
day.priorityByFirstDayOfWeek(firstDay)
) {
calendar.add(Calendar.DAY_OF_WEEK_IN_MONTH, 1)
}
calendar.set(Calendar.DAY_OF_WEEK, day.number)
}

is MonthDay -> {
calendar.time = current
if (current.fetchDay() >= dayNumber) {
Expand All @@ -97,6 +109,7 @@ sealed class RepeatTime : Parcelable {
}
calendar.set(Calendar.DAY_OF_MONTH, dayNumber)
}

is YearDay -> {
calendar.time = current
if (current.fetchMonth().number >= month.number && current.fetchDay() > dayNumber) {
Expand All @@ -105,9 +118,12 @@ sealed class RepeatTime : Parcelable {
calendar.set(Calendar.MONTH, month.number)
calendar.set(Calendar.DAY_OF_MONTH, dayNumber)
}

is WeekDayInMonth -> {
calendar.time = current
if (current.fetchWeekNumber() >= weekNumber && current.fetchWeekDay().priority > day.priority) {
if (current.fetchWeekNumber() >= weekNumber &&
current.fetchWeekDay().priorityByFirstDayOfWeek(firstDay) > day.priorityByFirstDayOfWeek(firstDay)
) {
calendar.add(Calendar.MONTH, 1)
}
calendar.set(Calendar.DAY_OF_WEEK, day.number)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,22 @@ package ru.aleshin.core.utils.functional
/**
* @author Stanislav Aleshin on 03.08.2023.
*/
enum class WeekDay(val number: Int, val priority: Int) {
SUNDAY(1, 0),
MONDAY(2, 1),
TUESDAY(3, 2),
WEDNESDAY(4, 3),
THURSDAY(5, 4),
FRIDAY(6, 5),
SATURDAY(7, 6);
enum class WeekDay(val number: Int) {
SUNDAY(1),
MONDAY(2),
TUESDAY(3),
WEDNESDAY(4),
THURSDAY(5),
FRIDAY(6),
SATURDAY(7);

fun priorityByFirstDayOfWeek(startNumber: Int): Int {
return if (number >= startNumber) {
number - startNumber
} else {
(7 - startNumber) + number
}
}

companion object {
fun fetchByWeekDayNumber(week: Int): WeekDay {
Expand Down

0 comments on commit ec540d2

Please sign in to comment.