package Ġorg . step ik . android . ex ams . data . preference Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . preference . Preference Manager Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġio . reactivex . Single Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . DateTime Zone Ċ import Ġorg . step ik . android . ex ams . api . auth . OAuth Response Ċ import Ġorg . step ik . android . ex ams . data . model . Account Credentials Ċ import Ġorg . step ik . android . ex ams . data . model . Profile Ċ import Ġorg . step ik . android . ex ams . di . App Singleton Ċ import Ġjavax . inject . Inject Ċ Ċ @ App Singleton Ċ class ĠShared Preference Helper Ċ @ Inject Ċ constructor ( context : ĠContext ) Ġ: ĠShared Preference Provider , ĠAuth Preferences , ĠProfile Preferences Ġ{ ĊĠĠĠ Ġoverride Ġval Ġshared Preferences : ĠSharedPreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson () ĊĊĠĠĠ Ġoverride Ġvar Ġo Auth Response : ĠOAuth Response ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠgetString ( O AUTH _ RESPONSE ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( json , ĠOAuth Response :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . toJson ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠDateTime . now ( DateTime Zone . UTC ). millis ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave String ( O AUTH _ RESPONSE , Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Response Deadline Ġ= ĠcurrentTime Ġ+ Ġ( response . expires In Ġ- Ġ 5 0 ) Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġauth Response Deadline : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Long ( O AUTH _ RESPONSE _ DEAD LINE ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ= Ġsave Long ( O AUTH _ RESPONSE _ DEAD LINE , Ġvalue ) ĊĊĠĠĠ Ġoverride Ġvar Ġprofile : ĠProfile ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠgetString ( PROFILE ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( json , ĠProfile :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( profile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profile Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . toJson ( profile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave String ( PROFILE , Ġjson ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Id Ġ= Ġprofile . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġprofile Id : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Long ( PROFILE _ ID ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ= Ġsave Long ( PROFILE _ ID , Ġvalue ) ĊĊĠĠĠ Ġoverride Ġvar Ġfake User : ĠAccount Credentials ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠgetString ( FA KE _ USER )?. let Ġ{ Ġgson . fromJson ( it , ĠAccount Credentials :: class . java ) Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġvalue ?. let Ġ{ Ġgson . toJson ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave String ( FA KE _ USER , Ġjson ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġis Not First Time : ĠBoolean Ġby Ġpreference ( NOT _ FIRST _ TIME ) ĊĠĠĠ Ġvar Ġfirst Loading : ĠBoolean Ġby Ġpreference ( FIRST _ LOADING ) ĊĊĠĠĠ Ġfun Ġremove Profile () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( PROFILE ) ĊĠĠĠĠĠĠĠ Ġremove ( PROFILE _ ID ) ĊĠĠĠĠĠĠĠ Ġremove ( O AUTH _ RESPONSE ) ĊĠĠĠĠĠĠĠ Ġremove ( O AUTH _ RESPONSE _ DEAD LINE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Fake User (): ĠSingle < Boolean > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . from Callable Ġ{ Ġshared Preferences . contains ( FA KE _ USER ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Fake User () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( FA KE _ USER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset Auth Response Deadline () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove ( O AUTH _ RESPONSE _ DEAD LINE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Boolean ( name : ĠString , Ġdata : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preferences [ name ] Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave String ( name : ĠString , Ġdata : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preferences [ name ] Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Long ( name : ĠString , Ġdata : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preferences [ name ] Ġ= Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Long ( name : ĠString , Ġdelta : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġshared Preferences . get < Long >( name ) Ġ+ Ġdelta ĊĠĠĠĠĠĠĠ Ġshared Preferences [ name ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetString ( name : ĠString ): ĠString ? Ġ= Ġshared Preferences [ name ] ĊĊĠĠĠ Ġfun Ġget Long ( name : ĠString ): ĠLong Ġ= Ġshared Preferences [ name ] ĊĊĠĠĠ Ġfun Ġget Boolean ( name : ĠString ): ĠBoolean Ġ= Ġshared Preferences [ name ] ĊĊĠĠĠ Ġfun Ġremove ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit (). remove ( name ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent UserId () Ġ= Ġprofile ?. id ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠO AUTH _ RESPONSE Ġ= Ġ" oauth _ response " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠO AUTH _ RESPONSE _ DEAD LINE Ġ= Ġ" oauth _ response _ deadline " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPRO FILE Ġ= Ġ" profile " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPRO FILE _ ID Ġ= Ġ" profile _ id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT _ FIRST _ TIME Ġ= Ġ" not _ first _ time " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFIRST _ LOADING Ġ= Ġ" first _ loading " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFIRST _ TIME _ ADAP TI VE Ġ= Ġ" first _ time _ adaptive " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFA KE _ USER Ġ= Ġ" fake _ user " ĊĠĠĠ Ġ} Ċ Ċ }