From f748d9117ea45af1f9d40e29bd912c0ca2aa2901 Mon Sep 17 00:00:00 2001 From: Henning Hall Date: Mon, 18 Dec 2023 14:15:09 +0100 Subject: [PATCH] fix: `minimumDate`/`maximumDate` issue in `datetime` mode that might occur when min/max includes hours, minutes or seconds (#740) --- .maestro/maximum-date.yml | 18 ++++++++++++++++++ .../date_picker/wheels/DayWheel.java | 12 +++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.maestro/maximum-date.yml b/.maestro/maximum-date.yml index b270396..1eaab4d 100644 --- a/.maestro/maximum-date.yml +++ b/.maestro/maximum-date.yml @@ -111,3 +111,21 @@ tags: - runFlow: utils/swipe-wheel-3.yml - assertVisible: '2000-01-01 00:00:00' + +######### describe: minimumDate/maximumDate combinations +- runFlow: utils/reset.yml + +## test: correct number of days should be selectable even if min/max days are not set to full days + +- runFlow: + file: utils/change-minimum-date.yml + env: + VALUE: '2000-01-01 00:00:01' + +- runFlow: + file: utils/change-maximum-date.yml + env: + VALUE: '2000-01-02 00:00:00' + +- runFlow: utils/swipe-wheel-1.yml +- assertVisible: '2000-01-02 00:00:00' diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java index 2beb5e4..89f696c 100644 --- a/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java +++ b/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java @@ -32,12 +32,14 @@ public class DayWheel extends Wheel { Calendar cal = getStartCal(); Calendar endCal = getEndCal(); - while (!cal.after(endCal)){ + while (true){ String value = getValue(cal); values.add(value); displayValues.put(value, getDisplayValue(cal)); if(Utils.isToday(cal)) todayValue = value; cal.add(Calendar.DATE, 1); + Calendar startOfCurrentDay = toStartOfDay((Calendar) cal.clone()); + if(startOfCurrentDay.after(endCal)) break; } return values; @@ -75,6 +77,14 @@ public class DayWheel extends Wheel { return cal; } + private Calendar toStartOfDay(Calendar cal){ + cal.set(Calendar.HOUR_OF_DAY, 0); + cal.set(Calendar.MINUTE, 0); + cal.set(Calendar.SECOND, 0); + cal.set(Calendar.MILLISECOND, 0); + return cal; + } + private String getValue(Calendar cal){ return format.format(cal.getTime()); }