package Ġlife . chen shi . keep accounts . ui . an ay l ze Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġcom . github . mike phil . chart ing . components . Legend Ċ import Ġcom . github . mike phil . chart ing . components . X Axis Ċ import Ġcom . github . mike phil . chart ing . data .* Ċ import Ġcom . github . mike phil . chart ing . formatter . Percent Formatter Ċ import Ġcom . lo per 7 . date _ time _ picker . DateTime Config Ċ import Ġcom . lo per 7 . date _ time _ picker . dialog . Card DatePicker Dialog Ċ import Ġlife . chen shi . keep accounts . R Ċ import Ġlife . chen shi . keep accounts . common . utils .* Ċ import Ġlife . chen shi . keep accounts . constant . RECORD _ TYPE _ IN CO ME Ċ import Ġlife . chen shi . keep accounts . constant . RECORD _ TYPE _ OUT CO ME Ċ import Ġlife . chen shi . keep accounts . databinding . Fragment An ay l ze Binding Ċ import Ġjava . util .* ĊĊ Ċ class ĠAn alyze Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Binding : ĠFragment An ay l ze Binding ĊĠĠĠ Ġprivate Ġval Ġm Analyze ViewModel Ġby Ġactivity ViewModels < Analyze ViewModel >() ĊĠĠĠ Ġprivate Ġvar Ġm Pro portion Adapter : ĠAn alyze Pro portion Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ YEAR Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ MONTH Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding Ġ= ĠData Binding Util . inflate < Fragment An ay l ze Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . fragment _ an ay l ze , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġm Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġinit Listener () ĊĠĠĠĠĠĠĠ Ġinit Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ çº¿ æ®µ åĽ¾ åĽºå®ļ è®¾ç½® ĊĠĠĠĠĠĠĠ Ġm Binding . line Chart . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Scale Enabled ( false ) Ġ// ç¦ģ æŃ¢ ç¼© æĶ¾ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . isEnabled Ġ= Ġfalse Ġ// Ġ åİ» éĻ¤ è¯´æĺİ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . parse Color ("# ffffff ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Grid BackgroundColor ( Color . parse Color ("# ffffff ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Ġ= ĠLegend . Legend Form . CIR CLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠLegend . Legend Vertical Alignment . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠLegend . Legend Horizontal Alignment . CENTER Ġ// åĽ¾ ä¾ĭ æłĩè¯Ĩ ä½įç½® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker Ġ= ĠMy Marker View ( TYPE _ MONTH , Ġrequire Activity (), ĠR . layout . layout _ analyze _ marker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset No Data Text (" æļĤ æĹł æķ°æį® ") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ åı³ è½´ , è®¾ç½® ä¸įåı¯ è§ģ ĊĠĠĠĠĠĠĠ Ġval Ġright Axis Ġ= Ġm Binding . line Chart . axis Right . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠX è½´ åĽºå®ļ è®¾ç½® ĊĠĠĠĠĠĠĠ Ġval Ġx Axis Ġ= Ġm Binding . line Chart . xAxis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= ĠX Axis . X Axis Position . BOTTOM Ġ// Ġè®¾ç½® ä½įç½® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Grid Lines ( false ) Ġ// Ġ åıĸæ¶Ī ç½ĳ æł¼ çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Avoid First Last Cli pping ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Minimum Ġ= Ġ 1 . 0 f Ġ// Ġ èµ· çĤ¹ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ å·¦ è½´ ( Y è½´ ) ĊĠĠĠĠĠĠĠ Ġval Ġy Axis Ġ= Ġm Binding . line Chart . axis Left . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Zero Line ( true ) Ġ// ç»ĺ åĪ¶ 0 çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Axis Line ( false ) Ġ// ä¸į ç»ĺ åĪ¶ ç½ĳ æł¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Grid D ashed Line ( 1 0 f , Ġ 5 f , Ġ 1 f ) Ġ// Ġ èĻļ çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaxis Minimum Ġ= Ġ 0 . 0 f Ġ// Ġè®¾ç½® èµ· å§ĭ åĢ¼ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġåı¯ åıĺ è®¾ç½® ĊĠĠĠĠĠĠĠ Ġy Axis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® éĻĲåĪ¶ çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Limit Line ( Limit Line ( 2 0 0 0 . 0 0 f , Ġ" æľĪ é¢Ħ ç®Ĺ "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġline Color Ġ= ĠColor . parse Color ("# DC 1 4 3 C ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ ĠtextColor Ġ= ĠColor . parse Color ("# DC 1 4 3 C ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġincome Line DataSet Ġ= Ġm Analyze ViewModel . generate Line DataSet ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfMonth ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" æĶ¶ åħ¥ ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 8 bc 3 4 a " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġoutcome Line DataSet Ġ= Ġm Analyze ViewModel . generate Line DataSet ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfMonth ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" æĶ¯ åĩº ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" E 9 1 E 6 3 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġm Binding . line Chart . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠLine Data ( listOf ( outcome Line DataSet , Ġincome Line DataSet )) Ġ// å¡« åħħ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () Ġ// åĪ·æĸ° ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ é¥ ¼ åĽ¾ åĽºå®ļ è®¾ç½® ĊĠĠĠĠĠĠĠ Ġval Ġpie DataSet Ġ= ĠP ie DataSet ( m Analyze ViewModel . generate Empty Entries For Pie Chart (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslice Space Ġ= Ġ 1 f Ġ// éĹ´ éļĶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Value Position Ġ= ĠP ie DataSet . Value Position . OUT SIDE _ S LIC E Ġ// Ġæı ı è¿° æĸĩåŃĹ åľ¨ å¤ĸ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Colors ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# FF CC 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# 9 9 CC FF "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# ffc 6 ff "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# FF 9 9 9 9 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# CCCCFF "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# a acc 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpie Data Ġ= ĠP ie Data ( pie DataSet ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue Formatter ( Percent Formatter ( m Binding . pie Chart )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Values ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetValue Text Size ( 1 2 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Binding . pie Chart . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Use Percent Values ( true ) Ġ// Ġ çĻ¾ åĪĨ æ¯Ķ æ¨¡å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Draw Entry Labels ( false ) Ġ// Ġ éļĲèĹı label ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhole Radius Ġ= Ġ 4 5 f Ġ// ç©º å¿ĥ åįĬ å¾Ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransparent Circle Radius Ġ= Ġ 5 0 f Ġ// Ġ éĢı æĺİ åľĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Drag De cel eration Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Extra Offsets ( 0 f , Ġ 5 f , Ġ 1 0 f , Ġ 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( Color . parse Color ("# ffffff ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠLegend . Legend Horizontal Alignment . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Alignment Ġ= ĠLegend . Legend Vertical Alignment . CENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠLegend . Legend Orientation . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset No Data Text (" æļĤ æĹł æķ°æį® ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Text Ġ= Ġ" æļĤ æĹł æķ°æį® " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġpie Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Pro portion Adapter Ġ= ĠAn alyze Pro portion Adapter ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġm Binding . lv Analyze Pro portion Detail . adapter Ġ= Ġm Pro portion Adapter ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ æĮī å¹´ æŁ¥çľĭ ĊĠĠĠĠĠĠĠ Ġm Binding . analyze Type Year . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . current Type LiveData . value Ġ= ĠTYPE _ YEAR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ æĮī æľĪ æŁ¥çľĭ ĊĠĠĠĠĠĠĠ Ġm Binding . analyze Type Month . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . current Type LiveData . value Ġ= ĠTYPE _ MONTH ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æĹ¶éĹ´ ĊĠĠĠĠĠĠĠ Ġm Binding . analyze Date . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCard DatePicker Dialog . builder ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMax Time ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show Back Now ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Display Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Config . YEAR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Config . MONTH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Theme Color ( Color . parse Color ("# 0 3 A 9 F 4 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLabel Text ( year Ġ= Ġ" å¹´ ", Ġmonth Ġ= Ġ" æľĪ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Choose Ġ{ Ġmilli second Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . query Date LiveData . value Ġ= Ġmilli second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åįł æ¯Ķ ĊĠĠĠĠĠĠĠ Ġm Binding . analyze Pro portion Income . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . pro portion Type LiveData . value Ġ= ĠREC ORD _ TYPE _ IN CO ME ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Binding . analyze Pro portion Outcome . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . pro portion Type LiveData . value Ġ= ĠREC ORD _ TYPE _ OUT CO ME ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ èµ° åĬ¿ ĊĠĠĠĠĠĠĠ Ġm Binding . analyze T end ency Income . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Analyze ViewModel . t end ency Outcome Selected LiveData . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Util . show Short (" èĩ³ å°ĳ éĢīæĭ© ä¸Ģ é¡¹ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . t end ency Income Selected LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġ! this . value !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Binding . analyze T end ency Outcome . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Analyze ViewModel . t end ency Income Selected LiveData . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Util . show Short (" èĩ³ å°ĳ éĢīæĭ© ä¸Ģ é¡¹ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . t end ency Outcome Selected LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġ! this . value !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠĠĠĠĠ Ġm Binding . srl Analyze Refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . query Date LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Analyze ViewModel . apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵåīį æĮī å¹´ æŁ¥çľĭ è¿ĺæĺ¯ æĮī æľĪ æŁ¥çľĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Type LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( m Analyze ViewModel . query Date LiveData . value !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠTYPE _ YEAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Type Year . set Enable ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Type Month . set Enable ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Date . text Ġ= ĠDate Util . date 2 String ( date , ĠDate Util . YEAR _ FORMAT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . axis Maximum Ġ= Ġ 1 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . value Formatter Ġ= ĠMonth Value Formatter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Binding . line Chart . marker Ġas ĠMy Marker View ). setType ( TYPE _ YEAR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Type Year . set Enable ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Type Month . set Enable ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Date . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Util . date 2 String ( date , ĠDate Util . YEAR _ MONTH _ FORMAT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . axis Maximum Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . value Formatter Ġ= ĠDay Value Formatter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Binding . line Chart . marker Ġas ĠMy Marker View ). setType ( TYPE _ MONTH ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢļçŁ¥ æĹ¶éĹ´ åıĳçĶŁ åıĺåĮĸ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Date LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵåīį æŁ¥çľĭ æĹ¥æľŁ åıĳçĶŁ åıĺåĮĸ : æĸ°å»º fragment / éĢīæĭ© æĹ¶éĹ´ / æĮī å¹´ æŁ¥çľĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Date LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . srl Analyze Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĶ¹åıĺ æĸĩåŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . current Type LiveData . value Ġ== ĠTYPE _ YEAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Date . text Ġ= ĠDate Util . date 2 String ( date , ĠDate Util . YEAR _ FORMAT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Date . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Util . date 2 String ( date , ĠDate Util . YEAR _ MONTH _ FORMAT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĩįæĸ° æŁ¥è¯¢ æķ°æį®åºĵ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Start Ġ= ĠDate Util . getMonth Start ( query Date LiveData . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth End Ġ= ĠDate Util . getMonth End ( query Date LiveData . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget T end ency Records () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Pro portion Records () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åįł æ¯Ķ ç±»åŀĭ éĢīæĭ© ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproportion Type LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠREC ORD _ TYPE _ IN CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Pro portion Income . set Enable And Select ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Pro portion Outcome . set Enable And Select ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproportion Income Records LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġ== ĠREC ORD _ TYPE _ OUT CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Pro portion Income . set Enable And Select ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze Pro portion Outcome . set Enable And Select ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproportion Outcome Records LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ èµ° åĬ¿ ç±»åŀĭ éĢīæĭ© ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtend ency Income Selected LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze T end ency Income . set Select ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . t end ency Income Records LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Line DataSet ( RECORD _ TYPE _ IN CO ME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Line Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtend ency Outcome Selected LiveData . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . analyze T end ency Outcome . set Select ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . t end ency Outcome Records LiveData . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Line DataSet ( RECORD _ TYPE _ OUT CO ME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Line Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵ æķ°æį® è®°å½ķ åıĳéĢģ æĶ¹åıĺ æĹ¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtend ency Income Records LiveData . observe ( view Lifecycle Owner ) Ġ{ Ġbe ans Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( beans Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Util . show Short (" åĪĿå§ĭåĮĸ ä¸Ń ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( beans . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ å½ĵåīį éĢīæĭ© äºĨ æĶ¶ åħ¥ , å°± åĪ·æĸ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . t end ency Income Selected LiveData . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Empty Entries To Line DataSet ( RECORD _ TYPE _ IN CO ME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Line Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . t end ency Income Selected LiveData . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincome Line DataSet Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . line Data . getData Set ByIndex ( RECORD _ TYPE _ IN CO ME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Line DataSet . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ æľĪ æŁ¥çľĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . current Type LiveData . value Ġ== ĠTYPE _ MONTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfMonth ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . axis Maximum Ġ= Ġ 1 2 f Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . value Formatter Ġ= ĠMonth Value Formatter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfYear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe ans . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries [ it . getDate () Ġ- Ġ 1 ]. y Ġ= Ġit . get Money () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Line DataSet . add Entry ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Line Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Refresh ing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtend ency Outcome Records LiveData . observe ( view Lifecycle Owner ) Ġ{ Ġbe ans Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( beans Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Util . show Short (" åĪĿå§ĭåĮĸ ä¸Ń ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( beans . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . t end ency Outcome Selected LiveData . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Empty Entries To Line DataSet ( RECORD _ TYPE _ OUT CO ME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Line Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . t end ency Outcome Selected LiveData . value !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutcome Line DataSet Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . line Data . getData Set ByIndex ( RECORD _ TYPE _ OUT CO ME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutcome Line DataSet . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . current Type LiveData . value Ġ== ĠTYPE _ MONTH ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . axis Maximum Ġ= ĠDate Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! ). toFloat () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . value Formatter Ġ= ĠDay Value Formatter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfMonth ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . axis Maximum Ġ= Ġ 1 2 f Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . value Formatter Ġ= ĠMonth Value Formatter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfYear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe ans . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries [ it . getDate () Ġ- Ġ 1 ]. y Ġ= Ġit . get Money () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutcome Line DataSet . add Entry ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Line Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Refresh ing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproportion Income Records LiveData . observe ( view Lifecycle Owner ) Ġ{ Ġbe ans Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( beans Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Util . show Short (" åĪĿå§ĭåĮĸ ä¸Ń ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( beans . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . pro portion Type LiveData . value Ġ== ĠREC ORD _ TYPE _ IN CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Empty Entries To Pie DataSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pro portion Adapter ?. setData ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Pie Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å½ĵåīį éĢīæĭ© äºĨ æĶ¶ åħ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . pro portion Type LiveData . value Ġ== ĠREC ORD _ TYPE _ IN CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpie Chart åıªæľī ä¸ĢæĿ¡ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpie DataSet Ġ= Ġm Binding . pie Chart . data . data Set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpie DataSet . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe ans . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpie DataSet . add Entry ( Pie Entry ( it . get Money (), Ġit . get Category ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . pie Chart . center Text Ġ= Ġ" æĶ¶ åħ¥ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Pie Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pro portion Adapter ?. setData ( beans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproportion Outcome Records LiveData . observe ( view Lifecycle Owner ) Ġ{ Ġbe ans Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( beans Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Util . show Short (" åĪĿå§ĭåĮĸ ä¸Ń ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( beans . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . pro portion Type LiveData . value Ġ== ĠREC ORD _ TYPE _ OUT CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Empty Entries To Pie DataSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pro portion Adapter ?. setData ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Pie Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ å½ĵåīį éĢīæĭ© äºĨ æĶ¶ åħ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Analyze ViewModel . pro portion Type LiveData . value Ġ== ĠREC ORD _ TYPE _ OUT CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpie Chart åıªæľī ä¸ĢæĿ¡ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpie DataSet Ġ= Ġm Binding . pie Chart . data . data Set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpie DataSet . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe ans . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpie DataSet . add Entry ( Pie Entry ( it . get Money (), Ġit . get Category ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . pie Chart . center Text Ġ= Ġ" æĶ¯ åĩº " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Pie Chart Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Pro portion Adapter ?. setData ( beans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åģľæŃ¢ ä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstop Refresh ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Binding . srl Analyze Refresh . is Refresh ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . srl Analyze Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° çº¿ æ®µ åĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġnotify Line Chart Red raw () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding . line Chart . line Data . notify Data Changed () ĊĠĠĠĠĠĠĠ Ġm Binding . line Chart . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġm Binding . line Chart . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Binding . line Chart . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çº¿ æ®µ åĽ¾ ä¸Ĭ ä¸į æĺ¾ç¤º çº¿ æ®µ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġclear Line DataSet ( record Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding . line Chart . line Data . getData Set ByIndex ( record Type ). clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ æķ°æį®åºĵ æ²¡æľī æŁ¥ åĪ° æķ°æį® , å¡« åħħ ç©º çļĦæķ°æį® ç»Ļ çº¿ æ®µ åĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfill Empty Entries To Line DataSet ( record Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdataSet Ġ= Ġm Binding . line Chart . line Data . getData Set ByIndex ( record Type ) ĊĠĠĠĠĠĠĠ ĠdataSet . clear () ĊĠĠĠĠĠĠĠ Ġval Ġempty Entries Ġ= Ġif Ġ( m Analyze ViewModel . current Type LiveData . value Ġ== ĠTYPE _ MONTH ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . axis Maximum Ġ= ĠDate Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! ). toFloat () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . value Formatter Ġ= ĠDay Value Formatter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfMonth ( Date Util . get Days In Month ( m Analyze ViewModel . query Date LiveData . value !! )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . axis Maximum Ġ= Ġ 1 2 f Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . line Chart . xAxis . value Formatter Ġ= ĠMonth Value Formatter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Analyze ViewModel . generate Empty Entries OfYear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġempty Entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdataSet . add Entry ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Pie Chart Red raw () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Binding . pie Chart . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . notify Data Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Empty Entries To Pie DataSet () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdataSet Ġ= Ġm Binding . pie Chart . data . data Set ĊĠĠĠĠĠĠĠ ĠdataSet . clear () ĊĠĠĠĠĠĠĠ ĠdataSet . add Entry ( m Analyze ViewModel . generate Empty Entries For Pie Chart ()[ 0 ]) ĊĠĠĠĠĠĠĠ Ġm Binding . pie Chart . center Text Ġ= Ġ" æļĤ æĹł æķ°æį® " ĊĠĠĠ Ġ} Ċ }