- Add intent filters for markdown and text file sharing (text/*, application/octet-stream) - Implement file content reading with filename extraction and automatic tagging - Enable edge-to-edge mode with proper IME insets handling for keyboard - Add collections configuration dirty flag and bookmark ID tracking to TokenManager - Create CollectionsConfigDto and CollectionConfigDto for JSON serialization - Add collection query methods
ShaarIt
ShaarIt est un client Android natif pour Shaarli, le gestionnaire de favoris auto-hébergé. Développé avec les technologies Android modernes, il offre une expérience mobile fluide pour gérer vos liens.
📱 Fonctionnalités
🔐 Authentification
- Connexion sécurisée à votre instance Shaarli auto-hébergée (API v1)
- Stockage chiffré des tokens JWT et secrets API via
EncryptedSharedPreferences - Génération automatique de tokens JWT avec algorithme HS512
📚 Gestion des Favoris
- Flux infini : Défilement continu avec chargement progressif (Paging 3)
- Recherche avancée : Recherche locale avec FTS4 (full-text search) et filtrage par tags
- Mode hors-ligne : Consultation et modification des liens même sans connexion
- Ajout rapide : Création de liens privés/publics avec description, tags et extraction automatique de métadonnées
- Édition : Modification complète des liens existants avec éditeur Markdown
- Suppression : Gestion facile des favoris avec file d'attente de sync
- Détection des doublons : Alerte lors de l'ajout d'un lien existant avec option de mise à jour
- Liens épinglés : Mise en avant des liens importants
🏷️ Gestion des Tags
- Vue dédiée pour parcourir tous les tags
- Compteur d'utilisation par tag
- Filtrage rapide du flux par tag
- Tags favoris pour accès rapide
📁 Collections
- Organisation des liens en collections
- Collections intelligentes avec filtres automatiques
- Vue grille adaptative pour les collections
📝 Éditeur Markdown
- Édition avec prévisualisation en temps réel
- Mode édition/prévisualisation/split
- Mode lecture focus sans distraction
- Barre d'outils de formatage
🌐 Extraction de Métadonnées
- Extraction automatique des OpenGraph (titre, description, image)
- Détection du type de contenu (article, vidéo, image, audio, code, etc.)
- Estimation du temps de lecture
- Extraction du nom du site
📊 Tableau de Bord
- Statistiques d'utilisation (liens totaux, cette semaine, ce mois)
- Temps de lecture total et moyen
- Répartition par type de contenu
- Tags les plus utilisés
- Graphique d'activité sur 30 jours
💾 Import/Export
- Export JSON (format complet avec métadonnées)
- Export CSV (compatible Excel)
- Export HTML (format Netscape/Chrome bookmarks)
- Import depuis JSON (export ShaarIt)
- Import depuis HTML (bookmarks Chrome/Firefox)
🔄 Synchronisation
- Synchronisation automatique en arrière-plan (WorkManager)
- Mode offline-first : modifications en attente
- Résolution de conflits intelligente
- File d'attente des opérations
🔗 Intégration système
- Share Intent Android : Sauvegarde rapide depuis n'importe quelle app
- App Shortcuts : Accès rapide via appui long sur l'icône (Ajouter, Aléatoire, Rechercher, Collections)
- Quick Settings Tile : Tuile pour ajouter rapidement un lien
- Widget : Widget d'accueil affichant les liens récents
- Ouverture des liens dans le navigateur par défaut
🎨 Interface Utilisateur
- Material You (Monet) : Couleurs dynamiques basées sur le fond d'écran (Android 12+)
- Mode OLED : Noir pur pour les écrans AMOLED
- Design premium : Thème sombre moderne avec dégradés
- Material Design 3 : Composants UI natifs Android
- Animations fluides : Transitions et effets visuels
- Trois modes d'affichage : Liste détaillée, grille compacte, ou vue compacte
- Pull-to-refresh : Actualisation du flux par glissement
🛠️ Stack Technique
| Catégorie | Technologie |
|---|---|
| Langage | Kotlin 2.0.0 |
| UI | Jetpack Compose + Material Design 3 |
| Architecture | Clean Architecture + MVVM |
| Injection de dépendances | Dagger Hilt 2.51.1 |
| Réseau | Retrofit 2.11.0 + Moshi 1.15.1 + OkHttp 4.12.0 |
| Base de données locale | Room 2.6.1 |
| Pagination | Paging 3 |
| Concurrence | Coroutines & Flow |
| Background work | WorkManager 2.9.0 |
| Stockage sécurisé | AndroidX Security Crypto |
| Navigation | Navigation Compose |
| Compilation | Gradle 8.0+ avec KSP |
Compatibilité
- minSdk: 24 (Android 7.0)
- targetSdk: 34 (Android 14)
- compileSdk: 34
- JDK requis: 17+
📥 Installation
Prérequis utilisateur
- Un serveur Shaarli auto-hébergé (v0.12+) avec l'API v1 activée
- Un appareil Android 7.0+ ou un émulateur
Obtenir l'APK
Méthode 1 : Téléchargement direct
Récupérez le dernier APK depuis la section Releases.
Méthode 2 : Compilation depuis les sources
- Clonez le repository :
git clone https://github.com/votre-username/ShaarIt.git
cd ShaarIt
- Compilez l'APK debug :
./gradlew assembleDebug
L'APK sera généré dans app/build/outputs/apk/debug/
- Ou compilez l'APK release (nécessite une configuration de signature) :
./gradlew assembleRelease
📖 Guide d'utilisation
Première configuration
- Ouvrez l'application
- Entrez l'URL de votre instance Shaarli
- Entrez votre nom d'utilisateur et mot de passe
- L'application générera automatiquement les tokens API nécessaires
Ajouter un lien
- Via l'app : Appuyez sur le bouton + et entrez l'URL
- Via le partage Android : Partagez n'importe quelle URL vers ShaarIt depuis n'importe quelle app
- Via Quick Settings : Ajoutez la tuile ShaarIt dans vos paramètres rapides
Organiser vos liens
- Utilisez les tags pour catégoriser vos liens
- Créez des collections pour regrouper des liens par thème
- Épinglez les liens importants pour un accès rapide
Mode hors-ligne
- Tous les liens sont stockés localement dans la base de données Room
- Les modifications sont synchronisées automatiquement quand la connexion est disponible
- Consultez vos favoris même sans connexion Internet
🏗️ Architecture
Le projet suit les principes de la Clean Architecture avec une séparation claire des couches :
├── data/ # Couche de données
│ ├── api/ # API Retrofit
│ ├── local/ # Base de données Room
│ │ ├── dao/ # Data Access Objects
│ │ ├── entity/ # Entités Room
│ │ └── database/ # Configuration de la DB
│ ├── sync/ # Synchronisation
│ ├── export/ # Import/Export
│ └── repository/ # Implémentations des repositories
├── domain/ # Couche domaine
│ ├── model/ # Modèles métier
│ └── repository/ # Interfaces des repositories
├── presentation/ # Couche présentation
│ ├── feed/ # Écran principal
│ ├── add/ # Ajout de liens
│ ├── edit/ # Édition de liens
│ ├── tags/ # Gestion des tags
│ ├── collections/ # Collections
│ ├── dashboard/ # Tableau de bord
│ ├── settings/ # Paramètres
│ └── nav/ # Navigation
└── core/ # Utilitaires
├── di/ # Injection de dépendances
├── network/ # Configuration réseau
└── storage/ # Stockage local
🚀 Roadmap
- Synchronisation en arrière-plan avec WorkManager
- Mode hors-ligne avec Room
- Éditeur Markdown
- Extraction de métadonnées OpenGraph
- Collections d'organisation
- Liens épinglés
- Widget d'accueil
- App Shortcuts
- Quick Settings Tile
- Tableau de bord analytique
- Import/Export
- Material You (Monet)
- Recherche avancée avec filtres multiples
- Suggestions de tags par IA
- Mode lecture sans distraction pour les articles
- Partage de collections
🤝 Contribution
Les contributions sont les bienvenues ! N'hésitez pas à :
- Ouvrir une issue pour signaler un bug ou suggérer une fonctionnalité
- Soumettre une pull request
- Améliorer la documentation
Signaler un bug
- Vérifiez que le bug n'a pas déjà été signalé
- Ouvrez une issue avec :
- Description claire du problème
- Étapes pour reproduire
- Comportement attendu vs réel
- Version Android et de l'app
- Logs si disponibles
📝 Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
🙏 Remerciements
- Shaarli - Le projet original de gestionnaire de favoris
- Jetpack Compose - Framework UI moderne d'Android
- La communauté open source pour les excellentes bibliothèques utilisées
Fait avec ❤️ pour la communauté Shaarli
Description
Languages
Kotlin
97.3%
Python
2%
PowerShell
0.7%