package Ġru . cle ver pump kin . calendar Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . Attr Res Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . collection . Array Map Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġru . cle ver pump kin . calendar . adapter . Calendar Adapter Ċ import Ġru . cle ver pump kin . calendar . adapter . Calendar Items Generator Ċ import Ġru . cle ver pump kin . calendar . adapter . manager . Adapter DataManager Ċ import Ġru . cle ver pump kin . calendar . adapter . manager . Calendar Adapter DataManager Ċ import Ġru . cle ver pump kin . calendar . decor ations . No Item Decoration Ċ import Ġru . cle ver pump kin . calendar . extension . getColor Int Ċ import Ġru . cle ver pump kin . calendar . selection .* Ċ import Ġru . cle ver pump kin . calendar . style . Calendar Style Attributes Ċ import Ġru . cle ver pump kin . calendar . style . Calendar Style Attributes Reader Ċ import Ġru . cle ver pump kin . calendar . utils . Date Info Provider Ċ import Ġru . cle ver pump kin . calendar . utils . Displayed Dates Range Factory Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġrepresents Ġa Ġcalendar Ġwidget Ġthat Ġallows Ġto Ġdisplay Ġvertical Ġscroll able Ġcalendar Ġgrid , Ċ Ġ* Ġselecting Ġdates , Ġdisplaying Ġcolor Ġindicators Ġfor Ġthe Ġspecific Ġdates , Ġhandling Ġdate Ġselection Ċ Ġ* Ġand Ġso Ġon . Ċ Ġ* Ċ Ġ* ĠThe ĠCalendar Ġmust Ġbe Ġinitialized Ġwith Ġthe Ġ[ setup Calendar ] Ġmethod Ġwhere Ġyou Ġcan Ġspecify Ċ Ġ* ĠCalendar Ġparameters . Ċ Ġ* Ċ Ġ* ĠThe ĠCalendar ĠUI Ġopen Ġfor Ġcustomization : Ġyou Ġcan Ġdefine Ġgrid Ġdivider Ġcolor , Ġdate Ġcell Ġselectors Ġetc . Ċ Ġ* ĠUsing Ġstandard Ġ[ RecyclerView . Item Decoration ] Ġyou Ġcan Ġdefine Ġspecial Ġdrawing Ġlogic Ġfor Ġthe Ġcalendar Ċ Ġ* Ġitems . Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġoverrides Ġ[ on Save InstanceState ] Ġand Ġ[ on Restore InstanceState ], Ġso Ġit Ġis Ġable Ċ Ġ* Ġto Ġsave Ġand Ġrestore Ġits Ġinternal Ġstate . Ċ Ġ*/ Ċ class ĠCalendar View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ Attr Res Ġdef Style Attr : ĠInt Ġ= ĠR . attr . calendar View Style Ċ Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġinterface Ġrepresents Ġa Ġcolor Ġindicator Ġfor Ġthe Ġspecific Ġdate Ġthat Ġwill Ġbe Ġdisplayed ĊĠĠĠĠ Ġ* Ġon Ġthe ĠCalendar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠDate Indicator Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate : ĠCalendar Date ĊĠĠĠĠĠĠĠ Ġval Ġcolor : ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ REC Y C LED _ DAY _ V IE WS Ġ= Ġ 9 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ REC Y C LED _ EMPTY _ V IE WS Ġ= Ġ 2 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ SUPER _ STATE Ġ= Ġ" ru . cle ver pump kin . calendar . super _ state " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ DISPLAY ED _ DATE Ġ= Ġ" ru . cle ver pump kin . calendar . display ed _ date " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ DISPLAY _ DATE _ RANGE Ġ= Ġ" ru . cle ver pump kin . calendar . display _ date _ range " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ LIMIT _ DATE _ RANGE Ġ= Ġ" ru . cle ver pump kin . calendar . limit _ date _ range " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ SELECTION _ MODE Ġ= Ġ" ru . cle ver pump kin . calendar . selection _ mode " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB UNDLE _ FIRST _ DAY _ OF _ WEEK Ġ= Ġ" ru . cle ver pump kin . calendar . first _ day _ of _ week " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġenum Ġclass Ġrepresents Ġavailable Ġselection Ġmodes Ġfor Ġdates Ġselecting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠSelection Mode Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSelection Ġis Ġunavailable . ĠNo Ġdates Ġwill Ġbe Ġselect able . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠNONE , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠOnly Ġone Ġdate Ġcan Ġbe Ġselected Ġat Ġa Ġtime . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠS INGLE , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġnumber Ġof Ġdates Ġcan Ġbe Ġselected . ĠPress ing Ġan Ġalready Ġselected Ġdate Ġwill Ġun select Ġit . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠMULTI PLE , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAllows Ġyou Ġto Ġselect Ġa Ġdate Ġrange . ĠPrevious Ġselected Ġrange Ġis Ġcleared Ġwhen Ġyou Ġselect Ġanother Ġone . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠR ANGE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInternal Ġflag , Ġthat Ġindicates Ġwhether Ġthe ĠCalendar Ġhas Ġbeen Ġinitialized ĊĠĠĠĠ Ġ* Ġwith Ġ[ setup Calendar ] Ġmethod Ġor Ġnot . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġhas Been Initialized With Setup Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġval Ġcalendar Adapter : ĠCalendar Adapter ĊĊĠĠĠ Ġprivate Ġvar Ġdisplayed Dates Range Ġ= ĠD ates Range . empty Range () ĊĠĠĠ Ġprivate Ġvar Ġmin Max Dates Range Ġ= ĠNullable Dates Range () ĊĠĠĠ Ġprivate Ġvar Ġdate Selection Strategy : ĠDate Selection Strategy Ġ= ĠNo Date Selection Strategy () ĊĠĠĠ Ġprivate Ġval Ġdate Info Provider Ġ= ĠDefault Date Info Provider () ĊĠĠĠ Ġprivate Ġval Ġadapter DataManager : ĠAdapter DataManager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcalendar Items Generator : ĠCalendar Items Generator ĊĊĠĠĠ Ġprivate Ġval Ġcalendar Style Attributes Ġ= ĠCalendar Style Attributes ( context ) ĊĊĠĠĠ Ġprivate Ġvar Ġselection Mode : ĠSelection Mode Ġ= ĠSelection Mode . NONE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selection Strategy Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection Mode . NONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Date Selection Strategy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection Mode . SINGLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Date Selection Strategy ( adapter DataManager , Ġdate Info Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection Mode . MULTIPLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMultiple Date Selection Strategy ( adapter DataManager , Ġdate Info Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelection Mode . RANGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRange Date Selection Strategy ( adapter DataManager , Ġdate Info Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġdefault First DayOfWeek : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠCalendar . getInstance (). first DayOfWeek ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġfirst Ġday Ġof Ġthe Ġweek Ġ( e . g Ġ[ Calendar . S UND AY ], Ġ[ Calendar . MON DAY ], Ġetc .) ĊĠĠĠĠ Ġ* Ġthat Ġhas Ġbeen Ġset Ġfor Ġthe ĠCalendar . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġnull , Ġ[ default First DayOfWeek ] Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfirst DayOfWeek : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Items Generator Ġ= ĠCalendar Items Generator ( first DayOfWeek Ġ?: Ġdefault First DayOfWeek ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGroup ed Ġby Ġdate Ġcolor Ġindicators Ġthat Ġare Ġdisplayed Ġon Ġthe ĠCalendar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġgrouped Dates Indicators Ġ= ĠArray Map < Calendar Date , ĠMutable List < Date Indicator >>() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġof Ġindicators Ġthat Ġare Ġdisplayed Ġon Ġthe ĠCalendar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdates Indicators : ĠList < Date Indicator > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrouped Dates Indicators . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . groupBy To ( grouped Dates Indicators ) Ġ{ Ġit . date Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġthat Ġwill Ġbe Ġnotified Ġwhen Ġa Ġdate Ġcell Ġis Ġclicked . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon Date ClickListener : Ġ(( Calendar Date ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġthat Ġwill Ġbe Ġnotified Ġwhen Ġa Ġdate Ġcell Ġis Ġlong Ġclicked . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġon Date Long ClickListener : Ġ(( Calendar Date ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFilter Ġthat Ġis Ġused Ġto Ġdetermine Ġwhether Ġa Ġdate Ġavailable Ġfor Ġselection Ġor Ġnot . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġdate Selection Filter : Ġ(( Calendar Date ) Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFilter Ġthat Ġis Ġused Ġto Ġdetermine Ġwhether Ġa Ġdate Ġis Ġa Ġweekend Ġor Ġnot . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġweekend Filter : Ġ( Calendar Date ) Ġ-> ĠBoolean Ġ= Ġ{ Ġdate Ġ-> ĊĠĠĠĠĠĠĠ Ġdate . day OfWeek Ġ== ĠCalendar . S UND AY Ġ|| Ġdate . day OfWeek Ġ== ĠCalendar . S ATUR DAY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġselected Ġdates Ġaccording Ġto Ġthe Ġ[ selection Mode ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġselection Ġmode Ġis : ĊĠĠĠĠ Ġ* Ġ[ Selection Mode . NONE ] Ġreturns Ġempty Ġlist . ĊĠĠĠĠ Ġ* Ġ[ Selection Mode . SINGLE ] Ġreturns Ġa Ġlist Ġwith Ġa Ġsingle Ġselected Ġdate . ĊĠĠĠĠ Ġ* Ġ[ Selection Mode . MULTIPLE ] Ġreturns Ġa Ġlist Ġwith Ġall Ġselected Ġdates Ġin Ġorder Ġthey Ġwere Ġadded . ĊĠĠĠĠ Ġ* Ġ[ Selection Mode . RANGE ] Ġreturns Ġa Ġlist Ġwith Ġall Ġdates Ġin Ġthe Ġselected Ġrange . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġselected Dates : ĠList < Calendar Date > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdate Selection Strategy . getSelected Dates () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġselected Ġdate Ġor Ġnull Ġaccording Ġto Ġthe Ġ[ selection Mode ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġselected Date : ĠCalendar Date ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdate Selection Strategy . getSelected Dates () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInit Ġblock Ġwhere Ġwe Ġread Ġcustom Ġattributes Ġand Ġset Ġup Ġinternal Ġviews . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( R . layout . calendar _ view , Ġthis , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= ĠfindViewById ( R . id . calendar _ recycler _ view ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Style Attributes Reader . read Style Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs Ġ= Ġattrs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef Style Attr Ġ= Ġdef Style Attr , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Attributes Ġ= Ġcalendar Style Attributes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcalendar Adapter Ġ= ĠCalendar Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Attributes Ġ= Ġcalendar Style Attributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Info Provider Ġ= Ġdate Info Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Date ClickListener Ġ= Ġ{ Ġdate , Ġlong Click Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( long Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Date Long ClickListener ?. invoke ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selection Strategy . on Date Selected ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Date ClickListener ?. invoke ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġadapter DataManager Ġ= ĠCalendar Adapter DataManager ( calendar Adapter ) ĊĊĠĠĠĠĠĠĠ Ġsetup RecyclerView ( re cyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġfor Ġthe Ġinitial ĠCalendar Ġset Ġup . ĠAll Ġparameters Ġhave Ġdefault Ġvalues . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ initial Date ] Ġthe Ġdate Ġthat Ġwill Ġbe Ġdisplayed Ġinitially . ĊĠĠĠĠ Ġ* ĠDefault Ġvalue Ġ- Ġtoday Ġdate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ min Date ] Ġminimum Ġdate Ġfor Ġthe ĠCalendar Ġgrid , Ġinclusive . ĊĠĠĠĠ Ġ* ĠIf Ġnull , Ġthe ĠCalendar Ġwill Ġdisplay Ġall Ġavailable Ġdates Ġbefore Ġ[ initial Date ] ĊĠĠĠĠ Ġ* ĠDefault Ġvalue Ġ- Ġnull . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ max Date ] Ġmaximum Ġdate Ġfor Ġthe ĠCalendar Ġgrid , Ġinclusive . ĊĠĠĠĠ Ġ* ĠIf Ġnull , Ġthe ĠCalendar Ġwill Ġdisplay Ġall Ġavailable Ġdates Ġafter Ġ[ initial Date ] ĊĠĠĠĠ Ġ* ĠDefault Ġvalue Ġ- Ġnull . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ selection Mode ] Ġmode Ġfor Ġdates Ġselecting . ĊĠĠĠĠ Ġ* ĠDefault Ġvalue Ġ- Ġ[ Selection Mode . NONE ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ selected Dates ] Ġlist Ġof Ġthe Ġinitially Ġselected Ġdates . ĊĠĠĠĠ Ġ* ĠDefault Ġvalue Ġ- Ġempty Ġlist . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġselection Ġmode Ġis : ĊĠĠĠĠ Ġ* Ġ[ Selection Mode . SINGLE ], Ġ[ selected Dates ] Ġcan Ġcontains Ġonly Ġsingle Ġdate . ĊĠĠĠĠ Ġ* Ġ[ Selection Mode . MULTIPLE ], Ġ[ selected Dates ] Ġcan Ġcontains Ġmultiple Ġdates . ĊĠĠĠĠ Ġ* Ġ[ Selection Mode . RANGE ], Ġ[ selected Dates ] Ġcan Ġcontains Ġtwo Ġdates Ġthat Ġrepresent Ġselected Ġrange . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ first DayOfWeek ] Ġthe Ġfirst Ġday Ġof Ġthe Ġweek : Ġ[ Calendar . S UND AY ], Ġ[ Calendar . MON DAY ], Ġetc . ĊĠĠĠĠ Ġ* ĠIf Ġnull , Ġthe ĠCalendar Ġwill Ġbe Ġinitialized Ġwith Ġthe Ġ[ default First DayOfWeek ]. ĊĠĠĠĠ Ġ* ĠDefault Ġvalue Ġ- Ġnull . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ show Year Selection View ] Ġflag Ġthat Ġindicates Ġwhether Ġyear Ġselection Ġview Ġwill Ġbe Ġdisplayed Ġor Ġnot . ĊĠĠĠĠ Ġ* ĠDefault Ġvalue Ġ- Ġtrue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsetup Calendar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Date : ĠCalendar Date Ġ= ĠCalendar Date . today , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Date : ĠCalendar Date ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Date : ĠCalendar Date ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Mode : ĠSelection Mode Ġ= ĠSelection Mode . NONE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Dates : ĠList < Calendar Date > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst DayOfWeek : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( min Date Ġ!= Ġnull Ġ&& Ġmax Date Ġ!= Ġnull Ġ&& Ġmin Date Ġ> Ġmax Date ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" min Date Ġmust Ġbe Ġbefore Ġmax Date : Ġ$ min Date , Ġmax Date : Ġ$ max Date ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( first DayOfWeek Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first DayOfWeek Ġ< ĠCalendar . S UND AY Ġ|| Ġfirst DayOfWeek Ġ> ĠCalendar . S ATUR DAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Incorrect Ġvalue Ġof Ġfirst DayOfWeek : Ġ$ first DayOfWeek ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . selection Mode Ġ= Ġselection Mode ĊĠĠĠĠĠĠĠ Ġthis . first DayOfWeek Ġ= Ġfirst DayOfWeek ĊĠĠĠĠĠĠĠ Ġmin Max Dates Range Ġ= ĠNullable Dates Range ( date From Ġ= Ġmin Date , Ġdate To Ġ= Ġmax Date ) ĊĊĊĠĠĠĠĠĠĠ Ġupdate Selected Dates Internal ( selected Dates ) ĊĊĠĠĠĠĠĠĠ Ġdisplayed Dates Range Ġ= ĠDisplay ed Dates Range Factory . get Displayed Dates Range ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Date Ġ= Ġinitial Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Date Ġ= Ġmin Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Date Ġ= Ġmax Date ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġgenerate Calendar Items ( display ed Dates Range ) ĊĠĠĠĠĠĠĠ Ġmove ToDate ( initial Date ) ĊĊĠĠĠĠĠĠĠ Ġhas Been Initialized With Setup Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMove Ġto Ġthe Ġspecific Ġcalendar Ġdate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove ToDate ( date : ĠCalendar Date ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( min Date , Ġmax Date ) Ġ= Ġmin Max Dates Range ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( min Date Ġ!= Ġnull Ġ&& Ġdate Ġ< Ġmin Date . month Beginning ()) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( max Date Ġ!= Ġnull Ġ&& Ġdate Ġ> Ġmax Date . month End ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġ( display Dates From , Ġdisplay Dates To ) Ġ= Ġdisplayed Dates Range ĊĊĠĠĠĠĠĠĠ Ġif Ġ( date . is Between ( date From Ġ= Ġdisplay Dates From , Ġdate To Ġ= Ġdisplay Dates To ). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplayed Dates Range Ġ= ĠDisplay ed Dates Range Factory . get Displayed Dates Range ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Date Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Date Ġ= Ġmin Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Date Ġ= Ġmax Date ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Calendar Items ( display ed Dates Range ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdate Month Position Ġ= Ġcalendar Adapter . find Month Position ( date ) ĊĠĠĠĠĠĠĠ Ġif Ġ( date Month Position Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= Ġre cyclerView . layout Manager Ġas ĠGrid LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid LayoutManager . scrollTo Position With Offset ( date Month Position , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . stop Scroll () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġdays Ġof Ġweek Ġbar Ġbackground Ġcolor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Days Bar BackgroundColor (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Style Attributes . days Bar Background Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġdays Ġof Ġweek Ġbar Ġbackground Ġcolor Ġresource . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Days Bar BackgroundColor Res (@ Color Res Ġcolor Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Days Bar BackgroundColor ( getColor Int ( color Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġdays Ġof Ġweek Ġbar Ġtext Ġcolor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Days Bar TextColor (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Style Attributes . days Bar TextColor Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġdays Ġof Ġweek Ġbar Ġtext Ġcolor Ġresources . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Days Bar TextColor Res (@ Color Res Ġcolor Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Days Bar TextColor ( getColor Int ( color Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġmonth Ġtext Ġcolor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Month TextColor (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Style Attributes . month TextColor Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġcalendar Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġmonth Ġtext Ġcolor Ġresource . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Month TextColor Res (@ Color Res Ġcolor Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Month TextColor ( getColor Int ( color Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġa Ġdate Ġcell Ġtext Ġcolor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Date Cell TextColor ( color State List : ĠColor State List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Style Attributes . date Cell TextColor State List Ġ= Ġcolor State List ĊĠĠĠĠĠĠĠ Ġcalendar Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġa Ġdate Ġcell Ġtext Ġcolor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Date Cell TextColor (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor State List Ġ= ĠColor State List . valueOf ( color ) ĊĠĠĠĠĠĠĠ Ġset Date Cell TextColor ( color State List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġa Ġdate Ġcell Ġtext Ġcolor Ġresource . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Date Cell TextColor Res (@ Color Res Ġcolor Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor State List Ġ= Ġrequire NotNull ( Context Compat . getColor State List ( context , Ġcolor Res )) ĊĠĠĠĠĠĠĠ Ġset Date Cell TextColor ( color State List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġcustom Ġ[ RecyclerView . Item Decoration ] Ġthat Ġwill Ġbe Ġused Ġfor Ġthe ĠCalendar Ġview Ġdecoration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Custom Item Decoration ( item Decoration : ĠRecyclerView . Item Decoration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( item Decoration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġ[ RecyclerView . Item Decoration ] Ġthat Ġhas Ġbeen Ġadded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Custom Item Decoration ( item Decoration : ĠRecyclerView . Item Decoration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . removeItem Decoration ( item Decoration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġlist Ġof Ġindicators Ġfor Ġthe Ġspecific Ġdate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Date Indicators ( date : ĠCalendar Date ): ĠList < Date Indicator > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgrouped Dates Indicators [ date ] Ġ?: Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġcurrently Ġselected Ġdates . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Selected Dates ( selected Dates : ĠList < Calendar Date >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdate Selection Strategy . clear () ĊĠĠĠĠĠĠĠ Ġupdate Selected Dates Internal ( selected Dates ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Selected Dates Internal ( selected Dates : ĠList < Calendar Date >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Dates . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Mode Ġ== ĠSelection Mode . NONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġcannot Ġdefine Ġselected Ġdates Ġwhen Ġthe ĠSelection Mode Ġis ĠNONE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Mode Ġ== ĠSelection Mode . SINGLE Ġ&& Ġselected Dates . size Ġ> Ġ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġcannot Ġdefine Ġmore Ġthan Ġone Ġselected Ġdates Ġwhen Ġthe ĠSelection Mode Ġis ĠS INGLE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Mode Ġ== ĠSelection Mode . RANGE Ġ&& Ġselected Dates . size Ġ!= Ġ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġmust Ġdefine Ġtwo Ġselected Ġdates Ġ( start Ġand Ġend ) Ġwhen Ġthe ĠSelection Mode Ġis ĠR ANGE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġselected Dates . forEach Ġ{ Ġdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date Info Provider . is Date OutOfRange ( date ). not () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Info Provider . is Date Selectable ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selection Strategy . on Date Selected ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= Ġobject Ġ: ĠGrid LayoutManager ( context , ĠCalendar Const . DAYS _ IN _ WEEK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Been Initialized With Setup . not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgrid LayoutManager . span Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( re cyclerView . adapter ?. getItem ViewType ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Adapter . MONTH _ VIEW _ TYPE Ġ-> ĠCalendar Const . DAYS _ IN _ WEEK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( re cyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġcalendar Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġgrid LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Animator Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc led View Pool . setMax Re cyc led Views ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Adapter . DATE _ VIEW _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ REC Y C LED _ DAY _ V IE WS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc led View Pool . setMax Re cyc led Views ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Adapter . EMPTY _ VIEW _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ REC Y C LED _ EMPTY _ V IE WS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( No Item Decoration ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Scroll Listener ( Calendar Items Generation Listener ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Calendar Items ( dates Range : ĠD ates Range ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dates Range . isEmpty Range ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcalendar Items Ġ= Ġcalendar Items Generator . generate Calendar Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate From Ġ= Ġdates Range . date From , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate To Ġ= Ġdates Range . date To ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcalendar Adapter . set Calendar Items ( calendar Items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Prev Calendar Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin Date Ġ= Ġmin Max Dates Range . date From ĊĠĠĠĠĠĠĠ Ġif Ġ( min Date Ġ!= Ġnull Ġ&& Ġmin Date . months Between ( display ed Dates Range . date From ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerate Dates From : ĠCalendar Date ĊĠĠĠĠĠĠĠ Ġval Ġgenerate Dates To Ġ= Ġdisplayed Dates Range . date From . minus Months ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġgenerate Dates From Ġ= Ġif Ġ( min Date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Between Ġ= Ġmin Date . months Between ( generate Dates To ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( month Between Ġ> ĠCalendar Const . MONTH S _ PER _ PAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Dates To . minus Months ( Calendar Const . MONTH S _ PER _ PAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Dates To . minus Months ( month Between ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Dates To . minus Months ( Calendar Const . MONTH S _ PER _ PAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcalendar Items Ġ= Ġcalendar Items Generator . generate Calendar Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate From Ġ= Ġgenerate Dates From , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate To Ġ= Ġgenerate Dates To ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcalendar Adapter . add Prev Calendar Items ( calendar Items ) ĊĠĠĠĠĠĠĠ Ġdisplayed Dates Range Ġ= Ġdisplayed Dates Range . copy ( date From Ġ= Ġgenerate Dates From ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Next Calendar Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmax Date Ġ= Ġmin Max Dates Range . date To ĊĠĠĠĠĠĠĠ Ġif Ġ( max Date Ġ!= Ġnull Ġ&& Ġdisplayed Dates Range . date To . months Between ( max Date ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerate Dates From Ġ= Ġdisplayed Dates Range . date To . plus Months ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġgenerate Dates To : ĠCalendar Date ĊĊĠĠĠĠĠĠĠ Ġgenerate Dates To Ġ= Ġif Ġ( max Date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Between Ġ= Ġgenerate Dates From . months Between ( max Date ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( month Between Ġ> ĠCalendar Const . MONTH S _ PER _ PAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Dates From . plus Months ( Calendar Const . MONTH S _ PER _ PAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Dates From . plus Months ( month Between ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Dates From . plus Months ( Calendar Const . MONTH S _ PER _ PAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcalendar Items Ġ= Ġcalendar Items Generator . generate Calendar Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate From Ġ= Ġgenerate Dates From , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate To Ġ= Ġgenerate Dates To ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcalendar Adapter . add Next Calendar Items ( calendar Items ) ĊĠĠĠĠĠĠĠ Ġdisplayed Dates Range Ġ= Ġdisplayed Dates Range . copy ( date To Ġ= Ġgenerate Dates To ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġinternal ĠCalendar Ġstate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState (): ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuper State Ġ= Ġsuper . on Save InstanceState () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( B UNDLE _ SELECTION _ MODE , Ġselection Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( B UNDLE _ DISPLAY _ DATE _ RANGE , Ġdisplayed Dates Range ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( B UNDLE _ LIMIT _ DATE _ RANGE , Ġmin Max Dates Range ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ( B UNDLE _ SUPER _ STATE , Ġsuper State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst DayOfWeek ?. let Ġ{ Ġput Int ( B UNDLE _ FIRST _ DAY _ OF _ WEEK , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selection Strategy . save Selected Dates ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRestore Ġinternal Ġcalendar Ġstate . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote : ĠIf ĠCalendar Ġwas Ġinitialized Ġwith Ġ[ setup Calendar ] Ġmethod Ġbefore Ġ[ on Restore InstanceState ], ĊĠĠĠĠ Ġ* Ġrest oring Ġof Ġinternal Ġcalendar Ġstate Ġwon 't Ġbe Ġperformed , Ġbecause Ġthe Ġnew Ġstate Ġhas Ġbeen Ġset Ġup . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Restore InstanceState ( state : ĠParcel able ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġis ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuper State : ĠParcel able ? Ġ= Ġstate . get Parcelable ( B UNDLE _ SUPER _ STATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( super State ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Been Initialized With Setup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Mode Ġ= Ġstate . get Serializable ( B UNDLE _ SELECTION _ MODE ) Ġas ĠSelection Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplayed Dates Range Ġ= Ġstate . get Parcelable ( B UNDLE _ DISPLAY _ DATE _ RANGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠD ates Range . empty Range () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Max Dates Range Ġ= Ġstate . get Parcelable ( B UNDLE _ LIMIT _ DATE _ RANGE ) Ġ?: ĠNullable Dates Range () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst DayOfWeek Ġ= Ġstate . getInt ( B UNDLE _ FIRST _ DAY _ OF _ WEEK , Ġ- 1 ). take If Ġ{ Ġit Ġ!= Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Selection Strategy . restore Selected Dates ( state ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Calendar Items ( display ed Dates Range ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Restore InstanceState ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠDefault Date Info Provider Ġ: ĠDate Info Provider Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtoday Calendar Date Ġ= ĠCalendar Date . today ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Today ( date : ĠCalendar Date ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdate Ġ== Ġtoday Calendar Date ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Date Selected ( date : ĠCalendar Date ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdate Selection Strategy . is Date Selected ( date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Date OutOfRange ( date : ĠCalendar Date ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmin Max Dates Range . is Date OutOfRange ( date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Date Selectable ( date : ĠCalendar Date ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdate Selection Filter ?. invoke ( date ) Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Week end ( date : ĠCalendar Date ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġweekend Filter . invoke ( date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Date Indicators ( date : ĠCalendar Date ): ĠList < Date Indicator > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Calendar View . getDate Indicators ( date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠCalendar Items Generation Listener Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= Ġre cyclerView . layout Manager Ġas ? ĠGrid LayoutManager Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . item Count Ġ== Ġgrid LayoutManager . find Last Visible Item Position (). inc () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . post Ġ{ Ġgenerate Next Calendar Items () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid LayoutManager . findFirst Visible Item Position () Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . post Ġ{ Ġgenerate Prev Calendar Items () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }