package Ġcom . alam kan ak . week view Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . Static Layout Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroidx . collection . Array Map Ċ import Ġjava . util . Calendar Ċ import Ġkotlin . math . round ToInt Ċ Ċ internal Ġclass ĠHeader Renderer ( ĊĠĠĠ Ġview State : ĠView State , ĊĠĠĠ Ġevent Chips Cache : ĠEvent Chips Cache Ċ ) Ġ: ĠRenderer , ĠDate Formatter Dependent Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġall Day Event Labels Ġ= ĠArray Map < Event Chip , ĠStatic Layout >() ĊĠĠĠ Ġprivate Ġval Ġdate Label Layouts Ġ= ĠSparse Array < Static Layout >() ĊĊĠĠĠ Ġprivate Ġval Ġheader Row Updater Ġ= ĠHeader Row Updater ( ĊĠĠĠĠĠĠĠ Ġview State Ġ= Ġview State , ĊĠĠĠĠĠĠĠ Ġlabel Layouts Ġ= Ġdate Label Layouts , ĊĠĠĠĠĠĠĠ Ġevent Chips Cache Ġ= Ġevent Chips Cache ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġdate Label Drawer Ġ= ĠDay Labels Drawer ( ĊĠĠĠĠĠĠĠ Ġview State Ġ= Ġview State , ĊĠĠĠĠĠĠĠ Ġdate Label Layouts Ġ= Ġdate Label Layouts ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġevents Updater Ġ= ĠAll Day Events Updater ( ĊĠĠĠĠĠĠĠ Ġview State Ġ= Ġview State , ĊĠĠĠĠĠĠĠ Ġevents Label Layouts Ġ= Ġall Day Event Labels , ĊĠĠĠĠĠĠĠ Ġevent Chips Cache Ġ= Ġevent Chips Cache ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġevents Drawer Ġ= ĠAll Day Events Drawer ( ĊĠĠĠĠĠĠĠ Ġview State Ġ= Ġview State , ĊĠĠĠĠĠĠĠ Ġall Day Event Layouts Ġ= Ġall Day Event Labels ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġall Day Event Labels . clear () ĊĠĠĠĠĠĠĠ Ġdate Label Layouts . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Date Formatter Changed ( formatter : ĠDate Formatter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġall Day Event Labels . clear () ĊĠĠĠĠĠĠĠ Ġdate Label Layouts . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( header Row Updater . isRequired ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Row Updater . update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdate Label Drawer . draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( events Updater . isRequired ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents Updater . update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevents Drawer . draw ( canvas ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠHeader Row Updater ( ĊĠĠĠ Ġprivate Ġval Ġview State : ĠView State , ĊĠĠĠ Ġprivate Ġval Ġlabel Layouts : ĠSparse Array < Static Layout >, ĊĠĠĠ Ġprivate Ġval Ġevent Chips Cache : ĠEvent Chips Cache Ċ ) Ġ: ĠUp dater Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġprevious Horizontal Origin : ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġprevious All Day Event Ids Ġ= Ġmutable Set Of < Long >() ĊĊĠĠĠ Ġoverride Ġfun Ġis Required (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdid Scroll H orizontally Ġ= Ġprevious Horizontal Origin Ġ!= Ġview State . current Origin . x ĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Column Width Ġ= Ġview State . time Text Width Ġ+ Ġview State . time Column Padding Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġdid Time Column Change Ġ= ĠcurrentTime Column Width Ġ!= Ġview State . time Column Width ĊĠĠĠĠĠĠĠ Ġval Ġall Day Events Ġ= Ġevent Chips Cache . all Day Event Chips In DateRange ( view State . date Range ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . eventId Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠ Ġval Ġdid Events Change Ġ= Ġall Day Events . hashCode () Ġ!= Ġprevious All Day Event Ids . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġ( did Scroll H orizontally Ġ|| Ġdid Time Column Change Ġ|| Ġdid Events Change ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious All Day Event Ids . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious All Day Event Ids Ġ+= Ġall Day Events ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Labels Ġ= Ġupdate Date Labels ( view State ) ĊĠĠĠĠĠĠĠ Ġupdate Header Height ( view State , Ġdate Labels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Date Labels ( state : ĠView State ): ĠList < Static Layout > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Layouts Ġ= Ġstate . date Range . map Ġ{ Ġdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . to Epoch Days () Ġto Ġcalculate Static Layout For Date ( date ) ĊĠĠĠĠĠĠĠ Ġ}. toMap () ĊĊĠĠĠĠĠĠĠ Ġlabel Layouts . clear () ĊĠĠĠĠĠĠĠ Ġlabel Layouts Ġ+= Ġtext Layouts ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtext Layouts . values . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Header Height ( ĊĠĠĠĠĠĠĠ Ġstate : ĠView State , ĊĠĠĠĠĠĠĠ Ġdate Labels : ĠList < Static Layout > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmaximum Layout Height Ġ= Ġdate Labels . map Ġ{ Ġit . height . toFloat () Ġ}. max () Ġ?: Ġ 0 f ĊĠĠĠĠĠĠĠ Ġstate . header Text Height Ġ= Ġmaximum Layout Height ĊĠĠĠĠĠĠĠ Ġrefresh Header Height () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Header Height () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvisible Events Ġ= Ġevent Chips Cache . all Day Event Chips In DateRange ( view State . date Range ) ĊĠĠĠĠĠĠĠ Ġview State . has Event In Header Ġ= Ġvisible Events . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġview State . refresh Header Height () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Static Layout For Date ( date : ĠCalendar ): ĠStatic Layout Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġday Label Ġ= Ġview State . date Formatter ( date ) ĊĠĠĠĠĠĠĠ Ġreturn Ġday Label . to Text Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Paint Ġ= Ġif Ġ( date . is Today ) Ġview State . today Header Text Paint Ġelse Ġview State . header Text Paint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġview State . total Day Width . toInt () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġoperator Ġfun Ġ< E > ĠSparse Array < E >. plus Assign ( elements : ĠMap < Int , ĠE >) Ġ{ ĊĠĠĠĠĠĠĠ Ġelements . entries . forEach Ġ{ Ġput ( it . key , Ġit . value ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠDay Labels Drawer ( ĊĠĠĠ Ġprivate Ġval Ġview State : ĠView State , ĊĠĠĠ Ġprivate Ġval Ġdate Label Layouts : ĠSparse Array < Static Layout > Ċ ) Ġ: ĠDraw er Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġview State . time Column Width ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġcanvas . width . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġview State . getTotal Header Height () ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw In Rect ( left , Ġtop , Ġright , Ġbottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . date Range With Start Pixels . forEach Ġ{ Ġ( date , Ġstart Pixel ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Label ( date , Ġstart Pixel , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Label ( day : ĠCalendar , Ġstart Pixel : ĠFloat , Ġcanvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġday . to Epoch Days () ĊĠĠĠĠĠĠĠ Ġval Ġtext Layout Ġ= Ġdate Label Layouts [ key ] ĊĊĠĠĠĠĠĠĠ Ġcanvas . with Translation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġstart Pixel Ġ+ Ġview State . width Per Day Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġview State . header Row Padding . toFloat () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Layout . draw ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠAll Day Events Updater ( ĊĠĠĠ Ġprivate Ġval Ġview State : ĠView State , ĊĠĠĠ Ġprivate Ġval Ġevents Label Layouts : ĠArray Map < Event Chip , ĠStatic Layout >, ĊĠĠĠ Ġprivate Ġval Ġevent Chips Cache : ĠEvent Chips Cache Ċ ) Ġ: ĠUp dater Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbounds Calculator Ġ= ĠEvent Chip Bounds Calculator ( view State ) ĊĠĠĠ Ġprivate Ġval Ġsp ann able StringBuilder Ġ= ĠSp ann able StringBuilder () ĊĊĠĠĠ Ġprivate Ġvar Ġprevious Horizontal Origin : ĠFloat ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdummy Text Layout : ĠStatic Layout ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġis Required (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdid Scroll H orizontally Ġ= Ġprevious Horizontal Origin Ġ!= Ġview State . current Origin . x ĊĠĠĠĠĠĠĠ Ġval Ġdate Range Ġ= Ġview State . date Range ĊĠĠĠĠĠĠĠ Ġval Ġcontains New Chips Ġ= Ġevent Chips Cache . all Day Event Chips In DateRange ( date Range ). any Ġ{ Ġit . bounds Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdid Scroll H orizontally Ġ|| Ġcontains New Chips ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġevents Label Layouts . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġdates With Start Pixels Ġ= Ġview State . date Range With Start Pixels ĊĠĠĠĠĠĠĠ Ġfor Ġ(( date , Ġstart Pixel ) Ġin Ġdates With Start Pixels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġuse Ġa Ġhorizontal Ġmargin Ġin Ġthe Ġday Ġview , Ġwe Ġneed Ġto Ġoffset Ġthe Ġstart Ġpixel . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodified Start Pixel Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . is Single Day Ġ-> Ġstart Pixel Ġ+ Ġview State . event Margin Horizontal . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstart Pixel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Chips Ġ= Ġevent Chips Cache . all Day Event Chips By Date ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( event Chip Ġin Ġevent Chips ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Text Layout ( event Chip , Ġmodified Start Pixel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmaximum Chip Height Ġ= Ġevents Label Layouts . keys ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . bounds Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . height (). round ToInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. max () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġview State . update All Day Event Height ( maximum Chip Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Text Layout ( ĊĠĠĠĠĠĠĠ Ġevent Chip : ĠEvent Chip , ĊĠĠĠĠĠĠĠ Ġstart Pixel : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchip Rect Ġ= Ġbounds Calculator . calculate All Day Event ( event Chip , Ġstart Pixel ) ĊĠĠĠĠĠĠĠ Ġevent Chip . bounds Ġ= Ġif Ġ( chip Rect . isValid Event Bounds ) Ġchip Rect Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( chip Rect . isValid Event Bounds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Layout Ġ= Ġcalculate Chip Text Layout ( event Chip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text Layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Label Layouts [ event Chip ] Ġ= Ġtext Layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Chip Text Layout ( event Chip : ĠEvent Chip ): ĠStatic Layout ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġevent Chip . event ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠcheckNotNull ( event Chip . bounds ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfull Horizontal Padding Ġ= Ġview State . event Padding Horizontal Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġfull Vertical Padding Ġ= Ġview State . event Padding Vertical Ġ* Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbounds . width () Ġ- Ġfull Horizontal Padding ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbounds . height () Ġ- Ġfull Vertical Padding ĊĊĠĠĠĠĠĠĠ Ġif Ġ( height Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġhappens Ġif Ġthere Ġare Ġmany Ġall - day Ġevents ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdummy Text Layout Ġ= Ġcreate Dummy Text Layout ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Height Ġ= Ġdummy Text Layout . height Ġ+ Ġfull Vertical Padding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . bottom Ġ= Ġbounds . top Ġ+ Ġchip Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdummy Text Layout ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . clear () ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġevent . title . emo j ify () ĊĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . append ( title ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġevent . location ?. emo j ify () ĊĠĠĠĠĠĠĠ Ġif Ġ( location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . append (' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able StringBuilder . append ( location ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġsp ann able StringBuilder . build () ĊĠĠĠĠĠĠĠ Ġval Ġavailable Width Ġ= Ġwidth . toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Paint Ġ= Ġview State . getText Paint ( event ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Layout Ġ= Ġtext . to Text Layout ( text Paint , Ġavailable Width ) ĊĠĠĠĠĠĠĠ Ġval Ġline Height Ġ= Ġtext Layout . height Ġ/ Ġtext Layout . line Count ĊĊĠĠĠĠĠĠĠ Ġ// ĠFor Ġan Ġall Ġday Ġevent , Ġwe Ġdisplay Ġjust Ġone Ġline ĊĠĠĠĠĠĠĠ Ġval Ġchip Height Ġ= Ġline Height Ġ+ Ġfull Vertical Padding ĊĠĠĠĠĠĠĠ Ġbounds . bottom Ġ= Ġbounds . top Ġ+ Ġchip Height ĊĊĠĠĠĠĠĠĠ Ġreturn Ġevent Chip . el lip size Text ( text , Ġavailable Width , Ġexisting Text Layout Ġ= Ġtext Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġdummy Ġtext Ġlayout Ġthat Ġis Ġonly Ġused Ġto Ġdetermine Ġthe Ġheight Ġof Ġall - day Ġevents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Dummy Text Layout ( ĊĠĠĠĠĠĠĠ Ġevent : ĠResolved Week View Event < *> ĊĠĠĠ Ġ): ĠStatic Layout Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dummy Text Layout Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Paint Ġ= Ġview State . getText Paint ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Text Layout Ġ= Ġ"". to Text Layout ( text Paint , Ġwidth Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠcheckNotNull ( dummy Text Layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠEvent Chip . el lip size Text ( ĊĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġavailable Width : ĠInt , ĊĠĠĠĠĠĠĠ Ġexisting Text Layout : ĠStatic Layout ĊĠĠĠ Ġ): ĠStatic Layout Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Paint Ġ= Ġview State . getText Paint ( event ) ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠcheckNotNull ( bounds ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbounds . width (). round ToInt () Ġ- Ġ( view State . event Padding Horizontal Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġel lips ized Ġ= Ġtext . elli ps ized ( text Paint , Ġavailable Width ) ĊĠĠĠĠĠĠĠ Ġval Ġis Too Small For Text Ġ= Ġwidth Ġ< Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( is Too Small For Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġday Ġcontains Ġtoo Ġmany Ġall - day Ġevents . ĠWe Ġonly Ġdraw Ġthe Ġevent Ġch ips , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġdon 't Ġattempt Ġto Ġdraw Ġthe Ġevent Ġtitles . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexisting Text Layout ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġel lips ized . to Text Layout ( text Paint , Ġwidth ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠRect F . isValid Event Bounds : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( left Ġ< Ġright Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ< Ġview State . view Width Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ< Ġview State . view Height Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ> Ġview State . time Column Width Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ> Ġ 0 ) Ċ } Ċ Ċ internal Ġclass ĠAll Day Events Drawer ( ĊĠĠĠ Ġprivate Ġval Ġview State : ĠView State , ĊĠĠĠ Ġprivate Ġval Ġall Day Event Layouts : ĠArray Map < Event Chip , ĠStatic Layout > Ċ ) Ġ: ĠDraw er Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġevent Chip Drawer Ġ= ĠEvent Chip Drawer ( view State ) ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġview State . time Column Width ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġcanvas . width . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġview State . getTotal Header Height () ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw In Rect ( left , Ġtop , Ġright , Ġbottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( event Chip , Ġtext Layout ) Ġin Ġall Day Event Layouts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Chip Drawer . draw ( event Chip , Ġcanvas , Ġtext Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ