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;
      }
    }
  }
 public void clear(int i) {
   switch (i) {
     case 0:
       button0.setChecked(false);
       break;
     case 1:
       button1.setChecked(false);
       break;
     case 2:
       button2.setChecked(false);
       break;
     case 3:
       button3.setChecked(false);
       break;
     case 4:
       YoYo.with(Techniques.Shake).duration(700).playOn(ly);
       button0.setChecked(false);
       button1.setChecked(false);
       button2.setChecked(false);
       button3.setChecked(false);
       break;
     default:
       break;
   }
 }
  private void updateRecurringData() {
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(mRecurring.getStartTime());
    int order = Recurring.getWeekDayOrderNum(cal);
    String dayOfWeek = cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
    int formattedTextId = MONTH_SAME_WEEKDAY[(order + 1) % MONTH_SAME_WEEKDAY.length];
    mSameWeekdayRadioButton.setText(
        getContext().getResources().getString(formattedTextId, dayOfWeek));

    mPeriodEditText.setText(String.valueOf(mRecurring.getPeriod()));

    if (mRecurring.getRepeatMode() == Recurring.REPEAT_WEEKLY) {
      for (int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++)
        mWeekView.setSelected(i, mRecurring.isEnabledWeekday(i), true);
    } else {
      int day = cal.get(Calendar.DAY_OF_WEEK);
      for (int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++)
        mWeekView.setSelected(i, i == day, true);

      if (mRecurring.getRepeatMode() == Recurring.REPEAT_MONTHLY) {
        mSameDayRadioButton.setCheckedImmediately(
            mRecurring.getMonthRepeatType() == Recurring.MONTH_SAME_DAY);
        mSameWeekdayRadioButton.setCheckedImmediately(
            mRecurring.getMonthRepeatType() == Recurring.MONTH_SAME_WEEKDAY);
      } else {
        mSameDayRadioButton.setCheckedImmediately(true);
        mSameWeekdayRadioButton.setCheckedImmediately(false);
      }
    }

    if (mModeSpinner.getSelectedItemPosition() != mRecurring.getRepeatMode())
      mModeSpinner.setSelection(mRecurring.getRepeatMode());
    else onModeSelected(mRecurring.getRepeatMode());

    mEndNumEditText.setText(
        String.valueOf(
            mRecurring.getEndMode() == Recurring.END_FOR_EVENT ? mRecurring.getEventNumber() : 10));

    long date =
        mRecurring.getEndMode() == Recurring.END_UNTIL_DATE
            ? mRecurring.getEndDate()
            : (Math.max(System.currentTimeMillis(), mRecurring.getStartTime()) + 86400000L * 31);
    mEndDateButton.setText(mDateFormat.format(new Date(date)));
    mEndDateButton.setTag(date);

    if (mEndSpinner.getSelectedItemPosition() != mRecurring.getEndMode())
      mEndSpinner.setSelection(mRecurring.getEndMode());
    else onEndSelected(mRecurring.getEndMode());
  }
 public void set(int i) {
   switch (i) {
     case 0:
       button0.setChecked(true);
       YoYo.with(Techniques.Bounce).delay(0).duration(1000).playOn(button0);
       break;
     case 1:
       button1.setChecked(true);
       YoYo.with(Techniques.Bounce).delay(0).duration(1000).playOn(button1);
       break;
     case 2:
       button2.setChecked(true);
       YoYo.with(Techniques.Bounce).delay(0).duration(1000).playOn(button2);
       break;
     case 3:
       button3.setChecked(true);
       YoYo.with(Techniques.Bounce).delay(0).duration(1000).playOn(button3);
       break;
     default:
       break;
   }
 }
 public void init() {
   button0.setChecked(false);
   button1.setChecked(false);
   button2.setChecked(false);
   button3.setChecked(false);
 }
  @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
  @Override
  protected void onCreate() {
    View v = LayoutInflater.from(getContext()).inflate(R.layout.dialog_recurring, null);
    setContentView(v);

    FrameLayout fl_mode = (FrameLayout) v.findViewById(R.id.rd_fl_mode);
    final ScrollView sv_repeat = (ScrollView) v.findViewById(R.id.rd_sv_repeat);
    final LinearLayout ll_repeat = (LinearLayout) v.findViewById(R.id.rd_ll_repeat);
    mModeSpinner = (Spinner) fl_mode.findViewById(R.id.rd_spn_mode);
    mEndSpinner = (Spinner) v.findViewById(R.id.rd_spn_end);
    mPeriodEditText = (EditText) v.findViewById(R.id.rd_et_period);
    mPeriodUnitTextView = (TextView) v.findViewById(R.id.rd_tv_period_unit);
    mSameDayRadioButton = (RadioButton) v.findViewById(R.id.rd_month_rb_same);
    mSameWeekdayRadioButton = (RadioButton) v.findViewById(R.id.rd_month_rb_week);
    mEndNumEditText = (EditText) v.findViewById(R.id.rd_et_end_num);
    mEndNumUnitTextView = (TextView) v.findViewById(R.id.rd_tv_end_num_unit);
    mEndDateButton = (Button) v.findViewById(R.id.rd_bt_end_date);
    mWeekView = (WeekView) v.findViewById(R.id.rd_wv_week);

    sv_repeat
        .getViewTreeObserver()
        .addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
              @Override
              public void onGlobalLayout() {
                showDivider(ll_repeat.getMeasuredHeight() > sv_repeat.getMeasuredHeight());
              }
            });

    mHeaderBackground = new HeaderDrawable(getContext());

    ViewCompat.setPaddingRelative(fl_mode, mContentPadding, 0, mContentPadding, 0);
    ViewUtil.setBackground(fl_mode, mHeaderBackground);
    ViewCompat.setPaddingRelative(
        ll_repeat, mContentPadding, mActionOuterPadding, mContentPadding, mActionPadding);

    mModeAdapter = new ModeAdapter();
    mModeSpinner.setAdapter(mModeAdapter);
    mModeSpinner.setOnItemSelectedListener(
        new Spinner.OnItemSelectedListener() {
          @Override
          public void onItemSelected(Spinner parent, View view, int position, long id) {
            onModeSelected(position);
          }
        });

    mEndAdapter = new EndAdapter();
    mEndSpinner.setAdapter(mEndAdapter);
    mEndSpinner.setOnItemSelectedListener(
        new Spinner.OnItemSelectedListener() {
          @Override
          public void onItemSelected(Spinner parent, View view, int position, long id) {
            onEndSelected(position);
          }
        });

    mPeriodEditText.addTextChangedListener(
        new TextWatcher() {
          @Override
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) {}

          @Override
          public void afterTextChanged(Editable s) {
            onPeriodChanged();
          }
        });

    mPeriodEditText.setOnKeyListener(
        new View.OnKeyListener() {
          @Override
          public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
              String text = mPeriodEditText.getText().toString();
              if (TextUtils.isEmpty(text))
                mPeriodEditText.setText(String.valueOf(mRecurring.getPeriod()));
            }
            return false;
          }
        });

    CompoundButton.OnCheckedChangeListener mCheckChangeListener =
        new android.widget.CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(
              android.widget.CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
              if (buttonView == mSameDayRadioButton) mSameWeekdayRadioButton.setChecked(false);
              else mSameDayRadioButton.setChecked(false);
              onMonthSettingChanged();
            }
          }
        };

    mSameDayRadioButton.setOnCheckedChangeListener(mCheckChangeListener);
    mSameWeekdayRadioButton.setOnCheckedChangeListener(mCheckChangeListener);

    mEndNumEditText.addTextChangedListener(
        new TextWatcher() {
          @Override
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) {}

          @Override
          public void afterTextChanged(Editable s) {
            onEventNumberChanged();
          }
        });

    mEndNumEditText.setOnKeyListener(
        new View.OnKeyListener() {
          @Override
          public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
              String text = mEndNumEditText.getText().toString();
              if (TextUtils.isEmpty(text))
                mEndNumEditText.setText(String.valueOf(mRecurring.getEventNumber()));
            }
            return false;
          }
        });

    View.OnClickListener mDateClickListener =
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            final DatePickerDialog dialog =
                new DatePickerDialog(getContext(), mDatePickerDialogStyleId);
            long minTime = System.currentTimeMillis();
            Calendar cal = dialog.getCalendar();
            cal.setTimeInMillis(minTime);
            cal.add(Calendar.YEAR, 100);
            long maxTime = cal.getTimeInMillis();

            dialog
                .dateRange(minTime, maxTime)
                .date((long) mEndDateButton.getTag())
                .positiveAction(mPositiveAction.getText())
                .positiveActionClickListener(
                    new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                        onEndDateChanged(dialog.getDate());
                        dialog.dismiss();
                      }
                    })
                .negativeAction(mNegativeAction.getText())
                .negativeActionClickListener(
                    new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                        dialog.dismiss();
                      }
                    })
                .show();
          }
        };

    mEndDateButton.setOnClickListener(mDateClickListener);

    mWeekView.setOnDaySelectionChangedListener(this);
  }
 private void onMonthSettingChanged() {
   mRecurring.setMonthRepeatType(
       mSameDayRadioButton.isChecked() ? Recurring.MONTH_SAME_DAY : Recurring.MONTH_SAME_WEEKDAY);
 }