Rx2
The livedata library adds extension functions to convert the Prefrence into Observable and Consumer objects.
Getting the Dependency
implementation "com.frybits.rx.preferences:rx2:2.1.0"
Usage
Preference as an Observable
val rxSharedPreferences = sharedPreferences.asRxSharedPreferences()
val usernamePref: Preference<String> = rxSharedPreferences.getString("username", "")
val usernameObservable: Observable<String> = usernamePref.asObservable()
usernameObservable.subscribe { name ->
println(name) // Immediately emits ''
}
usernamePref.value = "bob"
// Output from RxJava => "bob"
RxSharedPreferences rxSharedPreferences = RxSharedPreferences.create(sharedPreferences);
Preference<String> usernamePref = rxSharedPreferences.getString("username", "");
Observable<String> usernameObservable = Rx2Preference.asObservable(usernamePref);
usernameObservable.subscribe(name -> {
System.out.println(name); // Immediately emits ''
});
usernamePref.setValue("bob");
// Output from RxJava => "bob"
Preference as a Consumer
val rxSharedPreferences = sharedPreferences.asRxSharedPreferences()
val featureEnabledPref: Preference<Boolean> = rxSharedPreferences.getBoolean("somePref")
val featureEnabledConsumer = featureEnabledPref.asConsumer()
val checkButtonObservable = Observable.create { emitter ->
val onChangedListener = OnCheckedChangeListener { _, isChecked ->
emitter.onNext(isChecked)
}
emitter.setCancellable {
button.setOnCheckedChangeListener(null)
}
button.setOnCheckedChangeListener(onChangedListener)
}
checkButtonObservable.subscribe(featureEnabledConsumer)
RxSharedPreferences rxSharedPreferences = RxSharedPreferences.create(sharedPreferences);
Preference<Boolean> featureEnabledPref = rxSharedPreferences.getBoolean("somePref");
Consumer<Boolean> featureEnabledConsumer = Rx2Preference.asConsumer(featureEnabledPref);
Observable<Boolean> checkButtonObservable = Observable.create(emitter -> {
OnCheckedChangeListener onChangedListener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
emitter.onNext(isChecked);
}
};
emitter.setCancellable(() -> {
button.setOnCheckedChangeListener(null);
});
button.setOnCheckedChangeListener(onChangedListener);
});
checkButtonObservable.subscribe(featureEnabledConsumer);