You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

113 lines
3.8 KiB

package com.henninghall.date_picker;
import android.util.Log;
import com.henninghall.date_picker.models.Mode;
import com.henninghall.date_picker.models.Variant;
import com.henninghall.date_picker.models.WheelType;
import java.util.ArrayList;
import java.util.Arrays;
public class DerivedData {
private final State state;
DerivedData(State state) {
this.state = state;
}
public ArrayList<WheelType> getVisibleWheels() {
ArrayList<WheelType> visibleWheels = new ArrayList<>();
Mode mode = state.getMode();
switch (mode){
case datetime: {
visibleWheels.add(WheelType.DAY);
visibleWheels.add(WheelType.HOUR);
visibleWheels.add(WheelType.MINUTE);
break;
}
case time: {
visibleWheels.add(WheelType.HOUR);
visibleWheels.add(WheelType.MINUTE);
break;
}
case date: {
visibleWheels.add(WheelType.YEAR);
visibleWheels.add(WheelType.MONTH);
visibleWheels.add(WheelType.DATE);
break;
}
}
if((mode == Mode.time || mode == Mode.datetime) && Utils.usesAmPm()){
visibleWheels.add(WheelType.AM_PM);
}
return visibleWheels;
}
public ArrayList<WheelType> getOrderedVisibleWheels() {
ArrayList<WheelType> orderedWheels = getOrderedWheels();
ArrayList<WheelType> visibleWheels = getVisibleWheels();
ArrayList<WheelType> visibleOrderedWheels = new ArrayList<>();
for (WheelType wheel : orderedWheels){
if(visibleWheels.contains(wheel)) visibleOrderedWheels.add(wheel);
}
return visibleOrderedWheels;
}
private ArrayList<WheelType> getOrderedWheels() {
String dateTimePattern = LocaleUtils.getDateTimePattern(state.getLocale());
ArrayList<WheelType> unorderedTypes = new ArrayList(Arrays.asList(WheelType.values()));
ArrayList<WheelType> orderedWheels = new ArrayList<>();
// Always put day wheel first
unorderedTypes.remove(WheelType.DAY);
orderedWheels.add(WheelType.DAY);
for (char ch : dateTimePattern.toCharArray()){
try {
WheelType wheelType = Utils.patternCharToWheelType(ch);
if (unorderedTypes.contains(wheelType)) {
unorderedTypes.remove(wheelType);
orderedWheels.add(wheelType);
}
} catch (Exception e) {
// ignore unknown pattern chars that not correspond to any wheel type
}
}
// If AM/PM wheel remains it means that the locale does not have AM/PM by default and it
// should be put last.
if(unorderedTypes.contains(WheelType.AM_PM)){
unorderedTypes.remove(WheelType.AM_PM);
orderedWheels.add(WheelType.AM_PM);
}
if(!unorderedTypes.isEmpty()) {
Log.e(
"RNDatePicker",
unorderedTypes.size() + " wheel types cannot be ordered. Wheel type 0: " + unorderedTypes.get(0));
}
return orderedWheels;
}
public int getShownCount() {
int DP_PER_SHOW_SHOW_COUNT = 35;
int showCount = state.getHeight() / DP_PER_SHOW_SHOW_COUNT;
int oddShowCount = showCount % 2 == 0 ? showCount + 1 : showCount;
return oddShowCount;
}
public boolean hasNativeStyle() {
return state.getVariant() == Variant.nativeAndroid;
}
public int getRootLayout() {
switch (state.getVariant()){
case nativeAndroid: return R.layout.native_picker;
case iosClone: return R.layout.ios_clone;
default: return R.layout.ios_clone;
}
}
}