package Ġcom . mov soft . ap tracker . services Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġcom . mov soft . ap tracker . models . Tracked Item Ċ import Ġcom . mov soft . ap tracker . models . Tracked Item Settings Ċ import Ġjava . lang . reflect . Type Ċ Ċ type alias ĠGet Tracked Items Completion Ġ= Ġ( result : ĠResult < List < Tracked Item >>) Ġ-> ĠUnit Ċ Ċ /** Ċ Ġ* ĠServices Ġthat Ġprovide Ġaccess Ġto Ġretrieving Ġand Ġpers isting ĠTrack ed Items . Ċ Ġ*/ Ċ interface ĠTrack ed Item Services Ġ{ ĊĠĠĠ Ġfun Ġget Tracked Items ( completion : ĠGet Tracked Items Completion ) ĊĠĠĠ Ġfun Ġget Tracked Item ( item Identifier : ĠString ): ĠTrack ed Item ? ĊĠĠĠ Ġfun Ġadd Tracked Item ( item : ĠTrack ed Item ) ĊĠĠĠ Ġfun Ġupdate Tracked Item ( item : ĠTrack ed Item ) ĊĠĠĠ Ġfun Ġdelete Tracked Item ( item Identifier : ĠString ) Ċ } Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof ĠTrack ed Item Services Ġthat Ġpers ists ĠTrack ed Items Ġin ĠSharedPreferences . Ċ Ġ*/ Ċ class ĠSharedPreferences Tracked Item Services ( context : ĠContext ): ĠTrack ed Item Services Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġitems : ĠArrayList < Tracked Item > ĊĠĠĠ Ġprivate Ġvar Ġshared Prefs : ĠSharedPreferences ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Prefs Ġ= Ġcontext . get SharedPreferences (" tracked Items ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġload Items () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tracked Items ( completion : ĠGet Tracked Items Completion ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompletion ( Result . success ( items . toList ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tracked Item ( item Identifier : ĠString ): ĠTrack ed Item ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . first OrNull Ġ{ Ġit . identifier Ġ== Ġitem Identifier Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Tracked Item ( item : ĠTrack ed Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠĠĠĠĠ Ġpersist ( items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Tracked Item ( item : ĠTrack ed Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems . indexOf ( item ) ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġitem ĊĠĠĠĠĠĠĠ Ġpersist ( items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Tracked Item ( item Identifier : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems . first Ġ{ Ġit . identifier Ġ== Ġitem Identifier Ġ} ĊĠĠĠĠĠĠĠ Ġitems . remove ( item ) ĊĠĠĠĠĠĠĠ Ġpersist ( items ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ -- ĊĠĠĠ Ġ// ĠHelpers ĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ -- ĊĊĠĠĠ Ġprivate Ġfun Ġpersist ( items : ĠArrayList < Tracked Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠGson Builder (). create (). toJson ( items ) ĊĠĠĠĠĠĠĠ Ġval Ġprefs Editor Ġ= Ġshared Prefs . edit () ĊĠĠĠĠĠĠĠ Ġprefs Editor . putString (" tracked Items JSON ", Ġjson ) ĊĠĠĠĠĠĠĠ Ġprefs Editor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Items (): ĠArrayList < Tracked Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġshared Prefs . getString (" tracked Items JSON ", Ġ" [] ") ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠGson Builder () ĊĠĠĠĠĠĠĠ Ġbuilder . register Type Adapter ( Tracked Item :: class . java , ĠTrack ed Item . Deserializer ()) ĊĠĠĠĠĠĠĠ Ġbuilder . register Type Adapter ( Tracked Item Settings :: class . java , ĠTrack ed Item Settings . Deserializer ()) ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġobject Ġ: ĠType Token < ArrayList < Tracked Item >>() Ġ{} . type ĊĠĠĠĠĠĠĠ Ġval Ġitems : ĠArrayList < Tracked Item > Ġ= Ġbuilder . create (). fromJson ( json , Ġtype ) ĊĠĠĠĠĠĠĠ Ġpersist ( items ) ĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} Ċ } Ċ