package Ġnet . y uz um one . too tr us . data . prefs Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . MODE _ PRIVATE Ċ import Ġandroid . content . SharedPreferences Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ interface ĠPreference Storage Ġ{ ĊĠĠĠ Ġvar Ġinstance Name : ĠString ? ĊĠĠĠ Ġvar ĠaccessToken : ĠString ? ĊĠĠĠ Ġvar ĠuserId : ĠLong Ċ } Ċ Ċ class ĠShared Preference Storage Ġ@ Inject Ġconstructor ( context : ĠContext ) Ġ: ĠPreference Storage Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġprefs Ġ= Ġcontext . application Context . get SharedPreferences ( PRE FS _ NAME , ĠMODE _ PRIVATE ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REF S _ NAME Ġ= Ġ" net . y uz um one . too tr us . prefs " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REF _ INSTANCE _ NAME Ġ= Ġ" pref _ instance _ name " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REF _ ACCESS _ TOKEN Ġ= Ġ" pref _ access _ token " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REF _ USER _ ID Ġ= Ġ" pref _ user _ id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġinstance Name Ġby ĠString Preference ( prefs , ĠP REF _ INSTANCE _ NAME , Ġnull ) ĊĠĠĠ Ġoverride Ġvar ĠaccessToken Ġby ĠString Preference ( prefs , ĠP REF _ ACCESS _ TOKEN , Ġnull ) ĊĠĠĠ Ġoverride Ġvar ĠuserId Ġby ĠLong Preference ( prefs , ĠP REF _ USER _ ID , Ġ 0 L ) Ċ } Ċ Ċ class ĠString Preference ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpref : ĠSharedPreferences , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠString ? Ċ ) Ġ: ĠRead Write Property < Any , ĠString ?> Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property < *> ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpref . getString ( key , ĠdefaultValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny , Ġproperty : ĠK Property <* >, Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpref . edit (). putString ( key , Ġvalue ). apply () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLong Preference ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpref : ĠSharedPreferences , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠLong Ċ ) Ġ: ĠRead Write Property < Any , ĠLong > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property < *> ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpref . getLong ( key , ĠdefaultValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny , Ġproperty : ĠK Property <* >, Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpref . edit (). put Long ( key , Ġvalue ). apply () ĊĠĠĠ Ġ} Ċ }