package com.henninghall.date_picker.wheels; import com.henninghall.date_picker.*; import cn.carbswang.android.numberpickerview.library.*; import java.text.*; import java.util.*; import org.apache.commons.lang3.*; public abstract class Wheel { private final Wheel self; public PickerView pickerView; private String userSetValue; ArrayList values; ArrayList displayValues; public NumberPickerView picker; public SimpleDateFormat format; SimpleDateFormat displayFormat; abstract void init(); public abstract boolean visible(); abstract String getFormatTemplate(); public Wheel(final NumberPickerView picker, final PickerView pickerView) { this.self = this; this.pickerView = pickerView; this.picker = picker; this.refresh(false); picker.setOnValueChangedListener((NumberPickerView.OnValueChangeListener)new NumberPickerView.OnValueChangeListener() { public void onValueChange(final NumberPickerView picker, final int oldVal, final int newVal) { pickerView.getListener().onChange(Wheel.this.self); } }); } public int getIndexOfDate(final Date date) { return this.values.indexOf(this.format.format(date)); } public void animateToDate(final Date date) { this.picker.smoothScrollToValue(this.getIndexOfDate(date)); } public String getValue() { if (!this.visible()) { return this.userSetValue; } return this.getValueAtIndex(this.getIndex()); } public int getIndex() { return this.picker.getValue(); } public String getValueAtIndex(final int index) { return this.values.get(index); } public void setValue(final Date date) { this.userSetValue = this.format.format(date); final int index = this.getIndexOfDate(date); if (index > -1) { if (this.picker.getValue() == 0) { this.picker.setValue(index); } else { this.picker.smoothScrollToValue(index); } } } public void refresh(final boolean keepOldValue) { this.displayFormat = new SimpleDateFormat(this.getFormatTemplate(), this.pickerView.locale); this.format = new SimpleDateFormat(this.getFormatTemplate(), LocaleUtils.toLocale("en_US")); this.values = new ArrayList(); this.displayValues = new ArrayList(); final int oldValue = this.picker.getValue(); if (this.visible()) { this.add(); this.init(); if (keepOldValue) { this.picker.setValue(oldValue); } } else { this.remove(); } } private void remove() { this.picker.setVisibility(8); } private void add() { this.picker.setVisibility(0); } }