package Ġpl . d roid son roid s . toast . services Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġio . reactivex . Observable Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ private Ġconst Ġval ĠNOT IFICATION _ KEY _ PREFIX Ġ= Ġ" notification " Ċ Ċ @ Singleton Ċ class ĠLocal Notification Storage Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences Ċ ) Ġ: ĠNotification Storage , ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= Ġmutable Map Of < String , Ġ( Boolean ) Ġ-> ĠUnit >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preferences . register On Shared Preference ChangeListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetIs Notification Scheduled ( eventId : ĠLong , Ġis Scheduled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Boolean ("$ NOTIFICATION _ KEY _ PREFIX $ eventId ", Ġis Scheduled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Is Notification Scheduled ( eventId : ĠLong ): ĠObservable < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġ"$ NOTIFICATION _ KEY _ PREFIX $ eventId " ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners [ key ] Ġ= Ġemitter :: onNext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . set C ancellable Ġ{ Ġlisteners . remove ( key ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( shared Preferences . getBoolean ( key , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( shared Preferences : ĠSharedPreferences , Ġkey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners [ key ]?. invoke ( shared Preferences . getBoolean ( key , Ġfalse )) ĊĠĠĠ Ġ} Ċ }