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.OrganismeModele;
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 marchandise
* disponible.
*/
public final class ActionMarchandiseDispo implements OnClickListener,
DialogInterface.OnClickListener {
private static final int ACTION_AUCUNE_CONNEXION = 1;
private static final int ACTION_NORMAL = 2;
private int actionBouton = ACTION_NORMAL;
/**
* Button collecter
*/
private final View reserverButton;
/**
* Context pour accéder au strings.
*/
private final Context context;
/**
* Objet à modifier.
*/
private final AlimentaireModele modele;
/**
* Organisme faisant la réservation
*/
private final OrganismeModele receveur;
/**
* Dépot pour gérer les requête.
*/
private final AlimentaireModeleDepot depot;
private final Runnable reserverCallback = new Runnable() {
@Override
public void run() {
Snackbar.make(ActionMarchandiseDispo.this.reserverButton,
R.string.msg_reservation_ajoute,
Snackbar.LENGTH_SHORT)
.show();
}
};
private ActionMarchandiseDispo(View reserverButton,
OrganismeModele receveur,
AlimentaireModele modele) {
this.reserverButton = reserverButton;
this.reserverButton.setOnClickListener(this);
this.receveur = receveur;
this.context = reserverButton.getContext();
this.modele = modele;
this.depot = DepotManager.getInstance().getAlimentaireModeleDepot();
}
public static ActionMarchandiseDispo instancier(@NonNull View reserverButton,
@NonNull OrganismeModele receveur,
@NonNull AlimentaireModele modele) {
return new ActionMarchandiseDispo(reserverButton, receveur, modele);
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
if (this.actionBouton == ACTION_NORMAL) {
this.depot.ajouterReservation(this.modele, this.receveur, this.reserverCallback);
}
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.actionBouton = ACTION_AUCUNE_CONNEXION;
}
} else if (v.equals(this.reserverButton)) {
this.afficherDialog(R.string.msg_reservation_confirme_ajout);
this.actionBouton = ACTION_NORMAL;
}
}
}
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();
}
}