parent
310d93e25b
commit
2319e47184
@ -718,7 +718,7 @@ private fun buildAddress(
|
||||
}
|
||||
|
||||
private fun OpeningSchedule.getCurrentOpeningHours(): OpeningHours? {
|
||||
return openingHours.find { it.isOpen }
|
||||
return openingHours.find { it.isOpen() }
|
||||
}
|
||||
|
||||
private fun OpeningSchedule.getNextOpeningHours(): OpeningHours {
|
||||
|
||||
@ -54,4 +54,5 @@ dependencies {
|
||||
implementation(project(":libs:material-color-utilities"))
|
||||
api(project(":core:shared"))
|
||||
|
||||
testImplementation(libs.bundles.tests)
|
||||
}
|
||||
@ -9,7 +9,7 @@ import de.mm20.launcher2.icons.TintedIconLayer
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import java.time.DayOfWeek
|
||||
import java.time.Duration
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalDateTime
|
||||
import java.time.LocalTime
|
||||
import android.location.Location as AndroidLocation
|
||||
|
||||
@ -233,10 +233,12 @@ data class OpeningHours(
|
||||
val startTime: LocalTime,
|
||||
val duration: Duration
|
||||
) {
|
||||
val isOpen: Boolean
|
||||
get() = LocalDate.now().dayOfWeek == dayOfWeek &&
|
||||
LocalTime.now().isAfter(startTime) &&
|
||||
LocalTime.now().isBefore(startTime.plus(duration))
|
||||
|
||||
fun isOpen(date: LocalDateTime = LocalDateTime.now()): Boolean {
|
||||
return date.dayOfWeek == dayOfWeek &&
|
||||
date.toLocalTime().isAfter(startTime) &&
|
||||
date.toLocalTime().isBefore(startTime.plus(duration))
|
||||
}
|
||||
|
||||
override fun toString(): String = "$dayOfWeek $startTime-${startTime.plus(duration)}"
|
||||
}
|
||||
@ -245,6 +247,7 @@ data class OpeningSchedule(
|
||||
val isTwentyFourSeven: Boolean,
|
||||
val openingHours: ImmutableList<OpeningHours>
|
||||
) {
|
||||
val isOpen: Boolean
|
||||
get() = isTwentyFourSeven || openingHours.any { it.isOpen }
|
||||
fun isOpen(date: LocalDateTime = LocalDateTime.now()): Boolean {
|
||||
return isTwentyFourSeven || openingHours.any { it.isOpen(date) }
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,104 @@
|
||||
package de.mm20.launcher2.search
|
||||
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.junit.runners.Parameterized
|
||||
import java.time.DayOfWeek
|
||||
import java.time.Duration
|
||||
import java.time.LocalDateTime
|
||||
import java.time.LocalTime
|
||||
|
||||
@RunWith(Parameterized::class)
|
||||
class OpeningScheduleTest(val date: LocalDateTime, val expected: Boolean) {
|
||||
|
||||
|
||||
@Test
|
||||
fun isOpen() {
|
||||
val openingSchedule = OpeningSchedule(
|
||||
isTwentyFourSeven = false,
|
||||
/**
|
||||
* Monday: 18:00 - Tue. 01:00
|
||||
* Tuesday: 10:00 - 00:00
|
||||
* Wednesday: 08:00 - 12:00, 15:00 - 19:00
|
||||
* Thursday: 00:00 - Fri. 01:00
|
||||
* Friday: closed
|
||||
* Saturday: 08:00 - 17:00
|
||||
* Sunday: 12:00 - 12:30
|
||||
*/
|
||||
openingHours = persistentListOf(
|
||||
OpeningHours(
|
||||
dayOfWeek = DayOfWeek.MONDAY,
|
||||
startTime = LocalTime.of(18, 0),
|
||||
duration = Duration.ofHours(7),
|
||||
),
|
||||
OpeningHours(
|
||||
dayOfWeek = DayOfWeek.TUESDAY,
|
||||
startTime = LocalTime.of(10, 0),
|
||||
duration = Duration.ofHours(14),
|
||||
),
|
||||
OpeningHours(
|
||||
dayOfWeek = DayOfWeek.WEDNESDAY,
|
||||
startTime = LocalTime.of(8, 0),
|
||||
duration = Duration.ofHours(4),
|
||||
),
|
||||
OpeningHours(
|
||||
dayOfWeek = DayOfWeek.WEDNESDAY,
|
||||
startTime = LocalTime.of(15, 0),
|
||||
duration = Duration.ofHours(4),
|
||||
),
|
||||
OpeningHours(
|
||||
dayOfWeek = DayOfWeek.THURSDAY,
|
||||
startTime = LocalTime.of(0, 0),
|
||||
duration = Duration.ofHours(25),
|
||||
),
|
||||
OpeningHours(
|
||||
dayOfWeek = DayOfWeek.SATURDAY,
|
||||
startTime = LocalTime.of(8, 0),
|
||||
duration = Duration.ofHours(9),
|
||||
),
|
||||
OpeningHours(
|
||||
dayOfWeek = DayOfWeek.SUNDAY,
|
||||
startTime = LocalTime.of(12, 0),
|
||||
duration = Duration.ofMinutes(30),
|
||||
),
|
||||
)
|
||||
)
|
||||
println("${date.dayOfWeek}, ${date.toLocalTime()}")
|
||||
Assert.assertEquals(expected, openingSchedule.isOpen(date))
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
@Parameterized.Parameters
|
||||
fun data() = listOf(
|
||||
// Monday, 22:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 13, 22, 0, 0), true),
|
||||
// Tuesday, 01:01
|
||||
arrayOf(LocalDateTime.of(2024, 5, 14, 1, 1, 0), false),
|
||||
// Wednesday, 11:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 15, 11, 0, 0), true),
|
||||
// Wednesday, 13:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 15, 13, 0, 0), false),
|
||||
// Wednesday, 16:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 15, 16, 0, 0), true),
|
||||
// Thursday, 00:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 16, 0, 0, 0), true),
|
||||
// Thursday, 02:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 16, 2, 0, 0), true),
|
||||
// Friday, 00:30
|
||||
arrayOf(LocalDateTime.of(2024, 5, 17, 0, 30, 0), true),
|
||||
// Friday, 12:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 17, 12, 0, 0), false),
|
||||
// Saturday, 16:00
|
||||
arrayOf(LocalDateTime.of(2024, 5, 18, 16, 0, 0), true),
|
||||
// Sunday, 12:15
|
||||
arrayOf(LocalDateTime.of(2024, 5, 19, 12, 15, 0), true),
|
||||
// Sunday, 12:31
|
||||
arrayOf(LocalDateTime.of(2024, 5, 19, 12, 31, 0), false),
|
||||
|
||||
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user