package Ġcom . rap ids os . em ergency datas dk . auth . login Ċ Ċ import Ġcom . rap ids os . em ergency datas dk . data . network _ response . Session Token Ċ import Ġcom . rap ids os . em ergency datas dk . data . user . User Ċ import Ġcom . rap ids os . em ergency datas dk . internal . api . E mg Data Api Ċ import Ġcom . rap ids os . em ergency datas dk . internal . helpers . dependency _ injection . Injector Ċ import Ġcom . rap ids os . em ergency datas dk . internal . helpers . network . TOO _ MAN Y _ REQUEST _ CODE Ċ import Ġcom . rap ids os . em ergency datas dk . internal . helpers . network . UN AUTHORIZ ED _ RESPONSE _ CODE Ċ import Ġcom . rap ids os . em ergency datas dk . internal . preferences . E mg Data Preferences Ċ import Ġcom . rap ids os . em ergency datas dk . sdk . Sdk Initi ated Validator Ċ import Ġio . reactivex . Maybe Ċ import Ġio . reactivex . Observer Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġretrofit 2 . Response Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠSup p lies Ġsession Ġtokens Ġto Ġbe Ġused Ġwhile Ġusing Ġsome Ġof Ġthe Ġother ĠR AIN ĠS dk Ġclasses . Ċ Ġ* Ċ Ġ* ĠSession Ġtokens Ġare Ġshort Ġli ved Ġ( 1 Ġhour ) Ġso Ġa Ġnew Ġone Ġwill Ġbe Ġrequired Ġwhen Ġthe Ġcurrent Ġone Ċ Ġ* Ġexpires . Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġprivate Ġfun Ġget Session Token () Ġ{ Ċ Ġ* ĠĠĠĠĠĠ Ġval Ġsession Manager Ġ= ĠSession Manager () Ċ Ġ* ĠĠĠĠĠĠ Ġsession Manager . getSession Token ( username , Ġpassword ) Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( object Ġ: ĠMaybe Observer < Session Token ?> Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Subscribe ( d : ĠDis posable ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalled Ġas Ġsoon Ġas Ġthe Ġmethod Ġis Ġcalled . ĠThe Ġdis posable Ġis Ġused Ġto Ġstop Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġrequest Ġat Ġany Ġgiven Ġtime Ġif Ġneeded Ġby Ġcalling Ġd . dispose () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( session Token : ĠSession Token ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalled Ġwhen Ġa Ġsuccessful Ġresponse Ġhas Ġbeen Ġreturned . ĠThe ĠSession Token Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġbe Ġused Ġis Ġreturned . Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalled Ġwhen Ġan Ġerror Ġoccurs Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalled Ġonce Ġthe Ġdeferred Ġcomputation Ġcompletes Ġnormally . Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ author ĠJ os ias ĠS ena Ċ Ġ* Ġ@ see ĠSession Token Ċ Ġ* Ġ@ see ĠUser Ċ Ġ*/ Ċ class ĠSession Manager Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġapi : ĠE mg Data Api ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġpreferences : ĠE mg Data Preferences ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠInject or . component ?. inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSup p lies Ġa Ġsession Ġtoken Ġfor Ġthe Ġuser Ġprovided . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġusername Ġthe Ġusers Ġusername ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġthe Ġusers Ġpassword ĊĠĠĠĠ Ġ* Ġ@ return ĠAn Ġ[ Observer ] Ġthat Ġgets Ġnotified Ġwhen Ġthe Ġuser Ġhas Ġbeen Ġsuccessfully ĊĠĠĠĠ Ġ* Ġlogin ĠUser Ġor Ġif Ġthere Ġis Ġan Ġerror Ġwhen Ġtrying Ġto Ġlog Ġthe Ġuser Ġin ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Session Token ( username : ĠString , Ġpassword : ĠString ): ĠMaybe < Session Token > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapi . getSession Token ( username Ġ= Ġusername , Ġpassword Ġ= Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġpreferences . getClient Id (), Ġclient Secret Ġ= Ġpreferences . getClient Secret ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS dk Initi ated Validator . check If SDK IsInitialized (" Error Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" logging Ġuser Ġin . ĠPlease Ġmake Ġsure Ġthe ĠSDK Ġhas Ġbeen Ġinitialized .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġfilter ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . body () Ġas ĠSession Token Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter ( response : ĠResponse < Session Token >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Body Ġ= Ġresponse . error Body ()?. string () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġresponse . message () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġresponse . code () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU NA UTH ORIZ ED _ RESPONSE _ CODE Ġ-> Ġthrow ĠException (" Invalid Ġuser Ġcredentials .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTO O _ MAN Y _ REQUEST _ CODE Ġ-> Ġthrow ĠException (" Too Ġmany Ġrequests . ĠPlease Ġtry Ġagain Ġlater .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Login Ġerror : Ġ$ code Ġ$ message Ġ$ error Body ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }