package com.boardgamegeek.ui.loader;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
public abstract class BggLoader<D> extends AsyncTaskLoader<D> {
private D data;
public BggLoader(Context context) {
super(context);
}
@Override
protected void onStartLoading() {
// deliver the data if we have it
if (data != null) {
deliverResult(data);
}
// ask for data if it has changed or is missing
if (takeContentChanged() || data == null) {
forceLoad();
}
}
@Override
public void deliverResult(D data) {
// loader has been reset so doesn't need to deliver any data
if (isReset()) {
return;
}
// save the data to deliver later
this.data = data;
// loader is started, so the data should be delivered
if (isStarted()) {
super.deliverResult(data);
}
}
@Override
protected void onReset() {
super.onReset();
onStopLoading();
data = null;
}
@Override
protected void onStopLoading() {
// we're being asked to stop, so cancel the task
cancelLoad();
}
}