package what.whatandroid.notifications; 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.notifications.Notifications; import what.whatandroid.callbacks.LoadingListener; import what.whatandroid.callbacks.OnLoggedInCallback; /** * Adapter for swiping through the pages of notifications */ public class NotificationsPagerAdapter extends FragmentStatePagerAdapter implements OnLoggedInCallback, LoadingListener<Notifications> { private SparseArray<NotificationsListFragment> fragments; private int pages; private boolean loggedIn; public NotificationsPagerAdapter(FragmentManager fm, int pages){ super(fm); fragments = new SparseArray<NotificationsListFragment>(); this.pages = pages; loggedIn = false; } @Override public Fragment getItem(int position){ return NotificationsListFragment.newInstance(position + 1); } @Override public int getCount(){ return pages; } @Override public CharSequence getPageTitle(int position){ return "page " + (position + 1) + " of " + pages; } @Override public Object instantiateItem(ViewGroup container, int position){ NotificationsListFragment f = (NotificationsListFragment)super.instantiateItem(container, position); if (loggedIn){ f.onLoggedIn(); } //We need to load a page to figure out how many pages there are in total, so we listen to the first one if (position == 0){ f.setLoadingListener(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(Notifications data){ pages = data.getResponse().getPages().intValue(); if (pages == 0){ ++pages; } notifyDataSetChanged(); } public void clearNotifications(){ pages = 1; for (int i = 0; i < fragments.size(); ++i){ fragments.valueAt(i).clearNotifications(); } notifyDataSetChanged(); } @Override public void onLoggedIn(){ loggedIn = true; for (int i = 0; i < fragments.size(); ++i){ fragments.valueAt(i).onLoggedIn(); } } }