package Ġcom . pand ul ape ter . be agle . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcom . pand ul ape ter . be agle . R Ċ import Ġcom . pand ul ape ter . be agle . utils . color Resource Ċ import Ġcom . pand ul ape ter . be agle . utils . dimension Ċ import Ġcom . pand ul ape ter . be agle Core . configuration . Tr ick Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . math . round ToInt Ċ Ċ internal Ġclass ĠOverlay Frame Layout Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġvar Ġkey line Overlay Toggle : ĠTr ick . Key line Overlay Toggle ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Paint . color Ġ= Ġvalue . grid Color Ġ?: Ġcontext . color Resource ( android . R . attr . textColor Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Paint . alpha Ġ= ĠGR ID _ ALPHA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey line Paint . color Ġ= Ġvalue . grid Color Ġ?: Ġcontext . color Resource ( android . R . attr . textColor Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey line Paint . alpha Ġ= ĠKEY LINE _ ALPHA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey line Grid Ġ= Ġvalue . key line Grid Ġ?: Ġcontext . dimension ( R . dim en . be agle _ default _ key line _ grid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey line Primary Ġ= Ġ( value . key line Primary Ġ?: Ġcontext . dimension ( R . dim en . be agle _ default _ key line _ primary )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey line Secondary Ġ= Ġ( value . key line Secondary Ġ?: Ġcontext . dimension ( R . dim en . be agle _ default _ key line _ secondary )). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġview Bounds Overlay Toggle : ĠTr ick . View Bounds Overlay Toggle ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds Paint . color Ġ= Ġvalue . color Ġ?: Ġcontext . color Resource ( android . R . attr . textColor Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Paint . color Ġ= Ġvalue . color Ġ?: Ġcontext . color Resource ( android . R . attr . textColor Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Paint . alpha Ġ= ĠF ILL _ ALPHA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Automatic Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġgrid Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġkey line Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar Ġkey line Grid Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġkey line Primary Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġkey line Secondary Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġval Ġbounds Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġpadding Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġalpha Ġ= ĠF ILL _ ALPHA ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcoroutine Context : ĠCor outine Context ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġstart Automatic Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Automatic Refresh () ĊĠĠĠĠĠĠĠ Ġcoroutine Context Ġ= ĠGlobal Scope . launch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ Ġinvalidate () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( AUT OM AT IC _ REFRESH _ DELAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Automatic Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Context ?. cancel () ĊĠĠĠĠĠĠĠ Ġcoroutine Context Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġif Ġ( view Bounds Overlay Toggle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Automatic Refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Automatic Refresh () ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . dispatch Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key line Overlay Toggle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. width Ġstep Ġkey line Grid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( x . toFloat (), Ġ 0 f , Ġx . toFloat (), Ġheight . toFloat (), Ġgrid Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 .. height Ġstep Ġkey line Grid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( 0 f , Ġy . toFloat (), Ġwidth . toFloat (), Ġy . toFloat (), Ġgrid Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( key line Primary , Ġ 0 f , Ġkey line Primary , Ġheight . toFloat (), Ġkey line Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( key line Secondary , Ġ 0 f , Ġkey line Secondary , Ġheight . toFloat (), Ġkey line Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( width Ġ- Ġkey line Primary , Ġ 0 f , Ġwidth Ġ- Ġkey line Primary , Ġheight . toFloat (), Ġkey line Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Bounds Overlay Toggle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bounds IfNeeded ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . draw Bounds IfNeeded ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠViewGroup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġchild Count ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Child At ( it ). draw Bounds IfNeeded ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( visibility Ġ!= ĠView . GONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bounds ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . draw Bounds ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġget Drawing Rect ( bounds ) ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠ Ġget Location On Screen ( location ) ĊĠĠĠĠĠĠĠ Ġbounds . offset ( location [ 0 ], Ġlocation [ 1 ]) ĊĠĠĠĠĠĠĠ Ġbounds . offset ( translation X . round ToInt (), Ġtranslation Y . round ToInt ()) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( bounds , Ġbounds Paint ) ĊĠĠĠĠĠĠĠ Ġbounds . offset ( padding Start , Ġpadding Top ) ĊĠĠĠĠĠĠĠ Ġbounds . bottom Ġ-= Ġpadding Bottom Ġ+ Ġpadding Top ĊĠĠĠĠĠĠĠ Ġbounds . right Ġ-= Ġpadding End Ġ+ Ġpadding Start ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( bounds , Ġpadding Paint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠGR ID _ ALPHA Ġ= Ġ 6 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY LINE _ ALPHA Ġ= Ġ 1 9 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠF ILL _ ALPHA Ġ= Ġ 1 2 7 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠA UT OM AT IC _ REFRESH _ DELAY Ġ= Ġ 1 6 L ĊĠĠĠ Ġ} Ċ } Ċ