|
|
@ -23,6 +23,7 @@ import java.util.ArrayList; |
|
|
|
import java.util.Arrays; |
|
|
|
import java.util.Calendar; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Locale; |
|
|
|
import java.util.TimeZone; |
|
|
@ -33,11 +34,10 @@ import cn.carbswang.android.numberpickerview.library.NumberPickerView; |
|
|
|
public class PickerView extends RelativeLayout { |
|
|
|
|
|
|
|
public LinearLayout wheelsWrapper; |
|
|
|
public SimpleDateFormat dateFormat; |
|
|
|
private HourWheel hourWheel; |
|
|
|
private DayWheel dayWheel; |
|
|
|
public HourWheel hourWheel; |
|
|
|
public DayWheel dayWheel; |
|
|
|
public MinutesWheel minutesWheel; |
|
|
|
private AmPmWheel ampmWheel; |
|
|
|
public AmPmWheel ampmWheel; |
|
|
|
public int minuteInterval = 1; |
|
|
|
public Locale locale; |
|
|
|
public Mode mode; |
|
|
@ -45,8 +45,8 @@ public class PickerView extends RelativeLayout { |
|
|
|
public DateWheel dateWheel; |
|
|
|
public MonthWheel monthWheel; |
|
|
|
public YearWheel yearWheel; |
|
|
|
private WheelOrderUpdater wheelOrderUpdater; |
|
|
|
private EmptyWheelUpdater emptyWheelUpdater; |
|
|
|
private WheelOrder wheelOrder; |
|
|
|
EmptyWheelUpdater emptyWheelUpdater; |
|
|
|
public boolean requireDisplayValueUpdate = true; |
|
|
|
public TimeZone timeZone = TimeZone.getDefault(); |
|
|
|
private DateBoundary minDate; |
|
|
@ -57,15 +57,13 @@ public class PickerView extends RelativeLayout { |
|
|
|
super(DatePickerManager.context); |
|
|
|
|
|
|
|
View rootView = inflate(getContext(), R.layout.datepicker_view, this); |
|
|
|
this.style = new Style(this); |
|
|
|
this.wheelOrderUpdater = new WheelOrderUpdater(this); |
|
|
|
this.emptyWheelUpdater = new EmptyWheelUpdater(this); |
|
|
|
style = new Style(this); |
|
|
|
|
|
|
|
locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? Locale.forLanguageTag("en") : Locale.getDefault(); |
|
|
|
|
|
|
|
wheelsWrapper = (LinearLayout) rootView.findViewById(R.id.wheelsWrapper); |
|
|
|
wheelsWrapper.setWillNotDraw(false); |
|
|
|
|
|
|
|
locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? Locale.forLanguageTag("en") : Locale.getDefault(); |
|
|
|
|
|
|
|
yearWheel = new YearWheel( this, R.id.year); |
|
|
|
monthWheel = new MonthWheel( this, R.id.month); |
|
|
|
dateWheel = new DateWheel( this, R.id.date); |
|
|
@ -74,7 +72,9 @@ public class PickerView extends RelativeLayout { |
|
|
|
ampmWheel = new AmPmWheel(this, R.id.ampm); |
|
|
|
hourWheel = new HourWheel(this, R.id.hour); |
|
|
|
|
|
|
|
setDateFormat(); |
|
|
|
emptyWheelUpdater = new EmptyWheelUpdater(this); |
|
|
|
wheelOrder = new WheelOrder(this); |
|
|
|
|
|
|
|
changeAmPmWhenPassingMidnightOrNoon(); |
|
|
|
} |
|
|
|
|
|
|
@ -116,14 +116,11 @@ public class PickerView extends RelativeLayout { |
|
|
|
public void setDate(String isoDate) { |
|
|
|
Calendar cal = Utils.isoToCalendar(isoDate, timeZone); |
|
|
|
applyOnAllWheels(new SetDate(cal)); |
|
|
|
update2DigitYearStart(cal); |
|
|
|
} |
|
|
|
|
|
|
|
public void setLocale(Locale locale) { |
|
|
|
this.locale = locale; |
|
|
|
setDateFormat(); |
|
|
|
wheelOrderUpdater.update(locale, mode); |
|
|
|
emptyWheelUpdater.update(mode); |
|
|
|
wheelOrder.update(locale); |
|
|
|
requireDisplayValueUpdate = true; |
|
|
|
} |
|
|
|
|
|
|
@ -133,7 +130,7 @@ public class PickerView extends RelativeLayout { |
|
|
|
} |
|
|
|
|
|
|
|
// Rounding cal to closest minute interval |
|
|
|
public Calendar getInitialDate() { |
|
|
|
public Calendar getInitialDate() { |
|
|
|
Calendar cal = Calendar.getInstance(); |
|
|
|
if(minuteInterval <= 1) return cal; |
|
|
|
int exactMinute = Integer.valueOf(minutesWheel.format.format(cal.getTime())); |
|
|
@ -146,23 +143,27 @@ public class PickerView extends RelativeLayout { |
|
|
|
return (Calendar) cal.clone(); |
|
|
|
} |
|
|
|
|
|
|
|
private String getDateFormatTemplate() { |
|
|
|
String dateTemplate = (mode == Mode.date) |
|
|
|
? (yearWheel.getFormatTemplate() + " " |
|
|
|
+ monthWheel.getFormatTemplate() + " " |
|
|
|
+ dateWheel.getFormatTemplate()) |
|
|
|
: dayWheel.getFormatTemplate(); |
|
|
|
return dateTemplate + " " |
|
|
|
+ hourWheel.getFormatTemplate() + " " |
|
|
|
+ minutesWheel.getFormatTemplate() |
|
|
|
+ ampmWheel.getFormatTemplate(); |
|
|
|
private String getDateFormatPattern(){ |
|
|
|
if(mode == Mode.date){ |
|
|
|
return wheelOrder.getVisibleWheel(0).getFormatPattern() + " " |
|
|
|
+ wheelOrder.getVisibleWheel(1).getFormatPattern() + " " |
|
|
|
+ wheelOrder.getVisibleWheel(2).getFormatPattern(); |
|
|
|
} |
|
|
|
return dayWheel.getFormatPattern(); |
|
|
|
} |
|
|
|
|
|
|
|
private String getFormatPattern() { |
|
|
|
return this.getDateFormatPattern() + " " |
|
|
|
+ hourWheel.getFormatPattern() + " " |
|
|
|
+ minutesWheel.getFormatPattern() |
|
|
|
+ ampmWheel.getFormatPattern(); |
|
|
|
} |
|
|
|
|
|
|
|
public String getDateString() { |
|
|
|
String dateString= (mode == Mode.date) |
|
|
|
? (yearWheel.getValue() + " " |
|
|
|
+ monthWheel.getValue() + " " |
|
|
|
+ dateWheel.getValue()) |
|
|
|
String dateString = (mode == Mode.date) |
|
|
|
? wheelOrder.getVisibleWheel(0).getValue() + " " |
|
|
|
+ wheelOrder.getVisibleWheel(1).getValue() + " " |
|
|
|
+ wheelOrder.getVisibleWheel(2).getValue() |
|
|
|
: dayWheel.getValue(); |
|
|
|
return dateString |
|
|
|
+ " " + hourWheel.getValue() |
|
|
@ -172,10 +173,8 @@ public class PickerView extends RelativeLayout { |
|
|
|
|
|
|
|
public void setMode(Mode mode) { |
|
|
|
this.mode = mode; |
|
|
|
setDateFormat(); |
|
|
|
applyOnAllWheels(new UpdateVisibility()); |
|
|
|
wheelOrderUpdater.update(locale, mode); |
|
|
|
emptyWheelUpdater.update(mode); |
|
|
|
wheelOrder.update(locale); |
|
|
|
requireDisplayValueUpdate = true; |
|
|
|
} |
|
|
|
|
|
|
@ -229,31 +228,8 @@ public class PickerView extends RelativeLayout { |
|
|
|
return maxDate.get(); |
|
|
|
} |
|
|
|
|
|
|
|
public void setDateFormat(){ |
|
|
|
dateFormat = new SimpleDateFormat(getDateFormatTemplate(), Locale.US); |
|
|
|
protected SimpleDateFormat getDateFormat() { |
|
|
|
return new SimpleDateFormat(getFormatPattern(), locale); |
|
|
|
} |
|
|
|
|
|
|
|
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()); |
|
|
|
} |
|
|
|
|
|
|
|
public void setShownCountOnEmptyWheels(int shownCount) { |
|
|
|
int[] ids = { |
|
|
|
R.id.emptyStart, |
|
|
|
R.id.empty1, |
|
|
|
R.id.empty2, |
|
|
|
R.id.empty3, |
|
|
|
R.id.emptyEnd |
|
|
|
}; |
|
|
|
|
|
|
|
for (int id : ids) { |
|
|
|
NumberPickerView view = (NumberPickerView) findViewById(id); |
|
|
|
if(view != null) view.setShownCount(shownCount); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |