fix(alarms): harden native alarm lifecycle
This commit is contained in:
@@ -58,6 +58,7 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
try {
|
||||
await _sincronizarEjecucionesGestionadasPorAndroid();
|
||||
final config = await servicio.recalcularTodas();
|
||||
_aplicar(config);
|
||||
debugPrint(
|
||||
@@ -83,6 +84,7 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
_aplicar(config);
|
||||
try {
|
||||
final guardada = _alarmas.firstWhere((a) => a.id == alarma.id);
|
||||
await _solicitarPermisosNecesariosParaAlarma();
|
||||
debugPrint(
|
||||
'[PluriWave][alarmas] guardada id=${guardada.id} proxima=${guardada.proximaEjecucion?.toIso8601String()}',
|
||||
);
|
||||
@@ -246,10 +248,48 @@ class EstadoAlarmas extends ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> _sincronizarEjecucionesGestionadasPorAndroid() async {
|
||||
try {
|
||||
final ejecuciones = await android.obtenerEjecucionesNativasGestionadas();
|
||||
if (ejecuciones.isEmpty) return;
|
||||
final config = await servicio.sincronizarEjecucionesNativas({
|
||||
for (final ejecucion in ejecuciones)
|
||||
ejecucion.alarmaId: ejecucion.gestionadaEn,
|
||||
});
|
||||
_aplicar(config);
|
||||
debugPrint(
|
||||
'[PluriWave][alarmas] sincronizadas ejecuciones nativas count=${ejecuciones.length}',
|
||||
);
|
||||
} catch (e) {
|
||||
debugPrint('[PluriWave][alarmas] sincronizar nativas ERROR $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _solicitarPermisosNecesariosParaAlarma() async {
|
||||
try {
|
||||
final diag = await android.diagnostico();
|
||||
_diagnostico = diag;
|
||||
if (!diag.puedeProgramarExactas) {
|
||||
await android.solicitarPermisoAlarmasExactas();
|
||||
}
|
||||
if (!diag.notificacionesPermitidas) {
|
||||
await android.solicitarPermisoNotificaciones();
|
||||
}
|
||||
if (!diag.puedeUsarPantallaCompleta) {
|
||||
await android.solicitarPermisoPantallaCompleta();
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint('[PluriWave][alarmas] permisos android ERROR $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _sincronizarTodas() async {
|
||||
debugPrint(
|
||||
'[PluriWave][alarmas] sincronizar todas count=${_alarmas.length}',
|
||||
);
|
||||
if (_alarmas.any((alarma) => alarma.activa)) {
|
||||
await _solicitarPermisosNecesariosParaAlarma();
|
||||
}
|
||||
for (final alarma in _alarmas) {
|
||||
await android.programar(alarma);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user