Skip to content

Conversation

@mlmesa2
Copy link

@mlmesa2 mlmesa2 commented Oct 3, 2025

No description provided.

- Actualizado el SDK de compilación y de destino a la versión 36.
- Centralizadas las dependencias y sus versiones en `gradle/libs.versions.toml` usando catálogos de versiones de Gradle.
Se han reorganizado varios archivos en nuevos subpaquetes para mejorar la estructura del proyecto y se han realizado mejoras de código.

- **Refactorización de `MainActivity.kt`:**
    - Se ha eliminado el código duplicado del adaptador (`ImprovedHistoryAdapter`) y la decoración (`HistoryItemDecoration`), que ahora se importan desde sus propios archivos.
    - Se utilizan los nuevos recursos de `strings.xml` para las estadísticas de "Promedio", "Total" y "Racha".
    - Se ha simplificado la escritura en `SharedPreferences` usando la extensión `edit { ... }` de KTX.
D4vRAM369 added a commit that referenced this pull request Jan 19, 2026
PROBLEMA DETECTADO:
===================
1. App crasheaba al iniciar con ClassCastException
2. App crasheaba al abrir pantalla Stats con SecurityException
3. Estadísticas mostraban ceros después de importar CSV

ROOT CAUSE ANALYSIS:
====================

Bug #1: ClassCastException en MainActivity.initViews()
-------------------------------------------------------
- Error: 'Chip cannot be cast to MaterialButton'
- Causa: Desajuste entre tipos declarados en Kotlin y tipos en XML
- Archivos afectados:
  * statsButton: declarado MaterialButton, pero es Chip en XML
  * settingsButton: declarado MaterialButton, pero es ImageButton en XML
  * exportButton: declarado MaterialButton, pero es ImageButton en XML
  * importButton: declarado MaterialButton, pero es ImageButton en XML
  * searchButton: declarado MaterialButton, pero es ImageButton en XML

Bug #2: SecurityException en DashboardActivity.onResume()
----------------------------------------------------------
- Error: 'RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified'
- Causa: Android 13+ (API 33) requiere flag de seguridad al registrar BroadcastReceivers
- Archivos afectados:
  * DashboardActivity.kt línea 97
  * MainActivity.kt línea 182

Bug #3: Estadísticas en ceros (ya corregido en commit anterior)
----------------------------------------------------------------
- Causa: Uso de claves obsoletas count_$date en lugar de count_cbd_$date y count_thc_$date
- Archivos afectados:
  * DashboardActivity.kt (4 funciones)
  * EvolutionActivity.kt (1 función)
  * CalendarActivity.kt (1 función)

SOLUCIÓN IMPLEMENTADA:
======================

1. Corregir tipos de variables en MainActivity.kt:
   - statsButton: MaterialButton → Chip
   - settingsButton, exportButton, importButton, searchButton: MaterialButton → ImageButton

2. Agregar flag RECEIVER_NOT_EXPORTED en registerReceiver():
   - DashboardActivity: registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED)
   - MainActivity: registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED)

   Nota PBL: RECEIVER_NOT_EXPORTED indica que el receptor es PRIVADO
   (solo nuestra app puede enviar broadcasts). Usar RECEIVER_EXPORTED
   solo si otras apps necesitan comunicarse con nosotros.

3. Actualizar acceso a datos en Activities de estadísticas:
   - Usar Prefs.getTotalCount() en lugar de sharedPrefs.getInt("count_$date", 0)
   - Usar Prefs.getAllDatesWithData() en lugar de iterar sharedPrefs.all

CONCEPTOS APRENDIDOS (PBL):
===========================

1. Type Safety en Android:
   - findViewById<T> hace cast implícito al tipo T
   - Si el tipo real en XML no coincide con T → ClassCastException
   - Solución: Declarar variables con el tipo exacto del XML

2. BroadcastReceiver Security (Android 13+):
   - RECEIVER_NOT_EXPORTED: Receptor privado (comunicación interna)
   - RECEIVER_EXPORTED: Receptor público (otras apps pueden enviar)
   - Razón: Prevenir que apps maliciosas envíen broadcasts falsos

3. Data Migration Best Practices:
   - Centralizar acceso a datos en funciones helper (Prefs.kt)
   - Evita duplicación de lógica de migración
   - Facilita cambios futuros en estructura de datos

TESTING:
========
✅ Build exitoso
✅ App inicia sin crashes
✅ Pantalla Stats abre correctamente
⏳ Pendiente: Verificar estadísticas después de importar CSV

ARCHIVOS MODIFICADOS:
=====================
- MainActivity.kt: Tipos de botones + BroadcastReceiver flag
- DashboardActivity.kt: BroadcastReceiver flag + Stats con Prefs helpers
- EvolutionActivity.kt: Stats con Prefs helpers
- CalendarActivity.kt: Stats con Prefs helpers
- CBDWidgetProvider.kt: (cambios menores de baseline)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant