package Ġcom . al bu quer que . custom calendar Ċ Ċ import Ġandroid . content . Clip Description Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġcom . al bu quer que . custom calendar . extensions . format Ċ import Ġcom . al bu quer que . custom calendar . extensions . getCurrent Br azil ian Calendar Ċ import Ġcom . al bu quer que . custom calendar . extensions . get Period Ċ import Ġcom . al bu quer que . custom calendar . extensions . to Custom Date Ċ import Ġkotlinx . android . synt hetic . main . layout _ custom _ calendar . view .* Ċ import Ġjava . util .* ĊĊ Ċ class ĠCustom Calendar Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠConstraint Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtype : ĠCalendar Type ĊĠĠĠ Ġprivate Ġvar Ġavailability : ĠCalendar Availability ĊĊĠĠĠ Ġprivate Ġvar Ġcalendar Adapter : ĠCalendar Adapter ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Month Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcurrent Year Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġstart : ĠDate ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġend : ĠDate ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġnow Ġ= ĠG regorian Calendar (). getCurrent Br azil ian Calendar () ĊĊĠĠĠ Ġprivate Ġvar Ġis Select ing Inicio Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġon Confirm Range : Ġ(( start : ĠDate , Ġend : ĠDate ) Ġ-> ĠUnit ) Ġ= Ġ{ _, Ġ_ Ġ-> Ġ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġon Confirm Selection : Ġ(( date : ĠDate ) Ġ-> ĠUnit ) Ġ= Ġ{_ Ġ-> Ġ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠView . inflate ( context , ĠR . layout . layout _ custom _ calendar , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Custom Calendar ) ĊĊĠĠĠĠĠĠĠ Ġattributes . getInteger ( R . style able . Custom Calendar _ custom Calendar Type , Ġ- 1 ). let Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġif ( value Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . SELECTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . getBy Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġattributes . getInteger ( R . style able . Custom Calendar _ custom Calendar Availability , Ġ- 1 ). let Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailability Ġ= Ġif ( value Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Availability . ALL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Availability . getBy Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcurrent Month Ġ= ĠG regorian Calendar (). getCurrent Br azil ian Calendar (). get ( Calendar . MONTH ) ĊĠĠĠĠĠĠĠ Ġcurrent Year Ġ= ĠG regorian Calendar (). getCurrent Br azil ian Calendar (). get ( Calendar . YEAR ) ĊĊĠĠĠĠĠĠĠ Ġwhen ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . RANGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinicio . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf im . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection Period View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . SELECTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinicio . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf im . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcalendar Adapter Ġ= ĠCalendar Adapter ( availability , Ġcurrent Month ) Ġ{ Ġday Selected , Ġposition Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . RANGE Ġ-> Ġnotify Calendar Range Set Changed ( day Selected , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . SELECTION Ġ-> Ġnotify Calendar Selection Set Changed ( day Selected , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrv Days . adapter Ġ= Ġcalendar Adapter ĊĊĠĠĠĠĠĠĠ Ġupdate Current Calendar ( current Year , Ġcurrent Month ) ĊĊĠĠĠĠĠĠĠ Ġupdate Month Button View () ĊĊĠĠĠĠĠĠĠ Ġsetup Listeners () ĊĊĠĠĠĠĠĠĠ Ġattributes . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġinicio . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Select ing Inicio Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection Period View () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġf im . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Select ing Inicio Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Selection Period View () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn Conf ir mar . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . RANGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( start Ġ!= Ġnull Ġ&& Ġend Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Confirm Range ( start !! , Ġend !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Ãī Ġprec iso Ġselecion ar Ġuma Ġdata Ġinicial Ġe Ġfinal .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Type . SELECTION Ġ-> Ġon Confirm Selection ( start !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠFun Ã§Ãµes Ġde Ġatual izaÃ§Ã£o Ġdas Ġviews ĊĠĠĠ Ġ* Ġ*/ ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Calendar Range Set Changed ( day Selected : ĠCustom Date , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠG regorian Calendar ( current Year , Ġday Selected . month , Ġday Selected . day ). time ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Select ing Inicio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSe ĠnÃ£o Ġt iver Ġuma Ġdata Ġfinal Ġselecion ada Ġou Ġse Ġt iver Ġuma Ġdata Ġfinal Ġselecion ada Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġa Ġdata Ġinicial Ġatual Ġfor Ġmen or Ġque Ġa Ġdata Ġfinal Ġexist ente ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( end Ġ== Ġnull ) Ġ|| Ġ( end Ġ!= Ġnull Ġ&& Ġdate Ġ< Ġend )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Position Ġ= Ġcalendar Adapter . getItem Position ( start !!. to Custom Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . notify Item Changed ( last Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . update Days Selected ( listOf ( start !!. to Custom Date ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . notify Item Changed ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( end Ġ!= Ġnull Ġ&& Ġdate Ġ> Ġend )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . update Days Selected ( listOf ( start !!. to Custom Date ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSe Ġa Ġdata Ġfinal Ġatual Ġfor Ġmai or Ġque Ġa Ġdata Ġinicial ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date Ġ> Ġstart ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . update Days Selected ( generate Days InRange ( start !! , Ġend !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSe Ġexist er Ġt anto Ġdata Ġatual Ġqu anto Ġdata Ġfinal , Ġmo stra Ġo Ġperiod o Ġselecion ado ĊĠĠĠĠĠĠĠ Ġif Ġ( start Ġ!= Ġnull Ġ&& Ġend Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper ios o Se lecion ado . text Ġ= ĠPair ( start !! , Ġend !! ). get Period () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . update Days Selected ( generate Days InRange ( start !! , Ġend !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper ios o Se lecion ado . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Calendar Selection Set Changed ( day Selected : ĠCustom Date , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠG regorian Calendar ( current Year , Ġday Selected . month , Ġday Selected . day ). time ĊĊĠĠĠĠĠĠĠ Ġif ( start Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Position Ġ= Ġcalendar Adapter . getItem Position ( start !!. to Custom Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar Adapter . notify Item Changed ( last Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstart Ġ= Ġdate ĊĠĠĠĠĠĠĠ Ġper ios o Se lecion ado . text Ġ= Ġdate . format (" dd Ġ' de ' ĠM MMM Ġ' de ' Ġy yyy ") ĊĠĠĠĠĠĠĠ Ġcalendar Adapter . update Days Selected ( listOf ( start !!. to Custom Date ())) ĊĠĠĠĠĠĠĠ Ġcalendar Adapter . notify Item Changed ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA tual iza Ġas Ġviews Ġrefer ente Ġaos Ġbot Ãµes Ġde ĠprÃ³ ximo ĠmÃª s Ġe ĠmÃª s Ġanterior , Ġse Ġo Ġ[ Calendar Availability ] ĊĠĠĠĠ Ġ* Ġfor ĠALL Ġent Ã£o Ġos Ġdo is Ġbot Ãµes Ġestar Ã£o Ġsemp re Ġdispon ÃŃveis ; Ġse Ġfor ĠAFTER _ CURRENT _ DAY Ġent Ã£o ĠnÃ£o ĊĠĠĠĠ Ġ* ĠserÃ¡ Ġposs ÃŃvel Ġmud ar Ġpara Ġme ses Ġan ter iores Ġao ĠmÃª s Ġrefer ente Ġao Ġdia Ġatual , Ġapenas Ġme ses Ġfut u ros ; ĊĠĠĠĠ Ġ* Ġse Ġfor ĠBE FORE _ CURRENT _ DAY Ġent Ã£o ĠnÃ£o ĠserÃ¡ Ġposs ÃŃvel Ġmud ar Ġpara Ġme ses Ġde pois Ġdo ĠmÃª s Ġrefer ente ĊĠĠĠĠ Ġ* Ġao Ġdia Ġatual , Ġapenas Ġme ses Ġan ter iores ; ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Month Button View () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen ( availability ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Availability . ALL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Month . setOnClickListener Ġ{ Ġnext Month () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Month . setColor Filter ( Color . parse Color ("# 1 5 9 2 E 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Month . setOnClickListener Ġ{ Ġprevious Month () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Month . setColor Filter ( Color . parse Color ("# 1 5 9 2 E 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMe ses Ġan ter iores Ġat Ã© Ġo Ġdia Ġatual Ġdispon ÃŃvel ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Availability . BEFORE _ CURRENT _ DAY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( current Month Ġ< Ġnow . get ( Calendar . MONTH ) Ġ|| Ġcurrent Year Ġ< Ġnow . get ( Calendar . YEAR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Month . setOnClickListener Ġ{ Ġnext Month () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Month . setColor Filter ( Color . parse Color ("# 1 5 9 2 E 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Month . setOnClickListener Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Month . setColor Filter ( Color . parse Color ("# CCCC CC ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Month . setOnClickListener Ġ{ Ġprevious Month () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠD ia Ġatual Ġat Ã© Ġprox imos Ġme ses Ġdispon ÃŃvel ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Availability . AFTER _ CURRENT _ DAY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( current Month Ġ> Ġnow . get ( Calendar . MONTH ) Ġ|| Ġcurrent Year Ġ> Ġnow . get ( Calendar . YEAR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Month . setOnClickListener Ġ{ Ġprevious Month () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Month . setColor Filter ( Color . parse Color ("# 1 5 9 2 E 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Month . setOnClickListener Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Month . setColor Filter ( Color . parse Color ("# CCCC CC ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Month . setOnClickListener Ġ{ Ġnext Month () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Selection Period View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( is Select ing Inicio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( inicio . background Ġas ĠGradient Drawable ). setColor ( Color . parse Color ("# 1 5 9 2 E 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinicio . setTextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( f im . background Ġas ĠGradient Drawable ). setColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf im . setTextColor ( Color . parse Color ("# 3 E 3 F 4 0 ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( f im . background Ġas ĠGradient Drawable ). setColor ( Color . parse Color ("# 1 5 9 2 E 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf im . setTextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( inicio . background Ġas ĠGradient Drawable ). setColor ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinicio . setTextColor ( Color . parse Color ("# 3 E 3 F 4 0 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Month () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( current Month Ġ== ĠCalendar . DE CE MBER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Month Ġ= ĠCalendar . J AN U ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Year ++ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Month ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Month Button View () ĊĠĠĠĠĠĠĠ Ġupdate Current Calendar ( current Year , Ġcurrent Month ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprevious Month () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( current Month Ġ== ĠCalendar . J AN U ARY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Month Ġ= ĠCalendar . DE CE MBER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Year -- ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Month -- ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Month Button View () ĊĠĠĠĠĠĠĠ Ġupdate Current Calendar ( current Year , Ġcurrent Month ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA tual iza Ġlabels Ġque Ġexib em Ġqual Ġo ĠmÃª s Ġe Ġan o Ġatual , Ġass im Ġcomo Ġos Ġdi as Ġdispon ÃŃvel Ġda que le ĠmÃª s ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Current Calendar ( current Year : ĠInt , Ġcurrent Month : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalendar Adapter . refresh ( generate Current Month ( current Year , Ġcurrent Month ), Ġcurrent Month ) ĊĠĠĠĠĠĠĠ Ġmonth . text Ġ= ĠMonth Custom Date . getBy Value ( current Month ). text ĊĠĠĠĠĠĠĠ Ġyear . text Ġ= Ġcurrent Year . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠFun Ã§Ãµes Ġaux ilia res Ġpara Ġg era Ã§Ã£o Ġdos Ġdi as Ġe Ġme ses Ġdo Ġcal end Ã¡rio ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate Month ( year : ĠInt , Ġmonth : ĠInt ): ĠMutable List < Custom Date > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġm Month : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġm Year : ĠInt ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Ġ> ĠCalendar . DE CE MBER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Month Ġ= ĠCalendar . J AN U ARY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Year Ġ= Ġyear Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Ġ< ĠCalendar . J AN U ARY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Month Ġ= ĠCalendar . DE CE MBER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Year Ġ= Ġyear Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Month Ġ= Ġmonth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Year Ġ= Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( 1 .. G regorian Calendar ( m Year , Ġm Month , Ġ 1 ). get Actual Maximum ( Calendar . DAY _ OF _ MONTH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Date ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Month , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Current Month ( year : ĠInt , Ġmonth : ĠInt ): ĠMutable List < Custom Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠG regorian Calendar () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Custom Date >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Month Ġ= Ġgenerate Month ( year , Ġmonth Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Month Ġ= Ġgenerate Month ( year , Ġmonth ) ĊĠĠĠĠĠĠĠ Ġval Ġnext Month Ġ= Ġgenerate Month ( year , Ġmonth Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġcalendar . set ( year , Ġmonth , Ġcurrent Month . first (). day ) ĊĠĠĠĠĠĠĠ Ġval Ġstart At Ġ= Ġcalendar . get ( Calendar . DAY _ OF _ WEEK ) ĊĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . DAY _ OF _ MONTH , Ġcurrent Month . last (). day ) ĊĠĠĠĠĠĠĠ Ġval Ġend At Ġ= Ġcalendar . get ( Calendar . DAY _ OF _ WEEK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Days Ġ= Ġlast Month . take Last ( start At Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġnext Days Ġ= Ġnext Month . take ( 7 Ġ- Ġend At ) ĊĊĠĠĠĠĠĠĠ Ġresult . addAll ( last Days ) ĊĠĠĠĠĠĠĠ Ġresult . addAll ( current Month ) ĊĠĠĠĠĠĠĠ Ġresult . addAll ( next Days ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFun Ã§Ã£o Ġque Ġg era Ġuma Ġlista Ġde Ġ[ Custom Date ] Ġa Ġpartir Ġde Ġum Ġdia Ġinicial Ġe Ġum Ġdia Ġfinal . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate Days InRange ( start : ĠDate , Ġend : ĠDate ): ĠList < Custom Date > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Custom Date >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠG regorian Calendar (). getCurrent Br azil ian Calendar () ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( current . before ( end )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . time Ġ= Ġcurrent ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Date ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . get ( Calendar . YEAR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . get ( Calendar . MONTH ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DATE , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcalendar . time ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Date ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . get ( Calendar . YEAR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . get ( Calendar . MONTH ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠA Ã§Ãµes ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġset On Confirm Range ( on Confirm Range :( start : ĠDate , Ġend : ĠDate ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Confirm Range Ġ= Ġon Confirm Range ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Confirm Selection ( on Confirm Selection :( date : ĠDate ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Confirm Selection Ġ= Ġon Confirm Selection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Calendar Availability ( availability : ĠCalendar Availability ){ ĊĠĠĠĠĠĠĠ Ġthis . availability Ġ= Ġavailability ĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠCalendar Type ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR ANGE ( 1 ), ĠSE LECTION ( 0 ); ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠgetBy Value ( i : ĠInt ): ĠCalendar Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalues (). find Ġ{ Ġit . value Ġ== Ġi Ġ} Ġ?: ĠSE LECTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠCalendar Availability ( val Ġvalue : ĠInt , Ġval Ġdescription : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠALL ( 0 , Ġ" Standard "), ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodos Ġos Ġme ses Ġdispon ÃŃvel s ĊĠĠĠĠĠĠĠ ĠBE FORE _ CURRENT _ DAY ( 1 , Ġ" Before ĠCurrent ĠDay "), Ġ Ġ// Ġme ses Ġan ter iores Ġat Ã© Ġo Ġdia Ġatual Ġdispon ÃŃvel ĊĠĠĠĠĠĠĠ ĠAFTER _ CURRENT _ DAY ( 2 , Ġ" After ĠCurrent ĠDay "); ĠĠ Ġ// Ġdia Ġatual Ġat Ã© Ġprox imos Ġme ses Ġdispon ÃŃvel ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠgetBy Value ( i : ĠInt ): ĠCalendar Availability Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalues (). find Ġ{ Ġit . value Ġ== Ġi Ġ} Ġ?: ĠALL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }