package Ġbg . dab ul g aria . t ib ro ish . presentation . ui . profile Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġbg . dab ul g aria . t ib ro ish . R Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . organisation . IT iB ro ish Remote Repository Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . organisation . Organization Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . providers . I Logger Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . user . I User Authenticator Ċ import Ġbg . dab ul g aria . t ib ro ish . domain . user . User Ċ import Ġbg . dab ul g aria . t ib ro ish . persistence . remote . ApiException Ċ import Ġbg . dab ul g aria . t ib ro ish . presentation . base . Base Presenter Ċ import Ġbg . dab ul g aria . t ib ro ish . presentation . base . I Base Presenter Ċ import Ġbg . dab ul g aria . t ib ro ish . presentation . base . ID is posable Handler Ċ import Ġbg . dab ul g aria . t ib ro ish . presentation . main . IM ain Router Ċ import Ġbg . dab ul g aria . t ib ro ish . presentation . ui . common . Form Validator Ċ import Ġbg . dab ul g aria . t ib ro ish . presentation . ui . common . IO rg an izations Manager Ċ import Ġbg . dab ul g aria . t ib ro ish . presentation . ui . profile . Profile Constants . Companion . VIEW _ DATA _ KEY Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ Ċ interface ĠI Profile Presenter Ġ: ĠI Base Presenter < I Profile View > Ġ{ ĊĊĠĠĠ Ġfun Ġfetch UserDetails () ĊĊĠĠĠ Ġfun Ġsend ( user : ĠUser , Ġcallback : ĠI Update Profile Callback ) ĊĊĠĠĠ Ġfun Ġget Organization WithName ( organization Name : ĠString ): ĠOrganization ? ĊĊĠĠĠ Ġfun Ġget Organizations ( callback : Ġ( List < Organization > ?) Ġ-> ĠUnit ) ĊĊĠĠĠ Ġfun Ġprocess Required Field ( text : ĠString , Ġcallback : Ġ( Int ) Ġ-> ĠUnit ): ĠBoolean ĊĊĠĠĠ Ġfun Ġprocess PhoneNumber Field ( ĊĠĠĠĠĠĠĠ Ġtele phone : ĠString , ĊĠĠĠĠĠĠĠ Ġcallback : Ġ( Int ) Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠ Ġfun Ġprocess E gn Last Four Digits ( e gn : ĠString , Ġcallback : Ġ( Int ) Ġ-> ĠUnit ): ĠBoolean ĊĊĠĠĠ Ġfun Ġprocess Organization ( organization Name : ĠString , Ġcallback : Ġ( Int ) Ġ-> ĠUnit ): ĠBoolean ĊĊĠĠĠ Ġfun Ġcreate UserDetails Copy (): ĠUser ? ĊĊĠĠĠ Ġfun Ġdelete User ( callback : ĠI Delete User Callback ) ĊĊĠĠĠ Ġfun Ġnavigate To Login Screen () ĊĊĠĠĠ Ġfun Ġnavigate To Home Screen () Ċ } Ċ Ċ interface ĠI Update Profile Callback Ġ{ ĊĠĠĠ Ġfun ĠonSuccess () Ċ } Ċ Ċ interface ĠI Delete User Callback Ġ{ ĊĠĠĠ Ġfun ĠonSuccess () ĊĊĠĠĠ Ġfun ĠonError ( error : ĠString ) Ċ } Ċ Ċ class ĠProfile Presenter Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmain Router : ĠI Main Router , ĊĠĠĠ Ġdis posable Handler : ĠIDisposable Handler , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠILogger , ĊĠĠĠ Ġprivate Ġval Ġti Bro ish Remote Repository : ĠIT iB ro ish Remote Repository , ĊĠĠĠ Ġprivate Ġval Ġform Validator : ĠForm Validator , ĊĠĠĠ Ġprivate Ġval Ġorganizations Manager : ĠIO rg an izations Manager , ĊĠĠĠ Ġprivate Ġval Ġuser Authenticator : ĠI User Authenticator Ċ ) Ġ: ĠBase Presenter < I Profile View >( dis posable Handler ), ĊĠĠĠ ĠI Profile Presenter Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġview Data : ĠProfile ViewData ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠTAG : ĠString Ġ= ĠProfile Presenter :: class . java . name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfetch UserDetails () Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Details Ġ= Ġti Bro ish Remote Repository . getUser Details () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data ?. user Details Ġ= Ġuser Details ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. on Profile Fetch Success ( user Details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . e ( TAG , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. on Profile Fetch Fail ( R . string . profile _ generic _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( user : ĠUser , Ġcallback : ĠI Update Profile Callback ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġti Bro ish Remote Repository . update UserDetails ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Organization WithName ( organization Name : ĠString ): ĠOrganization ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġorganizations Manager . get Organization WithName ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Name , Ġview Data ?. organizations Data ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Organizations ( callback : Ġ( List < Organization > ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Data ?. organizations Data !!. isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorganizations Manager . load Organizations Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data ?. organizations Data ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data ?. organizations Data ?. addAll ( it !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcallback ( view Data ?. organizations Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Required Field ( text : ĠString , Ġcallback : Ġ( Int ) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġform Validator . process Required Field ( text , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess PhoneNumber Field ( telephone : ĠString , Ġcallback : Ġ( Int ) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġform Validator . process PhoneNumber Field ( telephone , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess E gn Last Four Digits ( e gn : ĠString , Ġcallback : Ġ( Int ) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠ Ġreturn Ġform Validator . process E gn Last Four Digits ( e gn , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Organization ( organization Name : ĠString , Ġcallback : Ġ( Int ) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġform Validator . process Organization ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data ?. organizations Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate UserDetails Copy (): ĠUser ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview Data ?. user Details ?. copy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete User ( callback : ĠI Delete User Callback ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġti Bro ish Remote Repository . delete User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Authenticator . logout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception Ġis ĠApiException Ġ&& Ġexception . message Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError ( exception . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnavigate To Login Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Router . show Login Screen () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnavigate To Home Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Router . show Home Screen () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Restore Data ( bundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Data Ġ= Ġbundle ?. get Parcelable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVIEW _ DATA _ KEY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠProfile ViewData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġorganizations Data = Ġ*/ Ġmutable ListOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġuser Details = Ġ*/ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon SaveData ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Parcelable ( VIEW _ DATA _ KEY , Ġview Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Ġ= ĠProfile ViewData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġorganizations Data = Ġ*/ Ġmutable ListOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġuser Details = Ġ*/ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ