void setDayHighlightColor(ColorStateList dayHighlightColor) {
   final int pressedColor =
       dayHighlightColor.getColorForState(
           StateSet.get(StateSet.VIEW_STATE_ENABLED | StateSet.VIEW_STATE_PRESSED), 0);
   mDayHighlightPaint.setColor(pressedColor);
   invalidate();
 }
 void setDaySelectorColor(ColorStateList dayBackgroundColor) {
   final int activatedColor =
       dayBackgroundColor.getColorForState(
           StateSet.get(StateSet.VIEW_STATE_ENABLED | StateSet.VIEW_STATE_ACTIVATED), 0);
   mDaySelectorPaint.setColor(activatedColor);
   invalidate();
 }
  /** Draws the month days. */
  private void drawDays(Canvas canvas) {
    final TextPaint p = mDayPaint;
    final int headerHeight = mMonthHeight + mDayOfWeekHeight;
    final int rowHeight = mDayHeight;
    final int colWidth = mCellWidth;

    // Text is vertically centered within the row height.
    final float halfLineHeight = (p.ascent() + p.descent()) / 2f;
    int rowCenter = headerHeight + rowHeight / 2;

    for (int day = 1, col = findDayOffset(); day <= mDaysInMonth; day++) {
      final int colCenter = colWidth * col + colWidth / 2;
      final int colCenterRtl;
      if (isLayoutRtl()) {
        colCenterRtl = mPaddedWidth - colCenter;
      } else {
        colCenterRtl = colCenter;
      }

      int stateMask = 0;

      final boolean isDayEnabled = isDayEnabled(day);
      if (isDayEnabled) {
        stateMask |= StateSet.VIEW_STATE_ENABLED;
      }

      final boolean isDayActivated = mActivatedDay == day;
      if (isDayActivated) {
        stateMask |= StateSet.VIEW_STATE_ACTIVATED;

        // Adjust the circle to be centered on the row.
        canvas.drawCircle(colCenterRtl, rowCenter, mDaySelectorRadius, mDaySelectorPaint);
      } else if (mTouchedItem == day) {
        stateMask |= StateSet.VIEW_STATE_PRESSED;

        if (isDayEnabled) {
          // Adjust the circle to be centered on the row.
          canvas.drawCircle(colCenterRtl, rowCenter, mDaySelectorRadius, mDayHighlightPaint);
        }
      }

      final boolean isDayToday = mToday == day;
      final int dayTextColor;
      if (isDayToday && !isDayActivated) {
        dayTextColor = mDaySelectorPaint.getColor();
      } else {
        final int[] stateSet = StateSet.get(stateMask);
        dayTextColor = mDayTextColor.getColorForState(stateSet, 0);
      }
      p.setColor(dayTextColor);

      canvas.drawText(mDayFormatter.format(day), colCenterRtl, rowCenter - halfLineHeight, p);

      col++;

      if (col == DAYS_IN_WEEK) {
        col = 0;
        rowCenter += rowHeight;
      }
    }
  }