11package com .shrikanthravi .collapsiblecalendarview .data ;
22
33import android .content .Context ;
4- import android .graphics .Color ;
54import android .graphics .PorterDuff ;
65import android .view .LayoutInflater ;
76import android .view .View ;
1110import com .shrikanthravi .collapsiblecalendarview .R ;
1211import com .shrikanthravi .collapsiblecalendarview .widget .UICalendar ;
1312
13+ import org .threeten .bp .DayOfWeek ;
1414import org .threeten .bp .LocalDate ;
15- import org .threeten .bp .LocalTime ;
16- import org .threeten .bp .Month ;
1715
1816import java .util .ArrayList ;
19- import java .util .Calendar ;
2017import java .util .List ;
2118
19+ import static org .threeten .bp .Month .DECEMBER ;
20+ import static org .threeten .bp .Month .JANUARY ;
21+
2222/**
2323 * Created by shrikanthravi on 06/03/18.
2424 */
2525
2626public class CalendarAdapter {
27- private int mFirstDayOfWeek = 0 ;
28- private Calendar mCal ;
27+ private DayOfWeek mFirstDayOfWeek = DayOfWeek . MONDAY ;
28+ private LocalDate mCal ;
2929 private LayoutInflater mInflater ;
30- private int mEventDotSize = UICalendar .EVENT_DOT_BIG ;
30+ private int mEventDotSize = UICalendar .EVENT_DOT_BIG ;
3131
32- List <LocalDate > mItemList = new ArrayList <>();
33- List <View > mViewList = new ArrayList <>();
34- List <Event > mEventList = new ArrayList <>();
32+ private List <LocalDate > mItemList = new ArrayList <>();
33+ private List <View > mViewList = new ArrayList <>();
34+ private List <Event > mEventList = new ArrayList <>();
3535
36- public CalendarAdapter (Context context , Calendar cal ) {
37- this .mCal = (Calendar ) cal .clone ();
38- this .mCal .set (Calendar .DAY_OF_MONTH , 1 );
36+ public CalendarAdapter (Context context ) {
37+ this .mCal = LocalDate .now ().withDayOfMonth (1 );
3938 mInflater = LayoutInflater .from (context );
4039
4140 refresh ();
@@ -54,14 +53,27 @@ public View getView(final int position) {
5453 return mViewList .get (position );
5554 }
5655
57- public void setFirstDayOfWeek (int firstDayOfWeek ) {
56+ public void nextMonth () {
57+ mCal = mCal .plusMonths (1 );
58+ }
59+
60+ public void previousMonth () {
61+ mCal = mCal .minusMonths (1 );
62+ }
63+
64+ public void setDate (LocalDate date ) {
65+ mCal = date ;
66+ }
67+
68+ public void setFirstDayOfWeek (DayOfWeek firstDayOfWeek ) {
5869 mFirstDayOfWeek = firstDayOfWeek ;
5970 }
71+
6072 public void setEventDotSize (int eventDotSize ) {
6173 mEventDotSize = eventDotSize ;
6274 }
6375
64- public Calendar getCalendar () {
76+ public LocalDate getCalendar () {
6577 return mCal ;
6678 }
6779
@@ -75,71 +87,69 @@ public void refresh() {
7587 mViewList .clear ();
7688
7789 // set calendar
78- int year = mCal .get ( Calendar . YEAR );
79- int month = mCal .get ( Calendar . MONTH );
90+ int year = mCal .getYear ( );
91+ int month = mCal .getMonthValue ( );
8092
81- mCal . set (year , month , 1 );
93+ mCal = LocalDate . of (year , month , 1 );
8294
83- int lastDayOfMonth = mCal .getActualMaximum ( Calendar . DAY_OF_MONTH );
84- int firstDayOfWeek = mCal .get ( Calendar . DAY_OF_WEEK ) - 1 ;
95+ int lastDayOfMonth = mCal .lengthOfMonth ( );
96+ DayOfWeek firstDayOfWeek = mCal .getDayOfWeek () ;
8597
8698 // generate day list
87- int offset = 0 - (firstDayOfWeek - mFirstDayOfWeek ) + 1 ;
88- int length = (int ) Math .ceil ((float ) (lastDayOfMonth - offset + 1 ) / 7 ) * 7 ;
99+ int offset = 0 - (firstDayOfWeek .getValue () - mFirstDayOfWeek .getValue ());
100+ if (offset > 0 ) offset += -7 ;
101+ int length = (int ) Math .ceil ((float ) (lastDayOfMonth - offset ) / 7 ) * 7 ;
89102 for (int i = offset ; i < length + offset ; i ++) {
90103 int numYear ;
91104 int numMonth ;
92105 int numDay ;
93106
94- Calendar tempCal = Calendar .getInstance ();
95107 if (i <= 0 ) { // prev month
96- if (month == 0 ) {
108+ if (month == JANUARY . getValue () ) {
97109 numYear = year - 1 ;
98- numMonth = 11 ;
110+ numMonth = DECEMBER . getValue () ;
99111 } else {
100112 numYear = year ;
101113 numMonth = month - 1 ;
102114 }
103- tempCal . set (numYear , numMonth , 1 );
104- numDay = tempCal .getActualMaximum ( Calendar . DAY_OF_MONTH ) + i ;
115+ LocalDate tempCal = LocalDate . of (numYear , numMonth , 1 );
116+ numDay = tempCal .lengthOfMonth ( ) + i ;
105117 } else if (i > lastDayOfMonth ) { // next month
106- if (month == 11 ) {
118+ if (month == DECEMBER . getValue () ) {
107119 numYear = year + 1 ;
108- numMonth = 0 ;
120+ numMonth = JANUARY . getValue () ;
109121 } else {
110122 numYear = year ;
111- numMonth = month + 1 ;
123+ numMonth = month ;
112124 }
113- tempCal .set (numYear , numMonth , 1 );
114125 numDay = i - lastDayOfMonth ;
115126 } else {
116127 numYear = year ;
117128 numMonth = month ;
118129 numDay = i ;
119130 }
120131
121- LocalDate day = LocalDate .of (numYear , numMonth + 1 , numDay );
132+ LocalDate day = LocalDate .of (numYear , numMonth , numDay );
122133 View view ;
123- if (mEventDotSize == UICalendar .EVENT_DOT_SMALL )
124- view = mInflater .inflate (R .layout .day_layout_small , null );
125- else
134+ if (mEventDotSize == UICalendar .EVENT_DOT_SMALL ) {
135+ view = mInflater .inflate (R .layout .day_layout_small , null );
136+ } else {
126137 view = mInflater .inflate (R .layout .day_layout , null );
138+ }
127139
128140 TextView txtDay = view .findViewById (R .id .txt_day );
129141 ImageView imgEventTag = view .findViewById (R .id .img_event_tag );
130142
131143 txtDay .setText (String .valueOf (day .getDayOfMonth ()));
132- if (day .getMonthValue () - 1 != mCal .get ( Calendar . MONTH )) {
144+ if (day .getMonth () != mCal .getMonth ( )) {
133145 txtDay .setAlpha (0.3f );
134146 }
135147
136148 for (int j = 0 ; j < mEventList .size (); j ++) {
137149 Event event = mEventList .get (j );
138- if (day .getYear () == event .getYear ()
139- && day .getMonthValue () == event .getMonth ()
140- && day .getDayOfMonth () == event .getDay ()) {
150+ if (day .equals (event .getDate ())) {
141151 imgEventTag .setVisibility (View .VISIBLE );
142- imgEventTag .setColorFilter (event .getColor (),PorterDuff .Mode .SRC_ATOP );
152+ imgEventTag .setColorFilter (event .getColor (), PorterDuff .Mode .SRC_ATOP );
143153 }
144154 }
145155
0 commit comments