package Ġeu . v mp ay . owl quiz . activities . account Ċ Ċ import Ġandroidx . databinding . Observable Boolean Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġeu . v mp ay . owl quiz . R Ċ import Ġeu . v mp ay . owl quiz . repository .* Ċ import Ġeu . v mp ay . owl quiz . tools . SharedPreferences Ċ import Ġeu . v mp ay . owl quiz . utils . Snackbar Message Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers ĊĊ Ċ class ĠAccount ViewModel ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplayers Repository : ĠP layers Repository , Ġprivate Ġval Ġteams Repository : ĠTeams Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences , Ġprivate Ġval Ġprocess Scheduler : ĠScheduler Ġ= ĠS chedulers . io (), ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġandroid Scheduler : ĠScheduler Ġ= ĠAndroid Schedulers . main Thread ()) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġare Player Details Shown Ġ= ĠObservable Boolean ( false ) ĊĊĠĠĠ Ġval Ġs urname Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġname Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġpat ronym ic Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġplayer Id Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġvar Ġplayers Ġ= ĠMed iator LiveData < List < Player >>() ĊĊĠĠĠ Ġval Ġplayer Ġ= ĠObservable Field < Player >() ĊĠĠĠ Ġval Ġplayers Rating Ġ= ĠObservable Field < Player Rating >() ĊĠĠĠ Ġval Ġteam Ġ= ĠObservable Field < Team >() ĊĠĠĠ Ġval Ġteam Rating Ġ= ĠObservable Field < Team Rating >() ĊĊĠĠĠ Ġval Ġerror Text Ġ= ĠObservable Field < String >() ĊĠĠĠ Ġval Ġis Error Visible Ġ= ĠObservable Boolean ( false ) ĊĠĠĠ Ġvar Ġsn ackbar Message Ġ= ĠSn ackbar Message () ĊĊĠĠĠ Ġvar Ġactual Player Id : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġbook marked Player Id : ĠLong Ġ= Ġshared Preferences . read Player Id () ĊĠĠĠ Ġvar Ġcomposite Disposable : ĠComposite Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( book marked Player Id Ġ!= Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Player And Team Details ( book marked Player Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Fab Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġare Player Details Shown . get () Ġ-> Ġare Player Details Shown . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id . get (). isNull OrEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠlistOf ( surname . get (), Ġname . get (), Ġpat ronym ic . get ()). map Ġ{ Ġit Ġ?: Ġ"" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Players Details ( list [ 0 ], Ġlist [ 1 ], Ġlist [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġload Players Details ( player Id . get (). toString (). to Long ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Players Details ( surname : ĠString Ġ= Ġ"", Ġname : ĠString Ġ= Ġ"", Ġpat ronym ic : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( players Repository . search For Player ( surname , Ġname , Ġpat ronym ic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( android Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Visible . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayers . value Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . no _ players _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . network _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Players Details ( player Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( players Repository . getPlayer ( player Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( android Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Visible . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayers . value Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . no _ players _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . network _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Bookmark Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġare Player Details Shown . get () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook marked Player Id Ġ= Ġactual Player Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . write Player Id ( actual Player Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar Message . setValue ( R . string . book marked _ success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbook marked Player Id Ġ== Ġ 0 L Ġ-> Ġsn ackbar Message . setValue ( R . string . bookmark _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġload Player And Team Details ( book marked Player Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Player And Team Details ( player Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( players Repository . getPlayer ( player Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( android Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Player Rating And Team Details ( result [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . network _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Player Rating And Team Details ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Player Id Ġ= Ġplayer . id player ĊĠĠĠĠĠĠĠ Ġload Player Rating ( player ) ĊĠĠĠĠĠĠĠ Ġload Player Teams Details ( player ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Player Teams Details ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġteam : ĠTeam ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġthis . team . set ( null ) ĊĠĠĠĠĠĠĠ Ġthis . team Rating . set ( null ) ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( players Repository . getPlayer Team ( player . id player ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġplayer Teams Ġ-> Ġteams Repository . get Team ById ( player Teams [ player Teams . last Index ]. id team ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġteams : ĠList < Team > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġteam Ġ= Ġteams [ teams . last Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġteams Repository . get Team Ratings ( teams [ teams . last Index ]. id team ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( android Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result . isEmpty () Ġ&& Ġteam Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . team . set ( team ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . team Rating . set ( result [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . no _ team _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . server _ internal _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Player Rating ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( players Repository . getPlayer Rating ( player . id player ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( android Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . player . set ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . players Rating . set ( result [ result . last Index ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Visible . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġare Player Details Shown . set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . network _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( errorMessage Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Error Visible . set ( true ) Ċ // ĠĠĠĠĠĠĠ Ġerror Text . set ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġsn ackbar Message . setValue ( errorMessage Id ) ĊĠĠĠ Ġ} Ċ }