package org.smartpaws.viewpager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.smartpaws.MainActivity;
import org.smartpaws.R;
import org.smartpaws.fragments.ErrorOfflineFragment;
import org.smartpaws.fragments.GohFragment;
import org.smartpaws.net.DataMan;
import org.smartpaws.net.ParallelResponseHandler;
import org.smartpaws.net.ResponseHandler;
import org.smartpaws.objects.Convention;
import org.smartpaws.objects.GuestOfHonor;
import org.smartpaws.util.ScreenDensity;
public class GohViewPager extends Fragment {
private static final int IMAGE_COUNT_PER_FRAGMENT = 2;
private volatile int fetchedCount;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final int containerId = getArguments().getInt("container_id");
final View loading = inflater.inflate(R.layout.frag_loading, container, false);
DataMan.getConvention("confuzzled", new ResponseHandler<Convention>() {
@Override
public void result(Convention result) {
if (result == null) {
MainActivity.INSTANCE.getSupportFragmentManager()
.beginTransaction()
.replace(containerId, new ErrorOfflineFragment())
.commit();
return;
}
final GuestOfHonor[] gohs = result.getGuestsOfHonor();
showFragment(containerId, gohs);
}
});
return loading;
}
private synchronized boolean pollAllFetched(int gohCount) {
fetchedCount++;
return fetchedCount == (IMAGE_COUNT_PER_FRAGMENT * gohCount);
}
private void showFragment(int containerId, GuestOfHonor[] gohs) {
final Fragment fragment = new GohViewPagerFragment();
final Bundle bundle = new Bundle();
bundle.putSerializable("gohs", gohs);
fragment.setArguments(bundle);
MainActivity.INSTANCE.getSupportFragmentManager()
.beginTransaction()
.replace(containerId, fragment)
.commit();
}
public static class GohViewPagerFragment extends Fragment {
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
private GuestOfHonor[] gohs;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
this.gohs = (GuestOfHonor[]) getArguments().getSerializable("gohs");
View root = inflater.inflate(R.layout.view_pager, null);
mPagerAdapter = new GohViewPagerAdapter(MainActivity.INSTANCE.getSupportFragmentManager());
mPager = (ViewPager) root.findViewById(R.id.pager);
mPager.setAdapter(mPagerAdapter);
return root;
}
private GohFragment createFragment(GuestOfHonor goh) {
GohFragment fragment = new GohFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("goh", goh);
fragment.setArguments(bundle);
return fragment;
}
private class GohViewPagerAdapter extends FragmentStatePagerAdapter {
public GohViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
return createFragment(gohs[pos]);
}
@Override
public int getCount() {
return gohs.length;
}
}
}
}