package Ġcom . kin . eco system . balance . presenter Ċ Ċ import Ġcom . kin . eco system . balance . view . IB alance View Ċ import Ġcom . kin . eco system . base . Base Presenter Ċ import Ġcom . kin . eco system . common . Observer Ċ import Ġcom . kin . eco system . common . model . Balance Ċ import Ġcom . kin . eco system . core . data . blockchain . Blockchain Source Ċ import Ġcom . kin . eco system . core . data . order . Order DataSource Ċ import Ġcom . kin . eco system . core . network . model . Order Ċ Ċ class ĠBalance Presenter ( private Ġval Ġblockchain Source : ĠBlock chain Source , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġorder Repository : ĠOrder DataSource ) Ġ: ĠBase Presenter < IB alance View >(), ĠI Balance Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbalance Observer : ĠObserver < Balance >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġorder Observer : ĠObserver < Order >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġpending Order Count : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( view : ĠI Balance View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( view ) ĊĠĠĠĠĠĠĠ Ġadd Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Balance Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġbalance Observer Ġ= Ġobject Ġ: ĠObserver < Balance >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( balance : ĠBalance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Balance ( balance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBalance Ġis Ġbeing Ġupdated Ġbefore ĠOrder ĠCOMP LETED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Order Count Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Loading Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Balance ( balance : ĠBalance ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbalance Value Ġ= Ġbalance . amount . toInt () ĊĠĠĠĠĠĠĠ Ġview ?. update Balance ( balance Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Order Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġorder Observer Ġ= Ġobject Ġ: ĠObserver < Order >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( order : ĠOrder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( order . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder . Status . PENDING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincrement Pending Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Order Count Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Loading Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder . Status . COMPLETED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecrement Pending Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder . Status . FAILED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecrement Pending Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Order Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Loading Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Loading Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. start Loading Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Loading Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. stop Loading Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġincrement Pending Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġpending Order Count ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecrement Pending Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pending Order Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Order Count -- ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġremove Observer s () ĊĠĠĠĠĠĠĠ Ġbalance Observer Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġorder Observer Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Observer s () ĊĠĠĠĠĠĠĠ Ġcreate Observer s () ĊĠĠĠĠĠĠĠ Ġorder Observer ?. let Ġ{ Ġorder Repository . add Order Observer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbalance Observer ?. let Ġ{ Ġblockchain Source . add Balance Observer ( it , Ġtrue ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Balance Observer () ĊĠĠĠĠĠĠĠ Ġcreate Order Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġorder Observer ?. let Ġ{ Ġorder Repository . remove Order Observer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbalance Observer ?. let Ġ{ Ġblockchain Source . remove Balance Observer ( it , Ġtrue ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ