package com.pam.codenamehippie.controleur; import android.content.Context; import android.content.DialogInterface; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.view.View; import android.view.View.OnClickListener; import com.pam.codenamehippie.R; import com.pam.codenamehippie.modele.AlimentaireModele; import com.pam.codenamehippie.modele.depot.AlimentaireModeleDepot; import com.pam.codenamehippie.modele.depot.DepotManager; import static android.content.Context.WIFI_SERVICE; /** * Classe servant à encapsuler les fonctions de button d'item de liste view de réservation. */ public final class ActionReservation implements OnClickListener, DialogInterface.OnClickListener { private static final int ACTION_COLLECTER = 1; private static final int ACTION_SUPPRIMER = 2; private static final int ACTION_AUCUNE_CONNEXION = 3; /** * Button supprimer */ private final View supprimerButton; /** * Button collecter */ private final View collecterButton; /** * Context pour accéder au strings. */ private final Context context; /** * Objet à modifier. */ private final AlimentaireModele modele; /** * Dépot pour gérer les requête. */ private final AlimentaireModeleDepot depot; private final Runnable collecterCallback = new Runnable() { @Override public void run() { Snackbar.make(ActionReservation.this.collecterButton, R.string.msg_reservation_collecte, Snackbar.LENGTH_SHORT) .show(); } }; private final Runnable supprimerCallback = new Runnable() { @Override public void run() { Snackbar.make(ActionReservation.this.supprimerButton, R.string.msg_reservation_supprime, Snackbar.LENGTH_SHORT) .show(); } }; /** * identifiant du button cliqué. */ private int actionButton; private ActionReservation(View supprimerButton, View collecterButton, AlimentaireModele modele) { this.collecterButton = collecterButton; this.collecterButton.setOnClickListener(this); this.supprimerButton = supprimerButton; this.supprimerButton.setOnClickListener(this); this.context = supprimerButton.getContext(); this.modele = modele; this.depot = DepotManager.getInstance().getAlimentaireModeleDepot(); } public static ActionReservation instancier(@NonNull View supprimerButton, @NonNull View collecterButton, @NonNull AlimentaireModele modele) { return new ActionReservation(supprimerButton, collecterButton, modele); } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_POSITIVE: switch (this.actionButton) { case ACTION_COLLECTER: this.depot.collecter(this.modele, this.collecterCallback); break; case ACTION_SUPPRIMER: this.depot.annulerReservation(this.modele, this.supprimerCallback); break; } dialog.dismiss(); break; default: dialog.dismiss(); break; } } @Override public void onClick(View v) { ConnectivityManager connectivityManager = ((ConnectivityManager) this.context.getSystemService(Context.CONNECTIVITY_SERVICE)); if (connectivityManager != null) { NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); if (((activeNetwork != null) && !activeNetwork.isConnected()) || (activeNetwork == null)) { WifiManager wifiManager = ((WifiManager) this.context.getSystemService(WIFI_SERVICE)); if (((wifiManager != null) && !wifiManager.isWifiEnabled())) { wifiManager.setWifiEnabled(true); } if (((activeNetwork != null) && !activeNetwork.isConnected()) || (activeNetwork == null)) { // TODO: Internet check 2.0 this.afficherOkDialog(R.string.error_no_internet); this.actionButton = ACTION_AUCUNE_CONNEXION; } } else if (v.equals(this.collecterButton)) { this.afficherDialog(R.string.msg_reservation_confirme_collecte); this.actionButton = ACTION_COLLECTER; } else { this.afficherDialog(R.string.msg_reservation_confirme_suppression); this.actionButton = ACTION_SUPPRIMER; } } } private void afficherDialog(@StringRes int message) { new AlertDialog.Builder(this.context).setMessage(message) .setPositiveButton(R.string.bouton_confirme_oui, this) .setNegativeButton(R.string.bouton_confirme_non, this) .create() .show(); } private void afficherOkDialog(@StringRes int message) { new AlertDialog.Builder(this.context).setMessage(message) .setPositiveButton("OK", this) .create() .show(); } }