Projeto: app Water Me!

1. Antes de começar

Este codelab apresenta um novo app, chamado Water Me, que você vai criar por conta própria. Aqui, você encontra as etapas para concluir o projeto do app Water Me, incluindo a configuração e os testes no Android Studio.

Pré-requisitos

  • Este projeto é destinado aos alunos que concluíram a Unidade 6 do curso Noções básicas do Android no Kotlin.

O que você criará

  • Uma notificação agendada usando um Worker personalizado em um app existente.

Pré-requisitos

  • Um computador com o Android Studio instalado.

2. Visão geral do app final

O app Water Me! consiste em uma lista de plantas, algumas informações sobre elas e uma descrição da frequência com que cada uma precisa ser regada. Para cada uma das plantas, o app concluído agenda um lembrete de quando elas precisam ser regadas.

90be029855bc3111.png

Os lembretes são exibidos como notificações no dispositivo, mesmo que o app não esteja em execução. Ao tocar em uma notificação, o Water Me! é iniciado.

df244d6749f69085.png

Para que esse recurso funcione, você precisa agendar uma tarefa em segundo plano usando um Worker personalizado que exibe a notificação.

3. Primeiros passos

Fazer o download do código do projeto

O nome da pasta é android-basics-kotlin-water-me-app. Selecione essa pasta ao abrir o projeto no Android Studio.

Para encontrar o código deste codelab e abrir no Android Studio, siga as etapas abaixo.

Acessar o código

  1. Clique no URL fornecido. Isso abre a página do GitHub referente ao projeto em um navegador.
  2. Na página do GitHub do projeto, clique no botão Code, que vai mostrar uma caixa de diálogo.

5b0a76c50478a73f.png

  1. Na caixa de diálogo, clique no botão Download ZIP para salvar o projeto no seu computador. Aguarde a conclusão do download.
  2. Localize o arquivo no computador, que provavelmente está na pasta Downloads.
  3. Clique duas vezes para descompactar o arquivo ZIP. Isso vai criar uma nova pasta com os arquivos do projeto.

Abrir o projeto no Android Studio

  1. Inicie o Android Studio.
  2. Na janela Welcome to Android Studio, clique em Open an existing Android Studio project.

36cc44fcf0f89a1d.png

Observação: caso o Android Studio já esteja aberto, selecione a opção File > New > Import Project.

21f3eec988dcfbe9.png

  1. Na caixa de diálogo Import Project, vá até a pasta descompactada do projeto, que provavelmente está na pasta Downloads.
  2. Clique duas vezes nessa pasta do projeto.
  3. Aguarde o Android Studio abrir o projeto.
  4. Clique no botão Run 11c34fc5e516fb1c.png para criar e executar o app. Confira se ele é compilado da forma esperada.
  5. Procure os arquivos do projeto na janela de ferramentas Project para ver como o app está configurado.

4. Agendar uma notificação usando o WorkManager

Todas as funcionalidades do Water Me! já estão implementadas, exceto a parte para agendar e a notificação. O código para exibir uma notificação está em WaterReminderWorker.kt (no pacote worker). A exibição ocorre no método doWork() de uma classe Worker personalizada. Como as notificações podem ser um novo tópico, o código já foi 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()
}

Sua tarefa é criar uma OneTimeWorkRequest que chame esse método com os parâmetros corretos do PlantViewModel.

Criar solicitações de trabalho.

Para agendar a notificação, implemente o método scheduleReminder() em PlantViewModel.kt.

  1. Crie uma variável com o nome data usando Data.Builder. Os dados precisam consistir em um valor de string único em que WaterReminder.Worker.nameKey é a chave e o plantName que foi transmitido para scheduleReminder() é o valor.
  2. Crie uma solicitação de trabalho única com o WaterReminderWorker, usando o delay e a unit transmitidos para a função scheduleReminder() e definindo os dados de entrada para a variável data que você criou.
  3. Chame o método enqueueUniqueWork() do workManager, transmitindo o nome da planta e usando REPLACE como a ExistingWorkPolicy, e a solicitação de trabalho.

Agora, o app funcionará conforme o esperado. Como cada lembrete leva muito tempo para aparecer, recomendamos executar os testes incluídos a fim de verificar se a notificação funciona conforme o esperado.

5. Instruções sobre testes

Como executar os testes

Para executar os testes, escolha uma das opções a seguir.

Para um único caso de teste, abra uma classe de caso de teste e clique na seta verde à esquerda da declaração da classe. Em seguida, selecione a opção "Run" no menu. Isso executará todos os testes do caso.

a32317d35c77142b.png

Na maioria das vezes, convém executar apenas um teste, por exemplo, se apenas um teste for reprovado e os outros forem aprovados. Você pode executar um único teste da mesma forma que faria com todo o caso de teste. Use a seta verde e selecione a opção Run.

ac6244434cfafb60.png