eliminados los snooze
This commit is contained in:
@@ -117,7 +117,7 @@ class PluriWaveAlarmReceiver : BroadcastReceiver() {
|
|||||||
.setAutoCancel(false)
|
.setAutoCancel(false)
|
||||||
.setContentIntent(fullScreenIntent)
|
.setContentIntent(fullScreenIntent)
|
||||||
.setFullScreenIntent(fullScreenIntent, true)
|
.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))
|
.addAction(0, "Detener", stopPendingIntent(context, alarmId))
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ class PluriWaveAlarmReceiver : BroadcastReceiver() {
|
|||||||
.setSilent(true)
|
.setSilent(true)
|
||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
.setContentIntent(openAppIntent)
|
.setContentIntent(openAppIntent)
|
||||||
.addAction(0, "Posponer $snoozeMinutes min", postponeNextIntent)
|
.addAction(0, "Posponer", postponeNextIntent)
|
||||||
.addAction(0, "Omitir esta vez", skipNextIntent)
|
.addAction(0, "Omitir esta vez", skipNextIntent)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ class PluriWaveAlarmService : Service() {
|
|||||||
.setAutoCancel(false)
|
.setAutoCancel(false)
|
||||||
.setFullScreenIntent(openAlarmPendingIntent(alarmId, title, snoozeMinutes), true)
|
.setFullScreenIntent(openAlarmPendingIntent(alarmId, title, snoozeMinutes), true)
|
||||||
.setContentIntent(openAlarmPendingIntent(alarmId, title, snoozeMinutes))
|
.setContentIntent(openAlarmPendingIntent(alarmId, title, snoozeMinutes))
|
||||||
.addAction(0, "Posponer $snoozeMinutes min", snoozePendingIntent(alarmId, snoozeMinutes))
|
.addAction(0, "Posponer", snoozePendingIntent(alarmId, snoozeMinutes))
|
||||||
.addAction(0, "Detener", stopPendingIntent(alarmId))
|
.addAction(0, "Detener", stopPendingIntent(alarmId))
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -257,7 +257,7 @@ class _PaginaPrincipalState extends State<_PaginaPrincipal> {
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
'Alarma pospuesta ${evento.snoozeMinutes} min para esta ejecución.',
|
'Alarma pospuesta para esta ejecución.',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
+70
-1
@@ -1,10 +1,17 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
import 'package:audio_service/audio_service.dart';
|
import 'package:audio_service/audio_service.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'app.dart';
|
import 'app.dart';
|
||||||
import 'servicios/servicio_audio.dart';
|
import 'servicios/servicio_audio.dart';
|
||||||
|
|
||||||
|
const _anchoMinimoLandscape = 600.0;
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
await _aplicarPoliticaOrientacion();
|
||||||
|
|
||||||
final handler = await AudioService.init(
|
final handler = await AudioService.init(
|
||||||
builder: () => PluriWaveAudioHandler(),
|
builder: () => PluriWaveAudioHandler(),
|
||||||
@@ -18,5 +25,67 @@ Future<void> main() async {
|
|||||||
);
|
);
|
||||||
registrarHandler(handler);
|
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();
|
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
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_fallbackTimer?.cancel();
|
_fallbackTimer?.cancel();
|
||||||
@@ -212,18 +199,6 @@ class _PantallaAlarmaSonandoState extends State<PantallaAlarmaSonando> {
|
|||||||
icon: const Icon(Icons.stop_rounded),
|
icon: const Icon(Icons.stop_rounded),
|
||||||
label: const Text('Detener alarma'),
|
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),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -176,10 +176,6 @@ class _TarjetaAlarma extends StatelessWidget {
|
|||||||
icon: Icons.repeat_rounded,
|
icon: Icons.repeat_rounded,
|
||||||
label: _programacion(alarma),
|
label: _programacion(alarma),
|
||||||
),
|
),
|
||||||
_InfoChip(
|
|
||||||
icon: Icons.snooze_rounded,
|
|
||||||
label: '${alarma.snoozeMinutos} min',
|
|
||||||
),
|
|
||||||
_InfoChip(
|
_InfoChip(
|
||||||
icon: Icons.beach_access_rounded,
|
icon: Icons.beach_access_rounded,
|
||||||
label:
|
label:
|
||||||
@@ -323,7 +319,6 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
|
|||||||
late DateTime _fecha;
|
late DateTime _fecha;
|
||||||
late TipoProgramacionAlarma _tipo;
|
late TipoProgramacionAlarma _tipo;
|
||||||
late Set<int> _diasSemana;
|
late Set<int> _diasSemana;
|
||||||
late int _snooze;
|
|
||||||
late double _volumen;
|
late double _volumen;
|
||||||
late int _fadeInSegundos;
|
late int _fadeInSegundos;
|
||||||
late bool _sonarEnVacaciones;
|
late bool _sonarEnVacaciones;
|
||||||
@@ -346,7 +341,6 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
|
|||||||
_fecha = alarma?.fechaUnica ?? ahora;
|
_fecha = alarma?.fechaUnica ?? ahora;
|
||||||
_tipo = alarma?.tipoProgramacion ?? TipoProgramacionAlarma.unica;
|
_tipo = alarma?.tipoProgramacion ?? TipoProgramacionAlarma.unica;
|
||||||
_diasSemana = {...alarma?.diasSemana ?? const <int>[]};
|
_diasSemana = {...alarma?.diasSemana ?? const <int>[]};
|
||||||
_snooze = alarma?.snoozeMinutos ?? 5;
|
|
||||||
_volumen = alarma?.volumen ?? 0.85;
|
_volumen = alarma?.volumen ?? 0.85;
|
||||||
_fadeInSegundos = ((alarma?.fadeInSegundos ?? 0).clamp(0, 60)) as int;
|
_fadeInSegundos = ((alarma?.fadeInSegundos ?? 0).clamp(0, 60)) as int;
|
||||||
_sonarEnVacaciones = alarma?.sonarEnVacaciones ?? true;
|
_sonarEnVacaciones = alarma?.sonarEnVacaciones ?? true;
|
||||||
@@ -481,21 +475,6 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
const SizedBox(height: 14),
|
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(
|
_SectionLabel(
|
||||||
icon: 'assets/icons/alarmas/fallback_sound.png',
|
icon: 'assets/icons/alarmas/fallback_sound.png',
|
||||||
text: 'Sonido y volumen',
|
text: 'Sonido y volumen',
|
||||||
@@ -679,7 +658,7 @@ class _EditorAlarmaSheetState extends State<_EditorAlarmaSheet> {
|
|||||||
limpiarFechaUnica: _tipo != TipoProgramacionAlarma.unica,
|
limpiarFechaUnica: _tipo != TipoProgramacionAlarma.unica,
|
||||||
emisora: _emisora,
|
emisora: _emisora,
|
||||||
sonarEnVacaciones: _sonarEnVacaciones,
|
sonarEnVacaciones: _sonarEnVacaciones,
|
||||||
snoozeMinutos: _snooze,
|
snoozeMinutos: existente?.snoozeMinutos ?? 5,
|
||||||
volumen: _volumen,
|
volumen: _volumen,
|
||||||
fadeInSegundos: _fadeInSegundos.clamp(0, 60),
|
fadeInSegundos: _fadeInSegundos.clamp(0, 60),
|
||||||
sonidoInterno: _sonidoInterno,
|
sonidoInterno: _sonidoInterno,
|
||||||
|
|||||||
Reference in New Issue
Block a user