@Override
  public void save() {
    DayValues dayValues = null;

    if (mListener != null) {
      switch (mCurrentValues.type) {
        case DayValues.TYPE_ONE_SHOT:
          Calendar calendar = Calendar.getInstance();
          calendar.set(mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth());
          dayValues = new OneShotValues(calendar);
          break;

        case DayValues.TYPE_REPEAT:
          dayValues = new RepeatValues(mRepeatPicker.getSelectedDays(), Calendar.getInstance());
          break;

        case DayValues.TYPE_EVERY:
          dayValues =
              new IntervalValues(
                  mIntervalPicker.getUnit(),
                  mIntervalPicker.getNumberValue(),
                  Calendar.getInstance());
          break;
      }
      mCurrentValues = dayValues;
      mListener.onSchedulerDayChange(this, dayValues);
    }
  }
  private void updateViews() {

    switch (mCurrentValues.type) {
      case DayValues.TYPE_ONE_SHOT:
        Calendar calendar = ((OneShotValues) mCurrentValues).date;
        mDatePicker.init(
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH),
            this);
        break;

      case DayValues.TYPE_REPEAT:
        List<Integer> days = ((RepeatValues) mCurrentValues).days;
        mRepeatPicker.setSelectedDays(days);
        break;

      case DayValues.TYPE_EVERY:
        IntervalValues values = (IntervalValues) mCurrentValues;
        mIntervalPicker.setUnit(values.unit);
        mIntervalPicker.setNumberValue(values.number);
        break;
    }

    mBtnOneShot.setEnabled(mCurrentValues.type != DayValues.TYPE_ONE_SHOT);
    mBtnRepeat.setEnabled(mCurrentValues.type != DayValues.TYPE_REPEAT);
    mBtnEvery.setEnabled(mCurrentValues.type != DayValues.TYPE_EVERY);

    mViewSwitcher.setDisplayedChild(mCurrentValues.type);
    mListener.onCurrentValuesTypeChanged(mCurrentValues.type);
  }
 @Override
 public void onAnimationEnd(Animation animation) {
   if (mListener != null) {
     mListener.onSchedulerDismiss(SchedulerDayFragment.this);
   }
 }