eliminados los snooze

This commit is contained in:
Javier Bautista Fernández
2026-06-02 09:21:43 +02:00
parent de07316d79
commit ffe1c41458
6 changed files with 75 additions and 52 deletions
@@ -117,7 +117,7 @@ class PluriWaveAlarmReceiver : BroadcastReceiver() {
.setAutoCancel(false)
.setContentIntent(fullScreenIntent)
.setFullScreenIntent(fullScreenIntent, true)
.addAction(0, "Posponer $snoozeMinutes min", snoozePendingIntent(context, alarmId, snoozeMinutes))
.addAction(0, "Posponer", snoozePendingIntent(context, alarmId, snoozeMinutes))
.addAction(0, "Detener", stopPendingIntent(context, alarmId))
.build()
@@ -188,7 +188,7 @@ class PluriWaveAlarmReceiver : BroadcastReceiver() {
.setSilent(true)
.setAutoCancel(true)
.setContentIntent(openAppIntent)
.addAction(0, "Posponer $snoozeMinutes min", postponeNextIntent)
.addAction(0, "Posponer", postponeNextIntent)
.addAction(0, "Omitir esta vez", skipNextIntent)
.build()
@@ -266,7 +266,7 @@ class PluriWaveAlarmService : Service() {
.setAutoCancel(false)
.setFullScreenIntent(openAlarmPendingIntent(alarmId, title, snoozeMinutes), true)
.setContentIntent(openAlarmPendingIntent(alarmId, title, snoozeMinutes))
.addAction(0, "Posponer $snoozeMinutes min", snoozePendingIntent(alarmId, snoozeMinutes))
.addAction(0, "Posponer", snoozePendingIntent(alarmId, snoozeMinutes))
.addAction(0, "Detener", stopPendingIntent(alarmId))
.build()
+1 -1
View File
@@ -257,7 +257,7 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Alarma pospuesta ${evento.snoozeMinutes} min para esta ejecución.',
'Alarma pospuesta para esta ejecución.',
),
),
);
+70 -1
View File
@@ -1,10 +1,17 @@
import 'dart:async';
import 'dart:ui' as ui;
import 'package:audio_service/audio_service.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'app.dart';
import 'servicios/servicio_audio.dart';
const _anchoMinimoLandscape = 600.0;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await _aplicarPoliticaOrientacion();
final handler = await AudioService.init(
builder: () => PluriWaveAudioHandler(),
@@ -18,5 +25,67 @@ Future<void> main() async {
);
registrarHandler(handler);
runApp(const PluriWaveApp());
runApp(const _OrientacionResponsiveApp(child: PluriWaveApp()));
}
Future<void> _aplicarPoliticaOrientacion([ui.Display? display]) async {
final vista =
WidgetsBinding.instance.platformDispatcher.views.isNotEmpty
? WidgetsBinding.instance.platformDispatcher.views.first
: null;
final displayActivo = display ?? vista?.display;
if (displayActivo == null) return;
final anchoLogico =
displayActivo.size.width / displayActivo.devicePixelRatio;
if (anchoLogico < _anchoMinimoLandscape) {
await SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
return;
}
await SystemChrome.setPreferredOrientations(DeviceOrientation.values);
}
class _OrientacionResponsiveApp extends StatefulWidget {
const _OrientacionResponsiveApp({required this.child});
final Widget child;
@override
State<_OrientacionResponsiveApp> createState() =>
_OrientacionResponsiveAppState();
}
class _OrientacionResponsiveAppState extends State<_OrientacionResponsiveApp>
with WidgetsBindingObserver {
ui.Display? _display;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
_display = View.maybeOf(context)?.display;
unawaited(_aplicarPoliticaOrientacion(_display));
}
@override
void didChangeMetrics() {
unawaited(_aplicarPoliticaOrientacion(_display));
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) => widget.child;
}
@@ -140,19 +140,6 @@ class _PantallaAlarmaSonandoState extends State<PantallaAlarmaSonando> {
if (mounted) navigator.pop();
}
Future<void> _posponer(int minutos) async {
final radio = context.read<EstadoRadio>();
final alarmas = context.read<EstadoAlarmas>();
final navigator = Navigator.of(context);
_fallbackTimer?.cancel();
_fadeInTimer?.cancel();
await _estadoSub?.cancel();
await _fallbackPlayer.stop();
await radio.audio.pausar();
await alarmas.posponerAlarma(widget.alarma, minutos);
if (mounted) navigator.pop();
}
@override
void dispose() {
_fallbackTimer?.cancel();
@@ -212,18 +199,6 @@ class _PantallaAlarmaSonandoState extends State<PantallaAlarmaSonando> {
icon: const Icon(Icons.stop_rounded),
label: const Text('Detener alarma'),
),
const SizedBox(height: 12),
Wrap(
spacing: 8,
children: [
for (final min in const [3, 5, 10])
ActionChip(
avatar: const Icon(Icons.snooze_rounded, size: 18),
label: Text('Posponer $min min'),
onPressed: () => _posponer(min),
),
],
),
],
),
),
+1 -22
View File
@@ -176,10 +176,6 @@ class _TarjetaAlarma extends StatelessWidget {
icon: Icons.repeat_rounded,
label: _programacion(alarma),
),
_InfoChip(
icon: Icons.snooze_rounded,
label: '${alarma.snoozeMinutos} min',
),
_InfoChip(
icon: Icons.beach_access_rounded,
label:
@@ -323,7 +319,6 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
late DateTime _fecha;
late TipoProgramacionAlarma _tipo;
late Set<int> _diasSemana;
late int _snooze;
late double _volumen;
late int _fadeInSegundos;
late bool _sonarEnVacaciones;
@@ -346,7 +341,6 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
_fecha = alarma?.fechaUnica ?? ahora;
_tipo = alarma?.tipoProgramacion ?? TipoProgramacionAlarma.unica;
_diasSemana = {...alarma?.diasSemana ?? const <int>[]};
_snooze = alarma?.snoozeMinutos ?? 5;
_volumen = alarma?.volumen ?? 0.85;
_fadeInSegundos = ((alarma?.fadeInSegundos ?? 0).clamp(0, 60)) as int;
_sonarEnVacaciones = alarma?.sonarEnVacaciones ?? true;
@@ -481,21 +475,6 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
),
],
const SizedBox(height: 14),
_SectionLabel(
icon: 'assets/icons/alarmas/snooze_wave.png',
text: 'Postponer',
),
SegmentedButton<int>(
segments: const [
ButtonSegment(value: 3, label: Text('3 min')),
ButtonSegment(value: 5, label: Text('5 min')),
ButtonSegment(value: 10, label: Text('10 min')),
],
selected: {_snooze},
onSelectionChanged:
(value) => setState(() => _snooze = value.first),
),
const SizedBox(height: 14),
_SectionLabel(
icon: 'assets/icons/alarmas/fallback_sound.png',
text: 'Sonido y volumen',
@@ -679,7 +658,7 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
limpiarFechaUnica: _tipo != TipoProgramacionAlarma.unica,
emisora: _emisora,
sonarEnVacaciones: _sonarEnVacaciones,
snoozeMinutos: _snooze,
snoozeMinutos: existente?.snoozeMinutos ?? 5,
volumen: _volumen,
fadeInSegundos: _fadeInSegundos.clamp(0, 60),
sonidoInterno: _sonidoInterno,