package org.commcare.android.framework; import java.util.List; import org.commcare.android.adapters.EntityDetailAdapter; import org.commcare.android.models.AndroidSessionWrapper; import org.commcare.android.models.Entity; import org.commcare.android.models.NodeEntityFactory; import org.commcare.android.util.DetailCalloutListener; import org.commcare.dalvik.R; import org.commcare.dalvik.activities.EntityDetailActivity; import org.commcare.dalvik.application.CommCareApplication; import org.commcare.suite.model.Detail; import org.commcare.util.CommCareSession; import org.javarosa.core.model.instance.TreeReference; import org.odk.collect.android.views.media.AudioController; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; /** * Fragment to display Detail content. Not meant for handling nested Detail objects. * @author jschweers * */ public class EntityDetailFragment extends Fragment { public static final String CHILD_DETAIL_INDEX = "edf_child_detail_index"; public static final String DETAIL_ID = "edf_detail_id"; public static final String DETAIL_INDEX = "edf_detail_index"; public static final String HAS_DETAIL_CALLOUT_LISTENER = "edf_has_detail_callout_listener"; private AndroidSessionWrapper asw; private NodeEntityFactory factory; private EntityDetailAdapter adapter; public EntityDetailFragment() { super(); this.asw = CommCareApplication._().getCurrentSessionWrapper(); } /* * (non-Javadoc) * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Note that some of this setup could be moved into onAttach if it would help performance Bundle args = getArguments(); Detail detail = asw.getSession().getDetail(args.getString(DETAIL_ID)); Detail childDetail = detail; if (args.getInt(CHILD_DETAIL_INDEX, -1) != -1) { childDetail = detail.getDetails()[args.getInt(CHILD_DETAIL_INDEX)]; } factory = new NodeEntityFactory(childDetail, asw.getEvaluationContext()); Entity entity = factory.getEntity(CommCareApplication._().deserializeFromIntent( getActivity().getIntent(), EntityDetailActivity.CONTEXT_REFERENCE, TreeReference.class) ); View rootView = inflater.inflate(R.layout.entity_detail_list, container, false); CommCareActivity thisActivity = (CommCareActivity) getActivity(); adapter = new EntityDetailAdapter( thisActivity, asw.getSession(), childDetail, entity, (args.getBoolean(HAS_DETAIL_CALLOUT_LISTENER, false) ? (EntityDetailActivity) thisActivity : null), thisActivity, args.getInt(DETAIL_INDEX) ); ((ListView) rootView.findViewById(R.id.screen_entity_detail_list)).setAdapter(adapter); return rootView; } }