package de.lukasniemeier.mensa.ui.adapter; import android.animation.Animator; import android.animation.AnimatorInflater; import android.content.Context; import android.preference.PreferenceManager; import android.text.TextUtils; import android.view.Gravity; 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 java.util.ArrayList; import java.util.Collection; import java.util.List; import de.lukasniemeier.mensa.R; import de.lukasniemeier.mensa.model.Meal; import de.lukasniemeier.mensa.model.MealType; import de.lukasniemeier.mensa.utils.Utils; public class MealAdapter extends CardAdapter<Meal> { private final List<CardState<Meal>> filteredItems; private final MealAdapterMealTypeFilter filter; public MealAdapter(Context context, TextView informationView) { super(context); this.filteredItems = new ArrayList<CardState<Meal>>(); this.filter = new MealAdapterMealTypeFilter(this, informationView); } public List<CardState<Meal>> getFilteredItems() { return filteredItems; } @Override public void add(CardState<Meal> object) { filteredItems.add(object); super.add(object); filter.filter(); } @Override public void addAll(Collection<? extends CardState<Meal>> collection) { filteredItems.addAll(collection); super.addAll(collection); filter.filter(); } @Override public void clear() { filteredItems.clear(); super.clear(); filter.filter(); } @Override public CardState<Meal> getItem(int position) { synchronized (filteredItems) { return filteredItems.get(position); } } @Override public int getCount() { synchronized (filteredItems) { return filteredItems.size(); } } public List<CardState<Meal>> getAllItems() { List<CardState<Meal>> allItems = new ArrayList<CardState<Meal>>(); for (int i = 0; i < super.getCount(); i++) { allItems.add(super.getItem(i)); } return allItems; } @Override public MealAdapterMealTypeFilter getFilter() { return filter; } @Override protected Animator createAddAnimator(Context context) { return AnimatorInflater.loadAnimator(context, R.animator.card_flip_left_in); } @Override protected View inflateCardContentLayout(LayoutInflater inflater, ViewGroup container) { return inflater.inflate(R.layout.card_content_meal, container, false); } @Override protected void initializeView(View view, Meal meal, boolean isTurned, boolean hasBeenTurned) { final View ribbonLeftView = view.findViewById(R.id.card_ribbon_left); final View ribbonRightView = view.findViewById(R.id.card_ribbon_right); final TextView nameView = (TextView) view.findViewById(R.id.card_meal_name); final TextView descriptionView = (TextView) view.findViewById(R.id.card_meal_description); final ViewGroup typeGroup = (ViewGroup) view.findViewById(R.id.card_meal_types); if (isTurned) { setupViewBack(meal, ribbonLeftView, ribbonRightView, nameView, descriptionView, typeGroup); } else { setupViewFront(meal, ribbonLeftView, ribbonRightView, nameView, descriptionView, typeGroup); } } private void setupViewFront(Meal meal, View ribbonLeftView, View ribbonRightView, TextView nameView, TextView descriptionView, ViewGroup typeGroup) { nameView.setText(meal.getName()); typeGroup.removeAllViews(); ribbonLeftView.setVisibility(View.GONE); ribbonRightView.setVisibility(View.VISIBLE); nameView.setGravity(Gravity.LEFT); if (PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean("settings_check_prices", true)) { TextView ribbonText = (TextView) ribbonRightView.findViewById(R.id.card_ribbon_right_text); ribbonText.setText(meal.getPrice()); } descriptionView.setText(meal.getDescription()); } private void setupViewBack(Meal meal, View ribbonLeftView, View ribbonRightView, TextView nameView, TextView descriptionView, ViewGroup typeGroup) { nameView.setText(meal.getName()); typeGroup.removeAllViews(); ribbonLeftView.setVisibility(View.VISIBLE); ribbonRightView.setVisibility(View.GONE); nameView.setGravity(Gravity.RIGHT); StringBuilder descriptionText = new StringBuilder(); if (meal.getAdditives().isEmpty()) { descriptionText.append(getContext().getString(R.string.meal_additives_no)); } else { descriptionText.append(TextUtils.join(", ", meal.getAdditives())); } int margin = Utils.dpToPx(getContext(), 5); LinearLayout.LayoutParams typeViewLayout = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); typeViewLayout.setMargins(0, margin, 0, margin); for (MealType type : meal.getTypes()) { ImageView typeView = new ImageView(getContext()); typeView.setLayoutParams(typeViewLayout); typeView.setImageBitmap(type.getIcon()); typeGroup.addView(typeView); } descriptionView.setText(descriptionText.toString()); } }