package com.gh4a.loader;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
import android.util.Log;
import com.gh4a.Gh4Application;
public abstract class BaseLoader<T> extends AsyncTaskLoader<LoaderResult<T>> {
private T mPrefilledData;
public BaseLoader(Context context) {
super(context);
onContentChanged();
}
public void prefillData(T data) {
if (!isStarted()) {
mPrefilledData = data;
}
}
@Override
public LoaderResult<T> loadInBackground() {
try {
T data = doLoadInBackground();
return new LoaderResult<>(data);
} catch (Exception e) {
Log.e(Gh4Application.LOG_TAG, e.getMessage(), e);
return new LoaderResult<>(e);
}
}
@Override
protected void onStartLoading() {
if (takeContentChanged()) {
if (mPrefilledData == null) {
forceLoad();
} else {
LoaderResult<T> result = new LoaderResult<>(mPrefilledData);
deliverResult(result);
mPrefilledData = null;
}
}
}
@Override
protected void onStopLoading() {
cancelLoad();
}
protected abstract T doLoadInBackground() throws Exception;
}