diff --git a/lib/alarm/logic/alarm_isolate.dart b/lib/alarm/logic/alarm_isolate.dart index 62f868d7..ad7505f7 100644 --- a/lib/alarm/logic/alarm_isolate.dart +++ b/lib/alarm/logic/alarm_isolate.dart @@ -249,6 +249,15 @@ void stopTimer(int scheduleId, AlarmStopAction action) async { RingtonePlayer.playAlarm(alarm); } } + // One-shot timer: delete from storage on dismiss + if (timer.shouldDeleteAfterFinishing) { + List timers = await loadList("timers"); + timers.removeWhere((t) => t.id == scheduleId); + await saveList("timers", timers); + // Notify UI isolate that timers list changed + SendPort? updatePort = IsolateNameServer.lookupPortByName(updatePortName); + updatePort?.send("updateTimers"); + } } RingingManager.stopAllTimers(); } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 7596b366..4f26ec1a 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -301,6 +301,8 @@ "@startMelodyAtRandomPosDescription": {}, "vibrationSetting": "Vibration", "@vibrationSetting": {}, + "timerDeleteAfterFinishingSetting": "Delete After Finishing", + "@timerDeleteAfterFinishingSetting": {}, "audioChannelSetting": "Audio Channel", "@audioChannelSetting": {}, "audioChannelAlarm": "Alarm", diff --git a/lib/timer/data/timer_settings_schema.dart b/lib/timer/data/timer_settings_schema.dart index 8bbfe1da..cf8e5c71 100644 --- a/lib/timer/data/timer_settings_schema.dart +++ b/lib/timer/data/timer_settings_schema.dart @@ -92,6 +92,8 @@ SettingGroup timerSettingsSchema = SettingGroup( "Vibration", ], ), + SwitchSetting("Delete After Finishing", + (context) => AppLocalizations.of(context)!.timerDeleteAfterFinishingSetting, false), SliderSetting("Add Length", (context) => AppLocalizations.of(context)!.addLengthSetting, 1, 30, 1, unit: "minutes", snapLength: 1), diff --git a/lib/timer/types/timer.dart b/lib/timer/types/timer.dart index 6cd2b9e7..c2298046 100644 --- a/lib/timer/types/timer.dart +++ b/lib/timer/types/timer.dart @@ -52,6 +52,8 @@ class ClockTimer extends CustomizableListItem { ? _settings.getSetting("Time To Full Volume").value : TimeDuration.zero; double get addLength => _settings.getSetting("Add Length").value; + bool get shouldDeleteAfterFinishing => + _settings.getSetting("Delete After Finishing").value; List get tags => _settings.getSetting("Tags").value; TimeDuration get duration => _duration; TimeDuration get currentDuration => _currentDuration; diff --git a/lib/timer/widgets/timer_card.dart b/lib/timer/widgets/timer_card.dart index e954cbe2..9f21fbe4 100644 --- a/lib/timer/widgets/timer_card.dart +++ b/lib/timer/widgets/timer_card.dart @@ -136,6 +136,15 @@ class _TimerCardState extends State { ], ), ), + if (widget.timer.shouldDeleteAfterFinishing) + SizedBox( + width: 24, + child: Icon( + Icons.delete_outline_rounded, + size: 18, + color: colorScheme.onSurface.withOpacity(0.4), + ), + ), const Spacer(), CardEditMenu(actions: [ if (!widget.timer.isStopped)