private void onModeSelected(int mode) {
    int oldMode = mRecurring.getRepeatMode();
    mRecurring.setRepeatMode(mode);
    updatePeriodUnit();
    mRecurring.setRepeatSetting(0);

    if (mode == Recurring.REPEAT_NONE) {
      mPeriodEditText.setEnabled(false);
      mEndSpinner.setEnabled(false);
      mEndNumEditText.setEnabled(false);
      mEndDateButton.setEnabled(false);
      mSameDayRadioButton.setEnabled(false);
      mSameWeekdayRadioButton.setEnabled(false);
      mWeekView.setEnabled(false);
    } else {
      if (oldMode == Recurring.REPEAT_NONE) {
        mPeriodEditText.setEnabled(true);
        mEndSpinner.setEnabled(true);
        mEndNumEditText.setEnabled(true);
        mEndDateButton.setEnabled(true);
        mSameDayRadioButton.setEnabled(true);
        mSameWeekdayRadioButton.setEnabled(true);
        mWeekView.setEnabled(true);
      }

      switch (mode) {
        case Recurring.REPEAT_DAILY:
        case Recurring.REPEAT_YEARLY:
          animOut(mSameDayRadioButton, true, true);
          animOut(mSameWeekdayRadioButton, true, true);
          animOut(mWeekView, true, true);
          break;
        case Recurring.REPEAT_MONTHLY:
          animIn(mSameDayRadioButton, false);
          animIn(mSameWeekdayRadioButton, false);
          animOut(mWeekView, true, true);
          mRecurring.setMonthRepeatType(
              mSameDayRadioButton.isChecked()
                  ? Recurring.MONTH_SAME_DAY
                  : Recurring.MONTH_SAME_WEEKDAY);
          break;
        case Recurring.REPEAT_WEEKLY:
          animOut(mSameDayRadioButton, true, true);
          animOut(mSameWeekdayRadioButton, true, true);
          animIn(mWeekView, false);
          for (int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++)
            mRecurring.setEnabledWeekday(i, mWeekView.isSelected(i));
          break;
      }
    }
  }