package Ġnet . a quad c . persistence . android . pref Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġnet . a quad c . persistence . type . DataType Ċ import Ġnet . a quad c . properties . Transactional Property Ċ import Ġnet . a quad c . properties . internal .` Notifier - 1 Atomic Ref ` Ċ Ċ /** Ċ Ġ* ĠWrap s Ġa Ġvalue Ġfrom Ġ[ SharedPreferences ]. Ċ Ġ* ĠNote Ġthat Ġ[ SharedPreferences . On Shared Preference ChangeListener . on Shared Preference Changed ] Ġis Ġcalled Ġon Ġmain Ġthread Ċ Ġ*/ Ċ class ĠShared Preference Property < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprefs : ĠSharedPreferences , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠdefaultValue : ĠT , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtype : ĠDataType < T > Ċ ) Ġ: Ġ` Notifier - 1 Atomic Ref `< T , ĠT >( ĊĠĠĠĠĠĠĠ Ġconcurrent Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġinitial Ref Ġ= Ġtype . get ( prefs , Ġkey , ĠdefaultValue ) Ċ ), ĠTransaction al Property < SharedPreferences . Editor , ĠT > Ġ{ ĊĊĠĠĠ Ġ// Ġwe Ġneed Ġa Ġstrong Ġreference Ġbecause Ġshared Ġprefs Ġholding Ġa Ġweak Ġone ĊĠĠĠ Ġprivate Ġval Ġchange Listener Ġ= ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ Ġ_, Ġkey Ġ-> Ġchanged ( key ) Ġ} ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . register On Shared Preference ChangeListener ( change Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") Ġ// Ġinternal ĠâĢĶ Ġto Ġavoid Ġsynthetic Ġaccessors ĊĠĠĠ Ġinternal Ġfun Ġchanged ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . key Ġ== Ġkey ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Ġ= Ġtype . get ( prefs , Ġthis . key , ĠdefaultValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġref Updater (). get AndSet ( this , Ġnew ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Changed ( old , Ġnew , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġvalue : ĠT ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġref ĊĠĠĠĠĠĠĠ Ġset ( newValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġed Ġ= Ġprefs . edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype . put ( ed , Ġkey , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġed . apply () Ġ// Ġand Ġwait Ġuntil Ġon Shared Preference Changed Ġcomes ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( transaction : ĠSharedPreferences . Editor , Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtype . put ( transaction , Ġkey , Ġvalue ) Ġ// Ġand Ġpr ay Ġthat Ġthis Ġone Ġis Ġour s ... ĊĠĠĠ Ġ} Ċ Ċ } Ċ