Skip to content

Instantly share code, notes, and snippets.

@MisterRager
Last active January 28, 2017 20:00
Show Gist options
  • Save MisterRager/798adca40f71faf820b3e70691a3f4a1 to your computer and use it in GitHub Desktop.
Save MisterRager/798adca40f71faf820b3e70691a3f4a1 to your computer and use it in GitHub Desktop.
Android Loader to RxJava bridge: Now updated for RxJava2!
/*
* Copyright (c) 2017 PlanGrid, Inc. All rights reserved.
*/
package com.plangrid.android.loaders;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import com.plangrid.android.helpers.rx.CompletableObservableOnSubscribe;
import io.reactivex.Observable;
public class RxLoaderBridge<T> extends CompletableObservableOnSubscribe<T> implements LoaderManager.LoaderCallbacks<T>{
private final int id;
private final LoaderFactory<T> loaderFactory;
public RxLoaderBridge(final int id, LoaderFactory<T> loaderFactory) {
this.id = id;
this.loaderFactory = loaderFactory;
}
public Observable<T> load(final LoaderManager manager) {
manager.initLoader(id, null, this).startLoading();
return Observable.create(this);
}
@Override public Loader<T> onCreateLoader(int id, Bundle args) {
return loaderFactory.getLoader();
}
@Override public void onLoadFinished(Loader<T> loader, T data) {
next(data);
}
@Override public void onLoaderReset(Loader<T> loader) {
}
@FunctionalInterface public interface LoaderFactory<T> {
Loader<T> getLoader();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment