/* Ċ Ġ* ĠSPDX - File Copyright Text : Ġ 2 0 2 0 , Ġmicro G ĠProject ĠTeam Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġorg . micro g . gms . near by . core . ui Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġorg . micro g . gms . near by . ex posure notification . Exposure Scan Summary Ċ import Ġorg . micro g . gms . ui . resolve Color Ċ import Ġjava . util .* Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min ĊĊ Ċ class ĠDot Chart View Ġ: ĠView Ġ{ ĊĠĠĠ Ġ@ Target Api ( 2 1 ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt , Ġdef Style Res : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġsuper ( context ) ĊĊĠĠĠ Ġvar Ġdata : ĠSet < Exposure Scan Summary >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Data Ġ= Ġhash Map Of < Int , ĠPair < String , ĠMutable Map < Int , ĠInt >> >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġnow Ġ- Ġ 1 4 Ġ* Ġ 2 4 Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( min ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠDate Format . get Medium DateFormat ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlowest Ġ= ĠdateFormat . parse ( date Format . format ( date )) ?. time Ġ?: Ġdate . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( day Ġin Ġ 0 Ġuntil Ġ 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate . time Ġ= Ġnow Ġ- Ġ( 1 4 Ġ- Ġday ) Ġ* Ġ 2 4 Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Data [ day ] Ġ= ĠdateFormat . format ( date ) Ġto Ġhash Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( summary Ġin Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff Ġ= Ġsummary . time Ġ- Ġlowest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( off Ġ< Ġ 0 ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Hours Ġ= Ġ( off Ġ/ Ġ 1 0 0 0 Ġ/ Ġ 6 0 Ġ/ Ġ 6 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġtotal Hours Ġ/ Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġtotal Hours Ġ% Ġ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Data [ day ]?. second ?. set ( hour , Ġ( display Data [ day ]?. second ?. get ( hour ) Ġ?: Ġ 0 ) Ġ+ Ġsummary . rp is ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( hour Ġin Ġ 0 .. (( min Ġ- Ġlowest ) Ġ/ Ġ 1 0 0 0 Ġ/ Ġ 6 0 Ġ/ Ġ 6 0 ). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Data [ 0 ]?. second ?. set ( hour , Ġdisplay Data [ 0 ]?. second ?. get ( hour ) Ġ?: Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( hour Ġin Ġ(( min Ġ- Ġlowest ) Ġ/ Ġ 1 0 0 0 Ġ/ Ġ 6 0 Ġ/ Ġ 6 0 ). toInt () Ġuntil Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Data [ 1 4 ]?. second ?. set ( hour , Ġdisplay Data [ 1 4 ]?. second ?. get ( hour ) Ġ?: Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display Data Ġ= Ġdisplay Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display DataList Ġ= Ġdisplay Data . values . map Ġ{ Ġit . second . values Ġ}. flatten (). sorted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdisplay Data : ĠMap < Int , ĠPair < String , ĠMap < Int , ĠInt >>> Ġ= Ġempty Map () ĊĠĠĠ Ġprivate Ġvar Ġdisplay DataList : ĠList < Int > Ġ= Ġempty List () ĊĠĠĠ Ġprivate Ġval Ġdraw Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġdraw Temp Rect Ġ= ĠRect F () ĊĠĠĠ Ġprivate Ġval Ġfont Paint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġfont Temp Rect Ġ= ĠRect () ĊĊĠĠĠ Ġfun ĠCanvas . draw My Rect ( x : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat , Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdraw Temp Rect . set ( x Ġ+ Ġdraw Paint . stroke Width , Ġy Ġ+ Ġdraw Paint . stroke Width , Ġx Ġ+ Ġwidth Ġ- Ġdraw Paint . stroke Width , Ġy Ġ+ Ġheight Ġ- Ġdraw Paint . stroke Width ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Color . alpha ( color ) Ġ>= Ġ 8 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Round Rect ( draw Temp Rect , Ġ 2 f , Ġ 2 f , Ġdraw Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . color Ġ= Ġcolor Ġor Ġ( 8 0 Ġshl Ġ 2 4 ) Ġand Ġ( 8 0 Ġshl Ġ 2 4 Ġor Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Round Rect ( draw Temp Rect , Ġ 2 f , Ġ 2 f , Ġdraw Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Round Rect ( draw Temp Rect , Ġ 2 f , Ġ 2 f , Ġdraw Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠList < T >. relative Position ( element : ĠT ): ĠDouble ? Ġ= ĠindexOf ( element ). take If Ġ{ Ġit Ġ>= Ġ 0 Ġ} ?. toDouble ()?. let Ġ{ Ġit Ġ/ Ġsize . toDouble () Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġfocus Point : ĠPoint F ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ== Ġnull ) Ġdata Ġ= Ġempty Set () ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġresources . display Metrics . scaled Density ĊĠĠĠĠĠĠĠ Ġfont Paint . text Size Ġ= Ġ 1 0 Ġ* Ġd ĊĠĠĠĠĠĠĠ Ġfont Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdraw Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġdraw Paint . stroke Width Ġ= Ġ 2 f ĊĠĠĠĠĠĠĠ Ġval Ġinner Padding Ġ= Ġ 2 Ġ* Ġd ĊĠĠĠĠĠĠĠ Ġvar Ġmax Text Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Text Height Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( date String Ġin Ġdisplay Data . values . map Ġ{ Ġit . first Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . getText Bounds ( date String , Ġ 0 , Ġdate String . length , Ġfont Temp Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Text Width Ġ= Ġmax ( max Text Width , Ġfont Temp Rect . width ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Text Height Ġ= Ġmax ( max Text Height , Ġfont Temp Rect . height ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlegend Left Ġ= Ġmax Text Width Ġ+ Ġ 4 Ġ* Ġd ĊĠĠĠĠĠĠĠ Ġval Ġlegend Bottom Ġ= Ġmax Text Height Ġ+ Ġ 4 Ġ* Ġd ĊĠĠĠĠĠĠĠ Ġval Ġsub Height Ġ= Ġmax Text Height Ġ+ Ġ 4 Ġ* Ġd Ġ+ Ġpadding Bottom ĊĊĠĠĠĠĠĠĠ Ġval Ġdist Height Ġ= Ġ( height Ġ- Ġinner Padding Ġ* Ġ 1 4 Ġ- Ġpadding Top Ġ- Ġpadding Bottom Ġ- Ġlegend Bottom Ġ- Ġsub Height ). toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġdist Width Ġ= Ġ( width Ġ- Ġinner Padding Ġ* Ġ 2 3 Ġ- Ġpadding Left Ġ- Ġpadding Right Ġ- Ġlegend Left ). toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġper Height Ġ= Ġdist Height Ġ/ Ġ 1 5 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġper Width Ġ= Ġdist Width Ġ/ Ġ 2 4 . 0 ĊĊĠĠĠĠĠĠĠ Ġval ĠmaxValue Ġ= Ġdisplay DataList . last () ĊĠĠĠĠĠĠĠ Ġval Ġaccent Color Ġ= Ġcontext . resolve Color ( android x . appcompat . R . attr . color Accent ) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġfont Color Ġ= Ġcontext . resolve Color ( android . R . attr . textColor Secondary ) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġgray Box Color Ġ= Ġfont Color Ġor Ġ( 2 5 5 Ġshl Ġ 2 4 ) Ġand Ġ( 8 0 Ġshl Ġ 2 4 Ġor Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠ Ġfont Paint . textAlign Ġ= ĠPaint . Align . RIGHT ĊĠĠĠĠĠĠĠ Ġfont Paint . color Ġ= Ġfont Color ĊĠĠĠĠĠĠĠ Ġvar Ġfocus Day Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġfocus Hour Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( day Ġin Ġ 0 Ġuntil Ġ 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( date String , Ġhours ) Ġ= Ġdisplay Data [ day ] Ġ?: Ġ"" Ġto Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġday Ġ* Ġ( per Height Ġ+ Ġinner Padding ) Ġ+ Ġpadding Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( day Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( date String , Ġ( padding Left Ġ+ Ġlegend Left Ġ- Ġ 4 Ġ* Ġd ), Ġ( top Ġ+ Ġper Height Ġ/ Ġ 2 . 0 Ġ+ Ġmax Text Height Ġ/ Ġ 2 . 0 ). toFloat (), Ġfont Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Point ?. let Ġ{ Ġif Ġ( it . y Ġ> Ġtop Ġ&& Ġit . y Ġ< Ġtop Ġ+ Ġper Height ) Ġfocus Day Ġ= Ġday Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( hour Ġin Ġ 0 Ġuntil Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġhours [ hour ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġhour Ġ* Ġ( per Width Ġ+ Ġinner Padding ) Ġ+ Ġpadding Left Ġ+ Ġlegend Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect ( left . toFloat (), Ġtop . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġgray Box Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ== Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect ( left . toFloat (), Ġtop . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġaccent Color Ġand Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ>= Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġby Bucket Ġ= Ġ(( display DataList . relative Position ( value ) Ġ?: Ġ 0 . 0 ) Ġ* Ġ 1 8 0 . 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġby Max Ġ= Ġ( value . toDouble () Ġ/ ĠmaxValue . toDouble () Ġ* Ġ 8 0 . 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġmax ( 0 , Ġmin ( by Bucket Ġ+ Ġby Max , Ġ 2 5 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect ( left . toFloat (), Ġtop . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġaccent Color Ġand Ġ( alpha Ġshl Ġ 2 4 Ġor Ġ 0 xffffff )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( focus Day Ġ== Ġday Ġ&& Ġ( value Ġ== Ġnull Ġ|| Ġvalue Ġ>= Ġ 0 )) Ġfocus Point ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . x Ġ> Ġleft Ġ&& Ġit . x Ġ< Ġleft Ġ+ Ġper Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Hour Ġ= Ġhour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect ( left . toFloat (), Ġtop . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġaccent Color Ġand Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlegend Top Ġ= Ġ 1 5 Ġ* Ġ( per Height Ġ+ Ġinner Padding ) Ġ+ Ġpadding Top Ġ+ Ġmax Text Height Ġ+ Ġ 4 Ġ* Ġd ĊĠĠĠĠĠĠĠ Ġfont Paint . textAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠ Ġfor Ġ( hour Ġin Ġ 0 Ġuntil Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hour Ġ% Ġ 3 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġhour Ġ* Ġ( per Width Ġ+ Ġinner Padding ) Ġ+ Ġpadding Left Ġ+ Ġlegend Left Ġ+ Ġper Width Ġ/ Ġ 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ("${ hour }: 0 0 ", Ġleft . toFloat (), Ġlegend Top . toFloat (), Ġfont Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsub Top Ġ= Ġlegend Top Ġ+ Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġval Ġsub Left Ġ= Ġpadding Left Ġ+ Ġlegend Left ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw My Rect ( sub Left , Ġsub Top . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġgray Box Color ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstr No Records Ġ= Ġcontext . getString ( R . string . pref _ ex posure _ rp is _ histogram _ legend _ no _ records ) ĊĠĠĠĠĠĠĠ Ġfont Paint . textAlign Ġ= ĠPaint . Align . LEFT ĊĠĠĠĠĠĠĠ Ġfont Paint . getText Bounds ( str No Records , Ġ 0 , Ġstr No Records . length , Ġfont Temp Rect ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Text ( str No Records , Ġ( sub Left Ġ+ Ġper Width Ġ+ Ġ 4 Ġ* Ġd ). toFloat (), Ġ( sub Top Ġ+ Ġper Height Ġ/ Ġ 2 . 0 Ġ+ Ġfont Temp Rect . height () Ġ/ Ġ 2 . 0 ). toFloat (), Ġfont Paint ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( max Value Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect (( sub Left Ġ+ Ġ( per Width Ġ+ Ġinner Padding ) Ġ* Ġ 1 Ġ+ Ġ 1 2 Ġ* Ġd Ġ+ Ġfont Temp Rect . width ()). toFloat (), Ġsub Top . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġaccent Color Ġand Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect (( sub Left Ġ+ Ġ( per Width Ġ+ Ġinner Padding ) Ġ* Ġ 2 Ġ+ Ġ 1 2 Ġ* Ġd Ġ+ Ġfont Temp Rect . width ()). toFloat (), Ġsub Top . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġaccent Color Ġand Ġ( 8 0 Ġshl Ġ 2 4 Ġor Ġ 0 xffffff )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect (( sub Left Ġ+ Ġ( per Width Ġ+ Ġinner Padding ) Ġ* Ġ 3 Ġ+ Ġ 1 2 Ġ* Ġd Ġ+ Ġfont Temp Rect . width ()). toFloat (), Ġsub Top . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġaccent Color Ġand Ġ( 1 7 0 Ġshl Ġ 2 4 Ġor Ġ 0 xffffff )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw My Rect (( sub Left Ġ+ Ġ( per Width Ġ+ Ġinner Padding ) Ġ* Ġ 4 Ġ+ Ġ 1 2 Ġ* Ġd Ġ+ Ġfont Temp Rect . width ()). toFloat (), Ġsub Top . toFloat (), Ġper Width . toFloat (), Ġper Height . toFloat (), Ġaccent Color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Records Ġ= Ġcontext . getString ( R . string . pref _ ex posure _ rp is _ histogram _ legend _ records , Ġ" 0 Ġ- Ġ$ max Value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( str Records , Ġ( sub Left Ġ+ Ġ( per Width Ġ+ Ġinner Padding ) Ġ* Ġ 4 Ġ+ Ġ 1 6 Ġ* Ġd Ġ+ Ġfont Temp Rect . width () Ġ+ Ġper Width ). toFloat (), Ġ( sub Top Ġ+ Ġper Height Ġ/ Ġ 2 . 0 Ġ+ Ġfont Temp Rect . height () Ġ/ Ġ 2 . 0 ). toFloat (), Ġfont Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( focus Hour Ġ!= Ġ- 1 Ġ&& ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfloating Color Ġ= Ġcontext . resolve Color ( android x . appcompat . R . attr . color Background Floating ) Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline 1 Ġ= Ġ"${ display Data [ focus Day ]?. first }, Ġ$ focus Hour : 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline 2 Ġ= Ġdisplay Data [ focus Day ]?. second ?. get ( focus Hour )?. let Ġ{ Ġcontext . getString ( R . string . pref _ ex posure _ rp is _ histogram _ legend _ records , Ġit . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġstr No Records ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . text Size Ġ= Ġ 1 4 Ġ* Ġd ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . is Fake Bold Text Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . getText Bounds ( line 1 , Ġ 0 , Ġline 1 . length , Ġfont Temp Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfont Width Ġ= Ġfont Temp Rect . width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline 1 Height Ġ= Ġfont Temp Rect . height () Ġ+ Ġinner Padding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . is Fake Bold Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . getText Bounds ( line 2 , Ġ 0 , Ġline 2 . length , Ġfont Temp Rect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Width Ġ= Ġmax ( font Width , Ġfont Temp Rect . width ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Height Ġ= Ġline 1 Height Ġ+ Ġinner Padding Ġ+ Ġfont Temp Rect . height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . color Ġ= Ġfloating Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Top Ġ= Ġfocus Day Ġ* Ġ( per Height Ġ+ Ġinner Padding ) Ġ+ Ġpadding Top Ġ+ Ġper Height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Left Ġ= Ġfocus Hour Ġ* Ġ( per Width Ġ+ Ġinner Padding ) Ġ+ Ġpadding Left Ġ+ Ġlegend Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref Left Ġ- Ġfont Width Ġ< Ġ 5 0 Ġ* Ġd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġthe Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Temp Rect . set (( ref Left Ġ+ Ġper Width Ġ+ Ġinner Padding ). toFloat (), Ġ( ref Top Ġ- Ġinner Padding Ġ- Ġ 5 Ġ* Ġd Ġ- Ġtotal Height Ġ/ Ġ 2 f ). toFloat (), Ġ( ref Left Ġ+ Ġper Width Ġ+ Ġinner Padding Ġ+ Ġ 1 0 Ġ* Ġd Ġ+ Ġfont Width ). toFloat (), Ġ( ref Top Ġ+ Ġinner Padding Ġ+ Ġ 5 Ġ* Ġd Ġ+ Ġtotal Height Ġ/ Ġ 2 f ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġthe Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Temp Rect . set (( ref Left Ġ- Ġinner Padding Ġ- Ġ 1 0 Ġ* Ġd Ġ- Ġfont Width ). toFloat (), Ġ( ref Top Ġ- Ġinner Padding Ġ- Ġ 5 Ġ* Ġd Ġ- Ġtotal Height Ġ/ Ġ 2 f ). toFloat (), Ġ( ref Left Ġ- Ġinner Padding ). toFloat (), Ġ( ref Top Ġ+ Ġinner Padding Ġ+ Ġ 5 Ġ* Ġd Ġ+ Ġtotal Height Ġ/ Ġ 2 f ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( draw Temp Rect , Ġdraw Paint . stroke Width , Ġdraw Paint . stroke Width , Ġdraw Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref Left Ġ- Ġfont Width Ġ< Ġ 5 0 Ġ* Ġd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġthe Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff Ġ= Ġref Left Ġ+ Ġper Width Ġ+ Ġinner Padding Ġ+ Ġdraw Paint . stroke Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorr Ġ= Ġ( per Width Ġ/ Ġ 2 Ġ- Ġinner Padding Ġ+ Ġdraw Paint . stroke Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( off . toFloat (), Ġ( ref Top Ġ- Ġcorr ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo (( ref Left Ġ+ Ġper Width Ġ/ Ġ 2 ). toFloat (), Ġref Top . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( off . toFloat (), Ġ( ref Top Ġ+ Ġcorr ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġthe Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff Ġ= Ġref Left Ġ- Ġinner Padding Ġ- Ġdraw Paint . stroke Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorr Ġ= Ġ( per Width Ġ/ Ġ 2 Ġ- Ġinner Padding Ġ+ Ġdraw Paint . stroke Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( off . toFloat (), Ġ( ref Top Ġ- Ġcorr ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo (( ref Left Ġ+ Ġper Width Ġ/ Ġ 2 ). toFloat (), Ġref Top . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( off . toFloat (), Ġ( ref Top Ġ+ Ġcorr ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . color Ġ= Ġaccent Color Ġand Ġ( 1 3 0 Ġshl Ġ 2 4 Ġor Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( draw Temp Rect , Ġdraw Paint . stroke Width , Ġdraw Paint . stroke Width , Ġdraw Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . color Ġ= Ġfloating Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . fill Type Ġ= ĠPath . Fill Type . E VEN _ O DD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġdraw Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Paint . color Ġ= Ġaccent Color Ġand Ġ( 1 3 0 Ġshl Ġ 2 4 Ġor Ġ 0 xffffff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . fill Type Ġ= ĠPath . Fill Type . E VEN _ O DD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġdraw Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( line 2 , Ġdraw Temp Rect . left Ġ+ Ġ 5 Ġ* Ġd , Ġdraw Temp Rect . top Ġ+ Ġ 5 Ġ* Ġd Ġ+ Ġtotal Height , Ġfont Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . is Fake Bold Text Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( line 1 , Ġdraw Temp Rect . left Ġ+ Ġ 5 Ġ* Ġd , Ġdraw Temp Rect . top Ġ+ Ġ 5 Ġ* Ġd Ġ+ Ġline 1 Height , Ġfont Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfont Paint . is Fake Bold Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġremove Focus Point Ġ= ĠRunnable Ġ{ Ġun focus () Ġ} ĊĊĠĠĠ Ġfun Ġun focus () Ġ{ ĊĠĠĠĠĠĠĠ Ġfocus Point Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĠMotion Event . ACTION _ POINTER _ UP , ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ( remove Focus Point , ĠPOP UP _ DELAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN , ĠMotion Event . ACTION _ POINTER _ DOWN , ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Callbacks ( remove Focus Point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Point Ġ= ĠPoint F ( event . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPOP UP _ DELAY Ġ= Ġ 3 0 0 0 L ĊĠĠĠ Ġ} Ċ } Ċ