Exercice : application Water Me!

1. Avant de commencer

Introduction

Dans ce module, vous avez découvert WorkManager, une bibliothèque Jetpack dédiée aux tâches en arrière-plan différables. L'exécution de ces tâches en arrière-plan est garantie même si vous fermez l'application source.

Vous avez découvert WorkManager, et vous avez appris à définir des tâches dans une classe Worker, à créer un objet WorkRequest pour le Worker, ainsi qu'à mettre en file d'attente et à planifier des tâches.

Dans ces exercices guidés, vous allez exploiter les concepts que vous avez appris et améliorer l'application Water Me!.

Le code de solution est disponible à la fin. Pour profiter pleinement de cette expérience d'apprentissage, essayez de faire tout par vous-même (implémentation et dépannage) avant d'examiner le code de solution fourni. C'est lors de cette session pratique que vous apprendrez le plus.

Conditions préalables

Ce dont vous avez besoin

  • Un ordinateur avec un accès à Internet et Android Studio

Objectifs de l'atelier

Dans ces exercices guidés, vous allez exploiter les concepts que vous avez appris et améliorer l'application Water Me!.

L'application affiche actuellement une liste de plantes sous forme de liste déroulante. Lorsque vous appuyez sur une plante, l'appli vous permet de définir un rappel pour penser à l'arroser.

fb69d6519999f217.png d6b68d1e9f1026c5.png

Vous pouvez sélectionner un délai pour le rappel, mais la notification ne s'affiche pas.

Votre tâche consiste à implémenter la tâche en arrière-plan pour que la notification de rappel s'affiche.

Une fois le code finalisé, l'application affichera une notification de rappel lorsque le délai sélectionné sera écoulé.

a8f9bceed83af5a9.png

2. Télécharger le code de démarrage

Pour commencer, téléchargez le code de démarrage :

Vous pouvez également cloner le dépôt GitHub du code :

$ git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-waterme.git
$ cd basic-android-kotlin-compose-training-waterme
$ git checkout starter

Vous pouvez parcourir le code de l'application Water Me! dans ce dépôt GitHub.

Exécuter le code de démarrage

Pour vous familiariser avec le code de démarrage, procédez comme suit :

  1. Dans Android Studio, ouvrez le projet contenant le code de démarrage.
  2. Exécutez l'application sur un appareil Android ou sur un émulateur.

Vous êtes maintenant prêt à commencer le codage.

3. Programmer une notification avec WorkManager

Pour la majeure partie, la fonctionnalité de l'application Water Me! est déjà implémentée. Il ne reste qu'à coder la possibilité de programmer la notification de rappel.

Le code permettant d'envoyer une notification se trouve dans le fichier WaterReminderWorker.kt, dans le package worker. La classe WaterReminderWorker étend la classe CoroutineWorker, et le code permettant d'intégrer la notification se trouve dans sa méthode doWork().

Comme vous ne connaissez peut-être pas encore bien le thème des notifications, ce code est déjà finalisé.

override suspend fun doWork(): Result {

    val plantName = inputData.getString(nameKey)

    makePlantReminderNotification(
        applicationContext.resources.getString(R.string.time_to_water, plantName),
        applicationContext
    )

    return Result.success()
}

Votre tâche consiste à créer un objet OneTimeWorkRequest qui appellera cette méthode avec les paramètres corrects de WorkManagerWaterRepository.

Pour obtenir de l'aide supplémentaire, consultez la section Travail en arrière-plan avec WorkManager.

Créer des demandes de tâche

Pour programmer la notification, vous devez implémenter la méthode scheduleReminder() dans le fichier WorkManagerWaterRepository.kt.

  1. Créez une variable appelée data avec Data.Builder. Les données doivent correspondre à une seule valeur de chaîne, où WaterReminderWorker.nameKey est la clé et où plantName est transmis à scheduleReminder() comme valeur.
  2. Créez une demande de travail ponctuelle avec la classe WaterReminderWorker. Utilisez les valeurs duration et unit transmises à la fonction scheduleReminder(), puis définissez les données d'entrée sur la variable de données que vous avez créée.
  3. Appelez la méthode enqueueUniqueWork() de workManager. Transmettez le nom de la plante concaténé avec la durée. Utilisez REPLACE comme ExistingWorkPolicy et l'objet de la demande de travail.

Votre application devrait maintenant fonctionner comme prévu.

4. Défi supplémentaire (facultatif)

Pour vous exercer davantage au codage, remplacez les options de durée par les valeurs suivantes :

  • 5 secondes
  • 1 minute
  • 2 minutes
  • 3 minutes

Une fois que vous avez terminé, testez chaque durée pour vérifier que l'application fonctionne comme prévu.

5. Télécharger le code de solution

Pour télécharger le code de cet atelier de programmation, utilisez les commandes suivantes :

$ git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-waterme.git
$ cd basic-android-kotlin-compose-training-waterme
$ git checkout main

Vous pouvez également télécharger le dépôt sous forme de fichier ZIP, le décompresser et l'ouvrir dans Android Studio.

Si vous le souhaitez, vous pouvez consulter le code de solution de cet atelier de programmation sur GitHub.