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

⏱️ P05: Quiz Game com Cronômetro Decrescente em Kotlin

v1.0 — Android Nativo, Kotlin, CountDownTimer, Barra de Progresso Circular e Gestão de Tempo Real

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


🏛️ Visão Geral & Arquitetura Visual

O Quiz Game com Cronômetro Decrescente introduz a mecânica de contagem regressiva em tempo real com alta precisão temporal no Android. Utilizando a classe utilitária CountDownTimer, o aplicativo gerencia o tempo limite por pergunta (ex: 15 segundos), sincroniza o avanço visual em um componente ProgressBar circular com transição dinâmica de cores (verde para tempo seguro, amarelo para alerta e vermelho para iminência de estouro) e pontua os acertos com bônus de agilidade.

Arquitetura do Quiz Game com Cronômetro
Quiz Game em Execução

📁 Estrutura de Pastas Anti-Colisão

Todos os artefatos de código, modelos de questão e arquivos XML estão na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p05_quiz_timer/
├── assets/
│   ├── arquitetura_quiz_timer.svg
│   └── screenshot_p05_start.png
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/quiztimer/
│   │   │       │   ├── model/Questao.kt
│   │   │       │   └── MainActivity.kt
│   │   │       ├── res/
│   │   │       │   ├── drawable/
│   │   │       │   └── layout/activity_main.xml
│   │   │       └── AndroidManifest.xml
│   │   └── 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 Jogador de Quiz Quero ver uma contagem regressiva de 15 segundos para responder cada pergunta. Redução visual contínua na barra de progresso a cada segundo percorrido. Alta
US-02 Jogador de Quiz Quero selecionar uma resposta e saber imediatamente se acertei ou errei. Indicação em verde para acerto, vermelho para erro e cancelamento do timer. Alta
US-03 Jogador de Quiz Quero receber pontuação bônus caso responda nos primeiros segundos da pergunta. Cálculo de pontos proporcionais ao tempo restante no relógio. Alta
US-04 Jogador de Quiz Quero que a questão seja considerada errada por timeout se o relógio zerar. Disparo automático de avanço para a próxima questão via callback onFinish(). Média
US-05 Desenvolvedor Mobile Quero cancelar o timer no ciclo onPause() ou onDestroy() para evitar vazamento de memória. Invocação preventiva de countDownTimer?.cancel(). Baixa

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    Player([fa:fa-user Jogador de Quiz])
    Timer[(fa:fa-clock CountDownTimer)]

    subgraph AppQuiz ["⏱️ Quiz Game (mobile-android-kotlin)"]
        UC01["Carregar Nova Pergunta"]
        UC02["Iniciar Cronômetro Regressivo"]
        UC03["Submeter Alternativa Escolhida"]
        UC04["Tratar Estouro de Tempo (Timeout)"]
        UC05["Exibir Placar com Bônus de Tempo"]
    end

    Player --> UC01
    UC01 --> UC02
    UC02 --> Timer
    Timer -.->|onTick| UC02
    Timer -.->|onFinish| UC04
    Player --> UC03
    UC03 --> UC05
    UC04 --> UC05

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-02 mobile-android-kotlin/app/src/main/res/layout/activity_main.xml testQuestionLayoutComponents()
RF-02 US-01 mobile-android-kotlin/app/.../MainActivity.kt testCountDownTimerTicks()
RF-03 US-01 mobile-android-kotlin/app/.../MainActivity.kt testProgressBarSyncWithTimer()
RF-04 US-02, US-04 mobile-android-kotlin/app/.../MainActivity.kt testDisableButtonsOnSubmit()
RF-05 US-03 mobile-android-kotlin/app/.../MainActivity.kt testScoreBonusCalculation()

🛠️ Implementação Guiada (MainActivity.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_p05_quiz_timer/mobile-android-kotlin

2. Compile e execute no emulador ou dispositivo físico

./gradlew assembleDebug
./gradlew test

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Mecanismo de Temporização CountDownTimer com tiques de 1s e cancelamento seguro PASS ✅
CP-02 Sincronismo com ProgressBar Barra decrescente proporcional ao tempo restante PASS ✅
CP-03 Cálculo de Bônus de Tempo Multiplicador de pontos para respostas rápidas PASS ✅
CP-04 Tratamento de Timeout Avanço automático para a próxima pergunta ao zerar o tempo PASS ✅
CP-05 Suíte de Testes Automatizados Testes de unidade e UI aprovados com 100% de sucesso PASS ✅