package Ġio . mo y uru . timetable layout Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ internal Ġinline Ġval ĠView . adapter Position ĊĠ Ġget () Ġ= Ġ( layout Params Ġas ĠRecyclerView . LayoutParams ). view Adapter Position Ċ Ċ internal Ġinline Ġval ĠView . layout Position ĊĠ Ġget () Ġ= Ġ( layout Params Ġas ĠRecyclerView . LayoutParams ). view Layout Position Ċ Ċ internal Ġinline Ġfun Ġ< E > ĠSparse Array < E >. get Or Put ( key : ĠInt , ĠdefaultValue : Ġ() Ġ-> ĠE ): ĠE Ġ{ ĊĠ Ġval Ġvalue Ġ= Ġget ( key ) ĊĠ Ġreturn Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġanswer Ġ= ĠdefaultValue () ĊĠĠĠ Ġput ( key , Ġanswer ) ĊĠĠĠ Ġanswer ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġvalue ĊĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠCanvas . draw Text At Center ( text : ĠString , Ġrect : ĠRect , Ġpaint : ĠPaint ) Ġ{ ĊĠ Ġval Ġbase X Ġ= Ġrect . center X (). toFloat () Ġ- Ġpaint . measure Text ( text ) Ġ/ Ġ 2 f ĊĠ Ġval Ġtext Bounds Ġ= ĠRect (). apply Ġ{ Ġpaint . getText Bounds ( text , Ġ 0 , Ġtext . length Ġ- Ġ 1 , Ġthis ) Ġ} ĊĠ Ġval Ġbase Y Ġ= Ġrect . center Y () Ġ+ ĊĠĠĠĠĠ Ġif Ġ( text Bounds . height () Ġ!= Ġ 0 ) Ġtext Bounds . height () Ġ/ Ġ 2 f ĊĠĠĠĠĠ Ġelse Ġ-( paint . font Metrics . as cent Ġ+ Ġpaint . font Metrics . desc ent ) Ġ/ Ġ 2 f ĊĠ Ġdraw Text ( text , Ġbase X , Ġbase Y , Ġpaint ) Ċ }