package de.guerda.matekarte.details; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import java.util.List; import de.guerda.matekarte.R; import de.guerda.matekarte.dealers.DrinkStatus; import de.guerda.matekarte.dealers.DrinkStatusEnum; /** * Created by philip on 28.12.2014. */ public class DrinkListAdapter extends ArrayAdapter<DrinkStatus> { private static final String LOGTAG = DrinkListAdapter.class.getName(); private static final String DRINK_LOGO_ID_NO_DRINK = "@drawable/drink_no_logo"; private final List<DrinkStatus> drinkList; private final Context context; private Drawable noDrinkLogoDrawable; public DrinkListAdapter(Context aContext, List<DrinkStatus> aDrinkList) { super(aContext, 0, aDrinkList); context = aContext; drinkList = aDrinkList; } @Override public View getView(int aPosition, View aConvertView, ViewGroup aParent) { Log.d(LOGTAG, "Inflating detail list"); View tmpView; if (aConvertView == null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); tmpView = inflater.inflate(R.layout.list_item_drink, aParent, false); } else { tmpView = aConvertView; } DrinkStatus tmpDrink = drinkList.get(aPosition); Drawable tmpDrawable; //Determine drink logo String tmpAltText; if (tmpDrink != null) { String tmpResourceUri = "@drawable/drink_" + tmpDrink.getDrinkId(); Log.i(LOGTAG, "Loading drink logo '" + tmpResourceUri + "'..."); int tmpImageResource = getResourceId(tmpResourceUri); tmpDrawable = context.getResources().getDrawable(tmpImageResource); // Update alternative icon text tmpAltText = DrinkIdMap.getInstance().getNameForDrinkId(tmpDrink.getDrinkId()); // Updating drink status //TODO refactor in adapter to DrinkStatusEnum updateDrinkStatusColor(tmpView, DrinkStatusEnum.fromString("" + tmpDrink.getStatus())); } else { Log.e(LOGTAG, "Could not find drink at position " + aPosition + "!"); tmpDrawable = getNoDrinkLogoLogo(); // Update alternative text tmpAltText = "No drink logo"; } // Updating the drink logo ImageView tmpDrinkLogo = (ImageView) tmpView.findViewById(R.id.drink_logo); tmpDrinkLogo.setImageDrawable(tmpDrawable); Log.d(LOGTAG, "Done Inflating detail list"); return tmpView; } private Drawable getNoDrinkLogoLogo() { if (noDrinkLogoDrawable == null) { String tmpResourceUri = DRINK_LOGO_ID_NO_DRINK; Log.i(LOGTAG, "Loading drink logo '" + tmpResourceUri + "'..."); int tmpImageResource = getResourceId(tmpResourceUri); noDrinkLogoDrawable = context.getResources().getDrawable(tmpImageResource); } return noDrinkLogoDrawable; } private void updateDrinkStatusColor(View tmpView, DrinkStatusEnum aStatus) { String tmpResourceUri; View tmpDrinkStatusColor = tmpView.findViewById(R.id.drink_status_color); tmpResourceUri = "@color/drink_status_" + aStatus.getStatusId(); Log.i(LOGTAG, "Loading status color '" + tmpResourceUri + "'..."); int tmpColorResource = getResourceId(tmpResourceUri); int tmpStatusColor = context.getResources().getColor(tmpColorResource); tmpDrinkStatusColor.setBackgroundColor(tmpStatusColor); } private int getResourceId(String tmpResourceUri) { return context.getResources().getIdentifier(tmpResourceUri, null, context.getPackageName()); } }