removed code
This commit is contained in:
+195
@@ -0,0 +1,195 @@
|
||||
# Changelog - iTartanas
|
||||
|
||||
## Versión 1.0 - Implementación Completa
|
||||
|
||||
### 🎉 Funcionalidades Implementadas
|
||||
|
||||
#### ✅ Lectura NFC de Tarjeta Millennium
|
||||
- **Comunicación ISO-DEP**: Implementado el protocolo completo de comunicación con tarjetas Calypso
|
||||
- **Selección de red de transporte**: Comando APDU para inicializar la comunicación
|
||||
- **Lectura de entorno y contrato**: Extracción de datos básicos de la tarjeta
|
||||
- **Lectura de registros de eventos**: Obtención de los últimos 3 movimientos
|
||||
|
||||
#### 💳 Procesamiento de Datos de Tarjeta
|
||||
|
||||
##### Número de Tarjeta
|
||||
- Decodificación BCD (Binary Coded Decimal) a decimal
|
||||
- Conversión de PAN (Primary Account Number) a IEP según aplicación
|
||||
- Cálculo y validación de dígito de verificación Luhn
|
||||
- Enmascaramiento de primeros 8 dígitos por seguridad
|
||||
- Formato visual en grupos de 4 dígitos
|
||||
|
||||
##### Saldo
|
||||
- Lectura desde bytes 29-31 del contrato (3 bytes big-endian)
|
||||
- Conversión de céntimos a euros
|
||||
- Formato con 2 decimales
|
||||
|
||||
##### Últimos Movimientos (NUEVO)
|
||||
- Lectura de registros de eventos (comando READ RECORD)
|
||||
- Parseo de hasta 3 movimientos más recientes
|
||||
- Extracción de información:
|
||||
- **Fecha**: Días desde 01/01/1997 (formato Calypso)
|
||||
- **Hora**: Minutos desde medianoche (convertido a HH:MM)
|
||||
- **Tipo de evento**: Carga, Validación, Operación
|
||||
- **Importe**: En euros (si aplica)
|
||||
- **Ubicación**: Línea o parada (si está disponible)
|
||||
|
||||
#### 🎨 Interfaz de Usuario
|
||||
|
||||
##### Pantalla Principal
|
||||
- Diseño Material 3 con Jetpack Compose
|
||||
- Tema moderno y responsivo
|
||||
- Edge-to-edge UI
|
||||
|
||||
##### Estados de la Aplicación
|
||||
1. **Estado Inicial**: Instrucciones y icono NFC
|
||||
2. **Leyendo**: Indicador de progreso circular
|
||||
3. **Datos Leídos**: Card con toda la información
|
||||
4. **Error**: Card roja con mensaje descriptivo
|
||||
|
||||
##### Visualización de Datos
|
||||
- **Número de tarjeta**: Tipografía destacada, parcialmente enmascarado
|
||||
- **Saldo**: Display prominente en color primario, tamaño grande
|
||||
- **Movimientos**: Lista compacta con diseño tipo timeline
|
||||
- Fecha y hora
|
||||
- Tipo de operación con estilo diferenciado
|
||||
- Importe con código de color (Cargas en azul, Validaciones en gris)
|
||||
- Ubicación/línea cuando está disponible
|
||||
|
||||
#### 🔧 Características Técnicas
|
||||
|
||||
##### Arquitectura
|
||||
- **Patrón Repository**: Separación de lógica de negocio
|
||||
- **Coroutines**: Operaciones asíncronas sin bloqueo
|
||||
- **Compose State Management**: Estado reactivo de UI
|
||||
- **Manejo de errores robusto**: Try-catch en múltiples niveles
|
||||
|
||||
##### Comandos APDU Implementados
|
||||
```
|
||||
SELECT Transport Network: 0x80 0x26 0x4F 0x11 0x0A
|
||||
READ Environment: 0x80 0x32 0x00 0x00 0x18
|
||||
READ Contract: 0x80 0x2E 0x01 0x00 0x20
|
||||
READ Event Log (1-3): 0x80 0x2B 0x0N 0x05 0x1D
|
||||
```
|
||||
|
||||
##### Seguridad y Privacidad
|
||||
- ✅ Sin conexión a Internet
|
||||
- ✅ Sin almacenamiento persistente
|
||||
- ✅ Solo lectura (no puede modificar datos)
|
||||
- ✅ Enmascaramiento de información sensible
|
||||
- ✅ Validación de datos antes de mostrar
|
||||
|
||||
### 📋 Archivos Creados/Modificados
|
||||
|
||||
#### Nuevos Archivos
|
||||
```
|
||||
app/src/main/java/com/pjpmosteiro/itartanas/nfc/
|
||||
└── CardRepositoryImpl.kt (270 líneas)
|
||||
|
||||
app/src/main/res/xml/
|
||||
└── nfc_tech_filter.xml
|
||||
|
||||
docs/
|
||||
├── README.md
|
||||
├── INSTALLATION_GUIDE.md
|
||||
└── CHANGELOG.md (este archivo)
|
||||
```
|
||||
|
||||
#### Archivos Modificados
|
||||
```
|
||||
app/src/main/AndroidManifest.xml
|
||||
- Añadidos permisos NFC
|
||||
- Configurado intent-filter para NFC
|
||||
- Añadido launchMode="singleTop"
|
||||
|
||||
app/src/main/java/com/pjpmosteiro/itartanas/MainActivity.kt
|
||||
- Implementada gestión completa de NFC
|
||||
- Añadida UI de lectura de tarjeta
|
||||
- Implementado componente MovementItem
|
||||
- Gestión de estados (leyendo, éxito, error)
|
||||
```
|
||||
|
||||
### 🛠️ Dependencias
|
||||
|
||||
Todas las dependencias ya estaban presentes:
|
||||
- Kotlin 2.1.0
|
||||
- Jetpack Compose BOM
|
||||
- Material 3
|
||||
- Lifecycle Runtime KTX
|
||||
- Android NFC API (incluida en SDK)
|
||||
|
||||
### ✅ Testing y Calidad
|
||||
|
||||
- ✅ Build exitoso sin errores
|
||||
- ✅ Código sin warnings críticos
|
||||
- ✅ Uso correcto de Locale para formateo
|
||||
- ✅ Manejo apropiado de excepciones
|
||||
- ✅ Compatibilidad con Android 7.0+ (API 24)
|
||||
- ✅ Soporte para Android 13+ (API 33) con APIs actualizadas
|
||||
|
||||
### 📱 Cómo Probar
|
||||
|
||||
1. Compilar e instalar:
|
||||
```bash
|
||||
.\gradlew installDebug
|
||||
```
|
||||
|
||||
2. Abrir la aplicación en un dispositivo con NFC
|
||||
|
||||
3. Acercar una Tarjeta Millennium al lector NFC
|
||||
|
||||
4. Verificar que se muestran:
|
||||
- Número de tarjeta enmascarado
|
||||
- Saldo actual
|
||||
- Últimos 3 movimientos con detalles
|
||||
|
||||
### 🎯 Objetivos Cumplidos
|
||||
|
||||
- ✅ Lectura de número de tarjeta
|
||||
- ✅ Consulta de saldo
|
||||
- ✅ Visualización de últimos movimientos (NUEVO)
|
||||
- ✅ Interfaz moderna y usable
|
||||
- ✅ Detección automática NFC
|
||||
- ✅ Manejo robusto de errores
|
||||
- ✅ Documentación completa
|
||||
|
||||
### 🔮 Posibles Mejoras Futuras
|
||||
|
||||
- Guardar historial de lecturas en base de datos local
|
||||
- Gráficos de evolución de saldo
|
||||
- Notificaciones de saldo bajo
|
||||
- Múltiples tarjetas en una cuenta
|
||||
- Exportar historial a PDF
|
||||
- Widget de pantalla de inicio
|
||||
- Modo oscuro/claro manual
|
||||
- Soporte para otros sistemas de transporte
|
||||
|
||||
### 📝 Notas Técnicas
|
||||
|
||||
#### Formato de Fechas Calypso
|
||||
Las fechas se almacenan como días transcurridos desde el 01/01/1997 (epoch Calypso).
|
||||
|
||||
#### Formato de Hora
|
||||
Las horas se almacenan como minutos desde medianoche (0-1439).
|
||||
|
||||
#### Tipos de Evento
|
||||
- `1`: Carga de saldo
|
||||
- `2, 3`: Validación en transporte
|
||||
- Otros: Operaciones diversas
|
||||
|
||||
#### Estructura de Registros
|
||||
Cada registro de evento tiene 29 bytes útiles con la siguiente estructura aproximada:
|
||||
- Bytes 0-1: Fecha (días desde epoch)
|
||||
- Bytes 2-3: Hora (minutos desde medianoche)
|
||||
- Byte 4: Tipo de evento
|
||||
- Bytes 5-7: Importe (céntimos, big-endian)
|
||||
- Bytes 8-11: Información adicional
|
||||
- Bytes 10-11: Código de ubicación/línea
|
||||
|
||||
---
|
||||
|
||||
**Desarrollado por**: Pablo Mosteiro
|
||||
**Basado en**: Análisis de código decompilado de iTranvias
|
||||
**Fecha**: Marzo 2026
|
||||
**Versión**: 1.0
|
||||
|
||||
Reference in New Issue
Block a user