ToDoLife est une application Android native de gestion de tâches développée dans le cadre du cours de développement mobile en BUT Informatique 2e année. Elle s'inspire de la méthode GTD (Getting Things Done) et a été intégralement codée en Java avec Material Design 3.
L'application inclut un système de projets avec un diagramme de Gantt interactif, un sélecteur de couleur HSV custom, une gestion de contextes personnalisés et une internationalisation FR/EN complète.
| Champ | Valeur |
|---|---|
| Cours | Développement Mobile Android |
| Année | BUT Informatique 2e année |
| Langage | Java 11 |
| Plateforme | Android (minSdk 24 / targetSdk 36) |
| UI Framework | Material Design 3 |
| Persistance | SharedPreferences + sérialisation JSON |
| Rendu | APK de débogage + code source + diagrammes UML |
Chaque tâche comporte un titre, une description, des dates de début et de fin, une priorité (Élevé / Moyen / Faible), un état (À faire / En cours / Terminé), un contexte et un lien web optionnel. L'interface principale affiche la liste des tâches via un RecyclerView avec un adapter personnalisé. Chaque item visualise la priorité via une barre de couleur latérale, le contexte via un badge et la date sous forme relative ("Aujourd'hui", "Demain", "Dans N jours"). Des gestes de balayage permettent de supprimer une tâche (swipe gauche, avec Snackbar d'annulation) ou de basculer son état terminé/à faire (swipe droite). Une bannière rouge s'affiche automatiquement en haut de liste si au moins une tâche est en retard.
L'application propose un système de filtrage combiné : recherche textuelle en temps réel sur le titre, la description et le contexte ; filtre par état (Toutes / À faire / En cours / Terminées) ; filtre multi-sélection par contexte (Maison, Bureau, Téléphone, PC + contextes personnalisés) ; filtre multi-sélection par priorité. Ces filtres sont tous combinables et placés dans une section repliable/dépliable pour économiser l'espace. Quatre modes de tri sont disponibles : par défaut (plus récent), par priorité, par date d'échéance et alphabétique.
Un système de projets permet de regrouper des tâches : création/édition/suppression de projets avec nom, description et couleur d'accentuation personnalisée, association de tâches via un dialogue multi-sélection, réordonnancement par glisser-déposer. Chaque projet dispose de deux onglets : une vue liste classique et une vue Gantt interactive dessinée sur Canvas. Le diagramme de Gantt affiche une grille journalière avec labels hebdomadaires, des barres colorées selon l'état de chaque tâche (violet = À faire, orange = En cours, vert = Terminé), la durée en jours sur chaque barre et une ligne rouge verticale indiquant la date du jour. Un clic sur une barre ouvre le détail de la tâche correspondante.
L'écran de paramètres propose le basculement mode sombre / clair (AppCompatDelegate), le changement de langue FR/EN (recreate de l'activité), et la personnalisation des couleurs : 3 couleurs de priorité + 3 couleurs d'état, toutes modifiables via un sélecteur HSV custom. Les contextes personnalisés sont créables avec un emoji obligatoire, un nom et une couleur choisie via le même sélecteur.
L'application suit une architecture en 4 couches strictement séparées :
| Couche | Contenu |
|---|---|
| Présentation | 9 activités (taskListActivity, taskCreateActivity, taskDescActivity, taskSettingsActivity, ProjectListActivity, ProjectCreateActivity, ProjectDetailActivity, WebViewActivity, MainActivity) |
| Vue | 3 adapters RecyclerView + 2 vues custom Canvas (ColorPickerView, GanttView) |
| Métier | 4 managers Singletons (TaskManager, ProjectManager, ContextManager, SettingsManager) |
| Modèle | 3 classes de données (Task, Project, CustomContext) |
| Persistance | SharedPreferences avec sérialisation JSON (toJson / fromJson sur chaque modèle) |