From 37c1338b3c9d4431c024b9e4282c2213b4120e15 Mon Sep 17 00:00:00 2001 From: Henning Hall Date: Fri, 31 Jul 2020 12:28:49 +0200 Subject: [PATCH] larger touchable wheel area (#222) --- android/build.gradle | 2 +- .../henninghall/date_picker/PickerView.java | 7 +- .../date_picker/pickers/AndroidNative.java | 4 + .../date_picker/pickers/Picker.java | 1 + .../date_picker/ui/EmptyWheels.java | 62 ----------- .../henninghall/date_picker/ui/UIManager.java | 5 + .../henninghall/date_picker/ui/Wheels.java | 9 -- .../wheelFunctions/HorizontalPadding.java | 15 +++ .../date_picker/wheels/MonthWheel.java | 6 ++ .../henninghall/date_picker/wheels/Wheel.java | 14 +++ android/src/main/res/layout/ios_clone.xml | 102 +++--------------- 11 files changed, 63 insertions(+), 164 deletions(-) delete mode 100644 android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java create mode 100644 android/src/main/java/com/henninghall/date_picker/wheelFunctions/HorizontalPadding.java diff --git a/android/build.gradle b/android/build.gradle index 26e7f33..f81069e 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.4' 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/PickerView.java b/android/src/main/java/com/henninghall/date_picker/PickerView.java index 78eddbb..877a6a2 100644 --- a/android/src/main/java/com/henninghall/date_picker/PickerView.java +++ b/android/src/main/java/com/henninghall/date_picker/PickerView.java @@ -15,10 +15,7 @@ import com.henninghall.date_picker.props.LocaleProp; import com.henninghall.date_picker.props.ModeProp; import com.henninghall.date_picker.props.TextColorProp; import com.henninghall.date_picker.ui.UIManager; -import com.henninghall.date_picker.wheels.AmPmWheel; - import java.util.ArrayList; -import java.util.Date; public class PickerView extends RelativeLayout { @@ -58,6 +55,10 @@ public class PickerView extends RelativeLayout { uiManager.updateWheelOrder(); } + if (didUpdate(ModeProp.name)) { + uiManager.updateWheelPadding(); + } + if (didUpdate(DateProp.name, HeightProp.name, LocaleProp.name, MaximumDateProp.name, MinimumDateProp.name, MinuteIntervalProp.name, ModeProp.name, UtcProp.name, VariantProp.name 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 614135b..05e27c7 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 class AndroidNative extends NumberPicker implements Picker { return this; } + @Override + public void setItemPaddingHorizontal(int padding) { + // Not needed for this picker + } @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 3f819c8..b2ffc0a 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 setItemPaddingHorizontal(int padding); interface OnValueChangeListenerInScrolling { void onValueChangeInScrolling(Picker picker, int oldVal, int newVal); 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 deleted file mode 100644 index badfc9d..0000000 --- a/android/src/main/java/com/henninghall/date_picker/ui/EmptyWheels.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.henninghall.date_picker.ui; - -import android.view.View; - -import com.henninghall.date_picker.R; -import com.henninghall.date_picker.State; - -import java.util.ArrayList; - -import cn.carbswang.android.numberpickerview.library.NumberPickerView; - -class EmptyWheels { - - private final ArrayList views; - private final PickerWrapper pickerWrapper; - private View rootView; - private State state; - - private int[] emptyWheelIds = { - R.id.emptyStart, - R.id.empty1, - R.id.empty2, - R.id.empty3, - R.id.emptyEnd - }; - - EmptyWheels(View rootView, PickerWrapper pickerWrapper, State state) { - this.pickerWrapper = pickerWrapper; - this.rootView = rootView; - this.state = state; - this.views = getAll(); - } - - private ArrayList getAll() { - ArrayList wheels = new ArrayList<>(); - if(state.derived.hasNativeStyle()) return wheels; - for (int id: emptyWheelIds) { - NumberPickerView view = (NumberPickerView) rootView.findViewById(id); - wheels.add(view); - } - return wheels; - } - - void add() { - if(state.derived.hasNativeStyle()) return; - int numberOfVisibleWheels = state.derived.getVisibleWheels().size(); - int emptyViewsToAdd = numberOfVisibleWheels + 1; - for (int i = 0; i < emptyViewsToAdd; i++) { - int index = i * 2; - pickerWrapper.addPicker(views.get(i), index); - } - } - - void setShownCount(int shownCount) { - for (int id : emptyWheelIds) { - NumberPickerView view = (NumberPickerView) rootView.findViewById(id); - if(view != null) view.setShownCount(shownCount); - } - } - - -} 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 d8c3ef9..f15c9fd 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 @@ -9,6 +9,7 @@ import com.henninghall.date_picker.wheelFunctions.Refresh; import com.henninghall.date_picker.wheelFunctions.SetDate; import com.henninghall.date_picker.wheelFunctions.TextColor; import com.henninghall.date_picker.wheelFunctions.UpdateVisibility; +import com.henninghall.date_picker.wheelFunctions.HorizontalPadding; import com.henninghall.date_picker.wheels.Wheel; import java.text.SimpleDateFormat; @@ -80,4 +81,8 @@ public class UIManager { WheelChangeListener onWheelChangeListener = new WheelChangeListenerImpl(wheels, state, this, rootView); wheels.applyOnAll(new AddOnChangeListener(onWheelChangeListener)); } + + public void updateWheelPadding() { + wheels.applyOnVisible(new HorizontalPadding()); + } } 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 6715e23..dcae662 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 @@ -21,7 +21,6 @@ import com.henninghall.date_picker.wheels.YearWheel; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -37,7 +36,6 @@ public class Wheels { private YearWheel yearWheel; private View rootView; private final PickerWrapper pickerWrapper; - private final EmptyWheels emptyWheels; private HashMap wheelPerWheelType; @@ -55,7 +53,6 @@ public class Wheels { hourWheel = new HourWheel(getPickerWithId(R.id.hour), state); wheelPerWheelType = getWheelPerType(); - emptyWheels = new EmptyWheels(rootView, pickerWrapper, state); changeAmPmWhenPassingMidnightOrNoon(); } @@ -82,13 +79,11 @@ public class Wheels { void updateHeight() { int shownCount = state.derived.getShownCount(); applyOnAll(new SetShowCount(shownCount)); - emptyWheels.setShownCount(shownCount); } void updateWheelOrder() { pickerWrapper.removeAll(); addInOrder(); - addEmpty(); } Wheel getWheel(WheelType type){ @@ -179,8 +174,4 @@ public class Wheels { }}; } - private void addEmpty() { - emptyWheels.add(); - } - } diff --git a/android/src/main/java/com/henninghall/date_picker/wheelFunctions/HorizontalPadding.java b/android/src/main/java/com/henninghall/date_picker/wheelFunctions/HorizontalPadding.java new file mode 100644 index 0000000..18a27e2 --- /dev/null +++ b/android/src/main/java/com/henninghall/date_picker/wheelFunctions/HorizontalPadding.java @@ -0,0 +1,15 @@ +package com.henninghall.date_picker.wheelFunctions; + +import com.henninghall.date_picker.wheels.Wheel; + +import java.util.Calendar; + +public class HorizontalPadding implements WheelFunction { + + @Override + public void apply(Wheel wheel) { + wheel.setHorizontalPadding(); + } +} + + diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/MonthWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/MonthWheel.java index ef7c052..66ed583 100644 --- a/android/src/main/java/com/henninghall/date_picker/wheels/MonthWheel.java +++ b/android/src/main/java/com/henninghall/date_picker/wheels/MonthWheel.java @@ -6,6 +6,7 @@ import java.util.*; import com.henninghall.date_picker.*; import com.henninghall.date_picker.models.Mode; import com.henninghall.date_picker.pickers.Picker; +import com.henninghall.date_picker.wheelFunctions.HorizontalPadding; public class MonthWheel extends Wheel { @@ -46,5 +47,10 @@ public class MonthWheel extends Wheel return Paint.Align.LEFT; } + @Override + public int getHorizontalPadding() { + return 1; + } + } \ No newline at end of file diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java index 726545e..e8609d6 100644 --- a/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java +++ b/android/src/main/java/com/henninghall/date_picker/wheels/Wheel.java @@ -3,6 +3,7 @@ package com.henninghall.date_picker.wheels; import android.graphics.Paint; import android.view.View; +import com.henninghall.date_picker.models.Mode; import com.henninghall.date_picker.pickers.Picker; import com.henninghall.date_picker.State; @@ -115,4 +116,17 @@ public abstract class Wheel { return getFormat(locale).format(cal.getTime()); } + public void setHorizontalPadding(){ + picker.setItemPaddingHorizontal(getHorizontalPadding()); + } + + public int getHorizontalPadding() { + Mode mode = state.getMode(); + switch (mode){ + case time: return 15; + case date: return 10; + case datetime: + default: return 5; + } + } } diff --git a/android/src/main/res/layout/ios_clone.xml b/android/src/main/res/layout/ios_clone.xml index c5a9b0c..e38e915 100644 --- a/android/src/main/res/layout/ios_clone.xml +++ b/android/src/main/res/layout/ios_clone.xml @@ -11,21 +11,9 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" + android:gravity="center_horizontal" > - + - + custom:npv_DividerColor="#cccccc" /> + - + - - + /> - -