package Ġcom . view . cal ender . horizontal . umar . horizontal calendar view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . constraint . Constraint Layout Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . widget . Default Item Animator Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . support . v 7 . widget . Linear Snap Helper Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ Ċ import Ġcom . view . cal ender . horizontal . umar . horizontal calendar view . material . Material Cal Adapter Ċ Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . Date Ċ Ċ class ĠHorizontal Calendar View Ġ: ĠLinearLayout Ġ{ ĊĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġleft Image : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġright Image : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Root View : ĠView ĊĠĠĠ Ġprivate Ġvar ĠmContext : ĠContext ĊĠĠĠ Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġvar Ġcal Adapter : ĠCal Adapter < *> ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġcurrent Day Model List : ĠArrayList < Day Date Month Year Model > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġhorizontal Pagination Scroller : ĠHorizontal Pagination Scroller ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcal : ĠCalendar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcal Previous : ĠCalendar ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠdateFormat : ĠDate Format ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdate : ĠDate ĊĠĠĠ Ġ// internal Ġvar Ġdate Previous : ĠDate ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġlinear LayoutManager : ĠLinearLayoutManager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmain Background : ĠConstraint Layout ĊĠĠĠ Ġlateinit Ġvar Ġto CallBack : ĠHorizontal Calendar Listener ĊĠĠĠ Ġprivate Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġchanged To Material Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġmaterial Color : ĠInt Ġ= ĠColor . parse Color ("# 0 0 ff 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġsingle Item Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmode : ĠCal Adapter . Week Name Mode Ġ= ĠCal Adapter . Week Name Mode . SHORT ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmaterial Size Style : ĠMaterial Cal Adapter . Companion . Material Size Style ĊĠĠĠ Ġprivate Ġvar Ġpadding Between Elements Ġ= Ġ 1 0 ĊĠĠĠ Ġprivate Ġvar Ġtoday Date Model : ĠDay Date Month Year Model ? Ġ= Ġnull ĊĠĠĠ Ġconstructor ( mContext : ĠContext ) Ġ: Ġsuper ( mContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= ĠmContext ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( mContext : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( mContext , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mContext Ġ= ĠmContext ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Root View Ġ= ĠView . inflate ( mContext , ĠR . layout . custom _ cal ender _ layout , Ġthis ) ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= ĠfindViewById ( R . id . recycler _ view ) ĊĠĠĠĠĠĠĠ Ġmain Background Ġ= ĠfindViewById ( R . id . main _ background ) ĊĠĠĠĠĠĠĠ Ġleft Image Ġ= ĠfindViewById ( R . id . left _ image _ view ) ĊĠĠĠĠĠĠĠ Ġright Image Ġ= ĠfindViewById ( R . id . right _ image _ view ) ĊĠĠĠĠĠĠĠ Ġload Next Page () ĊĠĠĠĠĠĠĠ Ġleft Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( mContext , Ġ" left Ġbut ", ĠToast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( linear LayoutManager . findFirst Visible Item Position ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . smooth Scroll To Position ( linear LayoutManager . findFirst Visible Item Position () Ġ- Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġright Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( mContext , Ġ" right Ġbut ", ĠToast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . smooth Scroll To Position ( linear LayoutManager . find Last Visible Item Position () Ġ+ Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Index Ġ= Ġlinear LayoutManager . find Last Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Visible Index Ġ= Ġlinear LayoutManager . findFirst Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dx Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfirst Visible Index Ġuntil Ġlast Visible Index ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Day Model List [ i ]. month . compareTo ( current Day Model List [ i Ġ+ Ġ 1 ]. month ) Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcb Ġ= ĠCall Back ( to CallBack , Ġ" update Month On Scroll ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcb . invoke ( current Day Model List [ i Ġ+ Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( dx Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlast Visible Index Ġdown To Ġfirst Visible Index Ġ+ Ġ 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Day Model List [ i ]. month . compareTo ( current Day Model List [ i Ġ+ Ġ 1 ]. month ) Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcb Ġ= ĠCall Back ( to CallBack , Ġ" update Month On Scroll ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcb . invoke ( current Day Model List [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġlinear LayoutManager . scrollTo Position ( 2 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Next Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( change Cal Adapter ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġcal Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cal Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Day Model List Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat Ġ= Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat (" MMMM - EEE - yyyy - MM - dd ", ĠmContext . resources . configuration . locales [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimpleDateFormat (" MMMM - EEE - yyyy - MM - dd ", ĠmContext . resources . configuration . locale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// System . out . println (" Day Ġ 1 "+ " Ġ"+ date Format . format ( date )); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Day Model Ġ= ĠDay Date Month Year Model ( cal . time In Millis , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoday Date Model Ġ= Ġcurrent Day Model ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Previous Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal . time Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Previous . time Ġ= Ġdate ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Previous . add ( Calendar . DAY _ OF _ WEEK , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Day Model Ġ= ĠDay Date Month Year Model ( cal Previous . time In Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter . add Previous ( current Day Mode ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Day Model List . add ( 0 , Ġprevious Day Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Day Model List . add ( current Day Model ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// SimpleDateFormat Ġsdf Ġ= Ġnew ĠSimpleDateFormat (" MMM ĠE EE Ġy yyy - MM - dd "); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal . add ( Calendar . DAY _ OF _ WEEK , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Day Model Ġ= ĠDay Date Month Year Model ( cal . time In Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Day Model List . add ( next Day Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter Ġ= Ġnew Cal Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( mContext , ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . item Animator Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġcal Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Snap Helper (). attach To RecyclerView ( re cyclerView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Pagination Scroller Ġ= Ġobject Ġ: ĠHorizontal Pagination Scroller ( linear LayoutManager ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval ĠisLoading : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ Horizontal Calendar View . isLoading ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload More Items () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Horizontal Calendar View . isLoading Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Next Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload More Items On Left () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( mContext , Ġ" Reached ĠLeft ", ĠToast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Previous Page ( Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . add On Scroll Listener ( horizontal Pagination Scroller ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal . add ( Calendar . DAY _ OF _ WEEK , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Day Model Ġ= ĠDay Date Month Year Model ( cal . time In Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter !!. add ( next Day Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Cal Adapter (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġres Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( cal Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changed To Material ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter Ġ= Ġnew Cal Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter !!. set Week Mode ( mode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Cal Adapter (): ĠCal Adapter < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġif Ġ( changed To Material ) ĠMaterial Cal Adapter ( mContext , Ġcurrent Day Model List , Ġmaterial Color , Ġmaterial Size Style ) Ġelse ĠCal Adapter < Cal Adapter . My ViewHolder >( mContext , Ġcurrent Day Model List ) ĊĠĠĠĠĠĠĠ Ġre init Cal Adapter Data ( res ) ĊĠĠĠĠĠĠĠ Ġchanged To Material Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre init Cal Adapter Data ( res : ĠCal Adapter <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cal Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter !!. reload Data ( res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset New Recycler Item Width ( res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset New Recycler Item Width ( res : ĠCal Adapter <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( single Item Width Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . view Tree Observer . add On Global Layout Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . view Tree Observer . remove On Global Layout Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Item Width Ġ= Ġre cyclerView . width Ġ/ Ġ 7 Ġ- Ġpadding Between Elements ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Recycler Item Width ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Recycler Item Width ( res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Recycler Item Width ( res : ĠCal Adapter <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġres . item Width Px Ġ= Ġsingle Item Width ĊĠĠĠĠĠĠĠ Ġres . padding Between Elements Ġ= Ġthis . padding Between Elements ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset BackgroundColor ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Background . set BackgroundColor ( color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Control Tint ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġright Image . setColor Filter ( Context Compat . getColor ( mContext , Ġcolor ), Ġandroid . graphics . Port er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġleft Image . setColor Filter ( Context Compat . getColor ( mContext , Ġcolor ), Ġandroid . graphics . Port er D uff . Mode . SRC _ IN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Controls ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Image . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Image . visibility Ġ= ĠView . VISIBLE ĊĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Image . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Image . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġask For Re calculate Item Width () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġask For Re calculate Item Width () Ġ{ ĊĠĠĠĠĠĠĠ Ġsingle Item Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġcal Adapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset New Recycler Item Width ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Context ( to CallBack : ĠHorizontal Calendar Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . to CallBack Ġ= Ġto CallBack ĊĠĠĠĠĠĠĠ Ġcal Adapter !!. to CallBack Ġ= Ġto CallBack ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Day Model Ġ= ĠDay Date Month Year Model ( Calendar . getInstance (). time In Millis ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcb Ġ= ĠCall Back ( to CallBack , Ġ" update Month On Scroll ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcb . invoke ( current Day Model ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġchange Accent ( color : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcal Adapter !!. change Accent ( color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Material Style ( is Material : ĠBoolean , Ġ@ Color Int Ġcolor : ĠInt , Ġmaterial Size Style : ĠMaterial Cal Adapter . Companion . Material Size Style Ġ= ĠMaterial Cal Adapter . Companion . Material Size Style . SMALL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . changed To Material Ġ= Ġis Material ĊĠĠĠĠĠĠĠ Ġthis . material Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġthis . material Size Style Ġ= Ġmaterial Size Style ĊĠĠĠĠĠĠĠ Ġload Next Page () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Week Name Mode ( mode : ĠCal Adapter . Week Name Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . mode Ġ= Ġmode ĊĠĠĠĠĠĠĠ Ġif Ġ( cal Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter !!. set Week Mode ( mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcal Adapter !!. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ