/** čĊ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠMay ank ĠS ind w ani čĊ Ġ* čĊ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); čĊ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . čĊ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat čĊ Ġ* čĊ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 čĊ Ġ* čĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware čĊ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , čĊ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . čĊ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand čĊ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . čĊ Ġ*/ čĊč Ċ package Ġcom . ms ind wan . sh oe box . views . dashboard . fragments čĊč Ċ import Ġandroid . graphics . Color č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . view . LayoutInflater č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . ViewGroup č Ċ import Ġandroid . widget . TextView č Ċ import Ġandroidx . fragment . app . Fragment č Ċ import Ġandroidx . lifecycle . Observer č Ċ import Ġandroidx . lifecycle . ViewModel Provider č Ċ import Ġcom . ms ind wan . sh oe box . R č Ċ import Ġcom . ms ind wan . sh oe box . data . entities . Offset DateTime Range č Ċ import Ġcom . ms ind wan . sh oe box . views . dashboard . models . Dashboard ViewModel č Ċ import Ġcom . ms ind wan . sh oe box . views . dashboard . components . Budget Graph č Ċ import Ġcom . ms ind wan . sh oe box . widgets . Button Toggle Group č Ċ import Ġorg . th reet en . bp . format . DateTime Formatter č Ċ import Ġorg . th reet en . bp . temporal . Ch rono Unit č Ċ import Ġjava . text . NumberFormat č Ċ import Ġjava . util .* čĊčĊč Ċ /** čĊ Ġ* ĠFragment Ġfor Ġthe Ġdashboard Ġtrend s Ġview . čĊ Ġ*/ č Ċ class ĠDashboard Trend s Fragment Ġ: ĠFragment () Ġ{ čĊčĊĠĠĠ Ġprivate Ġval Ġcurrency Formatter Ġ= ĠNumber Format . getC urrency Instance ( Locale . getDefault ()) čĊĠĠĠ Ġprivate Ġvar Ġselected View : ĠButton Toggle Group ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġremaining Budget Txt : ĠTextView ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġdate Range Txt : ĠTextView ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġbudget Graph : ĠBudget Graph ? Ġ= Ġnull čĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdashboard Model : ĠDashboard ViewModel čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( čĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , čĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup ?, čĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? čĊĠĠĠ Ġ): ĠView ? Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . dashboard _ trend s _ fragment , Ġparent , Ġfalse ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ Ġsetup ( view ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠInitializes Ġthe Ġview . čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġsetup ( view : ĠView ) Ġ{ čĊĠĠĠĠĠĠĠ Ġdashboard Model Ġ= ĠViewModel Provider ( activity !! ). get ( Dashboard ViewModel :: class . java ) čĊĠĠĠĠĠĠĠ Ġbudget Graph Ġ= Ġview . findViewById ( R . id . budget _ graph ) čĊĠĠĠĠĠĠĠ Ġremaining Budget Txt Ġ= Ġview . findViewById ( R . id . dashboard _ trend s _ remaining _ budget ) čĊĠĠĠĠĠĠĠ Ġdate Range Txt Ġ= Ġview . findViewById ( R . id . dashboard _ trend s _ range ) čĊĠĠĠĠĠĠĠ Ġselected View Ġ= Ġview . findViewById ( R . id . dashboard _ trend s _ view ) čĊčĊĠĠĠĠĠĠĠ Ġselected View ?. add Button (" Monthly ", Ġ" Monthly ") čĊĠĠĠĠĠĠĠ Ġselected View ?. add Button (" Year ly ", Ġ" Year ly ") čĊĠĠĠĠĠĠĠ Ġselected View ?. on Button Clicked Listener Ġ= Ġon DateRange Changed čĊčĊĠĠĠĠĠĠĠ Ġdashboard Model . get Trend s Budget Graph (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġupdate () Ġ}) čĊĠĠĠĠĠĠĠ Ġdashboard Model . get Trend s DateRange (). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġupdate () Ġ}) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠUpdates Ġthe Ġview Ġbased Ġon Ġthe Ġview Ġmodel Ġstate . čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġupdate () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġmonth Formatter Ġ= ĠDateTime Formatter . of Pattern (" MMM Ġy yyy ") čĊčĊĠĠĠĠĠĠĠ Ġbudget Graph ?. data Ġ= Ġdashboard Model . get Trend s Budget Graph (). value čĊĠĠĠĠĠĠĠ Ġval Ġtotal Budget Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdashboard Model . get Trend s Budget Graph (). value !!. sum By Ġ{ Ġit . budget . toInt () Ġ} Ġ/ Ġ 1 0 0 F čĊĠĠĠĠĠĠĠ Ġval Ġremaining Budget Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Budget Ġ- Ġdashboard Model . get Trend s Budget Graph (). value !!. sum By Ġ{ Ġit . amount . toInt () Ġ} Ġ/ Ġ 1 0 0 F čĊĠĠĠĠĠĠĠ Ġval Ġdate Range Ġ= Ġdashboard Model . get Trend s DateRange (). value !! čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( date Range . years Ġ> Ġ 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected View ?. setSelected Button (" Year ly ") čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected View ?. setSelected Button (" Monthly ") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( remaining Budget Ġ< Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Budget Txt ?. text Ġ= Ġresources . getString ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . n _ over _ budget , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Formatter . format ( remaining Budget ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Budget Txt ?. setTextColor ( Color . parse Color ("# F 0 6 9 5 A ")) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Budget Txt ?. text Ġ= Ġresources . getString ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . n _ budget _ remaining , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Formatter . format ( remaining Budget ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Budget Txt ?. setTextColor ( Color . parse Color ("# 3 CC 2 8 D ")) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġdate Range Txt ?. text Ġ= Ġresources . getString ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . from _ date _ range , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Formatter . format ( date Range . startDate ), čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonth Formatter . format ( date Range . endDate ) čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠHandles Ġchanging Ġthe Ġdate Ġrange Ġfor Ġtrend s . čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġval Ġon DateRange Changed Ġ= Ġfun ( view : ĠView ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġdate Range Ġ= Ġif Ġ( view . tag Ġ== Ġ" Monthly ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠOffset DateTime Range . current Month (). minus Start ( 7 , ĠCh rono Unit . MONTH S ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠOffset DateTime Range . current Year (). minus Start ( 7 , ĠCh rono Unit . YEAR S ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġdashboard Model . set Trend s DateRange ( date Range ) čĊĠĠĠ Ġ} č Ċ } čĊ