From a8ee3f5b7de6a3e51ff5af3da63fc00315a43071 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Sun, 14 Nov 2021 15:27:49 +0100 Subject: [PATCH] Change semantics of opening hours in model to fix incompatibility with Room that caused a NullPointerException --- .../api/goingelectric/GoingElectricModel.kt | 2 +- .../net/vonforst/evmap/model/ChargersModel.kt | 36 ++++++++----------- .../layout/item_detail_openinghours_item.xml | 2 +- 3 files changed, 17 insertions(+), 23 deletions(-) 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 de4bc557..b55eb760 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 @@ -126,7 +126,7 @@ data class GEHours( val start: LocalTime?, val end: LocalTime? ) { - fun convert() = Hours(start, end) + fun convert() = if (start != null && end != null) Hours(start, end) else null } @JsonClass(generateAdapter = true) diff --git a/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt b/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt index c478f05e..c9b8a70b 100644 --- a/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt +++ b/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt @@ -162,9 +162,7 @@ data class OpeningHours( return HtmlCompat.fromHtml(ctx.getString(R.string.open_247), 0) } else if (days != null) { val hours = days.getHoursForDate(LocalDate.now()) - if (hours.start == null || hours.end == null) { - return HtmlCompat.fromHtml(ctx.getString(R.string.closed), 0) - } + ?: return HtmlCompat.fromHtml(ctx.getString(R.string.closed), 0) val now = LocalTime.now() if (hours.start.isBefore(now) && hours.end.isAfter(now)) { @@ -192,21 +190,21 @@ data class OpeningHours( @Parcelize data class OpeningHoursDays( - @Embedded(prefix = "mo") val monday: Hours, - @Embedded(prefix = "tu") val tuesday: Hours, - @Embedded(prefix = "we") val wednesday: Hours, - @Embedded(prefix = "th") val thursday: Hours, - @Embedded(prefix = "fr") val friday: Hours, - @Embedded(prefix = "sa") val saturday: Hours, - @Embedded(prefix = "su") val sunday: Hours, - @Embedded(prefix = "ho") val holiday: Hours + @Embedded(prefix = "mo") val monday: Hours?, + @Embedded(prefix = "tu") val tuesday: Hours?, + @Embedded(prefix = "we") val wednesday: Hours?, + @Embedded(prefix = "th") val thursday: Hours?, + @Embedded(prefix = "fr") val friday: Hours?, + @Embedded(prefix = "sa") val saturday: Hours?, + @Embedded(prefix = "su") val sunday: Hours?, + @Embedded(prefix = "ho") val holiday: Hours? ) : Parcelable { - fun getHoursForDate(date: LocalDate): Hours { + fun getHoursForDate(date: LocalDate): Hours? { // TODO: check for holidays return getHoursForDayOfWeek(date.dayOfWeek) } - fun getHoursForDayOfWeek(dayOfWeek: DayOfWeek?): Hours { + fun getHoursForDayOfWeek(dayOfWeek: DayOfWeek?): Hours? { @Suppress("WHEN_ENUM_CAN_BE_NULL_IN_JAVA") return when (dayOfWeek) { DayOfWeek.MONDAY -> monday @@ -223,16 +221,12 @@ data class OpeningHoursDays( @Parcelize data class Hours( - val start: LocalTime?, - val end: LocalTime? + val start: LocalTime, + val end: LocalTime ) : Parcelable { 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" - } + val fmt = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT) + return "${start.format(fmt)} - ${end.format(fmt)}" } } diff --git a/app/src/main/res/layout/item_detail_openinghours_item.xml b/app/src/main/res/layout/item_detail_openinghours_item.xml index f517ba7b..472ecc2d 100644 --- a/app/src/main/res/layout/item_detail_openinghours_item.xml +++ b/app/src/main/res/layout/item_detail_openinghours_item.xml @@ -37,7 +37,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="100dp" - android:text="@{hours.getHoursForDayOfWeek(dayOfWeek).toString().equals("closed") ? @string/closed_unfmt : hours.getHoursForDayOfWeek(dayOfWeek).toString()}" + android:text="@{hours.getHoursForDayOfWeek(dayOfWeek) == null ? @string/closed_unfmt : hours.getHoursForDayOfWeek(dayOfWeek).toString()}" android:textAppearance="@style/TextAppearance.MaterialComponents.Caption" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"