Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is it possible to show from Sunday to Monday? #8

Open
huytower opened this issue Apr 4, 2017 · 1 comment
Open

Is it possible to show from Sunday to Monday? #8

huytower opened this issue Apr 4, 2017 · 1 comment

Comments

@huytower
Copy link

huytower commented Apr 4, 2017

Thank @kenumir so much for this best Calendar library.

I custom your calendar and show correctly from Monday to Sunday with respective day.

Now I want show from Sunday to Monday.

  • I'm able to show the Title from Sunday to Monday.
  • But the Day not show respectively with.

I try to set locale or setFirstDayOfWeek but looks not work as I thought.

in CalendarCard.java

 private void updateCells(boolean isRefresh, ArrayList<CardGridItem> o) {
               Calendar cal;
               Integer counter = 0;

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

        /*
         * Set specified specifiedMonth to refresh if have
         */
        if (isRefresh)  cal.set(Calendar.MONTH, getSpecifiedMonth());
        cal.set(Calendar.DAY_OF_MONTH, 1);

        int daySpacing = getDaySpacing(cal.get(Calendar.DAY_OF_WEEK));

        /*
         DAY IN PREVIOUS MONTH
          */
        if (daySpacing > 0) {
            Calendar mCalPrevMonth = (Calendar)cal.clone();

            mCalPrevMonth.add(Calendar.MONTH, -1);
            mCalPrevMonth.set(Calendar.DAY_OF_MONTH, mCalPrevMonth.getActualMaximum(Calendar.DAY_OF_MONTH) - daySpacing + 1);

            for(int i=0; i<daySpacing; i++) {
                CheckableLayout cell = cells.get(counter);
                cell.setTag(
                        new CardGridItem(mCalPrevMonth.get(Calendar.DAY_OF_MONTH), mCalPrevMonth.get(Calendar.MONTH), mCalPrevMonth.get(Calendar.YEAR))
                                .setEnabled(isValidMonth(mCalPrevMonth))
                                .setDiffMonth(true)
                                .setSaturday(isSaturday(mCalPrevMonth))
                                .setSunday(isSunday(mCalPrevMonth))
                                .setTransferToSpecifiedMonth(true));

                /*
                Need check previous month is out of range or not
                - If Yes, should disable cell
                 - If no, allow select previous and transfer to previous month
                 */
                cell.setEnabled(isValidMonth(mCalPrevMonth));

                (mOnItemRender == null ? mOnItemRenderDefault : mOnItemRender).onRender(cell, (CardGridItem)cell.getTag());
                counter++;
                mCalPrevMonth.add(Calendar.DAY_OF_MONTH, 1);
            }
        }

        /*
        DAY IN CURRENT MONTH
         */
        // Reset first day & last day in Card array for checking & update new items from API
        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;

        Calendar mCalCurrentMonth = Calendar.getInstance();
        int currentDay = mCalCurrentMonth.get(Calendar.MONTH) == cal.get(Calendar.MONTH) ?
                mCalCurrentMonth.get(Calendar.DAY_OF_MONTH) :
                cal.get(Calendar.DAY_OF_MONTH);

        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);

            /*
            Change to logic disable from first day to current day to show respective color
            */
            CardGridItem item = new CardGridItem(i, date.get(Calendar.MONTH), date.get(Calendar.YEAR))
                    .setEnabled(isValidDay(date))
                    .setDate(date)
                    .setSaturday(isSaturday(date))
                    .setSunday(isSunday(date));

            cell.setTag(item);

            /*
            Change to logic disable from first day to current day
            - Return true if current month not equal to specified Month
            - Return true if current month equal to specified Month && i > current day of current Month
            - Otherwise return false
             */
            boolean isDiffMonth = mCalCurrentMonth.get(Calendar.MONTH) != getSpecifiedMonth();
            boolean isSameMonth = mCalCurrentMonth.get(Calendar.MONTH) == getSpecifiedMonth();
            boolean isSameYear = mCalCurrentMonth.get(Calendar.YEAR) == getSpecifiedYear();
            cell.setEnabled(isSameYear
                    && (isDiffMonth || (isSameMonth && i > currentDay)));
            cell.setVisibility(View.VISIBLE);

            (mOnItemRender == null ? mOnItemRenderDefault : mOnItemRender).onRender(cell, (CardGridItem) cell.getTag());
            counter++;
        }

        /*
        DAY IN NEXT MONTH
         */
        if (mCalendarDateDisplay != null)	cal = (Calendar) mCalendarDateDisplay.clone();
        else	cal = Calendar.getInstance();

        Calendar mCalNextMonth = (Calendar)cal.clone();

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

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

        if (daySpacing > 0) {

            mCalNextMonth.add(Calendar.MONTH, 1);
            mCalNextMonth.set(Calendar.DAY_OF_MONTH, 1);

            for(int i=0; i<daySpacing; i++) {
                CheckableLayout cell = cells.get(counter);

                cell.setTag(new CardGridItem(i + 1, mCalNextMonth.get(Calendar.MONTH), mCalNextMonth.get(Calendar.YEAR))
                        .setEnabled(true)
                        .setDiffMonth(true)
                        .setSaturday(isSaturday(mCalNextMonth))
                        .setSunday(isSunday(mCalNextMonth))
                        .setTransferToSpecifiedMonth(true));
                cell.setEnabled(true);
                cell.setVisibility(View.VISIBLE);

                (mOnItemRender == null ? mOnItemRenderDefault : mOnItemRender).onRender(cell, (CardGridItem)cell.getTag());

                counter++;
                mCalNextMonth.add(Calendar.DAY_OF_MONTH, 1);
            }
        }

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

Therefore I post this enhancement,
Please help me detail how to do this?

Thank you,
@kenumir
Copy link
Owner

kenumir commented Apr 4, 2017

I did not foresee such a situation, this will require more code intervention. The library was supposed to be simple. There are more things missing than this :(

It is necessary to rebuild calculations - loop generating data.

Now I do not have time to do it. Maybe for some time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants