package what.whatandroid.top10;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.util.SparseArray;
import android.view.ViewGroup;
import api.top.TopTorrents;
import what.whatandroid.callbacks.LoadingListener;
/**
* Displays a swipe-able view of the various top torrent category listings
*/
public class Top10PagerAdapter extends FragmentStatePagerAdapter implements LoadingListener<TopTorrents> {
/**
* The top torrents being shown
*/
private TopTorrents topTorrents;
/**
* The various top 10 list fragments showing the items
* for each category
*/
private SparseArray<Top10ListFragment> fragments;
public Top10PagerAdapter(FragmentManager fm){
super(fm);
fragments = new SparseArray<Top10ListFragment>();
}
@Override
public Fragment getItem(int position){
return new Top10ListFragment();
}
@Override
public CharSequence getPageTitle(int position){
if (topTorrents == null){
return "loading";
}
//We use the captions for the titles but remove some unnecessary parts of
//the title to make it shorter
String title = topTorrents.getResponse().get(position).getCaption();
if (title.startsWith("Most Active")){
return title.substring("Most Active Torrents ".length());
}
return title.replace("Torrents", "");
}
@Override
public int getCount(){
if (topTorrents == null){
return 1;
}
return topTorrents.getResponse().size();
}
@Override
public Object instantiateItem(ViewGroup container, int position){
Top10ListFragment f = (Top10ListFragment)super.instantiateItem(container, position);
if (topTorrents != null){
f.onLoadingComplete(topTorrents.getResponse().get(position));
}
fragments.put(position, f);
return f;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object){
super.destroyItem(container, position, object);
fragments.remove(position);
}
@Override
public void onLoadingComplete(TopTorrents data){
topTorrents = data;
notifyDataSetChanged();
for (int i = 0; i < fragments.size(); ++i){
int pos = fragments.keyAt(i);
fragments.get(pos).onLoadingComplete(topTorrents.getResponse().get(pos));
}
}
}