/* * 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.encounters; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.muzima.R; import com.muzima.api.model.Encounter; import com.muzima.api.model.Observation; import com.muzima.controller.ObservationController; import com.muzima.model.observation.EncounterWithObservations; import com.muzima.model.observation.Encounters; import com.muzima.utils.DateUtils; import com.muzima.utils.Fonts; import com.muzima.utils.StringUtils; import java.util.ArrayList; import java.util.List; public class EncounterObservationsAdapter extends ObservationsAdapter { protected BackgroundListQueryTaskListener backgroundListQueryTaskListener; protected String encounterUuid; protected Encounter encounter; public EncounterObservationsAdapter(Activity activity, int textViewResourceId, ObservationController observationController, Encounter encounter){ super(activity, textViewResourceId, observationController); this.encounter = encounter; encounterUuid = encounter.getUuid(); } @Override public void reloadData() { new BackgroundQueryTask().execute(encounterUuid); } @Override public View getView(int position, View convertView, ViewGroup parent){ Observation observation =getItem(position); Context context = getContext(); EncounterObservationsViewHolder holder; if(convertView==null){ LayoutInflater layoutInflater = LayoutInflater.from(context); convertView = layoutInflater.inflate(R.layout.item_encounter_observation,parent,false); holder=new EncounterObservationsViewHolder(); holder.conceptQuestion = (TextView)convertView.findViewById(R.id.observationHeader); holder.observationValue = (TextView)convertView.findViewById(R.id.observationValue); holder.observationDate = (TextView)convertView.findViewById(R.id.observationDate); holder.observationComplex = (ImageView)convertView.findViewById(R.id.observationComplex); holder.divider = convertView.findViewById(R.id.divider); convertView.setTag(holder); }else{ holder = (EncounterObservationsViewHolder)convertView.getTag(); } holder.setObservation(observation); return convertView; } public void setBackgroundListQueryTaskListener(BackgroundListQueryTaskListener backgroundListQueryTaskListener) { this.backgroundListQueryTaskListener = backgroundListQueryTaskListener; } private class EncounterObservationsViewHolder extends ViewHolder { public TextView conceptQuestion; public TextView observationDate; public TextView observationValue; public ImageView observationComplex; public View divider; protected void setObservation(Observation observation) { int conceptColor = observationController.getConceptColor(observation.getConcept().getUuid()); String observationConceptType = observation.getConcept().getConceptType().getName(); if (StringUtils.equals(observationConceptType, "Complex")){ observationValue.setVisibility(View.GONE); observationComplex.setVisibility(View.VISIBLE); } else { observationValue.setVisibility(View.VISIBLE); observationComplex.setVisibility(View.GONE); observationValue.setTypeface(Fonts.roboto_medium(getContext())); observationValue.setTextColor(conceptColor); observationValue.setText(observation.getValueAsString()); } divider.setBackgroundColor(conceptColor); observationDate.setText(DateUtils.getMonthNameFormattedDate(observation.getObservationDatetime())); observationDate.setTypeface(Fonts.roboto_light(getContext())); observationDate.setTextColor(conceptColor); conceptQuestion.setBackgroundColor(conceptColor); conceptQuestion.setText(observation.getConcept().getName()); } } private class BackgroundQueryTask extends AsyncTask<String, Void, List<Observation>> { @Override protected void onPreExecute() { if (backgroundListQueryTaskListener != null) { backgroundListQueryTaskListener.onQueryTaskStarted(); } } @Override protected List<Observation> doInBackground(String... params) { List<Observation> observations = null; try { observations=new ArrayList<Observation>(); Encounters encounterWithObservations = observationController.getObservationsByEncounterUuid(encounter.getUuid()); for(EncounterWithObservations encounterWithObs:encounterWithObservations){ observations.addAll(encounterWithObs.getObservations()); } }catch(ObservationController.LoadObservationException e){ Log.e(this.getClass().getSimpleName(),"Could not get Observations", e); } return observations; } @Override protected void onPostExecute(List<Observation> observations){ if(observations==null){ Toast.makeText(getContext(), getContext().getString(R.string.error_observation_load), Toast.LENGTH_SHORT).show(); return; } clear(); addAll(observations); notifyDataSetChanged(); backgroundListQueryTaskListener.onQueryTaskFinish(); } } }