diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/misc/AlarmController.java b/app/src/main/java/com/philliphsu/clock2/alarms/misc/AlarmController.java index 718d3ad..c80b149 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/misc/AlarmController.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/misc/AlarmController.java @@ -78,13 +78,16 @@ public final class AlarmController { // to handle that yourself by using a wakelock, etc.. // We use a WAKEUP alarm to send the upcoming alarm notification so it goes off even if the // device is asleep. Otherwise, it will not go off until the device is turned back on. - long ringAt = alarm.isSnoozed() ? alarm.snoozingUntil() : alarm.ringsAt(); - int hoursToNotifyInAdvance = AlarmPreferences.hoursBeforeUpcoming(mAppContext); - long upcomingAt = ringAt - HOURS.toMillis(hoursToNotifyInAdvance); - // If snoozed, upcoming note posted immediately. - am.set(AlarmManager.RTC_WAKEUP, upcomingAt, notifyUpcomingAlarmIntent(alarm, false)); + final long ringAt = alarm.isSnoozed() ? alarm.snoozingUntil() : alarm.ringsAt(); am.setExact(AlarmManager.RTC_WAKEUP, ringAt, alarmIntent(alarm, false)); + final int hoursToNotifyInAdvance = AlarmPreferences.hoursBeforeUpcoming(mAppContext); + if (hoursToNotifyInAdvance > 0 || alarm.isSnoozed()) { + // If snoozed, upcoming note posted immediately. + long upcomingAt = ringAt - HOURS.toMillis(hoursToNotifyInAdvance); + am.set(AlarmManager.RTC_WAKEUP, upcomingAt, notifyUpcomingAlarmIntent(alarm, false)); + } + if (showSnackbar) { String message = mAppContext.getString(R.string.alarm_set_for, DurationUtils.toString(mAppContext, alarm.ringsIn(), false /*abbreviate?*/)); @@ -120,12 +123,12 @@ public final class AlarmController { // Does nothing if it's not posted. removeUpcomingAlarmNotification(alarm); - int hoursToNotifyInAdvance = AlarmPreferences.hoursBeforeUpcoming(mAppContext); + final int hoursToNotifyInAdvance = AlarmPreferences.hoursBeforeUpcoming(mAppContext); // TOneverDO: Place block after making value changes to the alarm. - if (showSnackbar + if ((hoursToNotifyInAdvance > 0 && showSnackbar // TODO: Consider showing the snackbar for non-upcoming alarms too; // then, we can remove these checks. - && alarm.ringsWithinHours(hoursToNotifyInAdvance) || alarm.isSnoozed()) { + && alarm.ringsWithinHours(hoursToNotifyInAdvance)) || alarm.isSnoozed()) { long time = alarm.isSnoozed() ? alarm.snoozingUntil() : alarm.ringsAt(); String msg = mAppContext.getString(R.string.upcoming_alarm_dismissed, formatTime(mAppContext, time)); diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/ui/BaseAlarmViewHolder.java b/app/src/main/java/com/philliphsu/clock2/alarms/ui/BaseAlarmViewHolder.java index 368cdcb..6e65465 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/ui/BaseAlarmViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/ui/BaseAlarmViewHolder.java @@ -275,8 +275,8 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { } private void bindDismissButton(Alarm alarm) { - int hoursBeforeUpcoming = AlarmPreferences.hoursBeforeUpcoming(getContext()); - boolean upcoming = alarm.ringsWithinHours(hoursBeforeUpcoming); + final int hoursBeforeUpcoming = AlarmPreferences.hoursBeforeUpcoming(getContext()); + boolean upcoming = hoursBeforeUpcoming > 0 && alarm.ringsWithinHours(hoursBeforeUpcoming); boolean snoozed = alarm.isSnoozed(); boolean visible = alarm.isEnabled() && (upcoming || snoozed); String buttonText = snoozed diff --git a/app/src/main/res/values/prefs_alarms.xml b/app/src/main/res/values/prefs_alarms.xml index 8e7ea73..4513bcd 100644 --- a/app/src/main/res/values/prefs_alarms.xml +++ b/app/src/main/res/values/prefs_alarms.xml @@ -50,6 +50,7 @@ key_notify_me_of_upcoming_alarms Notify me of upcoming alarms + Never 1 hour before 2 hours before 3 hours before @@ -60,6 +61,7 @@ 8 hours before + 0 1 2 3