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 java.util.ArrayList;
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() {
return new AfficherFragment();
@@ -29,6 +87,7 @@ public class AfficherFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
loadSaveFile();
return inflater.inflate(R.layout.afficher_fragment, container, false);
}
@@ -10,16 +10,21 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TimePicker;
import androidx.fragment.app.Fragment;
import com.exercice.onglet.outilcuisson2021.OutilCuisson;
public class AjouterFragment extends Fragment {
EditText inputPlat;
TimePicker inputDuree;
EditText inputTemperature;
Button btnEffacer;
Button btnValider;
public AjouterFragment() {
}
@@ -38,16 +43,57 @@ public class AjouterFragment extends Fragment {
Bundle savedInstanceState) {
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);
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.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;
}
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)
* - une température (un entier strictement positif et inférieur à TEMPERATURE_MAX)
*
*
* @author INFO2 Semestre 4
*
*/
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
*/
private static final String CHAINE_DEFAUT = "Information incohérente";
@@ -46,7 +45,9 @@ public class OutilCuisson {
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;
/**
@@ -58,45 +59,49 @@ public class OutilCuisson {
/**
* Détermine si un nom de plat est valide (non vide, au plus 20 caractères et ne
* contient pas le caractère '|')
*
* @param nomPlat chaîne à testesr
* @return un booléen égal à vrai ssi la chaîne à tester est valide
*/
public static boolean platValide(String nomPlat) {
return nomPlat.length() > 0 && nomPlat.length() <= LG_MAX_PLAT
&& ! nomPlat.contains("|");
&& !nomPlat.contains("|");
}
/**
* Détermine si le nombre d'heures d'une durée de cuisson est valide
* (comprise entre 0 et 9)
*
* @param heureCuisson heure à tester
* @return un booléen égal à vrai ssi l'heure de la durée est valide
*/
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
* (comprise entre 0 et 59)
*
* @param minuteCuisson minute à tester
* @return un booléen égal à vrai ssi le nombre de minutes de la durée est valide
*/
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
* (strictement positive et inférieure ou égale à TEMPERATURE_MAX)
*
* @param temperature temperature à tester
* @return un booléen égal à vrai ssi la température est valide
*/
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
* Si l'un des arguments est invalide, c'est la constante CHAINE_DEFAUT qui
* est renvoyée
*
* @param nomPlat nom du plat. Doit être non vide, avec au plus
* LG_MAX_PLAT caractères, ne doit pas contenir |
* @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
* 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)
*
* @param source chaîne source de l'extraction
* @return une chaîne contenant le nom du plat ou CHAINE_DEFAUT si la chaîne
* argument est trop courte
@@ -171,6 +178,7 @@ public class OutilCuisson {
* 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
* caractères de la chaîne)
*
* @param source chaîne source de l'extraction
* @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
@@ -183,7 +191,7 @@ public class OutilCuisson {
try {
chaineTemperature = source.substring(source.length() - 3, source.length());
temperature = Integer.parseInt(chaineTemperature);
} catch(NumberFormatException | IndexOutOfBoundsException erreur) {
} catch (NumberFormatException | IndexOutOfBoundsException erreur) {
/*
* erreur lors de l'extraction des 3 derniers caractère
@@ -198,6 +206,7 @@ public class OutilCuisson {
/**
* Renvoie le thermostat correspondant à la temperature arguemnt
* (celle-ci doit être inférieure à TEMPERATURE_MAX)
*
* @param temperature température à convertir
* @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é
* par le paramètre.
*
* @param nbEspace nombre d'espaces à placer dans la chaîne
* @return une chaîne constituée du caractère espace
*/
+9 -9
View File
@@ -10,7 +10,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/ajouter_titre"/>
android:text="@string/ajouter_titre" />
<TableRow> <!-- Plat -->
<TextView
@@ -22,10 +22,10 @@
android:id="@+id/input_plat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_span="2"
android:inputType="text"
android:maxLines="1"
android:maxLength="20"
android:layout_span="2"/>
android:maxLines="1" />
</TableRow>
<!-- Durée de cuisson -->
@@ -52,25 +52,25 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_column="3"
android:inputType="number" />
android:inputType="number"/>
</TableRow>
<TableRow> <!-- Buttons -->
<Button
android:id="@+id/btn_effacer"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_effacer"
android:layout_column="2"
android:onClick="actionBtnEffacer"
style="?android:attr/buttonBarButtonStyle" />
android:text="@string/btn_effacer"/>
<Button
android:id="@+id/btn_valider"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_valider"
android:onClick="actionBtnAjouter" />
android:text="@string/btn_valider" />
</TableRow>