Application Android native pour gérer vos notes avec photos d'étudiants
Fonctionnalités • Installation • Captures d'écran • Documentation
My Notes est une application Android moderne développée en Java permettant de gérer une liste complète de notes personnelles avec photos d'étudiants. L'application offre une interface utilisateur élégante et intuitive avec un design Material Design 3, un dashboard interactif, et la possibilité d'ajouter des photos via la caméra.
- ✨ Interface moderne avec Material Design 3
- 📸 Capture de photos intégrée pour les étudiants
- 📊 Dashboard interactif avec statistiques en temps réel
- 🎨 Design responsive et accessible
- 📱 Navigation Drawer (Sidebar) pour accès rapide
- 🏷️ Système de priorités avec codes couleur
- 💾 Gestion complète des notes (création, visualisation, détails)
- Header de bienvenue personnalisé avec message dynamique
- Cartes de statistiques :
- 📊 Nombre total de notes
- 🔴 Nombre de notes prioritaires (Haute priorité)
- Liste complète des notes avec design en cartes
- Message d'accueil quand aucune note n'est présente
- Compteur en temps réel mis à jour automatiquement
- ✅ Formulaire complet avec validation
- ✅ Champ Nom (obligatoire)
- ✅ Champ Description (optionnel, multi-lignes)
- ✅ Champ Date (obligatoire)
- ✅ Sélection de Priorité via Spinner (Basse, Moyenne, Haute)
- ✅ Capture de photo d'étudiant via caméra
- ✅ Aperçu de la photo avant enregistrement
- ✅ Validation des champs avec messages d'erreur
- 🎨 Design en cartes Material Design
- 🏷️ Badges de priorité colorés :
- 🟢 Basse : Vert (#4CAF50)
- 🟡 Moyenne : Orange (#FF9800)
- 🔴 Haute : Rouge (#F44336)
- 📅 Affichage de la date avec icône
- 📝 Description visible (si disponible)
- 📸 Photo de l'étudiant dans les détails
- 📄 Affichage complet de toutes les informations
- 🖼️ Photo de l'étudiant en grand format
- 🏷️ Badge de priorité avec couleur appropriée
- 📅 Date formatée avec icône
- 📝 Description lisible avec espacement optimal
- 📷 Capture de photos directement depuis l'application
- 🔐 Gestion des permissions (demande automatique)
- 💾 Stockage sécurisé dans le dossier Pictures de l'application
- 🖼️ Aperçu instantané après capture
- 📱 Compatibilité Android 13+ avec nouvelles permissions
- 📋 Liste complète de toutes les notes
- 🔢 Compteur dans l'en-tête du drawer
- ⚡ Accès rapide à toutes les notes
- 🎯 Navigation directe vers les détails
- 🎨 Design cohérent avec le reste de l'application
MyApplication/
├── app/
│ ├── src/main/
│ │ ├── java/com/example/mynotes/
│ │ │ ├── Note.java # Modèle de données
│ │ │ ├── NoteAdapter.java # Adaptateur pour la liste principale
│ │ │ ├── NoteDrawerAdapter.java # Adaptateur pour le sidebar
│ │ │ ├── NoteListActivity.java # Home Page / Dashboard
│ │ │ ├── AddNoteActivity.java # Formulaire d'ajout avec caméra
│ │ │ └── DetailsNoteActivity.java # Affichage des détails
│ │ │
│ │ ├── res/
│ │ │ ├── layout/
│ │ │ │ ├── activity_note_list.xml # Layout du dashboard
│ │ │ │ ├── activity_add_note.xml # Layout du formulaire
│ │ │ │ ├── activity_details_note.xml # Layout des détails
│ │ │ │ ├── item_note.xml # Item de liste principal
│ │ │ │ ├── item_note_drawer.xml # Item de liste sidebar
│ │ │ │ └── nav_header.xml # En-tête du drawer
│ │ │ │
│ │ │ ├── values/
│ │ │ │ ├── colors.xml # Palette de couleurs
│ │ │ │ ├── themes.xml # Thèmes Material Design
│ │ │ │ └── strings.xml # Chaînes de caractères
│ │ │ │
│ │ │ ├── drawable/ # Formes et backgrounds
│ │ │ └── xml/
│ │ │ └── file_paths.xml # Configuration FileProvider
│ │ │
│ │ └── AndroidManifest.xml
│ │
│ └── build.gradle
│
├── README.md
├── ARCHITECTURE.md
├── DOCUMENTATION.md
└── CHANGELOG.md
Classe POJO représentant une note avec :
nom: Stringdescription: Stringdate: Stringpriorite: String (Basse, Moyenne, Haute)photoPath: String (chemin vers la photo)
- Pattern ViewHolder pour optimiser les performances
- Application dynamique des couleurs selon la priorité
- Affichage de la description si disponible
- Badges de priorité colorés
- Version compacte pour le Navigation Drawer
- Design optimisé pour l'affichage latéral
- Synchronisé avec la liste principale
- Affichage des statistiques en temps réel
- Gestion du Navigation Drawer
- Synchronisation des adaptateurs
- Mise à jour automatique de l'UI
- Intégration de la caméra avec ActivityResultLauncher
- Gestion des permissions
- Validation des champs
- Aperçu de la photo
- Affichage complet des informations
- Affichage de la photo si disponible
- Design élégant et lisible
- Langage : Java 11
- Plateforme : Android (API 24+)
- UI Framework : Material Design 3
- Composants Android :
AppCompatActivityDrawerLayout&NavigationViewCoordinatorLayout&AppBarLayoutMaterialCardViewFloatingActionButtonTextInputLayout&TextInputEditTextActivityResultLauncher(API moderne)FileProviderpour le partage de fichiersCameraAPI
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'com.google.android.material:material:1.13.0'
implementation 'androidx.activity:activity:1.12.1'
implementation 'androidx.constraintlayout:constraintlayout:2.2.1'- Android Studio (version récente recommandée)
- JDK 11 ou supérieur
- SDK Android (API 24 minimum, cible API 36)
- Émulateur Android ou appareil physique avec :
- USB Debugging activé
- Caméra fonctionnelle (pour la fonctionnalité photo)
git clone https://github.com/votre-username/MyApplication.git
cd MyApplication- Ouvrir Android Studio
- File → Open → Sélectionner le dossier du projet
- Attendre la synchronisation Gradle
Option A : Émulateur
- Tools → Device Manager → Create Device
- Sélectionner un appareil avec API 24+
Option B : Appareil Physique
- Activer le mode développeur
- Activer USB Debugging
- Connecter via USB
- Cliquer sur le bouton Run (
▶️ ) ouShift + F10 - Sélectionner l'émulateur ou l'appareil
- L'application se lancera automatiquement
- Header de bienvenue avec statistiques
- Cartes de notes avec badges de priorité
- Design moderne et épuré
- Champs de saisie Material Design
- Bouton de capture photo
- Validation en temps réel
- Affichage complet des informations
- Photo de l'étudiant
- Badge de priorité coloré
- Liste complète des notes
- Accès rapide et navigation fluide
- Cliquer sur le bouton + (FloatingActionButton)
- Remplir le formulaire :
- Nom : Obligatoire
- Description : Optionnel
- Date : Obligatoire (format : JJ/MM/AAAA)
- Priorité : Sélectionner dans le spinner
- Prendre une photo (optionnel) :
- Cliquer sur "Prendre une photo"
- Autoriser l'accès à la caméra
- Capturer la photo
- L'aperçu s'affiche automatiquement
- Cliquer sur "Enregistrer la note"
- Retour automatique au dashboard
- Cliquer sur une note dans la liste
- Visualiser toutes les informations
- Voir la photo si disponible
- Cliquer sur l'icône ☰ (hamburger) dans la toolbar
- Parcourir toutes les notes
- Cliquer sur une note pour voir les détails
- Le drawer se ferme automatiquement
L'application demande les permissions suivantes :
- CAMERA : Pour capturer des photos d'étudiants
- READ_MEDIA_IMAGES : Pour accéder aux images (Android 13+)
- WRITE_EXTERNAL_STORAGE : Pour sauvegarder les photos (Android ≤12)
Les permissions sont demandées automatiquement lors de la première utilisation de la caméra.
- Primary : #6200EE (Violet Material)
- Accent : #03DAC5 (Cyan)
- Background : #F5F5F5 (Gris clair)
- Surface : #FFFFFF (Blanc)
- Basse : #4CAF50 (Vert)
- Moyenne : #FF9800 (Orange)
- Haute : #F44336 (Rouge)
- Titres : 24-32sp, Bold
- Corps : 16-18sp, Regular
- Secondaire : 14sp, Regular
- Lisibilité optimale avec contraste élevé
Le projet inclut une documentation complète :
- ARCHITECTURE.md : Architecture détaillée, flux de données, patterns
- DOCUMENTATION.md : Documentation générale
- DOCUMENTATION_API.md : Documentation de l'API interne
- GUIDE_DEVELOPPEMENT.md : Guide pour développer et étendre
- CHANGELOG.md : Historique des versions
Les tests peuvent être ajoutés dans app/src/test/java/ pour tester :
- La classe
Note(création, getters, setters) - La logique de validation
- Les calculs de statistiques
Utiliser Espresso pour tester :
- La navigation entre activités
- La saisie dans les formulaires
- La capture de photos
- L'affichage des données
- Utilisation de
ActivityResultLauncher(API moderne) FileProviderpour le partage sécurisé de fichiers- Gestion des permissions avec
ActivityCompat - Stockage dans
getExternalFilesDir()
Optimisation des performances dans les adaptateurs :
private static class ViewHolder {
TextView textViewNom;
TextView textViewDate;
TextView textViewDescription;
TextView textViewPrioriteBadge;
}- Utilisation des composants Material Design
- Thèmes personnalisés
- Animations et transitions fluides
- Accessibilité intégrée
DrawerLayoutpour le menu latéralActionBarDrawerTogglepour l'animation- Synchronisation avec la liste principale
L'application ne compile pas
- Vérifier que tous les fichiers sont présents
- Synchroniser Gradle (File → Sync Project with Gradle Files)
- Nettoyer le projet (Build → Clean Project)
La caméra ne fonctionne pas
- Vérifier les permissions dans les paramètres de l'appareil
- S'assurer que l'appareil/émulateur a une caméra
- Vérifier les logs dans Logcat
Les photos ne s'affichent pas
- Vérifier que le chemin de la photo est correct
- Vérifier les permissions de stockage
- Vérifier les logs pour les erreurs de chargement
Erreur "Cannot resolve symbol R"
- File → Invalidate Caches / Restart
- Rebuild le projet (Build → Rebuild Project)
- Persistance des données (SQLite, Room)
- Modification et suppression de notes
- Filtrage par priorité
- Recherche de notes
- Tri des notes (par date, priorité, nom)
- Export/Import de notes
- Partage de notes
- Thème sombre/clair
- Notifications pour notes importantes
- Synchronisation cloud
- Galerie de photos
- Édition de photos (recadrage, filtres)
- Lignes de code : ~1500+ lignes Java
- Classes : 7 classes principales
- Layouts XML : 7+ layouts
- Complexité : Moyenne (projet complet et fonctionnel)
Ce projet est destiné à un usage éducatif et pédagogique.
Développé dans le cadre d'un projet Android avec Material Design.
- Material Design pour les composants UI
- Android Developer Documentation
- Communauté Android
Version : 4.0.0
Dernière mise à jour : Décembre 2024
⭐ Si ce projet vous a aidé, n'hésitez pas à mettre une étoile !