package com.rapidftr.view.fields; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.ListView; import com.google.inject.Guice; import com.google.inject.Injector; import com.rapidftr.R; import com.rapidftr.activity.ViewChildActivity; import com.rapidftr.adapter.HighlightedFieldsViewAdapter; import com.rapidftr.model.Child; import com.rapidftr.model.Enquiry; import com.rapidftr.model.PotentialMatch; import com.rapidftr.repository.ChildRepository; import com.rapidftr.repository.PotentialMatchRepository; import com.rapidftr.utils.ApplicationInjector; import lombok.Cleanup; import org.json.JSONException; import java.util.ArrayList; import java.util.List; public class ListRecordField extends BaseView { public ListRecordField(Context context) { super(context); } public ListRecordField(Context context, AttributeSet attr) { super(context, attr); } private ListView getListRecordView() { return (ListView) findViewById(R.id.list_records); } @Override protected void initialize() throws JSONException { super.initialize(); Enquiry enquiry=(Enquiry) model; Injector inject = Guice.createInjector(new ApplicationInjector()); @Cleanup ChildRepository childRepo = inject.getInstance(ChildRepository.class); @Cleanup PotentialMatchRepository potentialMatchRepo = inject.getInstance(PotentialMatchRepository.class); List<PotentialMatch> potentialMatches = potentialMatchRepo.getPotentialMatchesFor(enquiry); List<Child> children = childRepo.getAllWithInternalIds(Child.idsFromMatches(potentialMatches)); HighlightedFieldsViewAdapter highlightedFieldsViewAdapter = new HighlightedFieldsViewAdapter(getContext(), children, Child.CHILD_FORM_NAME, ViewChildActivity.class); ListView childListView = (ListView) findViewById(R.id.list_records); if (children.isEmpty()) { childListView.setEmptyView(findViewById(R.id.no_matches)); } else childListView.setAdapter(highlightedFieldsViewAdapter); setListViewHeightBasedOnChildren(childListView); } private static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); int totalHeight = 0; View view = null; for (int i = 0; i < listAdapter.getCount(); i++) { view = listAdapter.getView(i, view, listView); if (i == 0) { view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT)); } view.measure(desiredWidth, MeasureSpec.UNSPECIFIED); totalHeight += view.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); listView.requestLayout(); } @Override public void setEnabled(boolean enabled) { enabled = false; super.setEnabled(enabled); getListRecordView().setEnabled(enabled); getListRecordView().setClickable(enabled); getListRecordView().setFocusable(enabled); getListRecordView().setFocusableInTouchMode(enabled); } }