@Override public void setAttribute(final View view, DOMAttr attr, AttrLayoutContext attrCtx) { final String year = getString(attr.getResourceDesc(), attrCtx.getXMLInflaterContext()); Object datePickerObject = getDatePickerObject(view); // Delegamos al final porque los atributos maxDate y minDate tienen prioridad (ganan si están // definidos) // sobre startYear y endYear Locale currentLocale = fieldCurrentLocale.get(datePickerObject); Calendar tempDate = Calendar.getInstance(currentLocale); tempDate.clear(); if (!TextUtils.isEmpty(year)) { int yearInt = Integer.parseInt(year); if ("endYear".equals(name)) tempDate.set(yearInt, Calendar.DECEMBER /*11*/, 31); else if ("startYear".equals(name)) tempDate.set(yearInt, Calendar.JANUARY /*0*/, 1); } else { // Caso de eliminación de atributo, intrepretamos como el deseo de poner los valores por // defecto (más o menos es así en el código fuente) // hay que tener en cuenta que es un valor explícito por lo que ignoramos/reemplazamos los // posibles valores anteriores if ("endYear".equals(name)) tempDate.set(DEFAULT_END_YEAR, Calendar.DECEMBER /*11*/, 31); else if ("startYear".equals(name)) tempDate.set(DEFAULT_START_YEAR, Calendar.JANUARY /*0*/, 1); } methodMaxMinDate.invoke(datePickerObject, tempDate.getTimeInMillis()); }
private Object getDatePickerObject(View view) { if (Build.VERSION.SDK_INT < MiscUtil.LOLLIPOP) return (DatePicker) view; else return fieldDelegate.get(view); }