# rickyyu/nfc-android architecture

> Architecture diagram of the GitHub repository rickyyu/nfc-android, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rickyyu/nfc-android
- Repository: https://github.com/rickyyu/nfc-android

## Overview

Nfc-Android is a sample Android app for reading and writing NFC tags. Users choose a mode from the main screen, then tap a tag to read or write NDEF text, NDEF URIs, application/URL launch records, or raw MIFARE Ultralight pages. Activity dispatch and shared foreground NFC handling form the internal layer. Relationships between the menu, activities, shared base, and URI helper are shown where supported by excerpts or the source index; Android NFC hardware and tag operations are external. Other documented NFC modes such as Beam are explanatory, not implemented as app flows.

Main entry points: [`app/src/main/java/com/ricky/nfc/MainActivity.java`](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/MainActivity.java) (Mode menu), [`app/src/main/java/com/ricky/nfc/base/BaseNfcActivity.java`](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/base/BaseNfcActivity.java) (Foreground dispatch), [`app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java`](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java) (Read URI), [`app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java`](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java) (Write URI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App entry"]
  node_main["Mode menu<br/>[MainActivity.java]"]
end

subgraph group_ndef["NDEF tag data"]
  node_text_read["Read text"]
  node_text_write["Write text"]
  node_uri_read["Read URI"]
  node_uri_write["Write URI"]
  node_uri_prefix["URI prefixes<br/>[UriPrefix.java]"]
end

subgraph group_launch["Tag launch records"]
  node_app_record["Write app record"]
  node_url_record["Write URL record"]
end

subgraph group_raw["Raw tag data"]
  node_mu_read["Read Ultralight"]
  node_mu_write["Write Ultralight"]
end

subgraph group_shared["NFC dispatch"]
  node_base["Foreground dispatch"]
end

node_user(("User"))
node_tag{{"NFC tag / adapter"}}

node_user -->|"chooses mode"| node_main
node_main -->|"starts"| node_text_read
node_main -->|"starts"| node_text_write
node_main -->|"starts"| node_uri_read
node_main -->|"starts"| node_uri_write
node_main -->|"starts"| node_app_record
node_main -->|"starts"| node_url_record
node_main -->|"starts"| node_mu_read
node_main -->|"starts"| node_mu_write
node_text_read -->|"extends"| node_base
node_text_write -->|"extends"| node_base
node_uri_read -->|"extends"| node_base
node_uri_write -->|"extends"| node_base
node_app_record -->|"extends"| node_base
node_url_record -->|"extends"| node_base
node_mu_read -->|"extends"| node_base
node_mu_write -->|"extends"| node_base
node_uri_read -->|"uses prefix map"| node_uri_prefix
node_uri_write -->|"uses prefix map"| node_uri_prefix
node_base -->|"dispatches tag events"| node_tag
node_text_read -->|"reads NDEF"| node_tag
node_uri_read -->|"reads NDEF"| node_tag
node_text_write -->|"writes NDEF"| node_tag
node_uri_write -->|"writes NDEF"| node_tag
node_app_record -->|"writes app record"| node_tag
node_url_record -->|"writes URI record"| node_tag
node_mu_read -->|"reads pages"| node_tag
node_mu_write -->|"writes pages"| node_tag

click node_main "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/MainActivity.java"
click node_text_read "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/ReadTextActivity.java"
click node_text_write "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/WriteTextActivity.java"
click node_uri_read "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java"
click node_uri_write "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java"
click node_uri_prefix "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/tools/UriPrefix.java"
click node_app_record "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/RunAppActivity.java"
click node_url_record "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/RunUrlActivity.java"
click node_mu_read "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/ReadMUActivity.java"
click node_mu_write "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/WriteMUActivity.java"
click node_base "https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/base/BaseNfcActivity.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_user toneBlue
class node_text_read,node_text_write,node_uri_read,node_uri_write,node_uri_prefix toneAmber
class node_app_record,node_url_record toneMint
class node_mu_read,node_mu_write toneRose
class node_base,node_tag toneIndigo
```

## Components

### App entry

- [Mode menu](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/MainActivity.java): `app/src/main/java/com/ricky/nfc/MainActivity.java`

### NDEF tag data

- [Read text](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/ReadTextActivity.java): `app/src/main/java/com/ricky/nfc/activity/ReadTextActivity.java`
- [Write text](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/WriteTextActivity.java): `app/src/main/java/com/ricky/nfc/activity/WriteTextActivity.java`
- [Read URI](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java): `app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java`
- [Write URI](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java): `app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java`
- [URI prefixes](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/tools/UriPrefix.java): `app/src/main/java/com/ricky/nfc/tools/UriPrefix.java`

### Tag launch records

- [Write app record](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/RunAppActivity.java): `app/src/main/java/com/ricky/nfc/activity/RunAppActivity.java`
- [Write URL record](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/RunUrlActivity.java): `app/src/main/java/com/ricky/nfc/activity/RunUrlActivity.java`

### Raw tag data

- [Read Ultralight](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/ReadMUActivity.java): `app/src/main/java/com/ricky/nfc/activity/ReadMUActivity.java`
- [Write Ultralight](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/activity/WriteMUActivity.java): `app/src/main/java/com/ricky/nfc/activity/WriteMUActivity.java`

### NFC dispatch

- [Foreground dispatch](https://github.com/rickyyu/nfc-android/blob/master/app/src/main/java/com/ricky/nfc/base/BaseNfcActivity.java): `app/src/main/java/com/ricky/nfc/base/BaseNfcActivity.java`

### Other components

- **User**
- **NFC tag / adapter**

## Connections

- User → Mode menu: chooses mode (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Read text: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Write text: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Read URI: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Write URI: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Write app record: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Write URL record: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Read Ultralight: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Mode menu → Write Ultralight: starts (evidence: `app/src/main/java/com/ricky/nfc/MainActivity.java`)
- Read text → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/ReadTextActivity.java`)
- Write text → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/WriteTextActivity.java`)
- Read URI → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java`)
- Write URI → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java`)
- Write app record → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/RunAppActivity.java`)
- Write URL record → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/RunUrlActivity.java`)
- Read Ultralight → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/ReadMUActivity.java`)
- Write Ultralight → Foreground dispatch: extends (evidence: `app/src/main/java/com/ricky/nfc/activity/WriteMUActivity.java`)
- Read URI → URI prefixes: uses prefix map (evidence: `app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java`)
- Write URI → URI prefixes: uses prefix map (evidence: `app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java`)
- Foreground dispatch → NFC tag / adapter: dispatches tag events (evidence: `app/src/main/java/com/ricky/nfc/base/BaseNfcActivity.java`)
- Read text → NFC tag / adapter: reads NDEF (evidence: `app/src/main/java/com/ricky/nfc/activity/ReadTextActivity.java`)
- Read URI → NFC tag / adapter: reads NDEF (evidence: `app/src/main/java/com/ricky/nfc/activity/ReadUriActivity.java`)
- Write text → NFC tag / adapter: writes NDEF (evidence: `app/src/main/java/com/ricky/nfc/activity/WriteTextActivity.java`)
- Write URI → NFC tag / adapter: writes NDEF (evidence: `app/src/main/java/com/ricky/nfc/activity/WriteUriActivity.java`)
- Write app record → NFC tag / adapter: writes app record (evidence: `app/src/main/java/com/ricky/nfc/activity/RunAppActivity.java`)
- Write URL record → NFC tag / adapter: writes URI record (evidence: `app/src/main/java/com/ricky/nfc/activity/RunUrlActivity.java`)
- Read Ultralight → NFC tag / adapter: reads pages (evidence: `app/src/main/java/com/ricky/nfc/activity/ReadMUActivity.java`)
- Write Ultralight → NFC tag / adapter: writes pages (evidence: `app/src/main/java/com/ricky/nfc/activity/WriteMUActivity.java`)
