package org.openlmis.core.view.widget; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; import android.view.View; import android.view.ViewGroup; import android.widget.DatePicker; import org.openlmis.core.exceptions.LMISException; import java.util.Calendar; import java.util.GregorianCalendar; public class DatePickerDialogWithoutDay extends DatePickerDialog { private OnDateSetListener mDateSetListener; public DatePickerDialogWithoutDay(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, AlertDialog.THEME_HOLO_LIGHT, null, year, monthOfYear, dayOfMonth); init(callBack); } private void init(OnDateSetListener listener) { mDateSetListener = listener; hideDay(getDatePicker()); } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case BUTTON_POSITIVE: if (mDateSetListener != null) { DatePicker datePicker = getDatePicker(); mDateSetListener.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), getLastDayOfMonth(datePicker)); } break; case BUTTON_NEGATIVE: cancel(); break; } } private static int getLastDayOfMonth(DatePicker datePicker) { return new GregorianCalendar(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth()).getActualMaximum(Calendar.DATE); } @Override public void onDateChanged(DatePicker view, int year, int month, int day) { int defaultDay = new GregorianCalendar(year, month, day).getActualMaximum(Calendar.DATE); super.onDateChanged(view, year, month, defaultDay); } private void hideDay(DatePicker datePicker) { if (datePicker == null) { return; } ViewGroup datePickerLayout = (ViewGroup) datePicker.getChildAt(0); if (datePickerLayout == null) { return; } try { //hide CalendarView datePickerLayout.getChildAt(1).setVisibility(View.GONE); //hide day int dayIdentifier = Resources.getSystem().getIdentifier("day", "id", "android"); ViewGroup pickers = (ViewGroup) datePickerLayout.getChildAt(0); for (int i = 0; i < pickers.getChildCount(); i++) { View childView = pickers.getChildAt(i); if (childView.getId() == dayIdentifier) { childView.setVisibility(View.GONE); return; } } } catch (NullPointerException e) { new LMISException(e).reportToFabric(); } } }