package Ġfr . xg ou chet . package explorer . core . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġfr . xg ou chet . package explorer . app list . sort . App Sort Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* ĠThis Ġprovide Ġfield Ġdeleg ates Ġto Ġease Ġthe Ġlink Ġbetween Ġa Ġview Ġand Ġa Ġclass Ċ Ġ* Ċ Ġ* Ġ@ author ĠX avier ĠF . ĠG ou chet Ċ Ġ*/ Ċ object ĠNotebook Ġ{ ĊĊĠĠĠ Ġfun Ġ< P Ġ: ĠContext Holder > Ġnotebook ( key : ĠString , Ġdefault : ĠBoolean ): ĠRead Write Property < P , ĠBoolean > Ġ= ĠBoolean Page ( key , Ġdefault ) ĊĊĠĠĠ Ġfun Ġ< P Ġ: ĠContext Holder > Ġnotebook ( key : ĠString , Ġdefault : ĠInt ): ĠRead Write Property < P , ĠInt > Ġ= ĠInt Page ( key , Ġdefault ) ĊĊĠĠĠ Ġfun Ġ< P Ġ: ĠContext Holder > Ġnotebook ( key : ĠString , Ġdefault : ĠString ): ĠRead Write Property < P , ĠString > Ġ= ĠString Page ( key , Ġdefault ) ĊĊĠĠĠ Ġfun Ġ< P Ġ: ĠContext Holder > Ġnotebook ( key : ĠString , Ġdefault : ĠApp Sort ): ĠRead Write Property < P , ĠApp Sort > Ġ= ĠApp Sort Page ( key , Ġdefault ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġobject Ġwhich Ġcan Ġprovide Ġa Ġcontext Ċ Ġ*/ Ċ interface ĠContext Holder Ġ{ ĊĠĠĠ Ġval Ġcontext : ĠContext Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġgeneric ĠRead ĠWrite Ġproperty Ġreading Ġand Ġsaving Ġto / from Ġthe Ġdefault Ġshared Ġpreferences Ċ Ġ*/ Ċ abstract Ġclass ĠGeneric Page < in ĠP Ġ: ĠContext Holder , ĠT Ġ: ĠAny > Ġ: ĠRead Write Property < P , ĠT > Ġ{ ĊĠĠĠ Ġvar Ġmemoized : ĠWeak Reference < T > Ġ= ĠWeak Reference < T >( null ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠP , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmemoized . get () Ġ?: Ġget Preference Value ( get SharedPreferences ( this Ref . context )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠP , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmemoized Ġ= ĠWeak Reference ( value ) ĊĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġget SharedPreferences ( this Ref . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠ Ġsave Value ( editor , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġsave Value ( editor : ĠSharedPreferences . Editor , Ġvalue : ĠT ) ĊĊĠĠĠ Ġabstract Ġfun Ġget Preference Value ( preferences : ĠSharedPreferences ): ĠT ĊĊĠĠĠ Ġprivate Ġfun Ġget SharedPreferences ( context : ĠContext ): ĠSharedPreferences Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . get SharedPreferences ("${ context . packageName }_ preferences ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠBoolean Ġdelegate Ġreading Ġfrom Ġ/ Ġwriting Ġto Ġthe Ġdefault Ġshared Ġpreferences Ċ Ġ*/ Ċ class ĠBoolean Page < in ĠP Ġ: ĠContext Holder >( val Ġkey : ĠString , Ġval Ġdefault : ĠBoolean ) Ġ: ĠGeneric Page < P , ĠBoolean >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Preference Value ( preferences : ĠSharedPreferences ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreferences . getBoolean ( key , Ġdefault ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Value ( editor : ĠSharedPreferences . Editor , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor . put Boolean ( key , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠInt Ġdelegate Ġreading Ġfrom Ġ/ Ġwriting Ġto Ġthe Ġdefault Ġshared Ġpreferences Ċ Ġ*/ Ċ class ĠInt Page < in ĠP Ġ: ĠContext Holder >( val Ġkey : ĠString , Ġval Ġdefault : ĠInt ) Ġ: ĠGeneric Page < P , ĠInt >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Preference Value ( preferences : ĠSharedPreferences ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreferences . getInt ( key , Ġdefault ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Value ( editor : ĠSharedPreferences . Editor , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor . put Int ( key , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠString Ġdelegate Ġreading Ġfrom Ġ/ Ġwriting Ġto Ġthe Ġdefault Ġshared Ġpreferences Ċ Ġ*/ Ċ class ĠString Page < in ĠP Ġ: ĠContext Holder >( val Ġkey : ĠString , Ġval Ġdefault : ĠString ) Ġ: ĠGeneric Page < P , ĠString >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Preference Value ( preferences : ĠSharedPreferences ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreferences . getString ( key , Ġdefault ). or Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Value ( editor : ĠSharedPreferences . Editor , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor . putString ( key , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAn ĠEnum Ġdelegate Ġreading Ġfrom Ġ/ Ġwriting Ġto Ġthe Ġdefault Ġshared Ġpreferences Ċ Ġ*/ Ċ class ĠApp Sort Page < in ĠP Ġ: ĠContext Holder >( val Ġkey : ĠString , Ġval Ġdefault : ĠApp Sort ) Ġ: ĠGeneric Page < P , ĠApp Sort >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġsave Value ( editor : ĠSharedPreferences . Editor , Ġvalue : ĠApp Sort ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor . putString ( key , Ġvalue . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Preference Value ( preferences : ĠSharedPreferences ): ĠApp Sort Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġpreferences . getString ( key , Ġdefault . name ). or Empty () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApp Sort . valueOf ( name ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdefault ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ