/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . watch next code lab . database Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġcom . example . android . watch next code lab . Open For Mock ing Ċ import Ġcom . example . android . watch next code lab . model . Category Ċ import Ġcom . example . android . watch next code lab . model . Movie Ċ import Ġcom . example . android . watch next code lab . model . Movie Program Id Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ Ċ private Ġconst Ġval ĠC ATEG ORY _ PRE FS _ DB Ġ= Ġ" CATEGORY _ PRE FS _ db " Ċ private Ġconst Ġval ĠP LAY BACK _ PRE FS _ DB Ġ= Ġ" PLAY BACK _ PRE FS _ db " Ċ private Ġconst Ġval ĠMOV IE _ PROGRAM _ ID _ DB Ġ= Ġ" MOV IE _ PROGRAM _ ID _ db " Ċ private Ġconst Ġval ĠP REF S _ CATEG ORIES Ġ= Ġ" PRE FS _ CATEG ORIES " Ċ private Ġconst Ġval ĠP REF S _ MOV IE _ PROGRAM _ ID Ġ= Ġ" PRE FS _ MOV IE _ PROGRAM _ ID " Ċ Ċ /** Ċ Ġ* ĠPers ists Ġdata Ġinto Ġshared Ġpreferences . Ċ Ġ*/ Ċ @ Open For Mock ing Ċ class ĠSharedPreferences Database Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson Ġ= ĠGson () ĊĊĠĠĠ Ġfun Ġsave Categories ( context : ĠContext , Ġcategories : ĠList < Category >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIde ally Ġyou Ġwould Ġnot Ġsave Ġa Ġjson Ġserialization Ġof Ġa Ġlist Ġin ĠSharedPreferences Ġand Ġshould ĊĠĠĠĠĠĠĠ Ġ// Ġuse Ġa Ġbetter Ġmore Ġefficient Ġdata Ġstorage Ġsolution Ġsuch Ġas ĠSql ite . ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . toJson ( categories ) ĊĊĠĠĠĠĠĠĠ Ġget Category SharedPreferences ( context ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( PRE FS _ CATEG ORIES , Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Categories ( context : ĠContext ): ĠList < Category > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġget Category SharedPreferences ( context ). getString ( PRE FS _ CATEG ORIES , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Type Ġ= Ġobject Ġ: ĠType Token < List < Category >>() Ġ{} . type ĊĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( json , Ġlist Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Playback Position ( context : ĠContext , Ġmovie : ĠMovie , Ġplayback Position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Playback SharedPreferences ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Int ( movie . movie Id . toString (), Ġplayback Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Playback Position For Movie ( context : ĠContext , Ġmovie : ĠMovie ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Playback SharedPreferences ( context ). getInt ( movie . movie Id . toString (), Ġ- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Playback Position ( context : ĠContext , Ġmovie Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Playback SharedPreferences ( context ). edit (). remove ( movie Id ). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Movie Program Ids ( context : ĠContext ): ĠList < Movie Program Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġget Movie Program SharedPreferences ( context ). getString ( PRE FS _ MOV IE _ PROGRAM _ ID , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Type Ġ= Ġobject Ġ: ĠType Token < List < Movie Program Id >>() Ġ{} . type ĊĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( json , Ġlist Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Movie Program Ids ( context : ĠContext , Ġids : ĠList < Movie Program Id >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( Ġids . isEmpty () Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Movie Program Ids ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgson . toJson ( ids ) ĊĊĠĠĠĠĠĠĠ Ġget Movie Program SharedPreferences ( context ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( PRE FS _ MOV IE _ PROGRAM _ ID , Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Movie Program Ids ( context : ĠContext ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Movie Program SharedPreferences ( context ). edit (). clear (). apply () ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Category SharedPreferences ( context : ĠContext ): ĠSharedPreferences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget SharedPreferences ( context , ĠC ATEG ORY _ PRE FS _ DB ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Playback SharedPreferences ( context : ĠContext ): ĠSharedPreferences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget SharedPreferences ( context , ĠP LAY BACK _ PRE FS _ DB ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Movie Program SharedPreferences ( context : ĠContext ): ĠSharedPreferences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget SharedPreferences ( context , ĠMOV IE _ PROGRAM _ ID _ DB ) ĊĊĠĠĠ Ġprivate Ġfun Ġget SharedPreferences ( context : ĠContext , Ġpreference Key : ĠString ): ĠSharedPreferences Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . get SharedPreferences ( preference Key , ĠContext . MODE _ PRIVATE ) ĊĠĠĠ Ġ} Ċ } Ċ