package org.kidinov.just_weather.util.local; import android.support.annotation.NonNull; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.realm.RealmChangeListener; import io.realm.RealmModel; import io.realm.RealmObject; public class RealmObjectObservable<T extends RealmModel> implements ObservableOnSubscribe<T> { public static <T extends RealmModel> Observable<T> from(@NonNull T object) { return Observable.create(new RealmObjectObservable<>(object)); } private final T object; private RealmObjectObservable(@NonNull T object) { this.object = object; } @Override public void subscribe(ObservableEmitter<T> emitter) throws Exception { emitter.onNext(object); RealmChangeListener<T> changeListener = emitter::onNext; RealmObject.addChangeListener(object, changeListener); emitter.setCancellable(() -> RealmObject.removeChangeListener(object, changeListener)); } }