package pl.charmas.android.reactivelocation;
import com.google.android.gms.common.data.AbstractDataBuffer;
import rx.Observable;
import rx.Subscriber;
import rx.functions.Action0;
import rx.subscriptions.Subscriptions;
/**
* Util class that creates observable from buffer.
*/
public final class DataBufferObservable {
private DataBufferObservable() {
//no instance
}
/**
* Creates observable from buffer. On unsubscribe buffer is automatically released.
*
* @param buffer source buffer
* @param <T> item type
* @return observable that emits all items from buffer and on unsubscription releases it
*/
public static <T> Observable<T> from(final AbstractDataBuffer<T> buffer) {
return Observable.create(new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
Observable.from(buffer).subscribe(subscriber);
subscriber.add(Subscriptions.create(new Action0() {
@Override
public void call() {
buffer.release();
}
}));
}
});
}
}