package Ġinfo . dv kr . switch movie . data . settings Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġcom . el vis he w . x log . X Log Ċ import Ġcom . iron z . binary prefs . Preferences Ċ import Ġcom . iron z . binary prefs . Preferences Editor Ċ import Ġcom . iron z . binary prefs . serialization . serializer . persist able . Persist able Ċ import Ġinfo . dv kr . switch movie . domain . settings . Settings Ċ import Ġinfo . dv kr . switch movie . domain . utils . getLog Ċ import Ġjava . time . LocalDate Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property ĊĊ Ċ @ Suppress Lint (" New Api ") Ċ class ĠSettings Impl ( preferences : ĠPreferences ) Ġ: ĠSettings Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġlast Movie Update Date : ĠLong Ġby Ġbind Preference ( ĊĠĠĠĠĠĠĠ Ġpreferences , Ġ" KEY _ LAST _ MOV IE _ UPDATE _ DATE ", ĠLocalDate . now (). minus Days ( 2 ). to Epoch Day () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠX Log . d ( getLog (" Init ", Ġ" Inv oked ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T > Ġbind Preference ( preferences : ĠPreferences , Ġkey : ĠString , ĠdefaultValue : ĠT ): ĠRead Write Property < Any , ĠT > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( defaultValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> ĠPreference Delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences , Ġkey , ĠdefaultValue , ĠPreferences :: getBoolean , ĠPreferences Editor :: put Boolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> ĠPreference Delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences , Ġkey , ĠdefaultValue , ĠPreferences :: getInt , ĠPreferences Editor :: put Int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> ĠPreference Delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences , Ġkey , ĠdefaultValue , ĠPreferences :: getLong , ĠPreferences Editor :: put Long ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> ĠPreference Delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences , Ġkey , ĠdefaultValue , ĠPreferences :: get Float , ĠPreferences Editor :: put Float ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> ĠPreference Delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences , Ġkey , ĠdefaultValue , ĠPreferences :: getString , ĠPreferences Editor :: putString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPers ist able Ġ-> ĠPreference Delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences , Ġkey , ĠdefaultValue , ĠPreferences :: get Persist able , ĠPreferences Editor :: put Persist able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unsupported Ġpreference Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠRead Write Property < Any , ĠT > ĊĊĠĠĠ Ġprivate Ġclass ĠPreference Delegate < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpreferences : ĠPreferences , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠT , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgetter : ĠPreferences .( String , ĠT ) Ġ-> ĠT , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsetter : ĠPreferences Editor .( String , ĠT ) Ġ-> ĠPreferences Editor ĊĠĠĠ Ġ) Ġ: ĠRead Write Property < Any , ĠT > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property <* >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . getter ( key , ĠdefaultValue ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . edit (). setter ( key , Ġvalue ). commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }