📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.

🤖 P15: J.A.R.V.I.S. Sync (WorkManager)

v1.0 — Android Jetpack WorkManager, Kotlin Coroutines, CoroutineWorker, Restrições de Hardware e Tarefas Assíncronas Persistentes

Série Prática Android Clássico — Projeto 15 de 21


🏛️ Visão Geral & Arquitetura Visual

O projeto J.A.R.V.I.S. Sync implementa o padrão oficial do Google para processamento assíncrono garantido e persistente em segundo plano: o Jetpack WorkManager. A aplicação orquestra rotinas pesadas de telemetria e diagnóstico da armadura do Homem de Ferro, agendando execuções subordinadas a Restrições de Hardware (Constraints): execução exclusiva quando o dispositivo estiver conectado à tomada (carregando) e com conexão de rede Wi-Fi não-tarifada ativa, sobrevivendo a reinicializações completas do sistema operacional.

Fluxo Visual do J.A.R.V.I.S. Sync com WorkManager

📁 Estrutura de Pastas Anti-Colisão

Os trabalhadores assíncronos, repositórios de diagnóstico e telas estão contidos na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p15_jarvis_workmanager/
├── assets/
│   ├── mockup_jarvis_fluxo.svg
│   ├── screenshot_01_jarvis_ocioso.svg
│   ├── screenshot_02_jarvis_executando.svg
│   └── screenshot_03_jarvis_concluido.svg
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/jarvissync/
│   │   │       │   ├── worker/
│   │   │       │   │   └── JarvisDiagnosticsWorker.kt
│   │   │       │   └── MainActivity.kt
│   │   │       └── res/
│   │   └── build.gradle
│   ├── gradle/
│   ├── build.gradle
│   ├── gradlew
│   ├── settings.gradle
│   └── README.md
└── index.md

🧑‍💼 Engenharia de Software & Especificação Formal

1. Histórias de Usuário (User Stories)

ID Persona Narrativa da Funcionalidade Critério de Aceitação Principal Prioridade
US-01 Tony Stark / Piloto Quero disparar uma rotina de sincronização de telemetria sem travar a interface da armadura. Agendamento assíncrono via WorkManager em milissegundos. Alta
US-02 Tony Stark / Piloto Quero que a sincronização só aconteça quando o reator Arc estiver recarregando (plugado na energia). Aplicação de constraint setRequiresCharging(true). Alta
US-03 Tony Stark / Piloto Quero acompanhar o progresso percentual da sincronização na tela em tempo real. Monitoramento reativo via getWorkInfoByIdLiveData() ou StateFlow. Alta
US-04 Engenheiro de Sistemas Quero que a rotina tente novamente caso a conexão caia no meio do upload. Configuração de BackoffCriteria exponencial automático. Média
US-05 Desenvolvedor Mobile Quero poder cancelar trabalhos agendados pelo ID ou tag a qualquer instante. Invocação de WorkManager.cancelWorkById(). Baixa

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    Pilot([fa:fa-user Tony Stark])
    WM[(fa:fa-gears WorkManager Engine)]
    Power[(fa:fa-plug Sensor de Energia/Rede)]

    subgraph AppJarvis ["🤖 J.A.R.V.I.S. Sync (mobile-android-kotlin)"]
        UC01["Agendar Sincronização"]
        UC02["Verificar Restrições de Bateria/Wi-Fi"]
        UC03["Executar CoroutineWorker em Background"]
        UC04["Emitir Progresso Percentual"]
        UC05["Finalizar Diagnóstico com Sucesso"]
    end

    Pilot --> UC01
    UC01 --> WM
    WM --> UC02
    Power --> UC02
    UC02 -->|Condições Atendidas| UC03
    UC03 --> UC04
    UC04 --> Pilot
    UC03 --> UC05

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-01 mobile-android-kotlin/app/.../JarvisDiagnosticsWorker.kt testWorkerInheritsCoroutineWorker()
RF-02 US-02 mobile-android-kotlin/app/.../MainActivity.kt testConstraintsChargingAndUnmetered()
RF-03 US-01 mobile-android-kotlin/app/.../MainActivity.kt testWorkRequestEnqueued()
RF-04 US-03 mobile-android-kotlin/app/.../JarvisDiagnosticsWorker.kt testProgressEmittedLiveData()
RF-05 US-04 mobile-android-kotlin/app/.../JarvisDiagnosticsWorker.kt testWorkerReturnsSuccessResult()

🛠️ Implementação Guiada (JarvisDiagnosticsWorker.kt)

ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em mobile-android-kotlin.


🚀 Como Executar no Laboratório

1. Navegue até a subpasta do projeto

cd catalogo_projetos/android_p15_jarvis_workmanager/mobile-android-kotlin

2. Compile e execute os testes unitários do WorkManager

./gradlew test
./gradlew assembleDebug

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Configuração do WorkManager Biblioteca importada e Worker instanciável PASS ✅
CP-02 Definição de Constraints Regras de energia e conectividade validadas PASS ✅
CP-03 Emissão de Progresso Atualização em tempo real da barra de progresso no app PASS ✅
CP-04 Persistência de Tarefa Trabalho retido após fechamento da Activity PASS ✅
CP-05 Suíte de Testes Automatizados Testes com WorkManagerTestInitHelper aprovados com 100% de sucesso PASS ✅