package what.whatandroid.inbox;
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.inbox.inbox.Inbox;
import api.soup.MySoup;
import what.whatandroid.callbacks.LoadingListener;
import what.whatandroid.callbacks.OnLoggedInCallback;
/**
* Adapter to display the paged lists of conversations in the inbox
*/
public class InboxPagerAdapter extends FragmentStatePagerAdapter implements OnLoggedInCallback, LoadingListener<Inbox> {
/**
* Loading listener to alert when we've loaded the inbox
* The InboxFragment uses this to find and save the total number of pages
* Could I instead use save/restoreState?
*/
private SparseArray<InboxListFragment> fragments;
private int pages;
public InboxPagerAdapter(FragmentManager fm, int pages){
super(fm);
fragments = new SparseArray<InboxListFragment>();
this.pages = pages;
}
@Override
public Fragment getItem(int position){
//Page numbers start at 1 but positions are 0-indexed
return InboxListFragment.newInstance(position + 1);
}
@Override
public CharSequence getPageTitle(int position){
return "page " + (position + 1) + " of " + pages;
}
@Override
public int getCount(){
return pages;
}
@Override
public Object instantiateItem(ViewGroup container, int position){
InboxListFragment f = (InboxListFragment)super.instantiateItem(container, position);
if (MySoup.isLoggedIn()){
f.onLoggedIn();
}
//We need to load the first page to figure out how many pages there are in total
//so listen to the first one
if (position == 0){
f.setListener(this);
}
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(Inbox data){
pages = data.getResponse().getPages().intValue();
notifyDataSetChanged();
}
@Override
public void onLoggedIn(){
for (int i = 0; i < fragments.size(); ++i){
fragments.valueAt(i).onLoggedIn();
}
}
}