Proyecto: app de Water Me!

1. Antes de comenzar

En este codelab, se presenta una nueva app llamada Water Me! que compilarás por tu cuenta. En él, seguirás los pasos necesarios para completar el proyecto de la app de Water Me!, incluidas la configuración del proyecto y las pruebas en Android Studio.

Requisitos previos

  • Este proyecto está destinado a los alumnos que completaron la Unidad 6 del curso de Aspectos básicos de Android en Kotlin.

Qué compilarás

  • Programarás una notificación con un Worker personalizado en una app existente.

Requisitos

  • Una computadora que tenga Android Studio instalado

2. Descripción general de la app finalizada

La app de Water Me! consiste en una lista de plantas, información sobre ellas y una descripción sobre la frecuencia con que debes regar cada una. En la app finalizada, cada una de estas plantas tendrá un recordatorio programado para cuando sea necesario regarlas.

90be029855bc3111.png

Los recordatorios se mostrarán como notificaciones en el dispositivo, incluso si la app de Water Me! no se está ejecutando. Si presionas una notificación, la app se abrirá.

df244d6749f69085.png

A fin de que se ejecute esta función, debes programar una tarea en segundo plano con un Worker personalizado que muestre la notificación.

3. Cómo comenzar

Descarga el código del proyecto

Ten en cuenta que el nombre de la carpeta es android-basics-kotlin-water-me-app. Selecciona esta carpeta cuando abras el proyecto en Android Studio.

Para obtener el código necesario para este codelab y abrirlo en Android Studio, haz lo siguiente:

Obtén el código

  1. Haz clic en la URL proporcionada. Se abrirá la página de GitHub del proyecto en un navegador.
  2. En esa página, haz clic en el botón Code, que abre un cuadro de diálogo.

5b0a76c50478a73f.png

  1. En el cuadro de diálogo, haz clic en el botón Download ZIP para guardar el proyecto en tu computadora. Espera a que se complete la descarga.
  2. Ubica el archivo en tu computadora (probablemente en la carpeta Descargas).
  3. Haz doble clic en el archivo ZIP para descomprimirlo. Se creará una carpeta nueva con los archivos del proyecto.

Abre el proyecto en Android Studio

  1. Inicia Android Studio.
  2. En la ventana Welcome to Android Studio, haz clic en Open an existing Android Studio project.

36cc44fcf0f89a1d.png

Nota: Si Android Studio ya está abierto, selecciona la opción de menú File > New > Import Project.

21f3eec988dcfbe9.png

  1. En el cuadro de diálogo Import Project, navega hasta donde se encuentra la carpeta de proyecto descomprimido (probablemente en Descargas).
  2. Haz doble clic en la carpeta del proyecto.
  3. Espera a que Android Studio abra el proyecto.
  4. Haz clic en el botón Run 11c34fc5e516fb1c.png para compilar y ejecutar la app. Asegúrate de que funcione como se espera.
  5. Explora los archivos del proyecto en la ventana de herramientas Project para ver cómo se configuró la app.

4. Programa notificaciones con WorkManager

Todas las funcionalidades de la app de Water Me! ya están implementadas, excepto por la parte de crear un programa y una notificación. El código para mostrar una notificación está en WaterReminderWorker.kt (en el paquete worker). Esto sucede en el método doWork() de una clase Worker personalizada. Como las notificaciones pueden ser un tema nuevo, este código ya está implementado.

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()
}

Tu tarea es crear un OneTimeWorkRequest que llamará a este método con los parámetros correctos de PlantViewModel.

Crea solicitudes de trabajo.

Para programar la notificación, deberás implementar el método scheduleReminder() en PlantViewModel.kt.

  1. Crea una variable llamada data con Data.Builder. Los datos deben consistir en un solo valor de string, en el que el elemento WaterReminder.Worker.nameKey es la clave y el elemento plantName que se pasó a scheduleReminder() es el valor.
  2. Crea una solicitud de trabajo de una sola ejecución con WaterReminderWorker, usa delay y unit pasados a la función scheduleReminder(), y configura los datos de entrada en la variable data que creaste.
  3. Llama al método enqueueUniqueWork() de workManager y pasa el nombre de la planta con REPLACE como ExistingWorkPolicy, y la solicitud de trabajo.

Ahora, tu app debería funcionar según lo esperado. Debido a que cada recordatorio tardará mucho en aparecer, te recomendamos ejecutar las pruebas incluidas a fin de verificar que la notificación funcione como debería.

5. Instrucciones para pruebas

Cómo realizar las pruebas

Para ejecutar las pruebas, puedes realizar una de las siguientes acciones:

Si se trata de un solo caso de prueba, abre una clase de caso de prueba y haz clic en la flecha verde que está a la izquierda de la declaración de la clase. Luego, puedes seleccionar la opción Run en el menú. Se ejecutarán todas las pruebas del caso de prueba.

a32317d35c77142b.png

Lo más probable es que quieras ejecutar una sola prueba, por ejemplo, si hay una sola prueba fallida y las otras aprueban. Puedes ejecutar una sola prueba como lo harías con todo el caso de prueba. Usa la flecha verde y selecciona la opción Run.

ac6244434cfafb60.png