package Ġcom . inverse . un official . prox ert v . base Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġrx . Observable Ċ import Ġrx . subjects . Publish Subject Ċ import Ġrx . subjects . Serialized Subject Ċ Ċ abstract Ġclass ĠUser Settings Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġchange Subject Ġ= ĠSerialized Subject ( Publish Subject . create < User >()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOb serve Ġchanges Ġto Ġthe Ġuser Ġaccount ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġobserve Account (): ĠObservable < User > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchange Subject ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġusername Ġand Ġpassword . ĊĠĠĠĠ Ġ* Ġ@ param Ġusername Ġthe Ġusername ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġthe Ġpassword ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Account ( username : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUser ( username , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġnotify Change () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġuser Ġname , Ġpassword Ġand Ġtoken ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear User () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUser ( null , Ġnull ) ĊĠĠĠĠĠĠĠ ĠsetUser Token ( null ) ĊĠĠĠĠĠĠĠ Ġnotify Change () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Subject . onNext ( getUser ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġusername Ġand Ġpassword ĊĠĠĠĠ Ġ* Ġ@ param Ġusername Ġthe Ġusername ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġthe Ġpassword ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun ĠsetUser ( username : ĠString ?, Ġpassword : ĠString ?) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġuser Ġtoken ĊĠĠĠĠ Ġ* Ġ@ param Ġuser Token Ġthe Ġuser Ġtoken ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun ĠsetUser Token ( user Token : ĠString ?) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġ{@ link ĠUser } Ġobject ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcurrent Ġuser ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun ĠgetUser (): ĠUser ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrent Ġuser Ġtoken ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġuser Ġtoken ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun ĠgetUser Token (): ĠString ? Ċ } ĊĊ Ċ /** Ċ Ġ* ĠUser Ġsettings Ġfor Ġstoring Ġname Ġpassword Ġand Ġtoken Ċ Ġ*/ Ċ class ĠUser Settings Prefs ( private Ġval Ġprefs : ĠSharedPreferences ) Ġ: ĠUser Settings () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠsetUser ( username : ĠString ?, Ġpassword : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( KEY _ USERNAME , Ġusername ). putString ( KEY _ PASSWORD , Ġpassword ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetUser Token ( user Token : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . edit (). putString ( KEY _ USER _ TOKEN , Ġuser Token ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser (): ĠUser ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġprefs . getString ( KEY _ USERNAME , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġprefs . getString ( KEY _ PASSWORD , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( username Ġ!= Ġnull Ġ&& Ġpassword Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUser ( username , Ġpassword , Ġprefs . getString ( KEY _ USER _ TOKEN , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetUser Token (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprefs . getString ( KEY _ USER _ TOKEN , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ USERNAME Ġ= Ġ" KEY _ USERNAME " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PASSWORD Ġ= Ġ" KEY _ PASSWORD " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ USER _ TOKEN Ġ= Ġ" KEY _ USER _ TOKEN " ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠData Ġclass Ġrepresenting Ġa Ġuser Ċ Ġ*/ Ċ data Ġclass ĠUser ( ĊĠĠĠĠĠĠĠ Ġval Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġuser Token : ĠString ? Ċ )