package com.pam.codenamehippie.ui.adapter;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.pam.codenamehippie.R;
import com.pam.codenamehippie.modele.AlimentaireModele;
import com.pam.codenamehippie.modele.depot.AlimentaireModeleDepot;
import com.pam.codenamehippie.ui.AjoutMarchandiseActivity;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static android.text.format.DateFormat.getLongDateFormat;
/**
* Cette classe permet de faire le lien entre les composantes de l'interface utilisateur et
* la source de données afin de relier les données aux vues correctement.
*/
public class HippieListAdapter extends BaseAdapter {
private final Context context;
private final AlimentaireModeleDepot depot;
private volatile List<AlimentaireModele> items = new ArrayList<>();
public HippieListAdapter(Context context, AlimentaireModeleDepot depot) {
this.context = context;
this.depot = depot;
}
public void setItems(List<AlimentaireModele> items) {
this.items = items;
this.notifyDataSetChanged();
}
@Override
public int getCount() {
return this.items.size();
}
@Override
public AlimentaireModele getItem(int position) {
return this.items.get(position);
}
@Override
public long getItemId(int position) {
return this.getItem(position).getId();
}
/**
* Méthode pour lier les données aux composantes de l'interface utilisateur.
* Implémentation de {@link android.widget.Adapter#getView(int, View, ViewGroup)}
*
* @return Retourne une instance de {@link View} gonfler de liste_dons_row.xml
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
final AlimentaireModele modele = this.getItem(position);
if (row == null) {
LayoutInflater inflater =
(LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.liste_dons_row, parent, false);
}
// Fait afficher l'icône correspondant au bon type alimentaire à côté du texte
String image = modele.getTypeAlimentaire();
ImageView ivDonsCategorie = (ImageView) row.findViewById(R.id.iv_dons_categorie);
switch (image) {
case "Surgelés":
ivDonsCategorie.setImageResource(R.drawable.map_surgele);
break;
case "Fruits et Légumes":
ivDonsCategorie.setImageResource(R.drawable.map_fruit_legume);
break;
case "Boulangerie":
ivDonsCategorie.setImageResource(R.drawable.map_boulangerie);
break;
case "Produits laitiers":
ivDonsCategorie.setImageResource(R.drawable.map_laitier);
break;
case "Viandes":
ivDonsCategorie.setImageResource(R.drawable.map_viande);
break;
case "Non Périssable":
ivDonsCategorie.setImageResource(R.drawable.map_non_perissable);
break;
default:
ivDonsCategorie.setImageResource(R.drawable.map_non_comestible);
break;
}
// Assigner les valeurs nom, description, quantités, unité et ajouter deux ImageButton par
// rangée selon le nombre d'items contenus dans l'ArrayList.
((TextView) row.findViewById(R.id.tv_dons_nom_marchandise)).setText(modele.getNom());
((TextView) row.findViewById(R.id.tv_dons_description_marchandise))
.setText(modele.getDescription());
((TextView) row.findViewById(R.id.tv_dons_qtee_marchandise)).setText(
modele.getQuantiteString());
ImageButton ibDonSupprimer = (ImageButton) row.findViewById(R.id.ib_don_supprimer);
ImageButton ibDonModifier = (ImageButton) row.findViewById(R.id.ib_dons_modifier);
// Modifier un item de la liste liste_dons_row
ibDonModifier.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent =
new Intent(HippieListAdapter.this.context, AjoutMarchandiseActivity.class);
// Créer un bundle pour faire voyager les données vers AjoutMarchandiseActivity
Bundle bundle = new Bundle();
// Insérer les données aux bundle
bundle.putInt(AjoutMarchandiseActivity.MODELE_ID, modele.getId());
if (modele.getDatePeremption() != null) {
Date date = modele.getDatePeremption();
DateFormat df = getLongDateFormat(HippieListAdapter.this.context);
bundle.putString("datePeremption", df.format(date));
}
intent.putExtras(bundle);
HippieListAdapter.this.context.startActivity(intent);
}
});
// Supprimer un item de la liste liste_dons_row
ibDonSupprimer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Runnable showToast = new Runnable() {
@Override
public void run() {
Toast.makeText(HippieListAdapter.this.context,
R.string.msg_produit_supprime,
Toast.LENGTH_LONG
).show();
}
};
// Confirmer la suppression du don
// Pour sauver de la mémoire, on instancie un seul click listener pour les deux
// bouton.
DialogInterface.OnClickListener dialogOnClickListener =
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
HippieListAdapter.this.depot.supprimerModele(modele,
showToast
);
dialog.dismiss();
break;
default:
dialog.dismiss();
break;
}
}
};
// Construction du message pour suppression d'un don
AlertDialog.Builder builder =
new AlertDialog.Builder(HippieListAdapter.this.context);
builder.setMessage(R.string.msg_confirme_suppression)
.setPositiveButton(R.string.bouton_confirme_oui,
dialogOnClickListener
)
.setNegativeButton(R.string.bouton_confirme_non,
dialogOnClickListener
)
.create()
.show();
}
});
return row;
}
}