package org.commcare.adapters;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import org.commcare.fragments.EntityDetailFragment;
import org.commcare.fragments.EntitySubnodeDetailFragment;
import org.commcare.suite.model.Detail;
import org.commcare.utils.SerializationUtil;
import org.javarosa.core.model.instance.TreeReference;
/**
* Subclass of FragmentStatePagerAdapter for populating a ViewPager (swipe-based paging widget) with entity detail fields.
*
* @author jschweers
*/
public class EntityDetailPagerAdapter extends FragmentStatePagerAdapter {
private ListItemViewModifier modifier;
private final Detail detail;
private final int detailIndex;
private final TreeReference mEntityReference;
public EntityDetailPagerAdapter(FragmentManager fm, Detail detail, int detailIndex,
TreeReference reference, ListItemViewModifier modifier) {
super(fm);
this.detail = detail;
this.detailIndex = detailIndex;
this.mEntityReference = reference;
this.modifier = modifier;
}
@Override
public Fragment getItem(int i) {
EntityDetailFragment fragment;
if (detail.getNodeset() != null || (detail.isCompound() && detail.getDetails()[i].getNodeset() != null)) {
fragment = new EntitySubnodeDetailFragment();
} else {
fragment = new EntityDetailFragment();
}
fragment.setModifier(modifier);
Bundle args = new Bundle();
args.putString(EntityDetailFragment.DETAIL_ID, detail.getId());
if (detail.isCompound()) {
args.putInt(EntityDetailFragment.CHILD_DETAIL_INDEX, i);
}
args.putInt(EntityDetailFragment.DETAIL_INDEX, detailIndex);
SerializationUtil.serializeToBundle(args, EntityDetailFragment.CHILD_REFERENCE, mEntityReference);
fragment.setArguments(args);
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
return (detail.isCompound() ? detail.getDetails()[position] : detail).getTitle().getText().evaluate();
}
@Override
public int getCount() {
return detail.isCompound() ? detail.getDetails().length : 1;
}
}