package com.afollestad.silk.fragments.feed; import android.os.Bundle; import com.afollestad.silk.caching.SilkComparable; import com.afollestad.silk.fragments.list.SilkListFragment; import java.util.List; /** * @author Aidan Follestad (afollestad) */ public abstract class SilkFeedFragment<ItemType extends SilkComparable> extends SilkListFragment<ItemType> { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); onInitialRefresh(); } protected void onPreLoad(boolean isPaginating) { } protected void onPostLoad(List<ItemType> results, boolean paginated) { if(paginated) { getAdapter().add(results); } else { getAdapter().set(results); } setLoadComplete(false); } protected abstract List<ItemType> refresh(boolean isPaginating) throws Exception; protected abstract void onError(Exception e); public void performRefresh(boolean showProgress) { if (isLoading()) return; setLoading(showProgress); onPreLoad(false); Thread t = new Thread(new Runnable() { @Override public void run() { try { final List<ItemType> items = refresh(false); runOnUiThread(new Runnable() { @Override public void run() { onPostLoad(items, false); } }); } catch (final Exception e) { e.printStackTrace(); runOnUiThread(new Runnable() { @Override public void run() { onError(e); setLoadComplete(true); } }); } } }); t.setPriority(Thread.MAX_PRIORITY); t.start(); } public void performPaginate() { if (isLoading()) return; setLoading(false); onPreLoad(true); Thread t = new Thread(new Runnable() { @Override public void run() { try { final List<ItemType> items = refresh(true); runOnUiThread(new Runnable() { @Override public void run() { onPostLoad(items, true); } }); } catch (final Exception e) { e.printStackTrace(); runOnUiThread(new Runnable() { @Override public void run() { onError(e); setLoadComplete(true); } }); } } }); t.setPriority(Thread.MAX_PRIORITY); t.start(); } protected void onInitialRefresh() { performRefresh(true); } }