package Ġcom . hour . hour . helper Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġcom . hour . hour . Main Application . Companion . store Ċ import Ġcom . hour . hour . R Ċ import Ġcom . hour . hour . helper . Resource Helper . dp Ċ import Ġcom . hour . hour . helper . Usage Stats Helper . HOUR _ 2 4 Ċ import Ġcom . hour . hour . model . Usage Digest Ċ import Ġcom . hour . hour . model . Usage Summary Ċ import Ġcom . github . mike phil . chart ing . animation . E asing Ċ import Ġcom . github . mike phil . chart ing . charts . Bar Chart Ċ import Ġcom . github . mike phil . chart ing . charts . Line Chart Ċ import Ġcom . github . mike phil . chart ing . charts . Pie Chart Ċ import Ġcom . github . mike phil . chart ing . components . X Axis Ċ import Ġcom . github . mike phil . chart ing . data . Bar Data Ċ import Ġcom . github . mike phil . chart ing . data . Bar DataSet Ċ import Ġcom . github . mike phil . chart ing . data . Bar Entry Ċ import Ġcom . github . mike phil . chart ing . data . Entry Ċ import Ġcom . github . mike phil . chart ing . data . Line Data Ċ import Ġcom . github . mike phil . chart ing . data . Line DataSet Ċ import Ġcom . github . mike phil . chart ing . data . Pie Data Ċ import Ġcom . github . mike phil . chart ing . data . Pie DataSet Ċ import Ġcom . github . mike phil . chart ing . data . Pie Entry Ċ import Ġcom . github . mike phil . chart ing . formatter . I Axis Value Formatter Ċ import Ġcom . github . mike phil . chart ing . formatter . I Value Formatter Ċ import Ġcom . github . mike phil . chart ing . formatter . Percent Formatter Ċ import Ġjava . io . File Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . util . Calendar Ċ import Ġkotlin . math . round ToInt Ċ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ object ĠGraph Helper Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcontext : ĠWeak Reference < Context >? Ġ= Ġnull ĊĠĠĠ Ġfun Ġsetup ( c : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext Ġ= ĠWeak Reference ( c ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetC umulative ( filename : ĠString ): ĠList < Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext ?. get () Ġ?: Ġreturn ĠlistOf () ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠFile ( context . files Dir . path Ġ+ Ġ"/" Ġ+ Ġfilename ) ĊĠĠĠĠĠĠĠ Ġval Ġnt List Ġ= Ġstore (). view . state . not Tracking List ĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= ĠCsv Helper . read ( path ). filter Ġ{ Ġ! nt List . contains ( it . packageName ) Ġ}. sorted By Ġ{ Ġit . star Time Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( records . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġhash Map Of < Float , ĠFloat >() ĊĠĠĠĠĠĠĠ Ġvar Ġcul Duration Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcal . time In Millis Ġ= Ġrecords . first (). star Time ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . HOUR _ OF _ DAY , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . MINUTE , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . MILLI SECOND , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġstart OfDay Ġ= Ġcal . time In Millis ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġrecords ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl [( r . star Time Ġ- Ġstart OfDay ) Ġ/ Ġ 6 0 0 0 0 f ] Ġ= Ġcul Duration Ġ/ Ġ 3 6 0 0 0 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcul Duration Ġ+= Ġr . duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl [( r . star Time Ġ+ Ġr . duration Ġ- Ġstart OfDay ) Ġ/ Ġ 6 0 0 0 0 f ] Ġ= Ġcul Duration Ġ/ Ġ 3 6 0 0 0 0 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġl [ 0 f ] Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġreturn Ġl . to Sorted Map (). map Ġ{ ĠEntry ( it . key , Ġit . value ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Chart ( line Chart : ĠLine Chart , Ġday : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext ?. get () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= ĠgetC umulative ( day ) ĊĠĠĠĠĠĠĠ Ġif Ġ( entries . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠdataSet Ġ= ĠLine DataSet ( entries , Ġ" Usage ĠTime ") ĊĠĠĠĠĠĠĠ Ġval Ġline Data Ġ= ĠLine Data ( data Set ) ĊĠĠĠĠĠĠĠ ĠdataSet . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# 0 0 d 0 ff ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Circle Color ( Color . parse Color ("# 0 0 d 0 ff ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Circle Hole ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Circ les ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineWidth Ġ= Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Drawable Ġ= Ġcontext . get Drawable ( R . drawable . fade _ background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Filled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Alpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Formatter Ġ= ĠI Value Formatter Ġ{ Ġvalue , Ġentry , ĠdataSet Index , Ġview Port Handler Ġ-> Ġ"" Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġline Chart . data Ġ= Ġline Data ĊĠĠĠĠĠĠĠ Ġline Chart . animate X ( 5 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplot Daily Line Chart ( context : ĠContext ): ĠLine Chart Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLine Chart ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠX Axis . X Axis Position . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Minimum Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Maximum Ġ= ĠHO UR _ 2 4 Ġ/ Ġ 6 0 0 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Rotation Angle Ġ= Ġ 3 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis LineWidth Ġ= Ġ 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Label Count ( 5 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Formatter Ġ= ĠI Axis Value Formatter Ġ{ Ġvalue , Ġ_ Ġ-> ĠString . format ("% 0 2 d :% 0 2 d ", Ġvalue . toInt () Ġ/ Ġ 6 0 , Ġvalue . toInt () Ġ% Ġ 6 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Left . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Minimum Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Label Count ( 5 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Formatter Ġ= ĠI Axis Value Formatter Ġ{ Ġvalue , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġ 0 f ) Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( value Ġ> Ġ. 9 8 Ġ&& Ġ( value Ġ+ Ġ 0 . 0 2 ) Ġ% Ġ 1 Ġ< Ġ 0 . 0 4 ) ĠString . format ("% dh ", Ġvalue . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( value Ġ> Ġ. 9 8 ) ĠString . format ("% dh % 0 2 dm ", Ġvalue . toInt (), Ġ((( value Ġ- Ġvalue . toInt ()) Ġ* Ġ 6 0 )). round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠString . format ("% dm ", Ġ(( value Ġ- Ġvalue . toInt ()) Ġ* Ġ 6 0 ). round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis LineWidth Ġ= Ġ 3 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Double Tap To Zoom Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Right . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Drag Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Scale X Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Scale Y Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget 7 Day Summary ( endTime : ĠLong ): ĠList < Bar Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġcontext ?. get () Ġ?: Ġreturn ĠlistOf () ĊĠĠĠĠĠĠĠ Ġval Ġseries Ġ= Ġarray ListOf < Bar Entry >() ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġval Ġnt List Ġ= Ġstore (). view . state . not Tracking List ĊĠĠĠĠĠĠĠ Ġfor Ġ( t Ġin Ġ( endTime Ġ- Ġ 6 Ġ* ĠHO UR _ 2 4 ) .. endTime Ġstep ĠHO UR _ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠUsage Digest . load Filtered ( context , ĠCalendar Helper . getDate Con dense d ( t )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries . add ( Bar Entry ( i , Ġ( d . total Time Ġ?: Ġ 0 ) Ġ/ Ġ 3 6 0 0 0 0 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġseries ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Chart ( bar Chart : ĠBar Chart ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġget 7 Day Summary ( time ) ĊĠĠĠĠĠĠĠ Ġif Ġ( entries . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠdataSet Ġ= ĠBar DataSet ( entries , Ġ" Usage ĠTime ") ĊĠĠĠĠĠĠĠ Ġval Ġbar Data Ġ= ĠBar Data ( data Set ) ĊĠĠĠĠĠĠĠ ĠdataSet . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Text Size Ġ= Ġ 1 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue Formatter Ġ{ Ġvalue , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġ 0 f ) ĠString . format ("% d :% 0 2 d ", Ġvalue . toInt (), Ġ(( value Ġ- Ġvalue . toInt ()) Ġ* Ġ 6 0 ). toInt ()) Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbar Chart . data Ġ= Ġbar Data ĊĠĠĠĠĠĠĠ Ġbar Chart . animate X ( 5 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplot 7 Day Bar Chart ( context : ĠContext ): ĠBar Chart ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBar Chart ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠX Axis . X Axis Position . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Grid Lines ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Rotation Angle Ġ= Ġ 3 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Formatter Ġ= ĠI Axis Value Formatter Ġ{ Ġvalue , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= ĠSystem . currentTimeMillis () Ġ- Ġ( 7 Ġ- Ġvalue . to Long ()) Ġ* ĠHO UR _ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalendar Helper . getMonth Day ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Left . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Minimum Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Label Count ( 5 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Formatter Ġ= ĠI Axis Value Formatter Ġ{ Ġvalue , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġ 0 f ) Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( value Ġ> Ġ. 9 8 Ġ&& Ġ( value Ġ+ Ġ 0 . 0 2 ) Ġ% Ġ 1 Ġ< Ġ 0 . 0 4 ) ĠString . format ("% dh ", Ġvalue . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( value Ġ> Ġ. 9 8 ) ĠString . format ("% dh % 0 2 dm ", Ġvalue . toInt (), Ġ((( value Ġ- Ġvalue . toInt ()) Ġ* Ġ 6 0 )). round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠString . format ("% dm ", Ġ(( value Ġ- Ġvalue . toInt ()) Ġ* Ġ 6 0 ). round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Double Tap To Zoom Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Right . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Drag Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Scale X Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Scale Y Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġplot Summary Pie Chart ( context : ĠContext ): ĠP ie Chart Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP ie Chart ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Use Percent Values ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Center Text ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Text Ġ= Ġ" Total ĠUsage ĠTime " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Center TextColor ( Color . parse Color ("# 2 b 8 3 bd ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Center Text Size ( 1 5 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Draw Hole Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Hole Color ( Color . TRANSP ARENT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Transparent Circle Color ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Transparent Circle Alpha ( 1 1 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhole Radius Ġ= Ġ 5 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransparent Circle Radius Ġ= Ġ 6 3 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Entry Label Color ( Color . parse Color ("# cc 4 4 4 4 4 4 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Entry Label Text Size ( 1 3 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetData ( pie Chart : ĠP ie Chart , Ġusage Summary : ĠList < Usage Summary >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġarray ListOf < Pie Entry >() ĊĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġusage Summary . map Ġ{ Ġit . use Time Total Ġ}. sum () ĊĠĠĠĠĠĠĠ Ġvar Ġcul Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġusage Summary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cul Ġ> Ġ 0 . 8 5 Ġ* Ġsum Ġ|| Ġi . use Time Total Ġ< Ġ 0 . 0 5 Ġ* Ġsum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . add ( Pie Entry (( sum Ġ- Ġcul ). toFloat (), Ġ" Others ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcul Ġ+= Ġi . use Time Total ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . add ( Pie Entry ( i . use Time Total . toFloat (), Ġi . appName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcolors Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# 9 9 ff 3 3 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# fff 1 3 3 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# ffb 1 3 3 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# 3 3 d 3 ff ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġpie DataSet Ġ= ĠP ie DataSet ( entries , Ġ" Total ĠUsage ĠTime "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslice Space Ġ= Ġdp ( 3 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Shift Ġ= Ġdp ( 5 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Colors ( colors ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpie Data Ġ= ĠP ie Data ( pie DataSet ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue Formatter ( Percent Formatter ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue Text Size ( 1 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue TextColor ( Color . parse Color ("# 5 5 5 5 5 5 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpie Chart . data Ġ= Ġpie Data ĊĠĠĠĠĠĠĠ Ġpie Chart . animate Y ( 1 2 0 0 , ĠE asing . E asing Option . E ase InOut Quad ) ĊĠĠĠ Ġ} Ċ } Ċ