/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠAlex ander ĠW id ar Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġse . ge ec ity . android . ste er and put . common . pers istance Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġse . ge ec ity . android . data . App Executors Ċ import Ġse . ge ec ity . android . ste er and put . common . exception . Ste er And Put Exception Ċ Ċ internal Ġconst Ġval ĠP REF S _ FILENAME Ġ= Ġ" favorites " Ċ internal Ġconst Ġval ĠP REF S _ KEY Ġ= Ġ" favorites " Ċ Ċ class ĠF avorite Util ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġexec utors : ĠApp Executors ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġprefs : ĠSharedPreferences Ġ= Ġcontext . get SharedPreferences ( PRE FS _ FILENAME , ĠContext . MODE _ PRIVATE ) ĊĊĠĠĠ Ġprivate Ġval Ġfavor ites : ĠMutable Set < Int > ĊĊĠĠĠ Ġprivate Ġval ĠonChange Observer s : ĠMutable Set < () Ġ-> ĠUnit > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġids String Ġ= Ġprefs . getString ( PRE FS _ KEY , Ġnull ) ĊĠĠĠĠĠĠĠ Ġfavor ites Ġ= Ġids String ?. split (",") ?. map Ġ{ Ġit . toInt () Ġ} ?. to Mutable Set () Ġ?: Ġmutable Set Of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget F avorites (): ĠSet < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfavor ites ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Ste er And Put Exception :: class ) ĊĠĠĠ Ġfun Ġsave F avorites ( favorites Ids : ĠSet < Int >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( favorites Ids . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġids String Ġ= Ġfavor ites Ids . join ToString (",") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġprefs . edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( PRE FS _ KEY , Ġids String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Favorite ( station Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfavor ites . add ( station Id ) ĊĠĠĠĠĠĠĠ Ġsave F avorites ( favorites ) ĊĠĠĠĠĠĠĠ Ġnotify Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Favorite ( station Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfavor ites . remove ( station Id ) ĊĠĠĠĠĠĠĠ Ġsave F avorites ( favorites ) ĊĠĠĠĠĠĠĠ Ġnotify Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Favorite ( station Id : ĠInt ) Ġ= Ġfavor ites . contains ( station Id ) ĊĊĠĠĠ Ġfun Ġadd OnChange Observer ( observer : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠonChange Observer s . add ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove OnChange Observer ( observer : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠonChange Observer s . remove ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġexec utors . main Thread . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonChange Observer s . forEach Ġ{ Ġit () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }