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

🌌 P13: TARDIS Panel (DataStore Preferences & Coroutines Flow)

v1.0 — Android Jetpack DataStore Preferences, Kotlin Coroutines Flow, Migração do SharedPreferences e Painel Quântico Temporal

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


🏛️ Visão Geral & Arquitetura Visual

O projeto TARDIS Panel implementa a moderna biblioteca Jetpack DataStore Preferences como substituta oficial e assíncrona do legado SharedPreferences no Android. Inspirado no console de navegação temporal do Doctor Who, o aplicativo gerencia parâmetros críticos da nave (coordenadas do vórtice do tempo, modo de camuflagem camaleônica e nível de energia dos cristais Artron) de forma estritamente reativa através de fluxos imutáveis Flow<Preferences> e Kotlin Coroutines.

Fluxo Visual do Painel da TARDIS com DataStore Preferences

📁 Estrutura de Pastas Anti-Colisão

Os gerenciadores de DataStore, contratos de preferências e componentes de interface estão centralizados na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p13_tardis_services/
├── assets/
│   ├── mockup_tardis_fluxo.svg
│   ├── screenshot_01_tardis_azul.svg
│   ├── screenshot_02_tardis_neon.svg
│   └── screenshot_03_tardis_salto.svg
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/tardispanel/
│   │   │       │   ├── datastore/
│   │   │       │   │   └── TardisPreferences.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 Lorde do Tempo / Piloto Quero ajustar as coordenadas de destino no tempo e salvar sem travar a tela da TARDIS. Gravação assíncrona com dataStore.edit sem bloqueio da UI Thread. Alta
US-02 Lorde do Tempo / Piloto Quero que as configurações salvas persistam mesmo após reiniciar o celular ou fechar o app. Carregamento imediato no startup via dataStore.data.first(). Alta
US-03 Lorde do Tempo / Piloto Quero alternar o tema do console entre Azul Clássico e Neon Gallifreyano em tempo real. Atualização instantânea da interface reagindo ao Flow de preferências. Alta
US-04 Engenheiro de Software Quero eliminar todas as chamadas síncronas bloqueantes herdadas do SharedPreferences. Adoção integral do Jetpack DataStore com tratamento funcional de exceções de I/O. Média
US-05 Desenvolvedor Mobile Quero restaurar as configurações padrão de fábrica da TARDIS com o toque de um botão. Limpeza atômica das chaves armazenadas no arquivo DataStore. 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 Lorde do Tempo])
    DS[(fa:fa-database Jetpack DataStore)]

    subgraph AppTardis ["🌌 TARDIS Panel (mobile-android-kotlin)"]
        UC01["Configurar Coordenadas Temporais"]
        UC02["Persistir com dataStore.edit"]
        UC03["Consumir Fluxo Reativo (Flow)"]
        UC04["Alternar Tema Visual (Azul/Neon)"]
        UC05["Restaurar Configurações de Fábrica"]
    end

    Pilot --> UC01
    UC01 --> UC02
    UC02 --> DS
    DS -.->|Flow| UC03
    UC03 --> Pilot
    Pilot --> UC04
    UC04 --> UC02
    Pilot --> UC05
    UC05 --> UC02

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-04 mobile-android-kotlin/app/.../TardisPreferences.kt testDataStoreInitialization()
RF-02 US-01, US-03 mobile-android-kotlin/app/.../TardisPreferences.kt testTypedPreferencesKeys()
RF-03 US-02, US-03 mobile-android-kotlin/app/.../TardisPreferences.kt testFlowEmitsSavedPreferences()
RF-04 US-01 mobile-android-kotlin/app/.../TardisPreferences.kt testAsyncEditOperation()
RF-05 US-04 mobile-android-kotlin/app/.../TardisPreferences.kt testIOExceptionFallbackSafety()

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

2. Compile e execute os testes de unidade

./gradlew test
./gradlew assembleDebug

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Instanciação DataStore Delegado preferencesDataStore configurado no escopo de Context PASS ✅
CP-02 Chaves Tipadas Chaves inteiras, booleanas e texto operando sem cast frágil PASS ✅
CP-03 Fluxo com Flow Leitura contínua atualizando a UI reativamente sem polling PASS ✅
CP-04 Tratamento de Exceções I/O Falhas de arquivo tratadas com captura e fallback PASS ✅
CP-05 Suíte de Testes Automatizados Testes de unidade do DataStore aprovados com 100% de sucesso PASS ✅