package Ġio . github . bin ish man and har 2 3 . horizontal calendar x . views Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . Simple Item Animator Ċ import Ġio . github . bin ish man and har 2 3 . horizontal calendar x . R Ċ import Ġio . github . bin ish man and har 2 3 . horizontal calendar x . adapter . Horizontal Calendar Adapter Ċ import Ġio . github . bin ish man and har 2 3 . horizontal calendar x . databinding . Custom Calendar Binding Ċ import Ġio . github . bin ish man and har 2 3 . horizontal calendar x . utils . App Util Ċ import Ġio . github . bin ish man and har 2 3 . horizontal calendar x . utils . Snap To Block Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . lang . Index OutOfBoundsException Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠHorizontal Calendar View Ġ: ĠFrame Layout Ġ{ ĊĠĠĠ Ġval Ġcalendar Dates : ĠMutable LiveData < ArrayList < Date >> Ġ= ĠMutable LiveData ( ArrayList ()) ĊĠĠĠ Ġvar Ġselected Date : ĠDate ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġgo To Today Button Enabled Ġ= Ġtrue ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattribute Set ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( attribute Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Inf late Params ") ĊĠĠĠ Ġprivate Ġfun Ġinit ( attrs : ĠAttributeSet ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠCustom Calendar Binding . bind ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( R . layout . custom _ calendar , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġadd View ( binding . root ) ĊĠĠĠĠĠĠĠ Ġextract Attributes ( attrs ) Ġ{ Ġtext Size Heading , Ġbackground Reference , Ġgo To Today Button Enabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf TextView Text Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text S unday , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Monday , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Tuesday , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Wednesday , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Thursday , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Friday , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Saturday ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġtext Size Heading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Background Ġreference // ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Resource ( background Reference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . custom Calendar Main Container . setBackground Resource ( background Reference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/ **************** ******/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsetUp Dates ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġextract Attributes ( attrs : ĠAttributeSet ?, Ġwork : Ġ( text Size : ĠInt , Ġbackground Reference : ĠInt , Ġgo To Today Button Enabled : ĠBoolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Size Heading Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . default Text Size Heading ) ĊĠĠĠĠĠĠĠ Ġvar Ġbackground Ġ= ĠR . color . color D ust y Te al ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattribute Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Horizontal Calendar View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Heading Ġ= Ġattribute . get Dimension Pixel Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Horizontal Calendar View _ text Size Heading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Heading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= Ġattribute . getResource Id ( R . style able . Horizontal Calendar View _ whole Background , ĠR . color . color D ust y Te al ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgo To Today Button Enabled Ġ= Ġattribute . getBoolean ( R . style able . Horizontal Calendar View _ enable Go To Today Button , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwork ( text Size Heading , Ġbackground , Ġgo To Today Button Enabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠarrayOf TextView Text Size ( text Views : ĠArray < TextView >, Ġtext Size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Views . forEach Ġ{ ĠtextView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , Ġtext Size . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Dates ( binding : ĠCustom Calendar Binding , Ġmax Fl ing : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcalculated Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠApp Util . getDate List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Dates . post Value ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsnap To Block Ġ= ĠSnap To Block ( max Fl ing ) ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject : ĠHorizontal Calendar Adapter . Horizontal Calendar Adapter Callback { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Pressed ( adapter : ĠHorizontal Calendar Adapter , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Position Ġ= Ġadapter . selected Date Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . selected Date Position Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Changed ( old Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Changed ( adapter . selected Date Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date Ġ= Ġcalendar Dates . value ! ![ position ] Ġ// For Ġkeeping Ġtrack Ġof Ġthe Ġselected Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIndex OutOfBoundsException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Calendar Day ( binding , position , ĠApp Util . goTo Current Date ( calendar Dates . value ?: ĠArrayList ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgo To Today Button Function ality ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . selected Date Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Util . goTo Current Date ( calendar Dates . value ?: ĠArrayList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Width Calculated ( cell Width : ĠArrayList < Int >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! calculated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Calcul ating Ġaverage Ġfor Ġ[ Go ĠTo ĠToday ] Ġscrolling Ġconsistency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( width Ġin Ġcell Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnap To Block . item Dimension Average ( result Ġ/ Ġcell Width . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ------------------------------------------------ -------- // ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Calendar Day ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Util . goTo Current Date ( calendar Dates . value ?: ĠArrayList ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Util . goTo Current Date ( calendar Dates . value ?: ĠArrayList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Adapter Ġ= ĠHorizontal Calendar Adapter ( context , Ġcalendar Dates . value ?: ĠArrayList (), Ġlistener ) ĊĠĠĠĠĠĠĠ Ġget Cell Width From TextView ( binding , Ġcalendar Adapter ) ĊĠĠĠĠĠĠĠ Ġbinding . calendar RecyclerView . layout Manager Ġ= ĠLinearLayoutManager ( context , ĠRecyclerView . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . calendar RecyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġbinding . calendar RecyclerView . setItem View Cache Size ( 2 1 ) ĊĠĠĠĠĠĠĠ Ġ( binding . calendar RecyclerView . item Animator Ġas ĠSimple Item Animator ). supports Change Animations Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . calendar RecyclerView . adapter Ġ= Ġcalendar Adapter ĊĠĠĠĠĠĠĠ Ġsnap To Block . attach To RecyclerView ( binding . calendar RecyclerView ) ĊĠĠĠĠĠĠĠ Ġsnap To Block . set Snap Block Callback ( object Ġ: ĠSnap To Block . Snap Block Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Block Snap ( snap Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomp ens ate Date Ġ= Ġcalendar Adapter . selected Date Position Ġ% Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Item Pressed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnap Position Ġ+ Ġcomp ens ate Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Block Sn apped ( snap Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomp ens ate Date Ġ= Ġcalendar Adapter . selected Date Position Ġ% Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Item Pressed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsnap Position Ġ+ Ġcomp ens ate Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . goTo Today Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Item Pressed ( calendar Adapter , ĠApp Util . goTo Current Date ( calendar Dates . value ?: ĠArrayList ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcalendar Dates . observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . change Calendar Data ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Item Pressed ( calendar Adapter , ĠApp Util . goTo Current Date ( calendar Dates . value ?: ĠArrayList ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Calendar Day ( binding : ĠCustom Calendar Binding , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , Ġcurrent Day Position : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . calendar RecyclerView . smooth Scroll To Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġchange Week Day View ( binding . text Monday , Ġi , Ġposition , Ġcurrent Day Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġchange Week Day View ( binding . text Tuesday , Ġi , Ġposition , Ġcurrent Day Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġchange Week Day View ( binding . text Wednesday , Ġi , Ġposition , Ġcurrent Day Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġchange Week Day View ( binding . text Thursday , Ġi , Ġposition , Ġcurrent Day Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġchange Week Day View ( binding . text Friday , Ġi , Ġposition , Ġcurrent Day Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġchange Week Day View ( binding . text Saturday , Ġi , Ġposition , Ġcurrent Day Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 Ġ-> Ġchange Week Day View ( binding . text S unday , Ġi , Ġposition , Ġcurrent Day Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġchange Week Day View ( ĊĠĠĠĠĠĠĠ Ġview : ĠTextView , ĊĠĠĠĠĠĠĠ Ġi : ĠInt , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , Ġcurrent Day Position : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . background Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġposition Ġ% Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . horizontal _ calendar _ top _ selected _ background , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . theme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġelse ĠResources Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . resources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . color . color _ transparent , Ġcontext . theme ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Current Date Today ( position , Ġcurrent Day Position ) Ġ-> ĠContext Compat . getColor ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . color . black ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ% Ġ 7 Ġ-> ĠContext Compat . getColor ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . color . color Dark Te al ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠContext Compat . getColor ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . color . white ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Current Date Today ( ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , Ġcurrent Day Position : ĠInt ĊĠĠĠ Ġ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġcurrent Day Position Ġ- Ġposition ĊĠĠĠĠĠĠĠ Ġif Ġ( diff Ġ< Ġ 7 Ġ|| Ġdiff Ġ> Ġ- 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( position Ġ% Ġ 7 ) Ġ+ Ġdiff ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Today Button Function ality ( binding : ĠCustom Calendar Binding , position : ĠInt , Ġcurrent Date Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . goTo Today Button . visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= Ġcurrent Date Position Ġ&& Ġgo To Today Button Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif (! goTo Today Button Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĠĠĠĠĠĠĠ Ġconstraint Set . clone ( binding . root ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . setHorizontal Bias ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . goTo Today Button , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġcurrent Date Position ) Ġ 0 . 0 8 f Ġelse Ġ 0 . 9 2 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġconstraint Set . apply To ( binding . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cell Width From TextView ( binding : ĠCustom Calendar Binding , Ġcalendar Adapter : ĠHorizontal Calendar Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget View Width ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text S unday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Monday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Tuesday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Wednesday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Thursday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Friday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Saturday ĊĠĠĠĠĠĠĠ Ġ), Ġcalendar Adapter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġwidth List Ġ= ĠArrayList < Int >() ĊĠĠĠ Ġprivate Ġfun Ġget View Width ( views : ĠArray < View >, Ġcalendar Adapter : ĠHorizontal Calendar Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . forEach Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . view Tree Observer . add On Global Layout Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . view Tree Observer . remove On Global Layout Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth List . add ( view . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width List . size Ġ== Ġ 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . set Cell Widths ( width List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }