Affectez la valeur du token celle dansApi puis naviguez vers l’écran qui liste les tâches
Utilisez cette fonction au clic sur le bouton de login
Lancez l’app, le flow devrait se lancer en vous proposant de vous connecter à Todoist mais ensuite la redirection ne va pas fonctionner:
Relancez le flow, tout devrait fonctionner
Preference DataStore
Pour l’instant le soucis c’est que vous devez vous reconnecter à chaque lancement de l’app, on va y remédier en utilisant un stockage qui dure au delà d’une session d’utilisation de l’app.
Ajoutez la librairie dans build.gradle: implementation("androidx.datastore:datastore-preferences:1.1.1")
Créez une classe TokenRepository et une instance de DataStore globale et complétez:
Dans l’écran liste, créez une instance de TokenRepository et collectez le tokenFlow
Chaque nouvelle valeur doit s’appliquer au token dans Api et déclencher un refresh des tasks, sauf si la valeur est nulle, dans ce cas il faut naviguer vers le login
Dans l’écran login, créez une instance de TokenRepository et enregistrez le token avec quand il est récupéré
Dans l’écran “user”, créez une instance de TokenRepository, ajouter un bouton logout et effacer le token quand on clique dessus.
Navigation
Dans MainActivity, remplacer le setContentView par un setContent {} et ajouter un NavHost Compose
Mettez vos écrans Compose directement dedans
Mettez l’écran principal (liste) avec un Composant AndroidFragment
Injection de dépendance
Ajouter la lib Koin dans build.gradle et suivez les étapes de configuration
créez un module koin appModule et y ajoutez la classe TokenRepository en single et vos ViewModels
récupérez cette instance unique dans vos 2 écrans
Repository
Refactorisez toute l’app pour que vos écrans ne récupèrent qu’un objet “state”, et remontent seulement des évènements vers des ViewModel qui eux même interrogent des Repository partagés.
Interfaces
Renommez TaskRepository en TaskRepositoryImpl et créez une nouvelle interface TaskRepository
Adaptez le module Koin et le reste du code pour que seule l’interface soit utilisée
Faites de même pour les autres Repository
Tests unitaires
Créez LoginViewModelTest et ajoutez des tests unitaires avec Mockk pour remplacer les implémentations concrètes des Repository
Faites de même pour les autres écrans et Repository