Exemplo n.º 1
0
  private void updateCells() {
    Calendar cal;
    Integer counter = 0;
    if (dateDisplay != null) cal = (Calendar) dateDisplay.clone();
    else cal = Calendar.getInstance();

    cal.set(Calendar.DAY_OF_MONTH, 1);
    cardTitle.setText(new SimpleDateFormat("MMM yyyy", Locale.getDefault()).format(cal.getTime()));
    int daySpacing = getDaySpacing(cal.get(Calendar.DAY_OF_WEEK));

    // INFO : wrong calculations of first line - fixed
    if (daySpacing > 0) {
      Calendar prevMonth = (Calendar) cal.clone();
      prevMonth.add(Calendar.MONTH, -1);
      prevMonth.set(
          Calendar.DAY_OF_MONTH,
          prevMonth.getActualMaximum(Calendar.DAY_OF_MONTH) - daySpacing + 1);
      for (int i = 0; i < daySpacing; i++) {
        CheckableLayout cell = cells.get(counter);
        cell.setTag(
            new CardGridItem(Integer.valueOf(prevMonth.get(Calendar.DAY_OF_MONTH)))
                .setEnabled(false));
        cell.setEnabled(false);
        (mOnItemRender == null ? mOnItemRenderDefault : mOnItemRender)
            .onRender(cell, (CardGridItem) cell.getTag());
        counter++;
        prevMonth.add(Calendar.DAY_OF_MONTH, 1);
      }
    }

    int firstDay = cal.get(Calendar.DAY_OF_MONTH);
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    int lastDay = cal.get(Calendar.DAY_OF_MONTH) + 1;
    for (int i = firstDay; i < lastDay; i++) {
      cal.set(Calendar.DAY_OF_MONTH, i - 1);
      Calendar date = (Calendar) cal.clone();
      date.add(Calendar.DAY_OF_MONTH, 1);
      CheckableLayout cell = cells.get(counter);
      cell.setTag(new CardGridItem(i).setEnabled(true).setDate(date));
      cell.setEnabled(true);
      cell.setVisibility(View.VISIBLE);
      (mOnItemRender == null ? mOnItemRenderDefault : mOnItemRender)
          .onRender(cell, (CardGridItem) cell.getTag());
      counter++;
    }

    if (dateDisplay != null) cal = (Calendar) dateDisplay.clone();
    else cal = Calendar.getInstance();

    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));

    daySpacing = getDaySpacingEnd(cal.get(Calendar.DAY_OF_WEEK));

    if (daySpacing > 0) {
      for (int i = 0; i < daySpacing; i++) {
        CheckableLayout cell = cells.get(counter);
        cell.setTag(new CardGridItem(i + 1).setEnabled(false)); // .setDate((Calendar)cal.clone())
        cell.setEnabled(false);
        cell.setVisibility(View.VISIBLE);
        (mOnItemRender == null ? mOnItemRenderDefault : mOnItemRender)
            .onRender(cell, (CardGridItem) cell.getTag());
        counter++;
      }
    }

    if (counter < cells.size()) {
      for (int i = counter; i < cells.size(); i++) {
        cells.get(i).setVisibility(View.GONE);
      }
    }
  }