package Ġeu . ye ger . r 6 _ stats . ui . stats Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle .* Ċ import Ġeu . ye ger . r 6 _ stats . repository . F avorites Repository Ċ import Ġeu . ye ger . r 6 _ stats . repository . Player Repository Ċ import Ġkotlinx . coroutines . Coroutine ExceptionHandler Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠStats ViewModel ( application : ĠApplication , Ġval Ġplayer Id : ĠString ?) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġplayer Repository Ġ= ĠPlayer Repository ( application , Ġplayer Id ) ĊĠĠĠ Ġprivate Ġval Ġfavor ites Repository Ġ= ĠF avorites Repository ( application ) ĊĊĠĠĠ Ġval Ġplayer Ġ= Ġplayer Repository . current Player ĊĠĠĠ Ġval Ġhas Player Ġ= ĠTransform ations . map ( player ) Ġ{ Ġit Ġ!== Ġnull Ġ} ĊĊĠĠĠ Ġval Ġis Favorite Ġ= Ġfavor ites Repository . is Favorite ( player Id ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ refresh ing Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġrefresh ing : ĠLive Data < Boolean > Ġ= ĠTransform ations . map (_ refresh ing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit Ġ&& Ġplayer Id Ġ!== Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ network Exception Action Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġval Ġnetwork Exception Action : ĠLive Data < String > Ġ= Ġ_ network Exception Action ĊĊĠĠĠ Ġprivate Ġval Ġnetwork ExceptionHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġexception Ġ-> ĊĠĠĠĠĠĠĠ Ġ_ refresh ing . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ_ network Exception Action . value Ġ= Ġexception . message Ġ?: Ġ" Failed Ġto Ġfetch Ġprofile " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( network ExceptionHandler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ refresh ing . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Repository . fetch Player () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ refresh ing . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Favorite Toggle d () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Favorite . value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavor ites Repository . remove From F avorites ( player Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavor ites Repository . addTo F avorites ( player Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Network Exception Action Completed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ network Exception Action . value Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFactory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplayer Id : ĠString ? ĊĠĠĠ Ġ) Ġ: ĠViewModel Provider . Factory Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Stats ViewModel :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStats ViewModel ( application , Ġplayer Id ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unable Ġto Ġconstruct Ġview model ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }