Ce dépôt contient une application de gestion de tâches (To-Do List) robuste développée pour Android. L'objectif de ce TP était de créer une interface moderne et intuitive permettant non seulement de lister des rappels, mais aussi de gérer leur cycle de vie complet, leur importance et leur échéance, tout en assurant la persistance des données.
L'application se distingue par son système de priorité à 6 niveaux et son interface dynamique qui s'adapte visuellement à l'état de chaque tâche (en cours, terminée ou en retard).
- Création : Ajout de tâches avec titre, description, date d'échéance et niveau de priorité.
- Lecture : Affichage dans une
ListViewoptimisée via unTaskAdapterpersonnalisé. - Mise à jour : Modification possible de tous les champs d'une tâche existante via un appui long.
- Suppression : Retrait définitif d'une tâche de la base de données.
- Recherche en temps réel : Barre de recherche (SearchView) filtrant les tâches par leur titre au fur et à mesure de la saisie.
- Filtrage par état : Boutons de sélection rapide pour afficher toutes les tâches, uniquement celles "En cours" ou uniquement les "Terminées".
- Système de Tri avancé : Menu permettant de trier la liste par ordre alphabétique (A-Z / Z-A), par date d'échéance (chronologique) ou par niveau de priorité.
Chaque tâche se voit attribuer une importance spécifique avec un code visuel dédié :
- Optionnel (Gris)
- Basse (Bleu)
- Moyenne (Vert)
- Haute (Orange)
- Très Haute (Rouge)
- Obligatoire (Rouge sombre + Icône 🔥)
- Modèle de données (
Task.kt) :- Utilisation d'une
Data Classreprésentant l'entité SQL avec les champsid,title,description,isCompleted,deadlineetpriority.
- Utilisation d'une
- Persistance des données (Room Database) :
AppDatabase: Singleton gérant l'instance de la base de données SQLite.TaskDao: Interface définissant les requêtes SQL (Insert, Update, Delete, et requêtes de sélection filtrées).TaskManager: Classe intermédiaire (Repository) qui fait le lien entre l'interface utilisateur et la base de données pour isoler la logique métier.
- Interface Utilisateur (UI) & Adaptateur :
TaskAdapter: Logique de rendu dynamique. Il calcule en temps réel la couleur de fond duMaterialCardViewet le style du texte en fonction de l'urgence (retard) ou de l'état (terminé).- Dialogues Material : Utilisation de
MaterialAlertDialogBuilderpour une saisie de données ergonomique et deMaterialDatePickerpour une sélection de date native.
- Logique visuelle conditionnelle :
- Les tâches terminées apparaissent en vert pastel avec le texte barré.
- Les tâches en retard (échéance < date actuelle) s'affichent automatiquement en rouge pour alerter l'utilisateur.
- Optimisation de la recherche : Filtrage combiné (Recherche + Filtre d'état + Tri) pour garantir que l'utilisateur trouve toujours l'information voulue, même avec une liste conséquente.
- Toggle de statut : Le clic sur une tâche ou sa case à cocher inverse son état instantanément en base de données, offrant une interaction fluide.
- Material Design : Utilisation de composants
MaterialCardView,FloatingActionButtonetTextInputLayoutpour une esthétique conforme aux standards modernes d'Android.
- Kotlin : Langage de programmation principal.
- Room Persistence Library : Pour la gestion de la base de données SQLite locale.
- Android Jetpack : ViewModel, Material Components.
- XML Layouts : Conception d'interfaces complexes et adaptatives.
Ce projet illustre une maîtrise complète du développement d'une application Android orientée données et comprendre les base du dévelopement d'application mobile :
- Gestion d'une base de données locale avec Room.
- Création d'un Adapter personnalisé gérant des états visuels complexes.
- Implémentation d'une logique de filtrage et de tri multicritères.
- Utilisation des Composants Material Design pour une expérience utilisateur (UX) soignée.
L'application est ainsi prête pour une utilisation quotidienne, offrant un outil de productivité fiable et visuellement clair.