Repository navigation
Releases: parrazam/mis-dineros
Releases · parrazam/mis-dineros
Release list
Mis Dineros v1.8.0
Suscripciones compartidas
Los planes familiares o compartidos ya se pueden marcar como tales: la app
guarda el precio completo y cuenta solo tu parte. Las copias de seguridad
anteriores se siguen importando sin cambios.
Novedades
- Interruptor «Compartida» al crear o editar una suscripción, con el número
de personas que la pagan (hasta 10, contándote a ti) y una vista previa de
tu parte. - El gasto mensual, el equivalente anual, el gasto por categoría y «Las 5
más caras» suman tu parte, no el precio completo. - Las tarjetas muestran tu parte y, debajo, el precio completo, con un chip
que indica entre cuántas personas se comparte. El detalle añade el número
de personas y el precio completo. - El aviso de renovación muestra el importe completo y tu parte.
Datos
- La base de datos pasa a la versión 3 con una migración que deja todas las
suscripciones existentes sin compartir. - Las copias de seguridad incluyen el número de personas. Las exportadas con
versiones anteriores se importan como no compartidas.
Interno
- Android Gradle Plugin 9.4.1 y Gradle 9.8.2.
- Dependencias actualizadas: Compose BOM 2026.06.01, Room 2.8.5, DataStore
1.3.0, WorkManager 2.12.0, androidx.hilt 1.3.0, kotlinx-serialization
1.12.0 y kotlinx-coroutines 1.11.0. - Tests de migración de Room contra los esquemas exportados.
What's Changed
- ci: Bump the github-actions group across 1 directory with 2 updates by @dependabot[bot] in #52
- build: migrar a AGP 9.4.1 y Gradle 9.8.2 by @parrazam in #54
- build: reintentar la descarga de la distribución de Gradle by @parrazam in #55
- feat: Suscripciones compartidas by @parrazam in #56
- deps: actualizar dependencias compatibles con compileSdk 36 by @parrazam in #57
- release: preparar v1.8.0 by @parrazam in #58
- ci: usar el mensaje del tag anotado como cuerpo de la release by @parrazam in #59
Full Changelog: v1.7.0...v1.8.0
Mis Dineros v1.7.0
What's Changed
Full Changelog: v1.6.0...v1.7.0
Mis Dineros v1.6.0
What's Changed
- ci: Bump actions/cache from 5.0.5 to 6.1.0 by @dependabot[bot] in #39
- ci: Bump actions/checkout from 6.0.3 to 7.0.1 by @dependabot[bot] in #38
- ci: Bump softprops/action-gh-release from 3.0.0 to 3.0.3 in the github-actions group across 1 directory by @dependabot[bot] in #43
- fix: revisión de seguridad y estabilidad by @parrazam in #45
Full Changelog: v1.5.0...v1.6.0
Mis Dineros v1.5.0
Compatibilidad con Android 16 (nivel de API 36), requisito de Google Play para
poder seguir publicando actualizaciones a partir del 31 de agosto de 2026.
targetSdk 36
- Los dos cambios de comportamiento obligatorios ya se cumplían: el edge-to-edge
es forzoso (la app usaenableEdgeToEdge()yWindowInsetsControllerCompat,
nuncasetStatusBarColor) y las restricciones de orientación se ignoran en
pantallas ≥ 600 dp, donde el bloqueo vertical ya estaba desactivado. android:enableOnBackInvokedCallback="true"explícito: es el valor por
defecto con targetSdk 36, pero iguala el comportamiento en Android 13–15.- No se declara
PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY, la exclusión
disponible hasta la API 37.
Correcciones de interfaz
- Tablet en vertical: la leyenda de categorías desaparecía en Estadísticas.
Al ignorarse ya el bloqueo de orientación, el donut ocupaba todo el ancho y
la leyenda se quedaba en 0 px. El layout de dos columnas ahora comprueba
también la proporción de la ventana, no solo el ancho. - Inicio en tablet en vertical: mantenía las dos columnas, que quedaban
apretadas en la mitad superior de la pantalla. Mismo criterio aplicado. - El FAB ya no tapa el último elemento en la lista de suscripciones ni en el
editor de categorías. - Ajustado el margen inferior del selector de iconos.
Otros cambios
- El permiso de notificaciones se pide una sola vez al abrir la app, en vez de
en cadaonResume: así no se agotaba el cupo de diálogos del sistema, que
tras un par de descartes dejaba de mostrarlos y denegaba en silencio. - El selector de imagen para iconos pasa a ser el Photo Picker del sistema
(PickVisualMedia), que no requiere permiso de acceso al almacenamiento y
solo da acceso a la foto elegida. - Room 2.7.0-alpha13 → 2.8.4 (versión estable). El esquema exportado no cambia,
así que las instalaciones existentes abren su base de datos sin migración. - Reparada la suite de tests instrumentados, rota desde la migración a la BD v2.
- CI:
actions/setup-java5.2.0 → 5.5.0 ysoftprops/action-gh-release
2.6.2 → 3.0.0.
Mis Dineros v1.4.1
Fix: las notificaciones llegan a la hora configurada, sin deriva. - Sustituido el PeriodicWorkRequest (derivaba hacia la hora del último despertar del dispositivo) por one-time work auto-reprogramado que se re-ancla cada día a la hh:mm configurada. - La cadena sobrevive a errores transitorios (Result.retry) y a cambios de Ajustes concurrentes (guarda isStopped). - Cálculo del retardo con zona horaria (exacto en días de cambio DST) y valores de hora/minuto acotados. - El botón de probar notificación ya no interfiere con la programación.
Mis Dineros v1.4.0
feat: opción de colores dinámicos (Material You) en Ajustes (#30) - Nuevo ajuste dynamicColorEnabled (default false) en AppSettings + DataStore - Toggle en Ajustes → Apariencia, visible solo en Android 12+ - MainViewModel expone ThemeConfig (appTheme + dynamicColor) y MainActivity conecta el flag dynamicColor de MisDinerosTheme, que ya estaba implementado - Backup: SettingsDto serializa dynamicColorEnabled y notificationMinute (fix: el minuto de la hora de notificación se perdía al exportar/importar) - Tests de round-trip y de defaults al importar backups antiguos Co-authored-by: Parra <parravidales@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Mis Dineros v1.3.3
fix: avance automático de renovaciones y bloqueo de fechas pasadas (#19) * fix(renewals): avanzar automáticamente la fecha de renovación al vencer Hasta ahora nada actualizaba nextRenewalDate cuando pasaba la fecha de renovación: la suscripción quedaba anclada en el pasado, desaparecía de las próximas renovaciones de Home y dejaba de notificarse. - BillingCycle.nextRenewal(from, anchorDay): cálculo puro del siguiente ciclo con reanclado min(anchorDay, díasDelMes) (día 31: ene→feb→mar conserva el 31, no se queda en 28). - Nuevo campo persistente billingAnchorDay (dominio, entidad, mapper) que guarda el día de facturación original; se fija al crear/editar. - AdvanceDueRenewalsUseCase: recalcula y persiste las fechas vencidas de las suscripciones activas (soporta varios ciclos atrasados). - Migración Room 1→2 con backfill del ancla desde nextRenewalDate. - Disparado al arrancar la app, en el worker diario y tras una importación. - Backup: el JSON no cambia; toDomain deriva el ancla del día de la fecha. Tests: BillingCycleTest y AdvanceDueRenewalsUseCaseTest. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(edit): impedir fijar la fecha de renovación en el pasado El selector de fecha permitía elegir días anteriores a hoy y guardarlos, dejando una renovación ya vencida al editar. - DatePicker: SelectableDates deshabilita fechas (y años) anteriores a hoy. - ViewModel: validación de respaldo en save() que rechaza una fecha pasada y muestra el error bajo el campo de fecha. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Parra <parravidales@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Mis Dineros v1.3.2
fix(backup): habilitar Auto Backup eligibility con fullBackupOnly (#18)
La app declaraba un BackupAgent personalizado sin android:fullBackupOnly="true",
de modo que el sistema la trataba como key/value backup. Con onBackup/onRestore
vacíos, no se almacenaba nada y la app no aparecía en la lista de Google Backup.
Cambios:
- Manifest: añadir android:fullBackupOnly="true" para que el sistema use Auto
Backup (full-data) en Android 6+ pese a tener BackupAgent declarado.
- MisDinerosBackupAgent: simplificar onFullBackup. En lugar de duplicar las
reglas (que ya están en data_extraction_rules.xml y backup_rules.xml),
delega en super.onFullBackup(data). El agente conserva solo dos
responsabilidades:
1. Respetar el toggle de usuario (auto_backup_prefs/enabled).
2. Hacer wal_checkpoint(FULL) antes de la copia para que el .db sea
consistente.
- MisDinerosApplication: inicializar el mirror de SharedPreferences
(auto_backup_prefs.xml) en onCreate con el valor actual del DataStore,
para que el archivo exista desde el primer arranque.
Refs:
- https://developer.android.com/identity/data/autobackup
- https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore
Co-authored-by: Víctor Parra <claude@anthropic.local>
Mis Dineros v1.3.1
fix(backup): checkpoint WAL antes de copiar la BD en Auto Backup Room usa WAL por defecto. Sin checkpoint, el fichero principal puede no tener las últimas transacciones al hacer fullBackupFile(), lo que provoca inconsistencia al restaurar en otro dispositivo o tras reinstalar. Se abre una conexión SQLiteDatabase independiente (sin Hilt/Room) para ejecutar PRAGMA wal_checkpoint(FULL) justo antes de incluir los ficheros. Si el checkpoint falla, se continúa incluyendo los ficheros WAL y SHM como fallback (comportamiento anterior). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mis Dineros v1.3.0
v1.3.0
Novedades
Exportación mejorada
- El botón «Exportar datos» ahora abre un diálogo donde puedes elegir entre guardar el archivo en el dispositivo o compartirlo directamente con cualquier app (LocalSend, Telegram,
Drive…). - Nuevo cifrado opcional: activa el toggle «Cifrar con contraseña» antes de exportar y el archivo queda protegido con AES-256-GCM. Sin la contraseña, el contenido es ilegible. La contraseña no se almacena en ningún sitio.
- Los backups exportados con versiones anteriores se importan sin cambios — compatibilidad total.
Copia de seguridad automática
- Nueva opción en Ajustes → Datos: «Copia de seguridad automática». Cuando está activa, Android guarda una copia cifrada en tu cuenta de Google. Si reinstales la app o cambias de móvil, tus datos se restauran solos.
Formato técnico del fichero: cabecera MDB1 (5 bytes) + JSON plano o AES-256-GCM con clave derivada por PBKDF2 (200 000 iteraciones). Compatible con importaciones legacy sin cabecera.
Full Changelog: v1.2.1...v1.3.0