package Ġme . cyber . n uk le os . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġme . cyber . n uk le us . R ĊĊ Ċ class ĠPower ful Charts View ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: ĠView ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ SIZE _ FOR _ DATA Ġ= Ġ 1 5 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CIR CLE _ SIZE _ Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCURRENT _ CIR CLE _ SIZE Ġ= Ġ 2 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġm Charts Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Charts Points Array Ġ= ĠarrayOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Charts Points Array Ġ+= ĠFloat Array ( MAX _ SIZE _ FOR _ DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar ĠmaxValue Ġ= Ġ 1 0 . 0 f ĊĠĠĠ Ġvar Ġmin Value Ġ= Ġ- 1 0 . 0 f ĊĠĠĠ Ġprivate Ġval Ġm Value Space : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠmaxValue Ġ- Ġmin Value ĊĊĠĠĠ Ġprivate Ġval Ġm Zero Position : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( 0 Ġ- Ġmin Value ) Ġ/ Ġm Value Space ĊĊĠĠĠ Ġprivate Ġval Ġm Charts Rect Paint Ġ= Ġarray ListOf < Paint >() ĊĠĠĠ Ġprivate Ġval Ġm Info Paint Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠContext Compat . getColor ( context , ĠR . color . chart _ info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . chart _ text _ size ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġis Running Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Charts Points Array : ĠArray < Float Array > Ġ= ĠarrayOf () ĊĠĠĠ Ġprivate Ġvar Ġm Points Array Current Index Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolors Array Ġ= Ġcontext . resources . getInt Array ( R . array . charts _ colors ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcolors Array . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠColor . parse Color ("# ${ Integer . to HexString ( colors Array [ i ]) }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Charts Rect Paint Ġ+= Ġpaint ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheight Size Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġrequired Height Ġ= Ġsuggested Minimum Height Ġ+ Ġpadding Top Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġwhen Ġ( Measure Spec . get Mode ( height Measure Spec )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . EX ACT LY Ġ-> Ġheight Size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . AT _ MO ST Ġ-> ĠMath . min ( required Height , Ġheight Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . UNSPECIFIED Ġ-> Ġrequired Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrequired Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Size Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġrequired Width Ġ= Ġsuggested Minimum Width Ġ+ Ġpadding Left Ġ+ Ġpadding Right ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwhen Ġ( Measure Spec . get Mode ( width Measure Spec )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . EX ACT LY Ġ-> Ġwidth Size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . AT _ MO ST Ġ-> ĠMath . min ( required Width , Ġwidth Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeasure Spec . UNSPECIFIED Ġ-> Ġrequired Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrequired Width ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd New Point ( points : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Charts Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Charts Points Array [ i ][ m Points Array Current Index ] Ġ= Ġ( points [ i ] Ġ- Ġmin Value ) Ġ/ Ġm Value Space ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Points Array Current Index Ġ= Ġ( m Points Array Current Index Ġ+ Ġ 1 ) Ġ% ĠMAX _ SIZE _ FOR _ DATA ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġval Ġzero Line Ġ= Ġheight Ġ- Ġheight Ġ* Ġm Zero Position ĊĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Line ( 0 f , Ġzero Line , Ġwidth . toFloat (), Ġzero Line , Ġm Info Paint ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Charts Points Array . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpoint Span : ĠFloat Ġ= Ġwidth . toFloat () Ġ/ ĠMAX _ SIZE _ FOR _ DATA . toFloat () ĊĠĠĠĠĠĠĠ Ġvar Ġprevious X Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠ Ġvar Ġprevious Y Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġm Charts Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent X Ġ= Ġpoint Span ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil ĠMAX _ SIZE _ FOR _ DATA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġheight Ġ- Ġheight Ġ* Ġm Charts Points Array [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous X Ġ!= Ġ- 1 f Ġ&& Ġprevious Y Ġ!= Ġ- 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( previous X , Ġprevious Y , Ġcurrent X , Ġy , Ġm Charts Rect Paint . get ( i )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ== Ġ( m Points Array Current Index Ġ- Ġ 1 ) Ġ% ĠMAX _ SIZE _ FOR _ DATA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( current X , Ġy , ĠCURRENT _ CIR CLE _ SIZE . toFloat (), Ġm Info Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious X Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Y Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( current X , Ġy , ĠDEFAULT _ CIR CLE _ SIZE _. toFloat (), Ġm Charts Rect Paint . get ( i )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious X Ġ= Ġcurrent X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent X Ġ+= Ġpoint Span ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious X Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Y Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }