package com.afollestad.silk.fragments.feed;
import android.content.ContentResolver;
import com.afollestad.silk.caching.SilkComparable;
import com.afollestad.silk.caching.SilkCursorItem;
import com.afollestad.silk.fragments.list.SilkCursorListFragment;
import java.util.List;
/**
* @author Aidan Follestad (afollestad)
*/
public abstract class SilkCursorFeedFragment<ItemType extends SilkCursorItem & SilkComparable> extends SilkCursorListFragment<ItemType> {
protected void onPreLoad() {
clearProvider();
}
protected void onPostLoad(List<ItemType> items) {
setLoadComplete(false);
if (items == null || items.size() == 0) return;
ContentResolver resolver = getActivity().getContentResolver();
for (ItemType item : items) {
if (item.getContentValues() == null) continue;
resolver.insert(getLoaderUri(), item.getContentValues());
}
super.onInitialRefresh();
}
protected abstract List<ItemType> refresh() throws Exception;
protected abstract void onError(Exception e);
@Override
protected void onCursorEmpty() {
super.onCursorEmpty();
performRefresh(true);
}
public void performRefresh(boolean showProgress) {
if (isLoading()) return;
setLoading(showProgress);
onPreLoad();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
final List<ItemType> items = refresh();
runOnUiThread(new Runnable() {
@Override
public void run() {
onPostLoad(items);
}
});
} catch (final Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
onError(e);
setLoadComplete(true);
}
});
}
}
});
t.setPriority(Thread.MAX_PRIORITY);
t.start();
}
}