package com.philosophicalhacker.philhackernews.data;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import rx.Observable;
import rx.Subscriber;
/**
*
* Created by MattDupree on 7/16/15.
*/
public class LoaderInitializingOnSubscribe<T, U> implements Observable.OnSubscribe<T> {
private int mLoadId;
private final LoaderManager mLoaderManager;
private Loader<U> mLoader;
private DataConverter<T, U> mDataConverter;
public LoaderInitializingOnSubscribe(int loadId,
LoaderManager loaderManager,
Loader<U> loader,
DataConverter<T, U> dataConverter) {
mLoadId = loadId;
mLoaderManager = loaderManager;
mLoader = loader;
mDataConverter = dataConverter;
}
@Override
public void call(final Subscriber<? super T> subscriber) {
mLoaderManager.initLoader(mLoadId, null, new LoaderManager.LoaderCallbacks<U>() {
@Override
public Loader<U> onCreateLoader(int id, Bundle args) {
return mLoader;
}
@Override
public void onLoadFinished(Loader<U> loader, U data) {
subscriber.onNext(mDataConverter.convertData(data));
}
@Override
public void onLoaderReset(Loader<U> loader) {
}
});
}
}