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 ;
14+ import org .threeten .bp .LocalDate ;
15+
1416import java .util .ArrayList ;
15- import java .util .Calendar ;
1617import java .util .List ;
1718
19+ import static org .threeten .bp .Month .DECEMBER ;
20+ import static org .threeten .bp .Month .JANUARY ;
21+
1822/**
1923 * Created by shrikanthravi on 06/03/18.
2024 */
2125
2226public class CalendarAdapter {
23- private int mFirstDayOfWeek = 0 ;
24- private Calendar mCal ;
27+ private DayOfWeek mFirstDayOfWeek = DayOfWeek . MONDAY ;
28+ private LocalDate mCal ;
2529 private LayoutInflater mInflater ;
26- private int mEventDotSize = UICalendar .EVENT_DOT_BIG ;
30+ private int mEventDotSize = UICalendar .EVENT_DOT_BIG ;
2731
28- List <Day > mItemList = new ArrayList <>();
29- List <View > mViewList = new ArrayList <>();
30- 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 <>();
3135
32- public CalendarAdapter (Context context , Calendar cal ) {
33- this .mCal = (Calendar ) cal .clone ();
34- this .mCal .set (Calendar .DAY_OF_MONTH , 1 );
36+ public CalendarAdapter (Context context ) {
37+ this .mCal = LocalDate .now ().withDayOfMonth (1 );
3538 mInflater = LayoutInflater .from (context );
3639
3740 refresh ();
@@ -42,22 +45,35 @@ public int getCount() {
4245 return mItemList .size ();
4346 }
4447
45- public Day getItem (int position ) {
48+ public LocalDate getItem (int position ) {
4649 return mItemList .get (position );
4750 }
4851
4952 public View getView (final int position ) {
5053 return mViewList .get (position );
5154 }
5255
53- 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 ) {
5469 mFirstDayOfWeek = firstDayOfWeek ;
5570 }
71+
5672 public void setEventDotSize (int eventDotSize ) {
5773 mEventDotSize = eventDotSize ;
5874 }
5975
60- public Calendar getCalendar () {
76+ public LocalDate getCalendar () {
6177 return mCal ;
6278 }
6379
@@ -71,71 +87,69 @@ public void refresh() {
7187 mViewList .clear ();
7288
7389 // set calendar
74- int year = mCal .get ( Calendar . YEAR );
75- int month = mCal .get ( Calendar . MONTH );
90+ int year = mCal .getYear ( );
91+ int month = mCal .getMonthValue ( );
7692
77- mCal . set (year , month , 1 );
93+ mCal = LocalDate . of (year , month , 1 );
7894
79- int lastDayOfMonth = mCal .getActualMaximum ( Calendar . DAY_OF_MONTH );
80- int firstDayOfWeek = mCal .get ( Calendar . DAY_OF_WEEK ) - 1 ;
95+ int lastDayOfMonth = mCal .lengthOfMonth ( );
96+ DayOfWeek firstDayOfWeek = mCal .getDayOfWeek () ;
8197
8298 // generate day list
83- int offset = 0 - (firstDayOfWeek - mFirstDayOfWeek ) + 1 ;
84- 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 ;
85102 for (int i = offset ; i < length + offset ; i ++) {
86103 int numYear ;
87104 int numMonth ;
88105 int numDay ;
89106
90- Calendar tempCal = Calendar .getInstance ();
91107 if (i <= 0 ) { // prev month
92- if (month == 0 ) {
108+ if (month == JANUARY . getValue () ) {
93109 numYear = year - 1 ;
94- numMonth = 11 ;
110+ numMonth = DECEMBER . getValue () ;
95111 } else {
96112 numYear = year ;
97113 numMonth = month - 1 ;
98114 }
99- tempCal . set (numYear , numMonth , 1 );
100- numDay = tempCal .getActualMaximum ( Calendar . DAY_OF_MONTH ) + i ;
115+ LocalDate tempCal = LocalDate . of (numYear , numMonth , 1 );
116+ numDay = tempCal .lengthOfMonth ( ) + i ;
101117 } else if (i > lastDayOfMonth ) { // next month
102- if (month == 11 ) {
118+ if (month == DECEMBER . getValue () ) {
103119 numYear = year + 1 ;
104- numMonth = 0 ;
120+ numMonth = JANUARY . getValue () ;
105121 } else {
106122 numYear = year ;
107- numMonth = month + 1 ;
123+ numMonth = month ;
108124 }
109- tempCal .set (numYear , numMonth , 1 );
110125 numDay = i - lastDayOfMonth ;
111126 } else {
112127 numYear = year ;
113128 numMonth = month ;
114129 numDay = i ;
115130 }
116131
117- Day day = new Day (numYear , numMonth , numDay );
132+ LocalDate day = LocalDate . of (numYear , numMonth , numDay );
118133 View view ;
119- if (mEventDotSize == UICalendar .EVENT_DOT_SMALL )
120- view = mInflater .inflate (R .layout .day_layout_small , null );
121- else
134+ if (mEventDotSize == UICalendar .EVENT_DOT_SMALL ) {
135+ view = mInflater .inflate (R .layout .day_layout_small , null );
136+ } else {
122137 view = mInflater .inflate (R .layout .day_layout , null );
138+ }
123139
124- TextView txtDay = ( TextView ) view .findViewById (R .id .txt_day );
125- ImageView imgEventTag = ( ImageView ) view .findViewById (R .id .img_event_tag );
140+ TextView txtDay = view .findViewById (R .id .txt_day );
141+ ImageView imgEventTag = view .findViewById (R .id .img_event_tag );
126142
127- txtDay .setText (String .valueOf (day .getDay ()));
128- if (day .getMonth () != mCal .get ( Calendar . MONTH )) {
143+ txtDay .setText (String .valueOf (day .getDayOfMonth ()));
144+ if (day .getMonth () != mCal .getMonth ( )) {
129145 txtDay .setAlpha (0.3f );
130146 }
131147
132148 for (int j = 0 ; j < mEventList .size (); j ++) {
133149 Event event = mEventList .get (j );
134- if (day .getYear () == event .getYear ()
135- && day .getMonth () == event .getMonth ()
136- && day .getDay () == event .getDay ()) {
150+ if (day .equals (event .getDate ())) {
137151 imgEventTag .setVisibility (View .VISIBLE );
138- imgEventTag .setColorFilter (event .getColor (),PorterDuff .Mode .SRC_ATOP );
152+ imgEventTag .setColorFilter (event .getColor (), PorterDuff .Mode .SRC_ATOP );
139153 }
140154 }
141155
0 commit comments