From ade5d8b3d0fdc3733e1ee6b95bce9f2966453f54 Mon Sep 17 00:00:00 2001 From: Henning Hall Date: Sun, 12 Jul 2020 18:28:06 +0200 Subject: [PATCH] bugfix: scrolls beyond min/max date not always triggering onChange --- .../com/henninghall/date_picker/State.java | 7 +++++-- .../henninghall/date_picker/ui/UIManager.java | 3 ++- .../ui/WheelChangeListenerImpl.java | 7 +++---- .../henninghall/date_picker/ui/Wheels.java | 19 +++++++++---------- 4 files changed, 19 insertions(+), 17 deletions(-) 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 dd1e98f..247eb69 100644 --- a/android/src/main/java/com/henninghall/date_picker/State.java +++ b/android/src/main/java/com/henninghall/date_picker/State.java @@ -97,9 +97,12 @@ public class State { return utc ? TimeZone.getTimeZone("UTC") : TimeZone.getDefault(); } + public String getDateString() { + return (String) dateProp.getValue(); + } + public Calendar getDate() { - String date = (String) dateProp.getValue(); - return Utils.isoToCalendar(date, getTimeZone()); + return Utils.isoToCalendar(getDateString(), getTimeZone()); } public Integer getHeight() { 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 9f4ca57..d8c3ef9 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 @@ -67,11 +67,12 @@ public class UIManager { return new SimpleDateFormat(wheels.getFormatPattern(), state.getLocale()); } - String getDateString() { + String getDisplayValueString() { return wheels.getDisplayValue(); } void animateToDate(Calendar date) { + wheels.applyOnInVisible(new SetDate(date)); wheels.applyOnVisible(new AnimateToDate(date)); } diff --git a/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java b/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java index b3ab16b..30171d4 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/WheelChangeListenerImpl.java @@ -6,7 +6,6 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.events.RCTEventEmitter; import com.henninghall.date_picker.DatePickerManager; -import com.henninghall.date_picker.PickerView; import com.henninghall.date_picker.State; import com.henninghall.date_picker.Utils; import com.henninghall.date_picker.wheels.Wheel; @@ -44,12 +43,12 @@ public class WheelChangeListenerImpl implements WheelChangeListener { String toParse = wheels.getDateString(); Date newDate = dateFormat.parse(toParse); date.setTime(newDate); - + String dateString = Utils.dateToIso(date); if (minDate != null && date.before(minDate)) uiManager.animateToDate(minDate); else if (maxDate != null && date.after(maxDate)) uiManager.animateToDate(maxDate); else { - event.putString("date", Utils.dateToIso(date)); - event.putString("dateString", uiManager.getDateString()); + event.putString("date", dateString); + event.putString("dateString", uiManager.getDisplayValueString()); DatePickerManager.context.getJSModule(RCTEventEmitter.class) .receiveEvent(rootView.getId(), "dateChange", event); } diff --git a/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java b/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java index b4c531d..6715e23 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/Wheels.java @@ -63,21 +63,20 @@ public class Wheels { return (Picker) rootView.findViewById(id); } - private Collection getVisible() { - ArrayList wheelTypes = state.derived.getVisibleWheels(); - Collection wheels = new ArrayList<>(); - for (WheelType type: wheelTypes){ - wheels.add(getWheel(type)); - } - return wheels; - } - void applyOnAll(WheelFunction function) { for (Wheel wheel: getAll()) function.apply(wheel); } void applyOnVisible(WheelFunction function) { - for (Wheel wheel: getVisible()) function.apply(wheel); + for(Wheel wheel: getAll()) { + if(wheel.visible()) function.apply(wheel); + } + } + + void applyOnInVisible(WheelFunction function) { + for(Wheel wheel: getAll()) { + if(!wheel.visible()) function.apply(wheel); + } } void updateHeight() {