package Ġde . k ai _ mor ich . simple _ usb _ terminal Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġorg . apache . commons . io . input . Re versed Lines FileReader Ċ import Ġjava . io . File Ċ import Ġjava . lang . Exception Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ Ċ class ĠChart View Ġ: ĠView Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ example Color : ĠInt Ġ= ĠColor . RED ĊĠĠĠ Ġprivate Ġvar Ġ_ example Dimension : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpaint : ĠPaint ĊĠĠĠ Ġprivate Ġvar Ġfile : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfilename : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġreverse Reader : ĠRe versed Lines FileReader ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġfont Ġcolor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġexample Color : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ example Color ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ example Color Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Text Paint And Measure ments () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn Ġthe Ġexample Ġview , Ġthis Ġdimension Ġis Ġthe Ġfont Ġsize . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġexample Dimension : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ example Dimension ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ example Dimension Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Text Paint And Measure ments () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġnull , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet , Ġdef Style : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context , Ġattrs , Ġdef Style ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLoad Ġattributes ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Chart View , Ġdef Style , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ_ example Color Ġ= Ġa . getColor ( R . style able . Chart View _ example Color , Ġexample Color ) ĊĠĠĠĠĠĠĠ Ġ// ĠUse Ġget Dimension Pixel Size Ġor Ġget Dimension Pixel Offset Ġwhen Ġdealing Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġvalues Ġthat Ġshould Ġfall Ġon Ġpixel Ġboundaries . ĊĠĠĠĠĠĠĠ Ġ_ example Dimension Ġ= Ġa . get Dimension ( R . style able . Chart View _ example Dimension , Ġexample Dimension ) ĊĊĠĠĠĠĠĠĠ Ġa . recycle () ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate ĠText Paint Ġand Ġtext Ġmeasurements Ġfrom Ġattributes ĊĠĠĠĠĠĠĠ Ġinvalidate Text Paint And Measure ments () ĊĠĠĠĠĠĠĠ Ġreload Data ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreload Data ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRead Ġcurrent Ġfile Ġfrom Ġstorage ĊĠĠĠĠĠĠĠ Ġfilename Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ). getString ( Constants . CURRENT _ DATA FILE _ TIMESTAMP , Ġnull ) ĊĠĠĠĠĠĠĠ Ġfilename ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= ĠFile ( context . get External Files Dirs ( null )[ 0 ], Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Reader Ġ= ĠRe versed Lines FileReader ( file , ĠChar sets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinvalidate Text Paint And Measure ments () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġa Ġdefault ĠText Paint Ġobject ĊĠĠĠĠĠĠĠ Ġpaint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠPaint . ANTI _ ALIAS _ FLAG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġexample Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 2 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġconsider Ġstoring Ġthese Ġas Ġmember Ġvariables Ġto Ġreduce ĊĠĠĠĠĠĠĠ Ġ// Ġallocations Ġper Ġdraw Ġcycle . ĊĠĠĠĠĠĠĠ Ġval Ġpadding Left Ġ= Ġpadding Left ĊĠĠĠĠĠĠĠ Ġval Ġpadding Top Ġ= Ġpadding Top ĊĠĠĠĠĠĠĠ Ġval Ġpadding Right Ġ= Ġpadding Right ĊĠĠĠĠĠĠĠ Ġval Ġpadding Bottom Ġ= Ġpadding Bottom ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Width Ġ= Ġwidth Ġ- Ġpadding Left Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠ Ġval Ġcontent Height Ġ= Ġheight Ġ- Ġpadding Top Ġ- Ġpadding Bottom ĊĊĠĠĠĠĠĠĠ Ġval Ġmax Val Ġ= Ġ 1 0 2 4 f Ġ Ġ// ĠMaximum Ġvalue Ġof Ġdata Ġsent ĊĊĠĠĠĠĠĠĠ Ġ// ĠRead Ġthe Ġlast Ġn Ġlines Ġin Ġreverse Ġorder ĊĠĠĠĠĠĠĠ Ġreverse Reader ?. read Lines ( content Width )?. forEach Indexed Ġ{ Ġi , Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġvalue . trim (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġcontent Width . toFloat () Ġ- Ġi Ġ Ġ// Ġplot Ġin Ġreverse Ġsince Ġwe 're Ġreading Ġin Ġreverse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġcontent Height Ġ- Ġ(( v Ġ/ Ġmax Val ) Ġ* Ġcontent Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Point ( x , Ġy , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . e (" Chart View ", Ġ" Bad Ġline : Ġ$ value " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }