/*
* Copyright (c) 2014. The Trustees of Indiana University.
*
* This version of the code is licensed under the MPL 2.0 Open Source license with additional
* healthcare disclaimer. If the user is an entity intending to commercialize any application
* that uses this code in a for-profit venture, please contact the copyright holder.
*/
package com.muzima.adapters.observations;
import android.os.AsyncTask;
import android.os.Build;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.muzima.R;
import com.muzima.api.model.Encounter;
import com.muzima.api.model.Observation;
import com.muzima.controller.ConceptController;
import com.muzima.controller.EncounterController;
import com.muzima.controller.ObservationController;
import com.muzima.model.observation.EncounterWithObservations;
import com.muzima.utils.BackgroundTaskHelper;
import com.muzima.utils.DateUtils;
import com.muzima.utils.Fonts;
import com.muzima.utils.StringUtils;
public class ObservationsByEncounterAdapter extends ObservationsAdapter<EncounterWithObservations> {
public ObservationsByEncounterAdapter(FragmentActivity activity, int item_observation_list,
EncounterController encounterController, ConceptController conceptController,
ObservationController observationController) {
super(activity,item_observation_list,encounterController, conceptController,observationController);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ObservationsByEncounterViewHolder holder;
if (convertView == null) {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
convertView = layoutInflater.inflate(R.layout.item_observation_by_encounter_list, parent, false);
holder = new ObservationsByEncounterViewHolder();
holder.observationLayout = (LinearLayout) convertView
.findViewById(R.id.observation_layout);
holder.headerLayout = (LinearLayout) convertView.findViewById(R.id.observation_header);
holder.encounterProvider = (TextView) convertView.findViewById(R.id.encounter_provider);
holder.encounterDate = (TextView) convertView.findViewById(R.id.encounter_date);
holder.encounterLocation = (TextView) convertView.findViewById(R.id.encounter_location);
convertView.setTag(holder);
} else {
holder = (ObservationsByEncounterViewHolder) convertView.getTag();
}
holder.renderItem(getItem(position));
return convertView;
}
@Override
public void reloadData() {
cancelBackgroundQueryTask();
AsyncTask<Void,?,?> backgroundQueryTask = new ObservationsByEncounterBackgroundTask(this,
new EncountersByPatient(encounterController,observationController, patientUuid));
BackgroundTaskHelper.executeInParallel(backgroundQueryTask);
setRunningBackgroundQueryTask(backgroundQueryTask);
}
public void search(String query) {
cancelBackgroundQueryTask();
AsyncTask<Void,?,?> backgroundQueryTask = new ObservationsByEncounterBackgroundTask(this,
new EncountersBySearch(encounterController,observationController, patientUuid, query));
BackgroundTaskHelper.executeInParallel(backgroundQueryTask);
setRunningBackgroundQueryTask(backgroundQueryTask);
}
protected class ObservationsByEncounterViewHolder extends ViewHolder {
public TextView encounterProvider;
public TextView encounterDate;
public TextView encounterLocation;
public LinearLayout headerLayout ;
public ObservationsByEncounterViewHolder() {
super();
}
private void renderItem(EncounterWithObservations item) {
addEncounterObservations(item.getObservations());
setEncounter(item.getEncounter());
headerLayout.setBackgroundColor(getContext()
.getResources().getColor(R.color.observation_by_encounter_header_background));
}
@Override
protected void setObservation(LinearLayout layout, Observation observation) {
TextView conceptInfo = (TextView) layout.findViewById(R.id.concept_info);
conceptInfo.setText(getConceptDisplay(observation.getConcept()));
conceptInfo.setTypeface(Fonts.roboto_medium(getContext()));
int conceptColor = observationController.getConceptColor(observation.getConcept().getUuid());
conceptInfo.setTextColor(conceptColor);
View divider = layout.findViewById(R.id.divider1);
divider.setBackgroundColor(conceptColor);
String observationConceptType = observation.getConcept().getConceptType().getName();
TextView observationValue = (TextView) layout.findViewById(R.id.observation_value);
ImageView observationComplexHolder = (ImageView) layout.findViewById(R.id.observation_complex);
if (StringUtils.equals(observationConceptType, "Complex")){
observationValue.setVisibility(View.GONE);
observationComplexHolder.setVisibility(View.VISIBLE);
} else {
observationValue.setVisibility(View.VISIBLE);
observationComplexHolder.setVisibility(View.GONE);
observationValue.setText(observation.getValueAsString());
observationValue.setTypeface(Fonts.roboto_medium(getContext()));
observationValue.setTextColor(conceptColor);
}
View divider2 = layout.findViewById(R.id.divider2);
divider2.setBackgroundColor(conceptColor);
TextView observationDateView = (TextView) layout.findViewById(R.id.observation_date);
observationDateView.setText(DateUtils.getMonthNameFormattedDate(observation.getObservationDatetime()));
observationDateView.setTypeface(Fonts.roboto_light(getContext()));
observationDateView.setTextColor(conceptColor);
}
public void setEncounter(Encounter encounter) {
encounterProvider.setText(encounter.getProvider().getDisplayName());
String date = "";
boolean isEncounterForObservationWithNonNullEncounterUuid =
!isEncounterForObservationWithNullEncounterUuid(encounter);
if(isEncounterForObservationWithNonNullEncounterUuid)
date = DateUtils.getMonthNameFormattedDate(encounter.getEncounterDatetime());
encounterDate.setText(date);
encounterLocation.setText(encounter.getLocation().getName());
}
private boolean isEncounterForObservationWithNullEncounterUuid(Encounter encounter) {
return encounter.getProvider().getFamilyName() == null && encounter.getProvider().getMiddleName() == null
&& encounter.getProvider().getGivenName() == null;
}
@Override
protected int getObservationLayout() {
return R.layout.item_observation_by_encounter;
}
@Override
protected int getObservationElementHeight() {
return R.dimen.observation_element_by_encounter_height;
}
}
}