From d6491b6c47adaa85d2a66f47269bdfbce6598662 Mon Sep 17 00:00:00 2001 From: Henning Hall Date: Sun, 14 Apr 2019 19:53:32 +0200 Subject: [PATCH 1/2] 12/24h preference is read from device instead --- .../java/com/henninghall/date_picker/PickerView.java | 2 +- .../java/com/henninghall/date_picker/Settings.java | 12 ++++++++++++ .../main/java/com/henninghall/date_picker/Utils.java | 5 ----- .../henninghall/date_picker/wheels/AmPmWheel.java | 5 +++-- .../henninghall/date_picker/wheels/HourWheel.java | 6 ++++-- 5 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 android/src/main/java/com/henninghall/date_picker/Settings.java 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 fd019b0..0a86aa9 100644 --- a/android/src/main/java/com/henninghall/date_picker/PickerView.java +++ b/android/src/main/java/com/henninghall/date_picker/PickerView.java @@ -117,7 +117,7 @@ public class PickerView extends RelativeLayout { hourWheel.picker.setOnValueChangeListenerInScrolling(new NumberPickerView.OnValueChangeListenerInScrolling() { @Override public void onValueChangeInScrolling(NumberPickerView picker, int oldVal, int newVal) { - if(Utils.usesAmPm(locale)){ + if(Settings.usesAmPm()){ String oldValue = hourWheel.getValueAtIndex(oldVal); String newValue = hourWheel.getValueAtIndex(newVal); boolean passingNoonOrMidnight = (oldValue.equals("12") && newValue.equals("11")) || oldValue.equals("11") && newValue.equals("12"); diff --git a/android/src/main/java/com/henninghall/date_picker/Settings.java b/android/src/main/java/com/henninghall/date_picker/Settings.java new file mode 100644 index 0000000..52c53ad --- /dev/null +++ b/android/src/main/java/com/henninghall/date_picker/Settings.java @@ -0,0 +1,12 @@ +package com.henninghall.date_picker; + + +import android.text.format.DateFormat; + +public class Settings { + + public static boolean usesAmPm (){ + return !DateFormat.is24HourFormat(DatePickerManager.context); + } + +} diff --git a/android/src/main/java/com/henninghall/date_picker/Utils.java b/android/src/main/java/com/henninghall/date_picker/Utils.java index efc090a..57c826b 100644 --- a/android/src/main/java/com/henninghall/date_picker/Utils.java +++ b/android/src/main/java/com/henninghall/date_picker/Utils.java @@ -18,11 +18,6 @@ import java.util.TimeZone; public class Utils { - public static boolean usesAmPm(Locale locale) { - DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL, locale); - return df instanceof SimpleDateFormat && ((SimpleDateFormat) df).toPattern().contains("a"); - } - public static String printToday(Locale locale) { return PrettyTime.of(locale).printToday(); } diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java index 8c6677b..7908e13 100644 --- a/android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java +++ b/android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java @@ -2,6 +2,7 @@ package com.henninghall.date_picker.wheels; import com.henninghall.date_picker.Mode; import com.henninghall.date_picker.PickerView; +import com.henninghall.date_picker.Settings; import com.henninghall.date_picker.Utils; import java.util.Calendar; import cn.carbswang.android.numberpickerview.library.NumberPickerView; @@ -34,12 +35,12 @@ public class AmPmWheel extends Wheel { @Override public boolean visible() { - return Utils.usesAmPm(pickerView.locale) && pickerView.mode != Mode.date; + return Settings.usesAmPm() && pickerView.mode != Mode.date; } @Override public String getFormatTemplate() { - return Utils.usesAmPm(pickerView.locale) ? " a " : ""; + return Settings.usesAmPm() ? " a " : ""; } } diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java index 27504d3..5aa574e 100644 --- a/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java +++ b/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java @@ -2,9 +2,11 @@ package com.henninghall.date_picker.wheels; import com.henninghall.date_picker.Mode; import com.henninghall.date_picker.PickerView; +import com.henninghall.date_picker.Settings; import com.henninghall.date_picker.Utils; import java.util.Calendar; + import cn.carbswang.android.numberpickerview.library.NumberPickerView; @@ -16,7 +18,7 @@ public class HourWheel extends Wheel { @Override void init() { - int numberOfHours = Utils.usesAmPm(pickerView.locale) ? 12 : 24; + int numberOfHours = Settings.usesAmPm() ? 12 : 24; Calendar cal = pickerView.getInitialDate(); for(int i=0; i Date: Sun, 14 Apr 2019 20:56:53 +0200 Subject: [PATCH 2/2] Support picking dates in different centuries --- .../com/henninghall/date_picker/PickerView.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) 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 0a86aa9..bdb42d7 100644 --- a/android/src/main/java/com/henninghall/date_picker/PickerView.java +++ b/android/src/main/java/com/henninghall/date_picker/PickerView.java @@ -77,7 +77,7 @@ public class PickerView extends RelativeLayout { ampmWheel = new AmPmWheel(this, R.id.ampm); hourWheel = new HourWheel(this, R.id.hour); - dateFormat = new SimpleDateFormat(getDateFormatTemplate(), Locale.US); + setDateFormat(); changeAmPmWhenPassingMidnightOrNoon(); } @@ -89,6 +89,7 @@ public class PickerView extends RelativeLayout { dateFormat.setTimeZone(timeZone); Calendar date = Calendar.getInstance(timeZone); date.setTime(dateFormat.parse(getDateString())); + update2DigitYearStart(date); if (minDate != null && date.before(minDate)) applyOnVisibleWheels(new AnimateToDate(minDate)); else if (maxDate != null && date.after(maxDate)) applyOnVisibleWheels(new AnimateToDate(maxDate)); @@ -139,11 +140,12 @@ public class PickerView extends RelativeLayout { public void setDate(Calendar cal) { applyOnAllWheels(new SetDate(cal)); + update2DigitYearStart(cal); } public void setLocale(Locale locale) { this.locale = locale; - dateFormat = new SimpleDateFormat(getDateFormatTemplate(), Locale.US); + setDateFormat(); wheelOrderUpdater.update(locale, mode); requireDisplayValueUpdate = true; } @@ -193,7 +195,7 @@ public class PickerView extends RelativeLayout { public void setMode(Mode mode) { this.mode = mode; - dateFormat = new SimpleDateFormat(getDateFormatTemplate(), Locale.US); + setDateFormat(); applyOnAllWheels(new UpdateVisibility()); wheelOrderUpdater.update(locale, mode); } @@ -240,4 +242,13 @@ public class PickerView extends RelativeLayout { public TimeZone getTimeZone() { return timeZone; } + public void setDateFormat(){ + dateFormat = new SimpleDateFormat(getDateFormatTemplate(), Locale.US); + } + public void update2DigitYearStart(Calendar selectedDate){ + Calendar cal = (Calendar) selectedDate.clone(); + cal.add(Calendar.YEAR, -50); // subtract 50 years to hit the middle of the century + dateFormat.set2DigitYearStart(cal.getTime()); + } + }