diff --git a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt index a3490a92..60f58bf5 100644 --- a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt @@ -17,6 +17,7 @@ import net.vonforst.evmap.R import net.vonforst.evmap.api.availability.ChargepointStatus import net.vonforst.evmap.api.goingelectric.ChargeLocation import net.vonforst.evmap.api.goingelectric.Chargepoint +import net.vonforst.evmap.api.goingelectric.OpeningHoursDays import net.vonforst.evmap.databinding.ItemFilterMultipleChoiceBinding import net.vonforst.evmap.databinding.ItemFilterSliderBinding import net.vonforst.evmap.viewmodel.* @@ -90,10 +91,18 @@ class DetailAdapter : DataBindingAdapter() { val text: CharSequence, val detailText: CharSequence? = null, val links: Boolean = true, - val clickable: Boolean = false + val clickable: Boolean = false, + val hoursDays: OpeningHoursDays? = null ) : Equatable - override fun getItemViewType(position: Int): Int = R.layout.item_detail + override fun getItemViewType(position: Int): Int { + val item = getItem(position) + if (item.hoursDays != null) { + return R.layout.item_detail_openinghours + } else { + return R.layout.item_detail + } + } } fun buildDetails(loc: ChargeLocation?, ctx: Context): List { @@ -133,7 +142,8 @@ fun buildDetails(loc: ChargeLocation?, ctx: Context): List R.drawable.ic_hours, R.string.hours, loc.openinghours.getStatusText(ctx), - loc.openinghours.description + loc.openinghours.description, + hoursDays = loc.openinghours.days ) else null, if (loc.cost != null) DetailAdapter.Detail( R.drawable.ic_cost, diff --git a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt index afc8dd5a..a68225c0 100644 --- a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt +++ b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricModel.kt @@ -15,6 +15,8 @@ import java.time.DayOfWeek import java.time.Instant import java.time.LocalDate import java.time.LocalTime +import java.time.format.DateTimeFormatter +import java.time.format.FormatStyle import java.util.* import kotlin.math.abs import kotlin.math.floor @@ -158,9 +160,12 @@ data class OpeningHoursDays( ) { fun getHoursForDate(date: LocalDate): Hours { // TODO: check for holidays + return getHoursForDayOfWeek(date.dayOfWeek) + } + fun getHoursForDayOfWeek(dayOfWeek: DayOfWeek?): Hours { @Suppress("WHEN_ENUM_CAN_BE_NULL_IN_JAVA") - return when (date.dayOfWeek) { + return when (dayOfWeek) { DayOfWeek.MONDAY -> monday DayOfWeek.TUESDAY -> tuesday DayOfWeek.WEDNESDAY -> wednesday @@ -168,6 +173,7 @@ data class OpeningHoursDays( DayOfWeek.FRIDAY -> friday DayOfWeek.SATURDAY -> saturday DayOfWeek.SUNDAY -> sunday + null -> holiday } } } @@ -175,7 +181,16 @@ data class OpeningHoursDays( data class Hours( val start: LocalTime?, val end: LocalTime? -) +) { + override fun toString(): String { + if (start != null && end != null) { + val fmt = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT) + return "${start.format(fmt)} - ${end.format(fmt)}" + } else { + return "closed" + } + } +} @JsonClass(generateAdapter = true) @Parcelize diff --git a/app/src/main/res/drawable/expand_toggle.xml b/app/src/main/res/drawable/expand_toggle.xml new file mode 100644 index 00000000..4e9f3cc4 --- /dev/null +++ b/app/src/main/res/drawable/expand_toggle.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/expand_toggle_icon.xml b/app/src/main/res/drawable/expand_toggle_icon.xml new file mode 100644 index 00000000..14fc1dfa --- /dev/null +++ b/app/src/main/res/drawable/expand_toggle_icon.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_collapse.xml b/app/src/main/res/drawable/ic_collapse.xml new file mode 100644 index 00000000..376c5aa4 --- /dev/null +++ b/app/src/main/res/drawable/ic_collapse.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_expand.xml b/app/src/main/res/drawable/ic_expand.xml new file mode 100644 index 00000000..0261aa81 --- /dev/null +++ b/app/src/main/res/drawable/ic_expand.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/item_detail_openinghours.xml b/app/src/main/res/layout/item_detail_openinghours.xml new file mode 100644 index 00000000..b0f26ba0 --- /dev/null +++ b/app/src/main/res/layout/item_detail_openinghours.xml @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_detail_openinghours_item.xml b/app/src/main/res/layout/item_detail_openinghours_item.xml new file mode 100644 index 00000000..f16c128a --- /dev/null +++ b/app/src/main/res/layout/item_detail_openinghours_item.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 75f07fca..3acae060 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -10,6 +10,8 @@ Öffnungszeiten 24 Stunden geöffnet]]> Geschlossen]]> + Geschlossen + Feiertag Geöffnet · Schließt um %s]]> Geschlossen · Öffnet um %s]]> Kosten diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9b98637a..56295ae9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,6 +11,8 @@ Closed]]> Open · Closes at %s]]> Closed · Opens at %s]]> + Closed + Holiday Cost Charging: %s · Parking: %s]]> Free