/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġ- Ġpresent ĠIn structure , ĠInc . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġcom . in structure . canvas api 2 . utils Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . SharedPreferences . Editor Ċ import Ġandroidx . annotation . Color Res Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Mutable Property 0 Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* Ġ[ Pref Manager ] Ġis Ġa Ġsmall Ġ[ SharedPreferences ] Ġwrapper Ġthat Ġaims Ġto Ġprovide Ġa Ġtype - safe , Ċ Ġ* Ġconvenient , Ġand Ġcentral ized Ġapproach Ġto Ġkey - value Ġpersistence . ĠNo Ġneed Ġto Ġdefine Ġdo z ens Ċ Ġ* Ġof Ġstring Ġconstants Ġfor Ġkey Ġnames , Ġspin Ġup Ġa Ġnew Ġ[ SharedPreferences ] Ġinstance Ġfor Ċ Ġ* Ġevery Ġget / set , Ġor Ġfigure Ġout Ġhow Ġto Ġobtain Ġa ĠContext Ġobject Ġin Ġutility Ġmethods . Ġ[ Pref Manager ] Ċ Ġ* Ġleverage s Ġthe Ġpower Ġof Ġdeleg ated Ġproperties Ġin ĠKotlin Ġto Ġspecify Ġthe Ġkey Ġname , Ġvalue Ġtype , Ċ Ġ* Ġgetter , Ġsetter , Ġand Ġdefault Ġvalue Ġin Ġa Ġsingle Ġline . Ċ Ġ* Ċ Ġ* ĠGener ally , Ġconcrete Ġimplementations Ġof Ġthis Ġclass Ġshould Ġbe Ġobjects Ġ( r ather Ġthan Ġsubclasses ), Ċ Ġ* Ġand Ġgenerally Ġthere Ġshould Ġonly Ġexist Ġone ĠPref Manager Ġper Ġbacking Ġpreference Ġfile . ĠThe Ġname Ċ Ġ* Ġof Ġpreference Ġfile Ġshould Ġbe Ġpassed Ġas Ġthe Ġsole Ġconstructor Ġparameter Ġof Ġ[ Pref Manager ]. Ċ Ġ* Ċ Ġ* ĠTo Ġcreate Ġpreference Ġproperties Ġinside Ġa Ġ[ Pref Manager ], Ġuse Ġany Ġdelegate Ġof Ġtype Ġ[ Pref ], Ġsuch Ċ Ġ* Ġas Ġ[ String Pref ], Ġ[ Boolean Pref ], Ġ[ Int Pref ], Ġetc . ĠFor Ġexample : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġvar Ġmy Pref Ġby ĠString Pref () Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠFor Ġmost Ġdelegate Ġclasses Ġthe Ġproperty Ġname Ġis Ġused Ġas Ġthe Ġ[ SharedPreferences ] Ġkey Ġname , Ġand Ċ Ġ* Ġa Ġs ane Ġvalue Ġis Ġused Ġas Ġthe Ġdefault Ġvalue . ĠIn Ġthe Ġexample Ġabove Ġthe Ġkey Ġname Ġis Ġ' my Pref ' Ċ Ġ* Ġand Ġthe Ġdefault Ġvalue Ġis Ġan Ġempty ĠString . ĠHowever , Ġmost Ġdeleg ates Ġalso Ġallow Ġyou Ġto Ġmanually Ċ Ġ* Ġspecify Ġthe Ġkey Ġname Ġand Ġdefault Ġvalue : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġvar Ġmy Pref Ġby ĠString Pref (" default Ġvalue ", Ġ" other _ key _ name ") Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠYou Ġmay Ġalso Ġcreate Ġyour Ġown Ġdelegate Ġclasses Ġby Ġsubclass ing Ġ[ Pref ] Ġand Ġimplementing Ċ Ġ* Ġthe Ġ' getValue ()' Ġand Ġ' setValue ()' Ġextension Ġfunctions . Ċ Ġ* Ċ Ġ* ĠHere Ġis Ġan Ġexample Ġof Ġa Ġcomplete , Ġsimple ĠPref Manager Ġimplementation : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġobject ĠMy Prefs Ġ: ĠPref Manager (" my _ prefs _ file _ name ") Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġvar Ġname Ġby ĠString Pref () Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġvar Ġage Ġby ĠInt Pref () Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġoverride Ġfun Ġon Clear Prefs () Ġ{ Ġ} Ġ// ĠRequired Ġoverride . ĠSee Ġ[ on Clear Prefs ] Ċ Ġ* Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠIn Ġanother Ġfile Ġyou Ġcould Ġthen Ġaccess Ġthese Ġshared Ġpreferences Ġlike Ġso : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġval Ġuser Age Ġ= ĠMy Prefs . age Ċ Ġ* Ġval ĠuserName Ġ= ĠMy Prefs . name Ċ Ġ* ĠMy Prefs . age Ġ= Ġ 2 5 Ċ Ġ* ĠMy Prefs . name Ġ= Ġ" Awesome ĠDev ĠGu y " Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ @ Suppress Lint (" Commit Pref Ed its ") Ċ abstract Ġclass ĠPref Manager ( pref FileName : ĠString ) Ġ: ĠPref Repo Interface Ġ{ ĊĊĠĠĠ Ġ/* ĠThe Ġ[ SharedPreferences ] Ġinstance Ġwhich Ġserves Ġas Ġthe Ġcore Ġpersistence Ġmechanism Ġ*/ ĊĠĠĠ Ġinternal Ġval Ġprefs Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠContext Keeper . app Context . get SharedPreferences ( pref FileName , ĠContext . MODE _ PRIVATE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠA Ġ[ SharedPreferences . Editor ] Ġinstance Ġof Ġ[ prefs ], Ġused Ġfor Ġadding / updating Ġvalues Ġ*/ ĊĠĠĠ Ġinternal Ġval Ġeditor Ġby Ġlazy Ġ{ Ġprefs . edit () Ġ} ĊĊĠĠĠ Ġval Ġdeleg ates Ġ= Ġarray ListOf < Pref <* >>() ĊĊĠĠĠ Ġinternal Ġfun Ġregister Delegate ( delegate : ĠPref <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdeleg ates Ġ+= Ġdelegate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBecause Ġ[ Pref Manager ] Ġdoes Ġnot Ġrequire Ġits Ġproperties Ġto Ġbe Ġdirectly Ġbound Ġto Ġthe Ġbacking ĊĠĠĠĠ Ġ* Ġ[ SharedPreferences ] Ġinstance Ġthrough Ġ[ Pref ] Ġdeleg ates , Ġsimply Ġclearing Ġthe Ġshared Ġprefs ĊĠĠĠĠ Ġ* Ġcannot Ġguarantee Ġthat Ġall Ġproperties Ġwill Ġbe Ġproperly Ġreset . ĠThis Ġfunction Ġprovides Ġthe ĊĠĠĠĠ Ġ* Ġopportunity Ġto Ġmanually Ġclear Ġproperties Ġor Ġperform Ġother Ġlogic , Ġand Ġwill Ġbe Ġexecuted ĊĠĠĠĠ Ġ* Ġwhen Ġeither Ġ[ clear Prefs ] Ġor Ġ[ safe Clear Prefs ] Ġare Ġinvoked . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : Ġproperties Ġpreserved Ġduring Ġthe Ġ[ safe Clear Prefs ] Ġprocess Ġwill Ġbe Ġun affected Ġby Ġany ĊĠĠĠĠ Ġ* Ġchanges Ġmade Ġduring Ġthe Ġexecution Ġof Ġthis Ġfunction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġon Clear Prefs () Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthis ĠPref Manager 's Ġbacking Ġ[ SharedPreferences ] Ġfile . ĠThis Ġis Ġonly Ġguaranteed Ġto Ġclear ĊĠĠĠĠ Ġ* Ġproperties Ġwhich Ġhave Ġbeen Ġdeleg ated Ġto Ġan Ġinstance Ġof Ġthe Ġ[ Pref ] Ġclass . ĠWhich Ġproperties ĊĠĠĠĠ Ġ* Ġare Ġreset Ġis Ġdetermined Ġby Ġthe Ġspecific Ġ[ Pref Manager ] Ġimplementation . ĊĠĠĠĠ Ġ* ĠSee Ġ[ on Clear Prefs ] Ġfor Ġmore Ġinfo . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear Prefs () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Clear Prefs () ĊĠĠĠĠĠĠĠ Ġdeleg ates . forEach Ġ{ Ġit . on Clear () Ġ} ĊĠĠĠĠĠĠĠ Ġeditor . clear (). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSup p lies Ġa Ġbase Ġlist Ġof Ġproperties Ġto Ġbe Ġpreserved Ġwhen Ġ[ safe Clear Prefs ] Ġis Ġcalled . ĊĠĠĠĠ Ġ* ĠThe Ġdefault Ġimplementation Ġprovides Ġan Ġempty Ġlist ; Ġoverride Ġthis Ġfunction Ġto Ġspecify Ġyour ĊĠĠĠĠ Ġ* Ġown Ġlist Ġof Ġproperties . ĠThe Ġlist Ġmust Ġonly Ġcontain Ġmutable Ġproperties Ġbelong ing Ġto Ġthe ĊĠĠĠĠ Ġ* ĠPref Manager Ġinstance Ġfor Ġwhich Ġthis Ġfunction Ġis Ġbeing Ġoverridden . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġkeep Base Props (): ĠList < K Mutable Property 0 < out ĠAny ? >> Ġ= Ġempty List () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthis ĠPref Manager 's Ġbacking ĠSharedPreferences Ġfile Ġwhile Ġpre serving Ġall Ġproperties ĊĠĠĠĠ Ġ* Ġpassed Ġto Ġthis Ġfunction Ġas Ġwell Ġas Ġall Ġproperties Ġprovided Ġby Ġ[ keep Base Props ]. ĠThis Ġcalls ĊĠĠĠĠ Ġ* Ġ[ clear Prefs ] Ġinternally Ġand Ġdoes Ġnot Ġguarantee Ġall Ġnon - pre served Ġproperties Ġwill Ġbe Ġreset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġsafe Clear Prefs ( keep Props : ĠList < K Mutable Property 0 < out ĠAny ? >> Ġ= Ġempty List ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġke eper Map Ġ= Ġ( keep Props Ġ+ Ġkeep Base Props ()). associate Ġ{ Ġit Ġas ĠK Mutable Property 0 < Any ?> Ġto Ġit . get () Ġ} ĊĠĠĠĠĠĠĠ Ġclear Prefs () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( property , Ġvalue ) Ġin Ġke eper Map ) Ġproperty . set ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun ĠEditor . save ( block : ĠEditor . () Ġ-> ĠUnit ) Ġ{ Ġblock (); Ġapply () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Int ( key : ĠString , Ġdefault : ĠInt ): ĠInt Ġ= Ġprefs . getInt ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun Ġput Int ( key : ĠString , Ġvalue : ĠInt ) Ġ= Ġeditor . save Ġ{ Ġput Int ( key , Ġvalue ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Boolean ( key : ĠString , Ġdefault : ĠBoolean ): ĠBoolean Ġ= Ġprefs . getBoolean ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun Ġput Boolean ( key : ĠString , Ġvalue : ĠBoolean ) Ġ= Ġeditor . save Ġ{ Ġput Boolean ( key , Ġvalue ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetString ( key : ĠString , Ġdefault : ĠString ?): ĠString ? Ġ= Ġprefs . getString ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun Ġput String ( key : ĠString , Ġvalue : ĠString ) Ġ= Ġeditor . save Ġ{ Ġput String ( key , Ġvalue ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Float ( key : ĠString , Ġdefault : ĠFloat ): ĠFloat Ġ= Ġprefs . get Float ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun Ġput Float ( key : ĠString , Ġvalue : ĠFloat ) Ġ= Ġeditor . save Ġ{ Ġput Float ( key , Ġvalue ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Long ( key : ĠString , Ġdefault : ĠLong ): ĠLong Ġ= Ġprefs . getLong ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun Ġput Long ( key : ĠString , Ġvalue : ĠLong ) Ġ= Ġeditor . save Ġ{ Ġput Long ( key , Ġvalue ) Ġ} ĊĊĠĠĠ Ġfun Ġremove ( key : ĠString ) Ġ= Ġeditor . remove ( key ). apply () Ċ } Ċ Ċ /** Ċ Ġ* ĠExtend Ġ[ Pref ] Ġto Ġcreate Ġconcrete Ġdelegate Ġclasses Ġfor Ġuse Ġin Ġ[ Pref Manager ]. ĠSub classes Ġare Ċ Ġ* Ġrequired Ġto Ġimplement Ġa Ġ[ SharedPreferences . getValue ()] Ġand Ġ[ Editor . setValue ()] Ġextension Ċ Ġ* Ġfunction Ġto Ġensure Ġdata Ġis Ġcorrectly Ġand Ġreli ably Ġsaved Ġto Ġand Ġretrieved Ġfrom Ġshared Ġprefs . Ċ Ġ* Ċ Ġ* ĠIf Ġan Ġimplementation Ġof Ġthis Ġclass Ġcaches Ġvalues Ġin Ġmemory Ġand Ġmust Ġreset Ġthem Ġwhen Ġclearing Ċ Ġ* Ġshared Ġpreferences , Ġor Ġhas Ġother Ġoperations Ġthat Ġmust Ġtake Ġplace Ġat Ġthe Ġsame Ġtime , Ġthis Ġmust Ċ Ġ* Ġbe Ġdone Ġin Ġ[ on Clear ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġdefault Ġvalue Ġthat Ġshould Ġbe Ġretrieved Ġfor Ġthe Ġdeleg ated Ġproperty Ġif Ġit Ġhas Ċ Ġ* Ġnot Ġpreviously Ġbeen Ġset . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġvalue Ġwill Ġbe Ġstored . ĠThis Ġis Ġuseful Ċ Ġ* Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġexisting Ċ Ġ* Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . ĠDefaults Ġto Ġthe Ġproperty Ġname . Ċ Ġ*/ Ċ abstract Ġclass ĠPref < T >( private Ġval ĠdefaultValue : ĠT , Ġprivate Ġval Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠRead Write Property < Pref Manager , ĠT > Ġ{ ĊĊĠĠĠ Ġopen Ġoperator Ġfun Ġprovide Delegate ( this Ref : ĠPref Manager , Ġprop : ĠK Property < *> ): ĠRead Write Property < Pref Manager , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis Ref . register Delegate ( this ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠT ): ĠT ĊĠĠĠ Ġabstract Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠT ): ĠEditor ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠPref Manager , Ġproperty : ĠK Property < *> ): ĠT Ġ= Ġthis Ref . prefs . getValue ( key Name Ġ?: Ġproperty . name , ĠdefaultValue ) ĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠPref Manager , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ= Ġthis Ref . editor . setValue ( key Name Ġ?: Ġproperty . name , Ġvalue ). apply () ĊĠĠĠ Ġabstract Ġfun Ġon Clear () Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ String ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġan Ġempty ĠString . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠString Pref ( defaultValue : ĠString Ġ= Ġ"", Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < String >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠString ): ĠString Ġ= ĠgetString ( key , Ġdefault ) Ġ?: Ġdefault ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠString ): ĠEditor Ġ= Ġput String ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ String ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġan Ġempty ĠString . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠN String Pref ( defaultValue : ĠString ? Ġ= Ġnull , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < String ? >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠString ?): ĠString ? Ġ= ĠgetString ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠString ?): ĠEditor Ġ= Ġput String ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ String ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġan Ġempty ĠString . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠString Set Pref ( defaultValue : ĠSet < String > Ġ= Ġset Of (), Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Set < String >>( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠSet < String >): ĠSet < String > Ġ= ĠgetString Set ( key , Ġdefault ) Ġ?: Ġdefault ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠSet < String >): ĠEditor Ġ= Ġput String Set ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ Boolean ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġfalse . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠBoolean Pref ( defaultValue : ĠBoolean Ġ= Ġfalse , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Boolean >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠBoolean ) Ġ= Ġget Boolean ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠBoolean ): ĠEditor Ġ= Ġput Boolean ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġnullable Ġ[ Boolean ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġnull . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠN Boolean Pref ( defaultValue : ĠBoolean ? Ġ= Ġnull , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Boolean ? >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠBoolean ?): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( contains ( key )) Ġget Boolean ( key , Ġfalse ) Ġelse Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠBoolean ?): ĠEditor Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġremove ( key ) Ġelse Ġput Boolean ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ Boolean ] Ġproperties Ġto Ġbe Ġused Ġas Ġfeature Ġflags . ĠThe Ġprimary Ġdifference Ġbetween Ġthis Ġand Ġa Ċ Ġ* Ġnormal Ġ[ Boolean Pref ] Ġis Ġthat Ġthis Ġdelegate Ġclass Ġholds Ġa Ġhuman - readable Ġdescription Ġfor Ġdev Ġconvenience Ġas Ġwell Ċ Ġ* Ġas Ġa Ġproperty Ġreference Ġfor Ġdynamic Ġaccess . Ċ Ġ*/ Ċ class ĠFeature Flag Pref ( val Ġdescription : ĠString , ĠdefaultValue : ĠBoolean Ġ= Ġfalse , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Boolean >( defaultValue , Ġkey Name ) Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġproperty Ġ: ĠK Property < *> ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġprovide Delegate ( this Ref : ĠPref Manager , Ġprop : ĠK Property < *> ): ĠRead Write Property < Pref Manager , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis Ref . register Delegate ( this ) ĊĠĠĠĠĠĠĠ Ġproperty Ġ= Ġprop ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠBoolean ) Ġ= Ġget Boolean ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠBoolean ): ĠEditor Ġ= Ġput Boolean ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġa Ġspecial Ġtype Ġof Ġ[ Boolean ] Ġproperty Ġwhich Ġresets Ġevery Ġtime Ġthe Ġgetter Ġis Ġcalled . Ċ Ġ* ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġfalse . ĠThis Ġvalue Ġis Ġwhat Ġthe Ġpreference Ġwill Ġreset Ġto . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠBoolean Reset Pref ( private Ġval ĠdefaultValue : ĠBoolean Ġ= Ġfalse , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Boolean >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠBoolean ) Ġ= Ġget Boolean ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠBoolean ): ĠEditor Ġ= Ġput Boolean ( key , Ġvalue ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠPref Manager , Ġproperty : ĠK Property < *> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġsuper . getValue ( this Ref , Ġproperty ) ĊĠĠĠĠĠĠĠ Ġif ( value Ġ!= ĠdefaultValue ) ĠsetValue ( this Ref , Ġproperty , ĠdefaultValue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ Int ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġ 0 . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠInt Pref ( defaultValue : ĠInt Ġ= Ġ 0 , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Int >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠInt ) Ġ= Ġget Int ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠInt ): ĠEditor Ġ= Ġput Int ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ Long ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġ 0 L . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠLong Pref ( defaultValue : ĠLong Ġ= Ġ 0 L , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Long >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠLong ) Ġ= Ġget Long ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠLong ): ĠEditor Ġ= Ġput Long ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ Float ] Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠThe Ġoptional Ġvalue Ġreturned Ġfor Ġthe Ġproperty Ġwhen Ġno Ġvalue Ġhas Ġbeen Ġset Ċ Ġ* Ġinternally . ĠDefaults Ġto Ġ 0 f . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠFloat Pref ( defaultValue : ĠFloat Ġ= Ġ 0 f , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Float >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠFloat ) Ġ= Ġget Float ( key , Ġdefault ) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠFloat ): ĠEditor Ġ= Ġput Float ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġ[ Int ] Ġcolor Ġproperties . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠA Ġrequired Ġcolor Ġresource Ġidentifier Ġwhose Ġinteger Ġcolor Ġvalue Ġwill Ġbe Ġused Ċ Ġ* Ġas Ġthe Ġproperty Ġvalue Ġuntil Ġthe Ġproperty Ġis Ġset . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ @ Suppress (" DE PREC ATION ") Ċ class ĠColor Pref (@ Color Res ĠdefaultValue : ĠInt , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < Int >( defaultValue , Ġkey Name ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠInt ) Ġ= Ġget Int ( key , ĠContext Keeper . app Context . resources . getColor ( default )) ĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠInt ): ĠEditor Ġ= Ġput Int ( key , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġarbitrary , Ġnullable Ġproperties Ġto Ġbe Ġstored Ġin ĠSharedPreferences Ġas Ċ Ġ* Ġserialized Ġstrings Ġusing ĠGson . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue Ġ( Optional ) ĠA Ġdefault Ġvalue Ġto Ġuse Ġuntil Ġthis Ġproperty Ġhas Ġbeen Ġset . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠGson Pref < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkl azz : ĠClass < T >, ĊĠĠĠĠĠĠĠ ĠdefaultValue : ĠT ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkey Name : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠPref < T ? >( defaultValue , Ġkey Name ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcached Object : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{ Ġcached Object Ġ= Ġnull Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠT ?): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Object Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Object Ġ= ĠGson (). fromJson < T >( getString ( key , Ġnull ), Ġkl azz ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcached Object Ġ?: Ġdefault ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠT ?): ĠSharedPreferences . Editor Ġ{ ĊĠĠĠĠĠĠĠ Ġcached Object Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( key , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( key , ĠGson (). toJson ( value ) Ġ?: Ġreturn Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġa Ġlist Ġof Ġarbitrary , Ġnullable Ġproperties Ġto Ġbe Ġstored Ġin ĠSharedPreferences Ċ Ġ* Ġas Ġa Ġserialized Ġstring Ġusing ĠGson . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue Ġ( Optional ) ĠA Ġdefault Ġvalue Ġto Ġuse Ġuntil Ġthis Ġproperty Ġhas Ġbeen Ġset . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠGson List Pref < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkl azz : ĠClass < T >, ĊĠĠĠĠĠĠĠ ĠdefaultValue : ĠList < T > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġkey Name : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠPref < List < T >>( defaultValue , Ġkey Name ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcached Object : ĠList < T >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{ Ġcached Object Ġ= Ġnull Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠList < T >): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Object Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠType Token . getParameter ized ( List :: class . java , Ġkl azz ). type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Object Ġ= ĠGson (). fromJson < List < T >>( getString ( key , Ġnull ), Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcached Object Ġ?: Ġdefault ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠList < T >): ĠSharedPreferences . Editor Ġ{ ĊĠĠĠĠĠĠĠ Ġcached Object Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġput String ( key , ĠGson (). toJson ( value ) Ġ?: Ġreturn Ġthis ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġarbitrary , Ġnon - nullable Ġproperties Ġto Ġbe Ġstored Ġin ĠSharedPreferences Ġas Ċ Ġ* Ġserialized Ġstrings Ġusing ĠGson . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue ĠA Ġrequired Ġdefault Ġvalue Ġto Ġuse Ġuntil Ġthis Ġproperty Ġhas Ġbeen Ġset . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠNon Null Gson Pref < T Ġ: ĠAny >( defaultValue : ĠT , Ġkey Name : ĠString ? Ġ= Ġnull ) Ġ: ĠPref < T >( defaultValue , Ġkey Name ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcached Object : ĠT ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{ Ġcached Object Ġ= Ġnull Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Object Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Object Ġ= ĠGson (). fromJson < T >( getString ( key , Ġnull ), Ġdefault . java Class ) Ġ?: Ġreturn Ġdefault ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcached Object !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠT ): ĠSharedPreferences . Editor Ġ{ ĊĠĠĠĠĠĠĠ Ġcached Object Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġput String ( key , ĠGson (). toJson ( value )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġa ĠMap < String , ĠBoolean > Ġto Ġbe Ġstored Ġin ĠSharedPreferences Ġas Ġa Ġserialized Ċ Ġ* Ġstring Ġusing ĠGson . ĠMay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param ĠdefaultValue Ġ( Optional ) ĠA Ġdefault Ġvalue Ġto Ġuse Ġuntil Ġthis Ġproperty Ġhas Ġbeen Ġset . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠBoolean Map Pref ( ĊĠĠĠĠĠĠĠ ĠdefaultValue : ĠHashMap < String , ĠBoolean > Ġ= Ġhash Map Of (), ĊĠĠĠĠĠĠĠ Ġkey Name : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠPref < HashMap < String , ĠBoolean >>( defaultValue , Ġkey Name ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcached Object : ĠHashMap < String , ĠBoolean >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{ Ġcached Object Ġ= Ġnull Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠHashMap < String , ĠBoolean >): ĠHashMap < String , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Object Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Object Ġ= ĠGson (). fromJson ( getString ( key , Ġnull ), Ġdefault :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcached Object Ġ?: Ġdefault ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠHashMap < String , ĠBoolean >): ĠEditor Ġ{ ĊĠĠĠĠĠĠĠ Ġcached Object Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġput String ( key , ĠGson (). toJson ( value ) Ġ?: Ġreturn Ġthis ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Pref ] Ġdelegate Ġfor Ġholding Ġa Ġset Ġof Ġobjects Ġto Ġbe Ġstored Ġin ĠSharedPreferences Ġas Ġserialized Ġstrings Ġusing ĠGson . Ċ Ġ* ĠThis Ġclass Ġis Ġonly Ġdesigned Ġto Ġbe Ġused Ġwith Ġscalar Ġtypes , Ġand Ġbehavior Ġwhen Ġusing Ġother Ġtypes Ġis Ġundefined . ĠThis Ċ Ġ* Ġclass Ġmay Ġonly Ġbe Ġused Ġin Ġ[ Pref Manager ] Ġimplementations . Ċ Ġ* Ċ Ġ* Ġ@ param Ġkl azz ĠThe Ġ[ K Class ] Ġof Ġthe Ġobject Ġtype Ġto Ġbe Ġheld Ġin Ġthis Ġ[ Set ]. ĠBehavior Ġof Ġnon - scalar Ġtypes Ġis Ġundefined . Ċ Ġ* Ġ@ param ĠdefaultValue Ġ( Optional ) ĠA Ġdefault Ġvalue Ġthat Ġwill Ġbe Ġused Ġuntil Ġthis Ġproperty Ġis Ġassigned Ġa Ġnew Ġvalue . Ċ Ġ* Ġ@ param Ġkey Name ĠThe Ġoptional Ġkey Ġname Ġunder Ġwhich Ġthe Ġproperty Ġvalue Ġwill Ġbe Ġstored . ĠDefaults Ċ Ġ* Ġto Ġthe Ġproperty Ġname . ĠThis Ġis Ġuseful Ġwhen Ġconverting Ġother Ġ[ SharedPreferences ] Ġimplementations Ċ Ġ* Ġto Ġ[ Pref Manager ] Ġand Ġthe Ġrequired Ġkey Ġname Ġdoes Ġnot Ġmatch Ġthe Ġdesired Ġproperty Ġname . Ċ Ġ*/ Ċ class ĠSet Pref < T Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġval Ġkl azz : ĠK Class < T >, ĊĠĠĠ ĠdefaultValue : ĠSet < T > Ġ= Ġset Of (), ĊĠĠĠ Ġkey Name : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠPref < Set < T >>( defaultValue , Ġkey Name ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcached Object : ĠSet < T >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Clear () Ġ{ Ġcached Object Ġ= Ġnull Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠSharedPreferences . getValue ( key : ĠString , Ġdefault : ĠSet < T >): ĠSet < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Object Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠType Token . getParameter ized ( HashSet :: class . java , Ġkl azz . java ObjectType ). type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Object Ġ= ĠGson (). fromJson < HashSet < T >>( getString ( key , Ġnull ), Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcached Object Ġ?: Ġdefault ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠEditor . setValue ( key : ĠString , Ġvalue : ĠSet < T >): ĠSharedPreferences . Editor Ġ{ ĊĠĠĠĠĠĠĠ Ġcached Object Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġput String ( key , ĠGson (). toJson ( value )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ } Ċ