Skip to content

Instantly share code, notes, and snippets.

@ivkil
Created April 8, 2016 12:49
Show Gist options
  • Select an option

  • Save ivkil/5538a34eaf28990cc3718d231871daca to your computer and use it in GitHub Desktop.

Select an option

Save ivkil/5538a34eaf28990cc3718d231871daca to your computer and use it in GitHub Desktop.

Revisions

  1. ivkil created this gist Apr 8, 2016.
    128 changes: 128 additions & 0 deletions MonthPickerDialog.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,128 @@
    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);
    }
    }