diff --git a/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/AlarmRingService.kt b/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/AlarmRingService.kt index f41714a..d37e5e6 100644 --- a/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/AlarmRingService.kt +++ b/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/AlarmRingService.kt @@ -121,7 +121,7 @@ class AlarmRingService : Service() { startForeground( RingNotifications.ringing( context = this, - alarm = session.alarm, + session = session, presentation = presentation(), ), ) diff --git a/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/RingNotifications.kt b/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/RingNotifications.kt index 980a2b2..13301fa 100644 --- a/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/RingNotifications.kt +++ b/app/src/main/java/de/jeanlucmakiola/clockula/alarm/ring/RingNotifications.kt @@ -11,7 +11,9 @@ import de.jeanlucmakiola.clockula.R import de.jeanlucmakiola.clockula.alarm.AlarmIntents import de.jeanlucmakiola.clockula.alarm.receiver.AlarmActionReceiver import de.jeanlucmakiola.clockula.domain.Alarm +import de.jeanlucmakiola.clockula.domain.DismissChallenge import de.jeanlucmakiola.clockula.domain.alarm.RingPresentation +import de.jeanlucmakiola.clockula.domain.alarm.RingSession import de.jeanlucmakiola.clockula.ui.ring.AlarmRingActivity import java.time.Instant as JavaInstant import java.time.LocalTime @@ -95,12 +97,20 @@ object RingNotifications { return builder.build() } - /** The ringing notification, presented as [presentation] says the platform allows. */ + /** + * The ringing notification, presented as [presentation] says the platform allows. + * + * Its actions never get round the ring screen's rules. Snooze appears only + * while snoozes are left, since a refused snooze dismisses; and an alarm + * with a dismiss challenge has its Dismiss open the ring screen, where the + * challenge is, rather than end the alarm from a heads-up or the lock screen. + */ fun ringing( context: Context, - alarm: Alarm, + session: RingSession, presentation: RingPresentation, ): Notification { + val alarm = session.alarm val show = showPendingIntent(context) val builder = NotificationCompat.Builder(context, RING_CHANNEL_ID) .setSmallIcon(R.drawable.ic_notification) @@ -112,16 +122,19 @@ object RingNotifications { .setOngoing(true) .setAutoCancel(false) .setContentIntent(show) - .addAction( + if (session.canSnooze) { + builder.addAction( R.drawable.ic_notification, context.getString(R.string.alarm_action_snooze), actionPendingIntent(context, AlarmIntents.ACTION_SNOOZE, AlarmIntents.REQUEST_SNOOZE, alarm.id), ) - .addAction( - R.drawable.ic_notification, - context.getString(R.string.alarm_action_dismiss), - actionPendingIntent(context, AlarmIntents.ACTION_DISMISS, AlarmIntents.REQUEST_DISMISS, alarm.id), - ) + } + val dismiss = if (session.settings.dismissChallenge == DismissChallenge.NONE) { + actionPendingIntent(context, AlarmIntents.ACTION_DISMISS, AlarmIntents.REQUEST_DISMISS, alarm.id) + } else { + show + } + builder.addAction(R.drawable.ic_notification, context.getString(R.string.alarm_action_dismiss), dismiss) if (presentation.useFullScreenIntent) builder.setFullScreenIntent(show, true) return builder.build()