package Ġcom . example . work out comp anion . activities . home Ċ /* Ċ * ĠDaily Ġstep Ġcounts Ġis Ġvisual ised Ġas Ġa Ġbar Ġchart Ġusing ĠMP Android Chart Ġlibrary Ġand ĠLive Data Ċ */ Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Color . rgb Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . res . Complex Color Compat Ċ import Ġandroidx . core . view . margin Top Ċ import Ġandroidx . core . view . set Padding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . observe Ċ import Ġcom . example . work out comp anion . R Ċ import Ġcom . example . work out comp anion . model . Work out Companion ViewModel Ċ import Ġcom . github . mike phil . chart ing . components . Axis Base Ċ 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 . formatter . Index Axis Value Formatter Ċ import Ġcom . github . mike phil . chart ing . utils . Color Template Ċ import Ġkotlinx . android . synt hetic . main . fragment _ steps _ bar _ chart . view .* Ċ import Ġorg . jetbrains . ank o . top Padding Ċ import Ġjava . text . DateFormat Ċ Ċ class ĠSteps Bar Chart Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp ViewModel : ĠWork out Companion ViewModel ĊĠĠĠ Ġprivate Ġval ĠdateFormat : ĠDate Format Ġ= ĠDate Format . getDate Instance ( DateFormat . MEDIUM ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġapp ViewModel Ġ= ĠViewModel Provider ( this ). get ( Work out Companion ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġfrag Layout Ġ= Ġinflater . inflate ( R . layout . fragment _ steps _ bar _ chart , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġsets Ġand Ġdraw Ġbar Ġchart ĊĠĠĠĠĠĠĠ Ġapp ViewModel . user Steps . observe ( view Lifecycle Owner ) Ġ{ Ġsteps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsets ĠUI Ġas Ġobserver Ġto Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbar Entries Ġ= ĠArrayList < Bar Entry >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsteps . sorted By Descending Ġ{ ĠdateFormat . parse ( it . date )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reversed (). forEach Indexed Ġ{ Ġindex , Ġstep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar Entries . add ( Bar Entry ( index . toFloat (), Ġstep . value Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabels . add ( step . date . drop Last ( 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" labels ", Ġlabels . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" entries ", Ġbar Entries . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbar DataSet Ġ= ĠBar DataSet ( bar Entries , ĠgetString ( R . string . steps _ label )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbar DataSet . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Values ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Text Size Ġ= Ġ 1 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Colors ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrgb ( 5 , Ġ 1 9 7 , Ġ 2 2 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrgb ( 7 6 , Ġ 1 7 5 , Ġ 8 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrgb ( 2 2 4 , Ġ 6 4 , Ġ 2 5 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrgb ( 2 4 4 , Ġ 8 1 , Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bar Entries . isNotEmpty () Ġ&& Ġlabels . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrag Layout . v Steps Bar Chart . apply { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Value Above Bar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Gran ularity Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgranularity Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Line Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Left . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Right . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Grid Lines ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠX Axis . X Axis Position . TOP _ INS IDE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Formatter Ġ= ĠIndex Axis Value Formatter ( labels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis . text Size Ġ= Ġ 1 4 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Left . space Top Ġ= Ġ 1 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= ĠgetString ( R . string . daily _ step _ counts ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠgetString ( R . string . daily _ step _ counts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 6 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Position ( 7 0 0 f , Ġ 1 0 6 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// animate XY ( 1 0 0 0 , 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Fit Bars ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠBar Data ( bar DataSet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfrag Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠSteps Bar Chart Fragment () ĊĠĠĠ Ġ} Ċ }