Ajout Cuisson, action Annuler, Valider

Ajout de la classe Cuisson (Sérialisable)

// Classe AjouterFragment
- Definition des valeurs par défaut du time picker
- Ajout des actions Annuler et Valider (avec des tests qui creer un nouvel objet qui est stocké dans la liste de AfficherFragment)

// Classe Afficher Fragment
Ajout d'une arraylist qui contiens les cuissons
Ajout de deux fonctions pour charger et sauvegarder les cuissons dans un fichier (ne fonctionne pas encore, a faire)
This commit is contained in:
LucasV-IUT
2022-02-21 21:22:20 +01:00
parent ecec0b5a88
commit 1325df8817
5 changed files with 292 additions and 143 deletions
@@ -13,9 +13,67 @@ import android.view.ViewGroup;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import java.util.ArrayList;
public class AfficherFragment extends Fragment { public class AfficherFragment extends Fragment {
public AfficherFragment() {} /**
* Liste des cuissons enregistré dans l'application
*/
public static ArrayList<Cuisson> listeCuisson = new ArrayList<>();
/**
* Ajouter une cuisson
*
* @param cuisson La cuisson à ajouter
*/
public static void addCuisson(Cuisson cuisson) {
listeCuisson.add(cuisson);
updateSaveFile();
}
/**
* Met a jour le fichier dataCuisson.txt qui sauvegarde la liste des cuissons
*/
private static void updateSaveFile() {
// TODO Il faut creer un fichier cuisson.txt si il n'existe pas
// try {
// FileOutputStream fos = new FileOutputStream("dataCuisson.txt", false);
// ObjectOutputStream oos = new ObjectOutputStream(fos);
// oos.writeObject(listeCuisson);
// oos.close();
// fos.close();
// } catch (IOException ioe) {
// ioe.printStackTrace();
// }
}
/**
* Charge la liste des cuissons contenue dans le fichier dataCuisson.txt
*/
private static void loadSaveFile() {
// TODO à décommenter lorsque updateSaveFile() sera terminé
// try {
// FileInputStream fis = new FileInputStream("dataCuisson.txt");
// ObjectInputStream ois = new ObjectInputStream(fis);
//
// listeCuisson = (ArrayList) ois.readObject();
//
// ois.close();
// fis.close();
// } catch (FileNotFoundException ignored) {
// } catch (IOException ioe) {
// ioe.printStackTrace();
// } catch (ClassNotFoundException c) {
// System.out.println("Class not found");
// c.printStackTrace();
// }
}
public AfficherFragment() {
}
public static AfficherFragment newInstance() { public static AfficherFragment newInstance() {
return new AfficherFragment(); return new AfficherFragment();
@@ -29,6 +87,7 @@ public class AfficherFragment extends Fragment {
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
loadSaveFile();
return inflater.inflate(R.layout.afficher_fragment, container, false); return inflater.inflate(R.layout.afficher_fragment, container, false);
} }
@@ -10,16 +10,21 @@ import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TimePicker; import android.widget.TimePicker;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.exercice.onglet.outilcuisson2021.OutilCuisson;
public class AjouterFragment extends Fragment { public class AjouterFragment extends Fragment {
EditText inputPlat; EditText inputPlat;
TimePicker inputDuree; TimePicker inputDuree;
EditText inputTemperature; EditText inputTemperature;
Button btnEffacer;
Button btnValider;
public AjouterFragment() { public AjouterFragment() {
} }
@@ -38,16 +43,57 @@ public class AjouterFragment extends Fragment {
Bundle savedInstanceState) { Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.ajouter_fragment, container, false); View view = inflater.inflate(R.layout.ajouter_fragment, container, false);
/* Liste des éléments intéractifs */
inputPlat = view.findViewById(R.id.input_plat);
inputDuree = view.findViewById(R.id.input_duree); inputDuree = view.findViewById(R.id.input_duree);
inputTemperature = view.findViewById(R.id.input_temperature);
btnEffacer = view.findViewById(R.id.btn_effacer);
btnValider = view.findViewById(R.id.btn_valider);
/* Initialise le TimePicker en format 24h avec par défaut la valeur 0h40 */
inputDuree.setIs24HourView(true); inputDuree.setIs24HourView(true);
inputDuree.setHour(0);
inputDuree.setMinute(40);
/*
* Action de création de la nouvelle cuisson
*/
btnValider.setOnClickListener(view1 -> {
/* Récupère toutes les valeurs des champs */
String txtPlat = inputPlat.getText().toString();
String txtTemperature = inputTemperature.getText().toString();
int hDuree = inputDuree.getHour();
int mDuree = inputDuree.getMinute();
/* Convertis la température en entier */
int temperature = txtTemperature.isEmpty() ? -1 : Integer.parseInt(txtTemperature);
/* Cas ou les valeurs ne sont pas valides */
if (!OutilCuisson.platValide(txtPlat)
|| !OutilCuisson.heureCuissonValide(hDuree)
|| !OutilCuisson.minuteCuissonValide(mDuree)
|| !OutilCuisson.temperatureValide(temperature)) {
System.out.println("Erreur");
}
/* Cas ou les valeurs sont valides : on ajoute une nouvelle cuisson dans la liste a afficher */
AfficherFragment.addCuisson(new Cuisson(txtPlat, hDuree, mDuree, temperature));
});
/*
* Efface le contenu des champs de textes et met le TimePicker à 0h40
*/
btnEffacer.setOnClickListener(view2 -> {
inputPlat.setText("");
inputDuree.setHour(0);
inputDuree.setMinute(40);
inputTemperature.setText("");
});
return view; return view;
} }
public void actionBtnEffacer(View view) {
}
public void actionBtnAjouter(View view) {
}
} }
@@ -0,0 +1,34 @@
package com.example.outilcuisson;
import java.io.Serializable;
public class Cuisson implements Serializable {
private String plat;
private int heure;
private int minute;
private int degree;
public Cuisson(String plat, int heure, int minute, int degree) {
this.plat = plat;
this.heure = heure;
this.minute = minute;
this.degree = degree;
}
public String getPlat() {
return plat;
}
public int getHeure() {
return heure;
}
public int getMinute() {
return minute;
}
public int getDegree() {
return degree;
}
}
@@ -29,13 +29,12 @@ package com.exercice.onglet.outilcuisson2021;
* - les minutes de la durée de la cuisson (un entier entre O et 50) * - les minutes de la durée de la cuisson (un entier entre O et 50)
* - une température (un entier strictement positif et inférieur à TEMPERATURE_MAX) * - une température (un entier strictement positif et inférieur à TEMPERATURE_MAX)
* *
*
* @author INFO2 Semestre 4 * @author INFO2 Semestre 4
*
*/ */
public class OutilCuisson { public class OutilCuisson {
/** Valeur de la chaîne qui représente une cuisson si l'une des caractéristiques /**
* Valeur de la chaîne qui représente une cuisson si l'une des caractéristiques
* de la cuisson est invalide * de la cuisson est invalide
*/ */
private static final String CHAINE_DEFAUT = "Information incohérente"; private static final String CHAINE_DEFAUT = "Information incohérente";
@@ -46,7 +45,9 @@ public class OutilCuisson {
public static final int TEMPERATURE_MAX = 300; public static final int TEMPERATURE_MAX = 300;
/** Valeur maximale pour le nombre d'heures d'une cuisson */ /**
* Valeur maximale pour le nombre d'heures d'une cuisson
*/
public static final int HEURE_MAX = 9; public static final int HEURE_MAX = 9;
/** /**
@@ -58,6 +59,7 @@ public class OutilCuisson {
/** /**
* Détermine si un nom de plat est valide (non vide, au plus 20 caractères et ne * Détermine si un nom de plat est valide (non vide, au plus 20 caractères et ne
* contient pas le caractère '|') * contient pas le caractère '|')
*
* @param nomPlat chaîne à testesr * @param nomPlat chaîne à testesr
* @return un booléen égal à vrai ssi la chaîne à tester est valide * @return un booléen égal à vrai ssi la chaîne à tester est valide
*/ */
@@ -70,33 +72,36 @@ public class OutilCuisson {
/** /**
* Détermine si le nombre d'heures d'une durée de cuisson est valide * Détermine si le nombre d'heures d'une durée de cuisson est valide
* (comprise entre 0 et 9) * (comprise entre 0 et 9)
*
* @param heureCuisson heure à tester * @param heureCuisson heure à tester
* @return un booléen égal à vrai ssi l'heure de la durée est valide * @return un booléen égal à vrai ssi l'heure de la durée est valide
*/ */
public static boolean heureCuissonValide(int heureCuisson) { public static boolean heureCuissonValide(int heureCuisson) {
return heureCuisson >= 0 && heureCuisson <= HEURE_MAX; return 0 <= heureCuisson && heureCuisson <= HEURE_MAX;
} }
/** /**
* Détermine si le nombre de minutes d'une durée de cuisson est valide * Détermine si le nombre de minutes d'une durée de cuisson est valide
* (comprise entre 0 et 59) * (comprise entre 0 et 59)
*
* @param minuteCuisson minute à tester * @param minuteCuisson minute à tester
* @return un booléen égal à vrai ssi le nombre de minutes de la durée est valide * @return un booléen égal à vrai ssi le nombre de minutes de la durée est valide
*/ */
public static boolean minuteCuissonValide(int minuteCuisson) { public static boolean minuteCuissonValide(int minuteCuisson) {
return minuteCuisson >= 0 && minuteCuisson <= 59; return 0 <= minuteCuisson && minuteCuisson <= 59;
} }
/** /**
* Détermine si une température de cuisson est valide * Détermine si une température de cuisson est valide
* (strictement positive et inférieure ou égale à TEMPERATURE_MAX) * (strictement positive et inférieure ou égale à TEMPERATURE_MAX)
*
* @param temperature temperature à tester * @param temperature temperature à tester
* @return un booléen égal à vrai ssi la température est valide * @return un booléen égal à vrai ssi la température est valide
*/ */
public static boolean temperatureValide(int temperature) { public static boolean temperatureValide(int temperature) {
return temperature > 0 && temperature <= TEMPERATURE_MAX; return 0 < temperature && temperature <= TEMPERATURE_MAX;
} }
@@ -106,6 +111,7 @@ public class OutilCuisson {
* nom du plat | temps de cuisson en heures et minutes | température * nom du plat | temps de cuisson en heures et minutes | température
* Si l'un des arguments est invalide, c'est la constante CHAINE_DEFAUT qui * Si l'un des arguments est invalide, c'est la constante CHAINE_DEFAUT qui
* est renvoyée * est renvoyée
*
* @param nomPlat nom du plat. Doit être non vide, avec au plus * @param nomPlat nom du plat. Doit être non vide, avec au plus
* LG_MAX_PLAT caractères, ne doit pas contenir | * LG_MAX_PLAT caractères, ne doit pas contenir |
* @param heureCuisson nombre d'heures de la durée de la cuisson * @param heureCuisson nombre d'heures de la durée de la cuisson
@@ -153,6 +159,7 @@ public class OutilCuisson {
* Extrait d'une chaîne le nom du plat. On suppose que la chaîne est correctement * Extrait d'une chaîne le nom du plat. On suppose que la chaîne est correctement
* formatée dans le format de la description d'une cuisson gérée par cette classe * formatée dans le format de la description d'une cuisson gérée par cette classe
* (les 20 premiers caractères de la chaîne sont extraits) * (les 20 premiers caractères de la chaîne sont extraits)
*
* @param source chaîne source de l'extraction * @param source chaîne source de l'extraction
* @return une chaîne contenant le nom du plat ou CHAINE_DEFAUT si la chaîne * @return une chaîne contenant le nom du plat ou CHAINE_DEFAUT si la chaîne
* argument est trop courte * argument est trop courte
@@ -171,6 +178,7 @@ public class OutilCuisson {
* est correctement formatée dans le format de la description d'une cuisson * est correctement formatée dans le format de la description d'une cuisson
* gérée par cette classe (la température est présente sur les 3 derniers * gérée par cette classe (la température est présente sur les 3 derniers
* caractères de la chaîne) * caractères de la chaîne)
*
* @param source chaîne source de l'extraction * @param source chaîne source de l'extraction
* @return un entier égal à la température extraite ou bien -1 si un * @return un entier égal à la température extraite ou bien -1 si un
* problème inattendu a été rencontré avec le format de la chaîne * problème inattendu a été rencontré avec le format de la chaîne
@@ -198,6 +206,7 @@ public class OutilCuisson {
/** /**
* Renvoie le thermostat correspondant à la temperature arguemnt * Renvoie le thermostat correspondant à la temperature arguemnt
* (celle-ci doit être inférieure à TEMPERATURE_MAX) * (celle-ci doit être inférieure à TEMPERATURE_MAX)
*
* @param temperature température à convertir * @param temperature température à convertir
* @return l'entier égal au thermostat ou -1 si la température est invalide * @return l'entier égal au thermostat ou -1 si la température est invalide
*/ */
@@ -218,6 +227,7 @@ public class OutilCuisson {
/** /**
* Renvoie une chaîne constituée d'espaces. Le nombre d'espaces est indiqué * Renvoie une chaîne constituée d'espaces. Le nombre d'espaces est indiqué
* par le paramètre. * par le paramètre.
*
* @param nbEspace nombre d'espaces à placer dans la chaîne * @param nbEspace nombre d'espaces à placer dans la chaîne
* @return une chaîne constituée du caractère espace * @return une chaîne constituée du caractère espace
*/ */
+7 -7
View File
@@ -22,10 +22,10 @@
android:id="@+id/input_plat" android:id="@+id/input_plat"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_span="2"
android:inputType="text" android:inputType="text"
android:maxLines="1"
android:maxLength="20" android:maxLength="20"
android:layout_span="2"/> android:maxLines="1" />
</TableRow> </TableRow>
<!-- Durée de cuisson --> <!-- Durée de cuisson -->
@@ -59,18 +59,18 @@
<TableRow> <!-- Buttons --> <TableRow> <!-- Buttons -->
<Button <Button
android:id="@+id/btn_effacer"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/btn_effacer"
android:layout_column="2" android:layout_column="2"
android:onClick="actionBtnEffacer" android:text="@string/btn_effacer"/>
style="?android:attr/buttonBarButtonStyle" />
<Button <Button
android:id="@+id/btn_valider"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/btn_valider" android:text="@string/btn_valider" />
android:onClick="actionBtnAjouter" />
</TableRow> </TableRow>