package me.ecois.lite.ui.fragment; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.text.format.DateUtils; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.widget.DatePicker; import java.util.Calendar; import me.ecois.lite.R; public class MonthPickerDialog extends AlertDialog implements DialogInterface.OnClickListener, DatePicker.OnDateChangedListener { private static final String YEAR = "year"; private static final String MONTH = "month"; private static final String DAY = "day"; private final DatePicker mDatePicker; private final OnMonthSelectedListener mMonthSetListener; private final Calendar mCalendar; public interface OnMonthSelectedListener { void onMonthSet(int year, int monthOfYear); } public MonthPickerDialog(Context context, OnMonthSelectedListener callBack, int year, int monthOfYear) { this(context, 0, callBack, year, monthOfYear); } static int resolveDialogTheme(Context context, int resId) { if (resId == 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { final TypedValue outValue = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.datePickerDialogTheme, outValue, true); return outValue.resourceId; } else { return resId; } } public MonthPickerDialog(Context context, int theme, OnMonthSelectedListener listener, int year, int monthOfYear) { super(context, resolveDialogTheme(context, theme)); mMonthSetListener = listener; mCalendar = Calendar.getInstance(); final Context themeContext = getContext(); final LayoutInflater inflater = LayoutInflater.from(themeContext); final View view = inflater.inflate(R.layout.month_picker_dialog, null); setView(view); setButton(BUTTON_POSITIVE, themeContext.getString(android.R.string.ok), this); setButton(BUTTON_NEGATIVE, themeContext.getString(android.R.string.cancel), this); mDatePicker = (DatePicker) view.findViewById(R.id.datePicker); mDatePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); mDatePicker.init(year, monthOfYear, 1, this); updateTitle(year, monthOfYear); } @Override public void onDateChanged(DatePicker view, int year, int month, int day) { mDatePicker.init(year, month, 1, this); updateTitle(year, month); } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case BUTTON_POSITIVE: if (mMonthSetListener != null) { mDatePicker.clearFocus(); mMonthSetListener.onMonthSet(mDatePicker.getYear(), mDatePicker.getMonth()); } break; case BUTTON_NEGATIVE: cancel(); break; } } public DatePicker getDatePicker() { return mDatePicker; } public void updateDate(int year, int monthOfYear) { mDatePicker.updateDate(year, monthOfYear, 1); } private void updateTitle(int year, int month) { mCalendar.set(Calendar.YEAR, year); mCalendar.set(Calendar.MONTH, month); String title = DateUtils.formatDateTime(getContext(), mCalendar.getTimeInMillis(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY); setTitle(title); } @Override public Bundle onSaveInstanceState() { final Bundle state = super.onSaveInstanceState(); state.putInt(YEAR, mDatePicker.getYear()); state.putInt(MONTH, mDatePicker.getMonth()); state.putInt(DAY, mDatePicker.getDayOfMonth()); return state; } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); final int year = savedInstanceState.getInt(YEAR); final int month = savedInstanceState.getInt(MONTH); final int day = savedInstanceState.getInt(DAY); mDatePicker.init(year, month, day, this); } }