diff --git a/.maestro/display-text.yml b/.maestro/display-text.yml index 7e68538..aed5bc6 100644 --- a/.maestro/display-text.yml +++ b/.maestro/display-text.yml @@ -7,8 +7,25 @@ appId: com.rn069 GMT: GMT+01:00 STATE: '' -# test: can have initial date in past - runFlow: utils/launch.yml + +# test: minuteInterval rounding should round with floor +- runFlow: + file: utils/change-prop.yml + env: + PROP: minuteInterval + VALUE: 5 +- runFlow: + file: utils/change-prop.yml + env: + PROP: date + VALUE: '2000-01-01T00:34:00+01:00' +- runFlow: utils/swipe-wheel-1.yml +- assertVisible: '2000-01-02 00:30:00' + +- runFlow: utils/reset.yml + +# test: can have initial date in past - runFlow: file: utils/change-prop.yml env: diff --git a/android/src/main/java/com/henninghall/date_picker/State.java b/android/src/main/java/com/henninghall/date_picker/State.java index b46f085..d8ea35f 100644 --- a/android/src/main/java/com/henninghall/date_picker/State.java +++ b/android/src/main/java/com/henninghall/date_picker/State.java @@ -19,8 +19,7 @@ import com.henninghall.date_picker.props.Prop; import com.henninghall.date_picker.props.TextColorProp; import com.henninghall.date_picker.props.TimezoneOffsetInMinutesProp; -import net.time4j.tz.Timezone; - +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; import java.util.Locale; @@ -116,10 +115,23 @@ public class State { return (String) dateProp.getValue(); } - public Calendar getDate() { + private Calendar getDate() { return Utils.isoToCalendar(getIsoDate(), getTimeZone()); } + // The date the picker is suppose to display. + // Includes minute rounding to desired minute interval. + public Calendar getPickerDate() { + Calendar cal = getDate(); + int minuteInterval = getMinuteInterval(); + if(minuteInterval <= 1) return cal; + SimpleDateFormat minuteFormat = new SimpleDateFormat("mm", getLocale()); + int exactMinute = Integer.parseInt(minuteFormat.format(cal.getTime())); + int minutesSinceLastInterval = exactMinute % minuteInterval; + cal.add(Calendar.MINUTE, -minutesSinceLastInterval); + return (Calendar) cal.clone(); + } + public Integer getHeight() { return (Integer) heightProp.getValue(); } diff --git a/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java b/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java index 6bf8342..01a6ea5 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/UIManager.java @@ -56,7 +56,7 @@ public class UIManager { } public void setWheelsToDate(){ - wheels.applyOnAll(new SetDate(state.getDate())); + wheels.applyOnAll(new SetDate(state.getPickerDate())); } public void scroll(int wheelIndex, int scrollTimes) { 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 d81173b..2beb5e4 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 @@ -11,7 +11,6 @@ import com.henninghall.date_picker.Utils; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.HashMap; @@ -54,7 +53,7 @@ public class DayWheel extends Wheel { cal = (Calendar) max.clone(); cal.add(Calendar.DATE, -cal.getActualMaximum(Calendar.DAY_OF_YEAR) / 2); } else { - cal = getInitialDate(); + cal = state.getPickerDate(); cal.add(Calendar.DATE, -defaultNumberOfDays / 2); } return cal; @@ -70,7 +69,7 @@ public class DayWheel extends Wheel { cal = (Calendar) min.clone(); cal.add(Calendar.DATE, cal.getActualMaximum(Calendar.DAY_OF_YEAR) / 2); } else { - cal = getInitialDate(); + cal = state.getPickerDate(); cal.add(Calendar.DATE, defaultNumberOfDays / 2); } return cal; @@ -131,20 +130,5 @@ public class DayWheel extends Wheel { : todayString; } - // Rounding cal to closest minute interval - private Calendar getInitialDate() { - Calendar cal = state.getDate(); - int minuteInterval = state.getMinuteInterval(); - if(minuteInterval <= 1) return cal; - SimpleDateFormat minuteFormat = new SimpleDateFormat("mm", state.getLocale()); - int exactMinute = Integer.valueOf(minuteFormat.format(cal.getTime())); - int diffSinceLastInterval = exactMinute % minuteInterval; - int diffAhead = minuteInterval - diffSinceLastInterval; - int diffBehind= -diffSinceLastInterval; - boolean closerToPrevious = minuteInterval / 2 > diffSinceLastInterval; - int diffToExactValue = closerToPrevious ? diffBehind : diffAhead; - cal.add(Calendar.MINUTE, diffToExactValue); - return (Calendar) cal.clone(); - } }