~/projects-hub/proyectos/little-chef-timer
En Desarrollo
Little Chef Timer icon
MobileCocinaAndroidProductividad
KotlinJetpack ComposeMaterial Design 3SharedPreferencesAlarmManagerStorage Access Framework

Little Chef Timer

Temporizador de cocina para Android, 100% offline, con alarmas exactas que suenan aunque el teléfono esté bloqueado, en modo Doze o con la app cerrada por el sistema.

Última actualización:

El Problema

Los temporizadores de cocina genéricos no distinguen entre preparaciones, pierden la cuenta regresiva si el sistema mata la app o el teléfono se reinicia, y su alarma puede fallar por el modo de ahorro de batería (Doze) de Android.

La Solución

Una app offline que guarda recetas propias con emoji, notas y tiempo exacto, y programa la alarma con AlarmManager.setAlarmClock para que suene puntual incluso con la pantalla bloqueada o en Doze. El tiempo restante se calcula contra una marca de fin persistida, así que sobrevive al cierre del proceso sin desfase, y no necesita ningún servicio en primer plano corriendo en segundo plano.

Aprendizajes Clave

  • Cuenta regresiva sin drift: el tiempo restante se deriva matemáticamente de una marca de tiempo de fin (endAtMillis) guardada en SharedPreferences, en vez de un contador que se pueda perder si el proceso muere.
  • Alarmas exactas sin permisos invasivos: AlarmManager.setAlarmClock dispara con precisión incluso en Doze, sin pedir SCHEDULE_EXACT_ALARM.
  • UI reactiva sin polling: un SharedPreferences.OnSharedPreferenceChangeListener conectado a un DisposableEffect de Compose actualiza la interfaz solo cuando cambia el estado, sin lecturas periódicas a disco.
  • Canales de notificación por sonido: como el sonido de un canal es inmutable una vez creado, cada tono elegido genera su propio canal (alarm_<hash>), eliminando los anteriores.

Arquitectura sin Room y sin servicio en primer plano

Little Chef Timer es una app de un solo módulo, pensada para consumir cero batería mientras el temporizador está corriendo:

  • Persistencia simple en SharedPreferences: el catálogo de recetas es una lista corta, así que se guarda como JSON validado en preferencias, evitando el costo de un esquema relacional y sus migraciones.
  • Alarma del sistema, no un servicio propio: el conteo se calcula como endAtMillis - now, y AlarmManager se encarga de despertar el dispositivo en el momento exacto, sin gastar ciclos de CPU mientras el teléfono está inactivo.
  • Notificación insistente: al sonar, una notificación de alta prioridad con FLAG_INSISTENT repite el sonido en bucle hasta que el usuario presiona Detener.

Personalización y respaldo

  • Recetas propias con emoji y notas: cada preparación tiene título, emoji, notas de cocción y una duración exacta.
  • Tema y bilingüismo en vivo: paleta lila/rosada en modo Claro, Oscuro o Seguir sistema, con cambio de idioma (Español/English) sin reiniciar la app.
  • Respaldo sin permisos amplios: exportación e importación de recetas en JSON vía Storage Access Framework, sin solicitar acceso general al almacenamiento.

Nota: Puedes explorar el código fuente y la documentación técnica directamente en el repositorio de GitHub.

Esta página es un resumen de alto nivel. El repositorio en GitHub es la fuente de verdad sobre las funcionalidades actuales de cada herramienta. GitHub ↗