- Sin pulsar nada. Cuando el móvil se desconecta del Bluetooth del coche, guarda la ubicación y la dirección y te avisa con una notificación. No hace falta abrir la app.
- Volver al coche. El último aparcamiento en el mapa, con un botón para que el navegador te lleve andando hasta él y otro para compartir la ubicación.
- Cuánto tiempo estuviste. Al volver a conectarte al coche apunta la hora de llegada y te dice cuánto tiempo ha estado aparcado. Si no llega a reconectar, la sesión se cierra a mano.
- Sin GPS también se guarda. Si no hay señal, el aparcamiento se guarda igual y luego puedes arrastrar el pin a su sitio.
- Historial. Todos los aparcamientos con fecha, duración, una nota ("planta -2, plaza 47") y una foto.
- Estadísticas y widget. Tiempo aparcado en el mes, media, récord y zonas más frecuentes. En la pantalla de inicio, un widget con la dirección y el botón de navegar.
- Varios coches. Puedes vigilar más de un dispositivo Bluetooth, el del coche y el de la moto, por ejemplo.
- Privada. Sin anuncios, sin cuentas y sin servidor propio: los aparcamientos, las notas y las fotos se guardan en el móvil. Tema claro u oscuro y seis idiomas.
El aviso de desconexión llega a un BroadcastReceiver, y Android le da muy poco tiempo antes de poder matar el proceso. Por eso el receptor solo comprueba si el dispositivo es uno de los vigilados y arranca un foreground service. El servicio pide la ubicación con Fused Location, saca la dirección con el Geocoder, guarda el registro en Room y lanza la notificación.
Un módulo de dominio en Kotlin puro, sin dependencias de Android, con los modelos, las interfaces de repositorio y nueve casos de uso. Alrededor, módulos de infraestructura (datos, Bluetooth, ubicación, tema) y uno por pantalla (mapa, historial, estadísticas, ajustes), todos dependiendo hacia el dominio. La interfaz es Jetpack Compose con MVVM, y Hilt lo conecta todo.
El mapa empezó con Google Maps Compose. Lo cambié por osmdroid, que pinta OpenStreetMap dentro de Compose sin API key ni cuenta de facturación.
- Desconexiones duplicadas. Algunos equipos de Bluetooth envían dos desconexiones seguidas, lo que creaba aparcamientos fantasma. Ahora se ignora cualquier desconexión del mismo dispositivo en los 30 segundos siguientes.
- Un aparcamiento en el océano. Sin GPS, el registro se guarda con coordenadas
(0, 0), y al editarlo el pin aparecía frente a la costa de África. Ahora el modo edición coloca el pin en la última posición buena conocida. - Una dirección que no se actualizaba. Al mover el pin a mano se guardaba la dirección antigua. Si no la has tocado, ahora se vuelve a calcular a partir de las nuevas coordenadas.