From 0f1905eb83fdf1f1788ee8dd6a04a0912f3cf7d4 Mon Sep 17 00:00:00 2001 From: Henning Hall Date: Tue, 28 Jul 2020 16:42:12 +0200 Subject: [PATCH] divider height prop --- README.md | 2 ++ android/build.gradle | 2 +- .../date_picker/DatePickerManager.java | 3 ++- .../com/henninghall/date_picker/PickerView.java | 5 +++++ .../java/com/henninghall/date_picker/State.java | 6 ++++++ .../date_picker/pickers/AndroidNative.java | 4 ++++ .../henninghall/date_picker/pickers/Picker.java | 1 + .../date_picker/props/DividerHeightProp.java | 12 ++++++++++++ .../henninghall/date_picker/ui/EmptyWheels.java | 7 ++++++- .../henninghall/date_picker/ui/UIManager.java | 5 +++++ .../com/henninghall/date_picker/ui/Wheels.java | 8 +++++++- .../wheelFunctions/SetDividerHeight.java | 16 ++++++++++++++++ 12 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 android/src/main/java/com/henninghall/date_picker/props/DividerHeightProp.java create mode 100644 android/src/main/java/com/henninghall/date_picker/wheelFunctions/SetDividerHeight.java diff --git a/README.md b/README.md index 0655ac14..6d7e732f 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,8 @@ export default () => { | locale | The locale for the date picker. Changes language, date order and am/pm preferences. Value needs to be a Locale ID. | React Native Date picker locale language ios | React Native Date picker locale language android | | textColor | Changes the text color. ⚠ Colors other than black (#000000) or white (#ffffff) will replace the "Today" string with a date on iOS 13 or higher. | react native datepicker text color background color ios | Text color background color android | | timeZoneOffsetInMinutes | Timezone offset in minutes (default: device's timezone) | +| dividerHeight | Change the divider height (only supported for iosClone) | + ## About diff --git a/android/build.gradle b/android/build.gradle index 26e7f33e..63bd9c96 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -25,7 +25,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.facebook.react:react-native:+' - implementation 'com.henninghall.android:NumberPickerView:1.1.2' + implementation 'com.henninghall.android:NumberPickerView:1.1.3' implementation 'org.apache.commons:commons-lang3:3.7' implementation group: 'net.time4j', name: 'time4j-android', version: '4.2-2018i' } diff --git a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java index 6cb67ae3..f9bee8e0 100644 --- a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java +++ b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java @@ -7,6 +7,7 @@ import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.annotations.ReactPropGroup; +import com.henninghall.date_picker.props.DividerHeightProp; import com.henninghall.date_picker.props.VariantProp; import com.henninghall.date_picker.props.DateProp; import com.henninghall.date_picker.props.FadeToColorProp; @@ -43,7 +44,7 @@ public PickerView createViewInstance(ThemedReactContext reactContext) { @ReactPropGroup(names = { DateProp.name, ModeProp.name, LocaleProp.name, MaximumDateProp.name, MinimumDateProp.name, FadeToColorProp.name, TextColorProp.name, UtcProp.name, MinuteIntervalProp.name, - VariantProp.name + VariantProp.name, DividerHeightProp.name }) public void setProps(PickerView view, int index, Dynamic value) { updateProp("setProps", view, index, value); diff --git a/android/src/main/java/com/henninghall/date_picker/PickerView.java b/android/src/main/java/com/henninghall/date_picker/PickerView.java index 78eddbb9..c375349f 100644 --- a/android/src/main/java/com/henninghall/date_picker/PickerView.java +++ b/android/src/main/java/com/henninghall/date_picker/PickerView.java @@ -3,6 +3,7 @@ import android.widget.RelativeLayout; import com.facebook.react.bridge.Dynamic; +import com.henninghall.date_picker.props.DividerHeightProp; import com.henninghall.date_picker.props.MaximumDateProp; import com.henninghall.date_picker.props.MinimumDateProp; import com.henninghall.date_picker.props.MinuteIntervalProp; @@ -54,6 +55,10 @@ public void update() { uiManager.updateHeight(); } + if (didUpdate(DividerHeightProp.name)) { + uiManager.updateDividerHeight(); + } + if (didUpdate(ModeProp.name, LocaleProp.name, VariantProp.name)) { uiManager.updateWheelOrder(); } 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 247eb694..80c4acb2 100644 --- a/android/src/main/java/com/henninghall/date_picker/State.java +++ b/android/src/main/java/com/henninghall/date_picker/State.java @@ -3,6 +3,7 @@ import com.facebook.react.bridge.Dynamic; import com.henninghall.date_picker.models.Mode; import com.henninghall.date_picker.models.Variant; +import com.henninghall.date_picker.props.DividerHeightProp; import com.henninghall.date_picker.props.VariantProp; import com.henninghall.date_picker.props.DateProp; import com.henninghall.date_picker.props.FadeToColorProp; @@ -34,6 +35,7 @@ public class State { private final UtcProp utcProp = new UtcProp(); private final HeightProp heightProp = new HeightProp(); private final VariantProp variantProp = new VariantProp(); + private final DividerHeightProp dividerHeightProp = new DividerHeightProp(); private final HashMap props = new HashMap() {{ put(DateProp.name, dateProp); @@ -47,6 +49,7 @@ public class State { put(UtcProp.name, utcProp); put(HeightProp.name, heightProp); put(VariantProp.name, variantProp); + put(DividerHeightProp.name, dividerHeightProp); }}; public DerivedData derived; @@ -117,4 +120,7 @@ public Variant getVariant(){ return variantProp.getValue(); } + public int getDividerHeightProp() { + return dividerHeightProp.getValue(); + } } diff --git a/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java b/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java index 614135b7..f611eec2 100644 --- a/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java +++ b/android/src/main/java/com/henninghall/date_picker/pickers/AndroidNative.java @@ -77,6 +77,10 @@ public View getView() { return this; } + @Override + public void setDividerHeight(int height) { + // not supported + } @Override public void smoothScrollToValue(final int value) { diff --git a/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java b/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java index 3f819c8f..62893270 100644 --- a/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java +++ b/android/src/main/java/com/henninghall/date_picker/pickers/Picker.java @@ -22,6 +22,7 @@ public interface Picker { View getView(); void setVisibility(int visibility); void setWrapSelectorWheel(boolean wrapSelectorWheel); + void setDividerHeight(int height); interface OnValueChangeListenerInScrolling { void onValueChangeInScrolling(Picker picker, int oldVal, int newVal); diff --git a/android/src/main/java/com/henninghall/date_picker/props/DividerHeightProp.java b/android/src/main/java/com/henninghall/date_picker/props/DividerHeightProp.java new file mode 100644 index 00000000..cedd4918 --- /dev/null +++ b/android/src/main/java/com/henninghall/date_picker/props/DividerHeightProp.java @@ -0,0 +1,12 @@ +package com.henninghall.date_picker.props; + +import com.facebook.react.bridge.Dynamic; + +public class DividerHeightProp extends Prop { + public static final String name = "dividerHeight"; + + @Override + public Integer toValue(Dynamic value){ + return value.asInt(); + } +} diff --git a/android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java b/android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java index badfc9d7..079cbb78 100644 --- a/android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java +++ b/android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java @@ -58,5 +58,10 @@ void setShownCount(int shownCount) { } } - + public void setDividerHeight(int height) { + for (int id : emptyWheelIds) { + NumberPickerView view = (NumberPickerView) rootView.findViewById(id); + if(view != null) view.setDividerHeight(height); + } + } } 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 d8c3ef90..32e90e66 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 @@ -7,6 +7,7 @@ import com.henninghall.date_picker.wheelFunctions.AnimateToDate; import com.henninghall.date_picker.wheelFunctions.Refresh; import com.henninghall.date_picker.wheelFunctions.SetDate; +import com.henninghall.date_picker.wheelFunctions.SetDividerHeight; import com.henninghall.date_picker.wheelFunctions.TextColor; import com.henninghall.date_picker.wheelFunctions.UpdateVisibility; import com.henninghall.date_picker.wheels.Wheel; @@ -80,4 +81,8 @@ private void addOnChangeListener(){ WheelChangeListener onWheelChangeListener = new WheelChangeListenerImpl(wheels, state, this, rootView); wheels.applyOnAll(new AddOnChangeListener(onWheelChangeListener)); } + + public void updateDividerHeight() { + wheels.updateDividerHeight(); + } } 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 6715e23f..66f78f78 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 @@ -8,6 +8,7 @@ import com.henninghall.date_picker.Utils; import com.henninghall.date_picker.models.WheelType; import com.henninghall.date_picker.models.Mode; +import com.henninghall.date_picker.wheelFunctions.SetDividerHeight; import com.henninghall.date_picker.wheelFunctions.SetShowCount; import com.henninghall.date_picker.wheelFunctions.WheelFunction; import com.henninghall.date_picker.wheels.AmPmWheel; @@ -21,7 +22,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -85,6 +85,12 @@ void updateHeight() { emptyWheels.setShownCount(shownCount); } + void updateDividerHeight() { + int height = state.getDividerHeightProp(); + applyOnAll(new SetDividerHeight(height)); + emptyWheels.setDividerHeight(height); + } + void updateWheelOrder() { pickerWrapper.removeAll(); addInOrder(); diff --git a/android/src/main/java/com/henninghall/date_picker/wheelFunctions/SetDividerHeight.java b/android/src/main/java/com/henninghall/date_picker/wheelFunctions/SetDividerHeight.java new file mode 100644 index 00000000..91ea2b53 --- /dev/null +++ b/android/src/main/java/com/henninghall/date_picker/wheelFunctions/SetDividerHeight.java @@ -0,0 +1,16 @@ +package com.henninghall.date_picker.wheelFunctions; + +import com.henninghall.date_picker.wheels.Wheel; + +public class SetDividerHeight implements WheelFunction { + private final int height; + + public SetDividerHeight(int height) { + this.height = height; + } + + @Override + public void apply(Wheel wheel) { + wheel.picker.setDividerHeight(height); + } +}