package Ġcom . ped rod avid m cr . ag arden . pl ants . view . activity Ċ Ċ import Ġandroid . animation . Animator Set Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . animation . Property Values Holder Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . github . mike phil . chart ing . charts . Line Chart Ċ import Ġcom . github . mike phil . chart ing . components . Description Ċ 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 . ped rod avid m cr . ag arden . R Ċ import Ġcom . ped rod avid m cr . ag arden . base . Injector Ċ import Ġcom . ped rod avid m cr . ag arden . base . view . animation . on Finish Ċ import Ġcom . ped rod avid m cr . ag arden . base . view . extension . color Ċ import Ġcom . ped rod avid m cr . ag arden . base . view . extension . setVisible Ċ import Ġcom . ped rod avid m cr . ag arden . ir rig ation . view . activity . Plant Configuration Activity Ċ import Ġcom . ped rod avid m cr . ag arden . pl ants . view . animation . Progress Animation Ċ import Ġcom . ped rod avid m cr . ag arden . pl ants . view model . Plant Detail ViewModel Ċ import Ġkotlinx . android . synt hetic . main . activity _ plant _ detail .* Ċ import Ġorg . jetbrains . ank o . sdk 2 5 . coroutines . onClick Ċ import Ġorg . jetbrains . ank o . startActivity ĊĊ Ċ class ĠPl ant Detail Activity Ġ: ĠAppCompatActivity (), ĠSw ipe Refresh Layout . On Refresh Listener Ġ{ ĊĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠPl ant Detail ViewModel ĊĠ Ġprivate Ġval Ġplant Id : ĠInt Ġby Ġlazy Ġ{ Ġintent . getInt Extra (" plant Id ", Ġ- 1 ) Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ plant _ detail ) ĊĠĠĠ Ġtitle Ġ= Ġ" Detalle Ġde Ġpl anta " ĊĠĠĠ Ġval Ġfactory Ġ= ĠInject or . provide Plant Detail ViewModel Factory ( plant Id ) ĊĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , Ġfactory ). get ( Plant Detail ViewModel :: class . java ) ĊĊĠĠĠ Ġanimate Activity Entry () ĊĠĠĠ Ġrestore State Of Views If Activity Re creation ( savedInstanceState ) ĊĠĠĠ Ġinit Refresh Layout () ĊĠĠĠ Ġinit Charts () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠ Ġmenu Inflater . inflate ( R . menu . plant _ details , Ġmenu ) ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ= Ġwhen Ġ( item !!. itemId ) Ġ{ ĊĠĠĠ ĠR . id . open Ir rig ate Menu Ġ-> Ġ{ ĊĠĠĠĠĠ ĠstartActivity < Plant Configuration Activity >(" plant Id " Ġto Ġplant Id ) ĊĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠ Ġ} ĊĊĊĠ Ġprivate Ġfun Ġinit Refresh Layout () Ġ{ ĊĠĠĠ Ġrefresh Layout . setOn Refresh Listener ( this ) ĊĠĠĠ ĠviewModel . loading . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠ Ġrefresh Layout . is Refresh ing Ġ= Ġit ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Refresh () Ġ= ĠviewModel . load () ĊĊĊĠ Ġprivate Ġfun Ġrestore State Of Views If Activity Re creation ( savedInstanceState : ĠBundle ?) Ġ= ĊĠĠĠ ĠsavedInstanceState ?. let Ġ{ ĊĠĠĠĠĠ Ġimage . layout Params . height Ġ= Ġimage . layout Params . height Ġ/ Ġ 2 ĊĠĠĠĠĠ Ġimage . layout Params . width Ġ= Ġimage . layout Params . width Ġ/ Ġ 2 ĊĠĠĠĠĠ Ġlight Bar . setVisible () ĊĠĠĠĠĠ Ġhum idity Bar . setVisible () ĊĠĠĠĠĠ Ġtemperature Bar . setVisible () ĊĠĠĠ Ġ} ĊĊĊĠ Ġprivate Ġfun Ġinit Charts () Ġ{ ĊĠĠĠ Ġset Shared Format ( temperature Stat , Ġhum idity Stat ) ĊĊĠĠĠ ĠviewModel . samples . observe ( this , ĠObserver Ġ{ Ġsample List Ġ-> ĊĠĠĠĠĠ Ġpopulate Temperature Chart ( sample List . map Ġ{ Ġit . temperature Ġ}) ĊĠĠĠĠĠ Ġpopulate Hum idity Chart ( sample List . map Ġ{ Ġit . humidity Ġ}) ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Shared Format ( var arg Ġcharts : ĠLine Chart ) Ġ= Ġcharts . forEach Ġ{ Ġchart Ġ-> ĊĠĠĠ Ġchart . set BackgroundColor ( color ( android . R . color . white )) ĊĠĠĠ Ġchart . legend . set Custom ( empty Array ()) ĊĠĠĠ Ġchart . axis Left . axis Minimum Ġ= Ġ 0 F ĊĠĠĠ Ġchart . xAxis . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġchart . axis Left . set Draw Grid Lines ( false ) ĊĠĠĠ Ġchart . axis Right . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġchart . description Ġ= ĠDescription (). also Ġ{ Ġit . text Ġ= Ġ"" Ġ} ĊĠĠĠ Ġchart . set Touch Enabled ( false ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpopulate Hum idity Chart ( humidity List : ĠList < Double >) Ġ{ ĊĠĠĠ Ġval Ġhum idity Entries Ġ= Ġhum idity List . map Indexed Ġ{ Ġindex , Ġhum idity Value Ġ-> ĊĠĠĠĠĠ ĠEntry ( index . toFloat (), Ġhum idity Value . toFloat ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġhum idity DataSet Ġ= ĠLine DataSet ( humidity Entries , Ġ" H umed ad "). apply Ġ{ ĊĠĠĠĠĠ ĠlineWidth Ġ= Ġ 6 F ĊĠĠĠĠĠ Ġcolor Ġ= Ġcolor ( android . R . color . holo _ blue _ light ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġhum idity Stat . axis Left . axis Maximum Ġ= Ġ 1 0 0 F ĊĠĠĠ Ġhum idity Stat . data Ġ= ĠLine Data ( humidity DataSet ) ĊĠĠĠ Ġhum idity Stat . highlight Value ( 3 F , Ġ 3 , Ġfalse ) ĊĠĠĠ Ġhum idity Stat . invalidate () ĊĊĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpopulate Temperature Chart ( temperature List : ĠList < Double >) Ġ{ ĊĠĠĠ Ġval Ġtemperature Entries Ġ= Ġtemperature List . map Indexed Ġ{ Ġindex , Ġhum idity Value Ġ-> ĊĠĠĠĠĠ ĠEntry ( index . toFloat (), Ġhum idity Value . toFloat ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtemperature DataSet Ġ= ĠLine DataSet ( temperature Entries , Ġ" Temp er atura "). apply Ġ{ ĊĠĠĠĠĠ ĠlineWidth Ġ= Ġ 6 F ĊĠĠĠĠĠ Ġcolor Ġ= Ġcolor ( android . R . color . holo _ green _ light ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtemperature Stat . axis Left . axis Maximum Ġ= Ġ 4 5 F ĊĠĠĠ Ġtemperature Stat . data Ġ= ĠLine Data ( temperature DataSet ) ĊĠĠĠ Ġtemperature Stat . invalidate () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġanimate Activity Entry () Ġ{ ĊĠĠĠ Ġsupport Post p one Enter Transition () ĊĠĠĠ Ġwindow . shared Element Enter Transition . on Finish Ġ{ ĊĠĠĠĠĠ Ġval Ġp vh X Ġ= ĠProperty Values Holder . of Float ( View . SCALE _ X , Ġ 1 F , Ġ 0 . 5 F ) ĊĠĠĠĠĠ Ġval Ġp vh Y Ġ= ĠProperty Values Holder . of Float ( View . SCALE _ Y , Ġ 1 F , Ġ 0 . 5 F ) ĊĠĠĠĠĠ Ġval Ġscale Animation Ġ= ĠObject Animator . of Property Values Holder ( image , Ġp vh X , Ġp vh Y ) ĊĠĠĠĠĠ Ġval Ġset Animation Ġ= ĠAn imator Set () ĊĠĠĠĠĠ Ġset Animation . play ( scale Animation ) ĊĠĠĠĠĠ Ġlight Bar . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠ Ġhum idity Bar . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠ Ġtemperature Bar . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠ Ġset Animation . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġon Finish Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠviewModel . plant . observe ( this @ Plant Detail Activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlight Text . text Ġ= Ġ"${ it . sun Light . toInt ()} Ġl ux " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Text . text Ġ= Ġ"${ it . temperature . toInt ()} ĠC Âº " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhum idity Text . text Ġ= Ġ"${ it . humidity . toInt ()} Ġ% " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlight Bar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Animation ( Progress Animation ( light Bar , Ġ 0 F , Ġ( it . sun Light Ġ/ Ġ 1 0 ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġduration Ġ= Ġ 1 0 0 0 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhum idity Bar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Animation ( Progress Animation ( humidity Bar , Ġ 0 F , Ġit . humidity . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġduration Ġ= Ġ 5 0 0 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Bar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start Animation ( Progress Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemperature Bar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . temperature Ġ* Ġ 2 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġduration Ġ= Ġ 7 0 0 Ġ}) ĊĊĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠviewModel . plant . observe ( this , ĠObserver Ġ{ Ġplant Ġ-> ĊĠĠĠĠĠ Ġplant Name . text Ġ= Ġplant . name ĊĠĠĠ Ġ}) ĊĊĠĠĠ ĠView Compat . set Transition Name ( main card , Ġintent . extras . getString (" transition Root ")) ĊĠĠĠ ĠView Compat . set Transition Name ( image , Ġintent . extras . getString (" transition Image ")) ĊĠĠĠ ĠView Compat . set Transition Name ( plant Name , Ġintent . extras . getString (" transition Name ")) ĊĠĠĠ Ġsupport Start Post p oned Enter Transition () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠ Ġval Ġp vh X Ġ= ĠProperty Values Holder . of Float ( View . SCALE _ X , Ġ 0 . 5 F , Ġ 1 F ) ĊĠĠĠ Ġval Ġp vh Y Ġ= ĠProperty Values Holder . of Float ( View . SCALE _ Y , Ġ 0 . 5 F , Ġ 1 F ) ĊĠĠĠ Ġval Ġscale Animation Ġ= ĠObject Animator . of Property Values Holder ( image , Ġp vh X , Ġp vh Y ) ĊĠĠĠ Ġval Ġset Animation Ġ= ĠAn imator Set () ĊĠĠĠ Ġset Animation . apply Ġ{ ĊĠĠĠĠĠ Ġplay ( scale Animation ) ĊĠĠĠĠĠ Ġon Finish Ġ{ ĊĠĠĠĠĠĠĠ Ġlight Bar . progress Drawable Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠ Ġ. get Drawable ( application Context , Ġandroid . R . color . transparent ) ĊĠĠĠĠĠĠĠ Ġlight Bar . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġhum idity Bar . progress Drawable Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠ Ġ. get Drawable ( application Context , Ġandroid . R . color . transparent ) ĊĠĠĠĠĠĠĠ Ġhum idity Bar . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġtemperature Bar . progress Drawable Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠ Ġ. get Drawable ( application Context , Ġandroid . R . color . transparent ) ĊĠĠĠĠĠĠĠ Ġtemperature Bar . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġplant Name . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĊĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ?) Ġ{ ĊĠĠĠ Ġout State ?. run Ġ{ ĊĠĠĠĠĠ Ġput Boolean (" animation Finished ", Ġtrue ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠ Ġ} Ċ } Ċ