Code:
package fr.sorkar.todo;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class MainActivity extends AppCompatActivity {
public Spinner importance;
public EditText titreTache;
public EditText contenuTache;
public Button validerTache;
public Button ajouterTache;
public ConstraintLayout fenetrePrincipale;
public List<Tache> listeTache = new ArrayList<>();
String[] choixSpinner = {"1", "2", "3", "4"};
ConstraintLayout frameNouvelleTache;
LinearLayout zoneTache;
private static final String FILE_NAME = "liste_taches.dat";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fenetrePrincipale = findViewById(R.id.fenetrePrincipale);
importance = findViewById(R.id.spinnerImportance);
titreTache = findViewById(R.id.titreTache);
contenuTache = findViewById(R.id.contenuTache);
validerTache = findViewById(R.id.validerTache);
frameNouvelleTache = findViewById(R.id.frameNouvelleTache);
zoneTache = findViewById(R.id.zoneTache);
ajouterTache = findViewById(R.id.ajouterTache);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, choixSpinner);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
importance.setAdapter(adapter);
validerTache.setVisibility(View.INVISIBLE);
//Chargement de la liste des tache
try {
FileInputStream fis = openFileInput(FILE_NAME);
ObjectInputStream ois = new ObjectInputStream(fis);
listeTache = (List<Tache>) ois.readObject();
ois.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
// Affichage de la liste des taches
for (Tache tache : listeTache) {
//Creation d'un linearLayout horizontal avec alignement a droite des elements
LinearLayout layoutTexTViewTache = new LinearLayout(this);
layoutTexTViewTache.setOrientation(LinearLayout.HORIZONTAL);
layoutTexTViewTache.setGravity(Gravity.END);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(30, 10, 30, 0);
layoutTexTViewTache.setLayoutParams(params);
//Creation d'un textView
TextView nouveauTextView = new TextView(this);
nouveauTextView.setPadding(40, 20, 0, 20);
nouveauTextView.setGravity(Gravity.CENTER_VERTICAL);
nouveauTextView.setText(String.format("%s %s", tache.getImportance(), tache.getTitreTache()));
LinearLayout.LayoutParams paramsTextView = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
nouveauTextView.setLayoutParams(paramsTextView);
nouveauTextView.setHeight(300);
if (tache.getBarre()) {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (Paint.STRIKE_THRU_TEXT_FLAG));
sauvegarderListeTaches();
}
nouveauTextView.setOnClickListener(v -> {
zoneTache.setVisibility(View.INVISIBLE);
ajouterTache.setVisibility(View.INVISIBLE);
frameNouvelleTache.setVisibility(View.VISIBLE);
validerTache.setVisibility(View.VISIBLE);
importance.setSelection(adapter.getPosition(tache.getImportance()));
titreTache.setText(tache.getTitreTache());
contenuTache.setText(tache.getContenuTache());
switch (tache.getImportance()) {
case "1": {
int color = ContextCompat.getColor(this, R.color.red);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "2": {
int color = ContextCompat.getColor(this, R.color.orange);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "3": {
int color = ContextCompat.getColor(this, R.color.yellow);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
}
});
//Creation du bouton barrer
Button barrer = new Button(this);
barrer.setBackgroundResource(R.drawable.boutonbarrer);
LinearLayout.LayoutParams paramsBoutonBarrer = new LinearLayout.LayoutParams(
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
);
barrer.setLayoutParams(paramsBoutonBarrer);
//Ajout d'un écouteur d'événements "onClick" au bouton "barrer"
barrer.setOnClickListener(v -> {
int indexTache = listeTache.indexOf(tache);
if (indexTache >= 0 && indexTache < listeTache.size()) {
if (tache.getBarre()) {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
tache.setBarre(false);
sauvegarderListeTaches();
}
else {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
tache.setBarre(true);
sauvegarderListeTaches();
}
}
sauvegarderListeTaches();
});
//Creation du bouton supprimer
Button supprimer = new Button(this);
supprimer.setBackgroundResource(R.drawable.boutonsupprimer);
LinearLayout.LayoutParams paramsTailleButton = new LinearLayout.LayoutParams(
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
);
supprimer.setLayoutParams(paramsTailleButton);
//Ajout d'un écouteur d'événements "onClick" au bouton "supprimer"
supprimer.setOnClickListener(v -> {
int indexTache = listeTache.indexOf(tache);
if (indexTache >= 0 && indexTache < listeTache.size()) {
listeTache.remove(indexTache);
}
zoneTache.removeView(layoutTexTViewTache);
sauvegarderListeTaches();
});
//Affichage de tout les elements
zoneTache.addView(layoutTexTViewTache);
layoutTexTViewTache.addView(nouveauTextView);
layoutTexTViewTache.addView(barrer);
layoutTexTViewTache.addView(supprimer);
switch (tache.getImportance()) {
case "1": {
int color = ContextCompat.getColor(this, R.color.red);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "2": {
int color = ContextCompat.getColor(this, R.color.orange);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "3": {
int color = ContextCompat.getColor(this, R.color.yellow);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
}
}
}
private void rafraichirZoneTache() {
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, choixSpinner);
zoneTache.removeAllViews(); // Supprime tous les éléments actuellement affichés dans la zone de taches
for (Tache tache : listeTache) {
//Creation d'un linearLayout horizontal avec alignement a droite des elements
LinearLayout layoutTexTViewTache = new LinearLayout(this);
layoutTexTViewTache.setOrientation(LinearLayout.HORIZONTAL);
layoutTexTViewTache.setGravity(Gravity.END);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(30, 10, 30, 0);
layoutTexTViewTache.setLayoutParams(params);
//Creation d'un textView
TextView nouveauTextView = new TextView(this);
nouveauTextView.setPadding(40, 20, 0, 20);
nouveauTextView.setGravity(Gravity.CENTER_VERTICAL);
nouveauTextView.setText(String.format("%s %s", tache.getImportance(), tache.getTitreTache()));
LinearLayout.LayoutParams paramsTextView = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
nouveauTextView.setLayoutParams(paramsTextView);
nouveauTextView.setHeight(300);
if (tache.getBarre()) {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (Paint.STRIKE_THRU_TEXT_FLAG));
sauvegarderListeTaches();
}
nouveauTextView.setOnClickListener(v -> {
zoneTache.setVisibility(View.INVISIBLE);
ajouterTache.setVisibility(View.INVISIBLE);
frameNouvelleTache.setVisibility(View.VISIBLE);
validerTache.setVisibility(View.VISIBLE);
importance.setSelection(adapter.getPosition(tache.getImportance()));
titreTache.setText(tache.getTitreTache());
contenuTache.setText(tache.getContenuTache());
switch (tache.getImportance()) {
case "1": {
int color = ContextCompat.getColor(this, R.color.red);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "2": {
int color = ContextCompat.getColor(this, R.color.orange);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "3": {
int color = ContextCompat.getColor(this, R.color.yellow);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
}
});
//Creation du bouton barrer
Button barrer = new Button(this);
barrer.setBackgroundResource(R.drawable.boutonbarrer);
LinearLayout.LayoutParams paramsBoutonBarrer = new LinearLayout.LayoutParams(
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
);
barrer.setLayoutParams(paramsBoutonBarrer);
//Ajout d'un écouteur d'événements "onClick" au bouton "barrer"
barrer.setOnClickListener(v -> {
int indexTache = listeTache.indexOf(tache);
if (indexTache >= 0 && indexTache < listeTache.size()) {
if (tache.getBarre()) {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
tache.setBarre(false);
sauvegarderListeTaches();
}
else {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
tache.setBarre(true);
sauvegarderListeTaches();
}
}
sauvegarderListeTaches();
});
//Creation du bouton supprimer
Button supprimer = new Button(this);
supprimer.setBackgroundResource(R.drawable.boutonsupprimer);
LinearLayout.LayoutParams paramsTailleButton = new LinearLayout.LayoutParams(
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
);
supprimer.setLayoutParams(paramsTailleButton);
//Ajout d'un écouteur d'événements "onClick" au bouton "supprimer"
supprimer.setOnClickListener(v -> {
int indexTache = listeTache.indexOf(tache);
if (indexTache >= 0 && indexTache < listeTache.size()) {
listeTache.remove(indexTache);
}
zoneTache.removeView(layoutTexTViewTache);
sauvegarderListeTaches();
});
//Affichage de tout les elements
zoneTache.addView(layoutTexTViewTache);
layoutTexTViewTache.addView(nouveauTextView);
layoutTexTViewTache.addView(barrer);
layoutTexTViewTache.addView(supprimer);
switch (tache.getImportance()) {
case "1": {
int color = ContextCompat.getColor(this, R.color.red);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "2": {
int color = ContextCompat.getColor(this, R.color.orange);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "3": {
int color = ContextCompat.getColor(this, R.color.yellow);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
}
}
}
public void sauvegarderListeTaches() {
try {
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(listeTache);
oos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void NouvelleTache(View view) {
//rend la frame visible et reinitialise tout les champs
importance.setSelection(0);
zoneTache.setVisibility(View.INVISIBLE);
ajouterTache.setVisibility(View.INVISIBLE);
titreTache.setText(R.string.titreTache);
contenuTache.setText(R.string.contenuTache);
frameNouvelleTache.setVisibility(View.VISIBLE);
validerTache.setVisibility(View.VISIBLE);
}
public void EnregistrerTache(View view) {
String titre = titreTache.getText().toString();
String contenu = contenuTache.getText().toString();
String importanceStr = importance.getSelectedItem().toString();
// Vérifier si la tache existe déjà
boolean tacheExistante = false;
for (Tache tache : listeTache) {
if (tache.getTitreTache().equals(titre)) {
tache.setImportance(importanceStr);
tache.setContenuTache(contenu);
titreTache.setText(tache.getTitreTache());
contenuTache.setText(tache.getContenuTache());
tacheExistante = true;
sauvegarderListeTaches();
rafraichirZoneTache();
frameNouvelleTache.setVisibility(View.INVISIBLE);
zoneTache.setVisibility(View.VISIBLE);
ajouterTache.setVisibility(View.VISIBLE);
break;
}
}
// Si la tache n'existe pas, créer une nouvelle tache et l'ajouter à listeTache
if (!tacheExistante) {
//Cree une tache selon l'entree saisieTache avec l'importance donnée
Tache tache = new Tache(importance.getSelectedItem().toString(), titreTache.getText().toString(), contenuTache.getText().toString(), false);
listeTache.add(tache);
//Masque la zone nouvelle tache et rend visible la zone d'affichage de toute les taches
ajouterTache.setVisibility(View.VISIBLE);
zoneTache.setVisibility(View.VISIBLE);
frameNouvelleTache.setVisibility(View.INVISIBLE);
//Parcours la liste des taches
for (int i = 0; i <= listeTache.size(); i++) {
//Si on atteint le dernier élément
if (i == listeTache.size()) {
//Creation d'un linearLayout horizontal avec alignement a droite des elements
LinearLayout layoutTexTViewTache = new LinearLayout(this);
layoutTexTViewTache.setOrientation(LinearLayout.HORIZONTAL);
layoutTexTViewTache.setGravity(Gravity.END);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(30, 20, 30, 0);
layoutTexTViewTache.setLayoutParams(params);
//Creation d'un textView
TextView nouveauTextView = new TextView(this);
nouveauTextView.setPadding(40, 20, 0, 20);
nouveauTextView.setGravity(Gravity.CENTER_VERTICAL);
nouveauTextView.setText(String.format("%s %s", tache.getImportance(), tache.getTitreTache()));
LinearLayout.LayoutParams paramsTextView = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
nouveauTextView.setLayoutParams(paramsTextView);
nouveauTextView.setHeight(300);
//Ajout d'un listener sur le textview
nouveauTextView.setOnClickListener(v -> {
//Afficher le contenu de la tache quand on clique sur la tache.
zoneTache.setVisibility(View.INVISIBLE);
ajouterTache.setVisibility(View.INVISIBLE);
frameNouvelleTache.setVisibility(View.VISIBLE);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, choixSpinner);
importance.setSelection(adapter.getPosition(tache.getImportance()));
titreTache.setText(tache.getTitreTache());
contenuTache.setText(tache.getContenuTache());
});
//Creation du bouton barrer
Button barrer = new Button(this);
barrer.setBackgroundResource(R.drawable.boutonbarrer);
LinearLayout.LayoutParams paramsBoutonBarrer = new LinearLayout.LayoutParams(
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
);
barrer.setLayoutParams(paramsBoutonBarrer);
//Ajout d'un écouteur d'événements "onClick" au bouton "barrer"
barrer.setOnClickListener(v -> {
int indexTache = listeTache.indexOf(tache);
if (indexTache >= 0 && indexTache < listeTache.size()) {
if (tache.getBarre()) {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
tache.setBarre(false);
sauvegarderListeTaches();
}
else {
nouveauTextView.setPaintFlags(nouveauTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
tache.setBarre(true);
sauvegarderListeTaches();
}
}
sauvegarderListeTaches();
});
//Creation du bouton supprimer
Button supprimer = new Button(this);
supprimer.setBackgroundResource(R.drawable.boutonsupprimer);
LinearLayout.LayoutParams paramsTailleButton = new LinearLayout.LayoutParams(
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics()),
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics())
);
supprimer.setLayoutParams(paramsTailleButton);
//Ajout d'un écouteur d'événements "onClick" au bouton "supprimer"
supprimer.setOnClickListener(v -> {
int indexTache = listeTache.indexOf(tache);
if (indexTache >= 0 && indexTache < listeTache.size()) {
listeTache.remove(indexTache);
}
zoneTache.removeView(layoutTexTViewTache);
sauvegarderListeTaches();
});
//Affichage de tout les elements
zoneTache.addView(layoutTexTViewTache);
layoutTexTViewTache.addView(nouveauTextView);
layoutTexTViewTache.addView(barrer);
layoutTexTViewTache.addView(supprimer);
switch (tache.getImportance()) {
case "1": {
int color = ContextCompat.getColor(this, R.color.red);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "2": {
int color = ContextCompat.getColor(this, R.color.orange);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
case "3": {
int color = ContextCompat.getColor(this, R.color.yellow);
layoutTexTViewTache.setBackgroundColor(color);
break;
}
}
}
}
//Enregistrement de la liste des taches
sauvegarderListeTaches();
}
}
//Methode a laisser pour vider la liste de tache manuellement (le bouton a été viré)
public void ViderListe(View view){
listeTache.clear();
sauvegarderListeTaches();
}
@Override
protected void onPause() {
super.onPause();
sauvegarderListeTaches();
}
@Override
protected void onResume() {
super.onResume();
try {
FileInputStream fis = openFileInput(FILE_NAME);
ObjectInputStream ois = new ObjectInputStream(fis);
listeTache = (List<Tache>) ois.readObject();
ois.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
rafraichirZoneTache();
}
}
Puis mon objet Tache :