/** Ċ Ġ* ĠBack pack Ġfor ĠAndroid Ġ- ĠSky scanner 's ĠDesign ĠSystem Ċ Ġ* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠSky scanner ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnet . sky scanner . back pack . calendar . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . text . Layout Ċ import Ġandroid . text . Static Layout Ċ import Ġandroid . text . Text Direction He ur istics Ċ import Ġandroid . text . Text Paint Ċ import Ġandroid . text . TextUtils Ċ import Ġkotlin . math . round ToInt Ċ import Ġnet . sky scanner . back pack . R Ċ import Ġnet . sky scanner . back pack . calendar . model . Calendar Label Ċ import Ġnet . sky scanner . back pack . text . B pk Text Ċ import Ġnet . sky scanner . back pack . util . with Save Ċ import Ġorg . th reet en . bp . LocalDate Ċ Ċ internal Ġclass ĠB pk Calendar Labels ViewModel ( ĊĠ Ġcontext : ĠContext , Ċ ) Ġ{ ĊĊĠ Ġprivate Ġval Ġpaint s : ĠMap < Calendar Label . Style , ĠText Paint > Ġ= ĊĠĠĠ ĠCalendar Label . Style . values (). associate With Ġ{ Ġit . createText Paint ( context ) Ġ} ĊĊĠ Ġprivate Ġvar Ġlabels : ĠMap < LocalDate , ĠB pk Calendar Label ViewModel > Ġ= Ġempty Map () ĊĊĠ Ġprivate Ġval Ġplaceholder Ġ= ĠB pk Calendar Label ViewModel ( ĊĠĠĠ Ġlabel Ġ= ĠCalendar Label ( ĊĠĠĠĠĠ Ġtext Ġ= Ġ" âĢĵ ", ĊĠĠĠĠĠ Ġstyle Ġ= ĠCalendar Label . Style . Price Medium , ĊĠĠĠ Ġ), ĊĠĠĠ Ġpaint s . getValue ( Calendar Label . Style . Price Medium ), ĊĠ Ġ) ĊĊĠ Ġfun ĠisEmpty (): ĠBoolean Ġ= ĊĠĠĠ Ġlabels . isEmpty () ĊĊĠ Ġfun Ġupdate ( data : ĠMap < LocalDate , ĠCalendar Label > ?) Ġ{ ĊĠĠĠ Ġlabels Ġ= Ġdata ?. map Values Ġ{ ĠB pk Calendar Label ViewModel ( it . value , Ġpaint s . getValue ( it . value . style )) Ġ} Ġ?: Ġempty Map () ĊĠĠĠ Ġif Ġ( cell Width Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġlabels . forEach Ġ{ Ġit . value . width Ġ= Ġcell Width Ġ} ĊĠĠĠĠĠ Ġplaceholder . width Ġ= Ġcell Width ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġvar Ġcell Width : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġlabels . forEach Ġ{ Ġit . value . width Ġ= Ġcell Width Ġ} ĊĠĠĠĠĠĠĠ Ġplaceholder . width Ġ= Ġcell Width ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġdraw ( canvas : ĠCanvas , Ġdate : ĠLocalDate , Ġx : ĠFloat , Ġy : ĠFloat , Ġdisabled : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( disabled Ġ|| ĠisEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlabel Ġ= Ġlabels . getOrElse ( date ) Ġ{ Ġplaceholder Ġ} ĊĠĠĠ Ġlabel . draw ( canvas , Ġx , Ġy ) ĊĠ Ġ} ĊĊĠ Ġclass ĠB pk Calendar Label ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġlabel : ĠCalendar Label , ĊĠĠĠ Ġprivate Ġval Ġpaint : ĠText Paint , ĊĠ Ġ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtext : ĠStatic Layout ĊĊĠĠĠ Ġvar Ġwidth : ĠFloat Ġ= Ġ 0 f ĊĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠ Ġval Ġouter Width Ġ= Ġvalue . round ToInt () ĊĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠStatic Layout . Builder . obtain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel . text . length , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġouter Width ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Alignment ( Layout . Alignment . ALIGN _ NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText Direction ( Text Direction He ur istics . FIRST STRONG _ LTR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Line Spacing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Include Pad ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set El lip size ( TextUtils . Truncate At . END ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set El lips ized Width ( outer Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMax Lines ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw ( canvas : ĠCanvas , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠ Ġcanvas . with Save Ġ{ ĊĠĠĠĠĠĠĠ Ġtranslate ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġtext . draw ( canvas ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠCalendar Label . Style . createText Paint ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠ Ġ): ĠText Paint Ġ= ĠText Paint (). apply Ġ{ ĊĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠ ĠtextAlign Ġ= ĠPaint . Align . CENTER ĊĊĠĠĠ ĠB pk Text . getFont ( ĊĠĠĠĠĠ Ġcontext , ĠB pk Text . XS , ĊĠĠĠĠĠ Ġwhen Ġ( this @ createText Paint ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCalendar Label . Style . Price Low Ġ-> ĠB pk Text . Weight . EMP HAS IZED ĊĠĠĠĠĠĠĠ ĠCalendar Label . Style . Price Medium Ġ-> ĠB pk Text . Weight . NORMAL ĊĠĠĠĠĠĠĠ ĠCalendar Label . Style . Price High Ġ-> ĠB pk Text . Weight . NORMAL ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ). apply To ( this ) ĊĊĠĠĠ Ġcolor Ġ= Ġcontext . getColor ( ĊĠĠĠĠĠ Ġwhen Ġ( this @ createText Paint ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCalendar Label . Style . Price Low Ġ-> ĠR . color . b pk Mont ever de ĊĠĠĠĠĠĠĠ ĠCalendar Label . Style . Price Medium Ġ-> ĠR . color . b pk Text Secondary ĊĠĠĠĠĠĠĠ ĠCalendar Label . Style . Price High Ġ-> ĠR . color . b pk Text Secondary ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ