Práctica: App de Water Me!

1. Antes de comenzar

Introducción

En esta unidad, aprendiste sobre WorkManager, que es una biblioteca de Jetpack para trabajos en segundo plano diferibles. Se garantiza que este trabajo en segundo plano se ejecutará incluso si cierras su app de origen.

Mientras aprendías sobre WorkManager, también aprendiste cómo definir un trabajo en una clase Worker, cómo crear una WorkRequest para Worker y cómo poner en cola trabajos y programarlos.

En esta práctica guiada, usarás los conceptos que aprendiste y mejorarás la app de Water Me!.

El código de la solución está disponible al final. Para aprovechar al máximo esta experiencia de aprendizaje, intenta implementar y solucionar problemas tanto como puedas antes de ver el código de solución que se brinda. Es durante este período práctico que aprenderás más.

Requisitos previos

Requisitos

  • Una computadora con acceso a Internet y Android Studio instalado

Qué compilarás

En esta práctica guiada, usarás los conceptos que aprendiste y mejorarás la app de Water Me!.

Actualmente, la app muestra una lista de plantas en una lista de desplazamiento. Cuando presionas una planta, la app te permite establecer un recordatorio para regarla.

fb69d6519999f217.png d6b68d1e9f1026c5.png

Si bien puedes seleccionar un período, la notificación del recordatorio no se muestra.

Tu tarea es implementar el trabajo en segundo plano para que se muestre la notificación del recordatorio.

Después de que hayas completado el código, la app podrá mostrar una notificación del recordatorio una vez transcurrido el período seleccionado.

a8f9bceed83af5a9.png

2. Obtén el código de inicio

Para comenzar, descarga el código de partida:

Descargar ZIP

Como alternativa, puedes clonar el repositorio de GitHub para el código:

$ 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

Puedes explorar el código de la app de Water Me! en este repositorio de GitHub.

Ejecuta el código de partida

Para familiarizarte con el código de partida, completa los siguientes pasos:

  1. Abre el proyecto con el código de partida en Android Studio.
  2. Ejecuta la app en un dispositivo Android o en un emulador.

Ya está todo listo para que comiences a programar.

3. Programa notificaciones con WorkManager

La funcionalidad de la app de Water Me! está implementada casi por completo, a excepción de la capacidad de programar la notificación del recordatorio.

El código para crear una notificación está en el archivo WaterReminderWorker.kt, que se encuentra en el paquete Worker. La clase WaterReminderWorker extiende la clase CoroutineWorker, y el código para realizar la notificación está dentro de su método doWork().

Como las notificaciones pueden ser un tema nuevo para ti, este código ya está completo.

override suspend fun doWork(): Result {

    val plantName = inputData.getString(nameKey)

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

    return Result.success()
}

Tu tarea es crear una OneTimeWorkRequest que llame a este método con los parámetros correctos de WorkManagerWaterRepository.

Para obtener ayuda adicional, consulta Trabajo en segundo plano con WorkManager.

Crea solicitudes de trabajo

Para programar la notificación, debes implementar el método scheduleReminder() en el archivo WorkManagerWaterRepository.kt.

  1. Crea una variable llamada data con Data.Builder. Los datos deben consistir en un solo valor de cadena, en el que WaterReminderWorker.nameKey es la clave y plantName, que se pasa a scheduleReminder(), es el valor.
  2. Crea una solicitud de trabajo de una sola ejecución con la clase WaterReminderWorker. Usa duration y unit que se pasan a la función scheduleReminder(), y establece los datos de entrada en la variable de datos que crees.
  3. Llama al método enqueueUniqueWork() de workManager. Pasa el nombre de la planta concatenado con la duración, usa REPLACE como ExistingWorkPolicy y el objeto de solicitud de trabajo.

Ahora, tu app debería funcionar como se espera.

4. Desafío adicional (opcional)

Para practicar la codificación adicional, cambia las opciones de duración por el siguiente tiempo:

  • 5 segundos
  • 1 minuto
  • 2 minutos
  • 3 minutos

Cuando termines, prueba cada duración para confirmar que funciona como se espera.

5. Obtén el código de la solución

Para descargar el código del codelab terminado, puedes usar estos comandos:

$ 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

También puedes descargar el repositorio como un archivo ZIP, descomprimirlo y abrirlo en Android Studio.

Descargar ZIP

Si deseas ver el código de la solución para este codelab, míralo en GitHub.