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

🪪 P04: Cartão de Visitas Digital em ConstraintLayout

v1.0 — Android Nativo, Kotlin, ConstraintLayout Avançado, Chains, Guidelines Percentuais e Intents Nativas

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


🏛️ Visão Geral & Arquitetura Visual

O Cartão de Visitas Digital ensina a projetar interfaces responsivas de nível profissional no Android sem aninhar múltiplos layouts pesados. O projeto foca no uso avançado do ConstraintLayout: encadeamentos horizontais e verticais (Chains), linhas-guia percentuais (Guidelines), barreiras dinâmicas (Barriers), elevação Material com MaterialCardView, e integração direta com outros aplicativos nativos do smartphone por meio de Intents Implícitas (ligar para telefone, abrir WhatsApp, enviar e-mail e abrir perfil profissional no navegador).

Arquitetura do Cartão de Visitas em ConstraintLayout
Cartão de Visitas Digital em Execução

📁 Estrutura de Pastas Anti-Colisão

Os layouts XML, recursos vetoriais e código Kotlin residem na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p04_cartao_views/
├── assets/
│   ├── arquitetura_cartao_views.svg
│   └── screenshot_p04.png
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/cartaovisitas/
│   │   │       │   └── 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 Profissional / Usuário Quero exibir meu cartão de visitas digital com foto, nome, cargo e contatos perfeitamente alinhados. Interface organizada e sem distorções em telas de diferentes tamanhos e proporções. Alta
US-02 Contato / Cliente Quero tocar no botão de telefone para abrir o discador nativo com o número preenchido. Disparo de Intent com ação Intent.ACTION_DIAL. Alta
US-03 Contato / Cliente Quero tocar no botão de e-mail para abrir o aplicativo de correio eletrônico com o destinatário pronto. Disparo de Intent implícita Intent.ACTION_SENDTO com esquema mailto:. Alta
US-04 Contato / Cliente Quero abrir links de redes sociais (LinkedIn, GitHub) no navegador padrão do aparelho. Disparo de Intent com Intent.ACTION_VIEW e URL validada. Média
US-05 Designer de UI Quero que o cartão possua cantos arredondados e sombra de profundidade Material Design. Uso de MaterialCardView com raio de 16dp e elevação de 8dp. Baixa

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    Client([fa:fa-user Contato / Cliente])
    OSApps[(fa:fa-mobile Apps do Sistema)]

    subgraph AppCartao ["🪪 Cartão Digital (mobile-android-kotlin)"]
        UC01["Visualizar Cartão de Visitas"]
        UC02["Tocar no Botão Telefone"]
        UC03["Tocar no Botão E-mail"]
        UC04["Tocar no Link GitHub/LinkedIn"]
        UC05["Compartilhar Contato via Intent"]
    end

    Client --> UC01
    Client --> UC02
    Client --> UC03
    Client --> UC04
    Client --> UC05
    UC02 -->|Intent.ACTION_DIAL| OSApps
    UC03 -->|Intent.ACTION_SENDTO| OSApps
    UC04 -->|Intent.ACTION_VIEW| OSApps

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/src/main/res/layout/activity_main.xml testFlatConstraintLayout()
RF-02 US-01, US-05 mobile-android-kotlin/app/src/main/res/layout/activity_main.xml testGuidelinePercentage()
RF-03 US-01 mobile-android-kotlin/app/src/main/res/layout/activity_main.xml testHorizontalSpreadChain()
RF-04 US-02, US-03, US-04 mobile-android-kotlin/app/.../MainActivity.kt testImplicitIntentsLaunch()
RF-05 US-02, US-03 mobile-android-kotlin/app/.../MainActivity.kt testResolveActivitySafety()

🛠️ 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_p04_cartao_views/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 Layout Constraint Único Tela estruturada sem nenhum aninhamento supérfluo PASS ✅
CP-02 Cadeias e Diretrizes Uso de Guidelines percentuais e Chains horizontais PASS ✅
CP-03 Intent de Discagem Ação ACTION_DIAL abre discador com número configurado PASS ✅
CP-04 Intent de E-mail e Web Abertura correta de clientes de e-mail e navegador PASS ✅
CP-05 Suíte de Testes Automatizados Testes de unidade e instrumentação aprovados com 100% de sucesso PASS ✅