package Ġcom . un ib g . mage ll an us . app . user . view model Ċ Ċ import Ġandroidx . lifecycle .* Ċ import Ġcom . un ib g . mage ll an us . app . auth . Authentication Provider Ċ import Ġcom . un ib g . mage ll an us . app . user . model . User Account API Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . HttpException Ċ Ċ class ĠUser Profile ViewModel ( ĊĠĠĠ Ġprovider : ĠAuthentication Provider , ĊĠĠĠ Ġprivate Ġval Ġapi : ĠUser Account API Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval ĠcurrentUser Ġ= ĠUserInfo LiveData ( provider ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentUser . observe Fore ver Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ sync ed Preferences : ĠMutable LiveData < Map < String , ĠAny >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġsynced Preferences : ĠLive Data < Map < String , ĠAny > ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ sync ed Preferences ĊĊĠĠĠ Ġprivate Ġval Ġ_ successfully Deleted : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġsuccessfully Deleted : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ successfully Deleted ĊĊĠĠĠ Ġprivate Ġval Ġ_ errorMessage : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval ĠerrorMessage : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ errorMessage ĊĊĠĠĠ Ġsuspend Ġfun Ġsave Preferences ( prefs : ĠMap < String , ĠAny ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapi . update Preferences ( prefs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Preferences () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sync ed Preferences . value Ġ= Ġapi . get Preferences () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ errorMessage . value Ġ= Ġe . message ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete () Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi . delete () ĊĠĠĠĠĠĠĠ Ġ_ successfully Deleted . value Ġ= Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ errorMessage . value Ġ= Ġresponse . error Body (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFactory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprovider : ĠAuthentication Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapi : ĠUser Account API ĊĠĠĠ Ġ) Ġ: ĠViewModel Provider . New Instance Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel > Ġcreate ( model Class : ĠClass < T >): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Profile ViewModel ( provider , Ġapi ) Ġas ĠT ĊĠĠĠ Ġ} Ċ Ċ }