Projet : application Water Me!

1. Avant de commencer

Cet atelier de programmation présente une nouvelle application appelée Water Me, que vous allez créer vous-même. Il explique les différentes étapes à suivre pour mener à bien ce projet d'application, y compris sa configuration et ses tests dans Android Studio.

Conditions préalables

  • Ce projet est destiné aux élèves qui ont terminé le module 6 du cours sur les principes de base d'Android en Kotlin.

Objectifs de l'atelier

  • Programmer une notification à l'aide d'un Worker personnalisé dans une application existante

Ce dont vous avez besoin

  • Un ordinateur sur lequel est installé Android Studio

2. Présentation de l'application terminée

L'application Water Me! comporte une liste de plantes, quelques informations les concernant ainsi qu'une indication sur leur fréquence d'arrosage. L'application terminée programmera un rappel pour savoir quand arroser chaque plante.

90be029855bc3111.png

Les rappels s'afficheront sous forme de notifications sur l'appareil, même si l'application Water Me! n'est pas en cours d'exécution. Celle-ci se lancera lorsque l'utilisateur appuiera sur une notification.

df244d6749f69085.png

Pour que cette option fonctionne, votre tâche consiste à planifier une tâche en arrière-plan à l'aide d'un Worker personnalisé qui affichera la notification.

3. Premiers pas

Télécharger le code du projet

Notez que le nom du dossier est android-basics-kotlin-water-me-app. Sélectionnez ce dossier lorsque vous ouvrez le projet dans Android Studio.

Pour obtenir le code de cet atelier de programmation et l'ouvrir dans Android Studio, procédez comme suit :

Obtenir le code

  1. Cliquez sur l'URL indiquée. La page GitHub du projet s'ouvre dans un navigateur.
  2. Sur la page GitHub du projet, cliquez sur le bouton Code pour afficher une boîte de dialogue.

5b0a76c50478a73f.png

  1. Dans la boîte de dialogue, cliquez sur le bouton Download ZIP (Télécharger le fichier ZIP) pour enregistrer le projet sur votre ordinateur. Attendez la fin du téléchargement.
  2. Recherchez le fichier sur votre ordinateur (il se trouve probablement dans le dossier Téléchargements).
  3. Double-cliquez sur le fichier ZIP pour le décompresser. Un dossier contenant les fichiers du projet est alors créé.

Ouvrir le projet dans Android Studio

  1. Lancez Android Studio.
  2. Dans la fenêtre Welcome to Android Studio (Bienvenue dans Android Studio), cliquez sur Open an existing Android Studio project (Ouvrir un projet Android Studio existant).

36cc44fcf0f89a1d.png

Remarque : Si Android Studio est déjà ouvert, sélectionnez l'option de menu File > New > Import Project (Fichier > Nouveau > Importer un projet).

21f3eec988dcfbe9.png

  1. Dans la boîte de dialogue Import Project (Importer un projet), accédez à l'emplacement du dossier du projet décompressé. Il se trouve probablement dans le dossier Téléchargements.
  2. Double-cliquez sur le dossier de ce projet.
  3. Attendez qu'Android Studio ouvre le projet.
  4. Cliquez sur le bouton Run (Exécuter) 11c34fc5e516fb1c.png pour créer et exécuter l'application. Assurez-vous qu'elle se crée correctement.
  5. Parcourez les fichiers du projet dans la fenêtre de l'outil Projet pour voir comment l'application est configurée.

4. Programmer une notification avec WorkManager

Toutes les fonctionnalités de l'application Water Me! sont déjà implémentées, à l'exception de la partie consistant à programmer une notification. Le code permettant d'afficher une notification se trouve dans WaterReminderWorker.kt (dans le package worker). Cela se produit dans la méthode doWork() d'une classe Worker personnalisée. Étant donné que les notifications sont peut-être un sujet que vous ne maîtrisez pas encore, ce code est déjà implémenté.

override fun doWork(): Result {
    val intent = Intent(applicationContext, MainActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }

    val pendingIntent: PendingIntent = PendingIntent
        .getActivity(applicationContext, 0, intent, 0)

    val plantName = inputData.getString(nameKey)

    val builder = NotificationCompat.Builder(applicationContext, BaseApplication.CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_android_black_24dp)
        .setContentTitle("Water me!")
        .setContentText("It's time to water your $plantName")
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setContentIntent(pendingIntent)
        .setAutoCancel(true)

    with(NotificationManagerCompat.from(applicationContext)) {
        notify(notificationId, builder.build())
    }

    return Result.success()
}

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

Créer des demandes de tâche

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

  1. Créez une variable appelée data à l'aide de Data.Builder. Les données doivent correspondre à une seule valeur de chaîne, où WaterReminder.Worker.nameKey est la clé et où plantName est transmis à scheduleReminder() comme valeur.
  2. Créez une demande de tâche unique à l'aide de WaterReminderWorker, en utilisant les valeurs delay et unit transmises à la fonction scheduleReminder(), et en définissant les données d'entrée sur la variable data que vous avez créée.
  3. Appelez la méthode enqueueUniqueWork() de workManager en transmettant le nom de la plante, en utilisant REPLACE comme ExistingWorkPolicy, et la demande de tâche.

Votre application devrait maintenant fonctionner comme prévu. Étant donné que l'affichage de chaque rappel prend beaucoup de temps, nous vous recommandons d'exécuter les tests fournis pour vérifier que la notification fonctionne comme prévu.

5. Instructions de test

Exécuter vos tests

Pour exécuter les tests, vous pouvez effectuer l'une des opérations suivantes.

Pour un scénario de test unique, ouvrez une classe de scénario de test et cliquez sur la flèche verte à gauche de la déclaration de classe. Vous pouvez ensuite sélectionner l'option "Run" (Exécuter) dans le menu. Tous les tests seront exécutés dans le scénario de test.

a32317d35c77142b.png

Souvent, vous ne souhaiterez exécuter qu'un seul test, par exemple lorsqu'un test a échoué et que tous les autres ont réussi. Il est possible d'exécuter un seul test de la même manière que vous le feriez pour un scénario de test complet. Utilisez la flèche verte et sélectionnez l'option Exécuter.

ac6244434cfafb60.png