diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/background/UpcomingAlarmReceiver.java b/app/src/main/java/com/philliphsu/clock2/alarms/background/UpcomingAlarmReceiver.java index 61e1a27..8c61d92 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/background/UpcomingAlarmReceiver.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/background/UpcomingAlarmReceiver.java @@ -43,7 +43,7 @@ public class UpcomingAlarmReceiver extends BroadcastReceiver { nm.cancel(TAG, (int) id); } else { if (ACTION_DISMISS_NOW.equals(intent.getAction())) { - new AlarmController(context, null).cancelAlarm(alarm, false); + new AlarmController(context, null).cancelAlarm(alarm, false, true); } else { // Prepare notification // http://stackoverflow.com/a/15803726/5055032 diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/data/AsyncAlarmsTableUpdateHandler.java b/app/src/main/java/com/philliphsu/clock2/alarms/data/AsyncAlarmsTableUpdateHandler.java index e6cc9ca..2cbcdeb 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/data/AsyncAlarmsTableUpdateHandler.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/data/AsyncAlarmsTableUpdateHandler.java @@ -39,7 +39,7 @@ public final class AsyncAlarmsTableUpdateHandler extends AsyncDatabaseTableUpdat @Override protected void onPostAsyncDelete(Integer result, final Alarm alarm) { - mAlarmController.cancelAlarm(alarm, false); + mAlarmController.cancelAlarm(alarm, false, false); if (mSnackbarAnchor != null) { // TODO: Consider adding delay to allow the alarm item animation // to finish first before we show the snackbar. Inbox app does this. 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 861e8c5..51944eb 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 @@ -91,8 +91,11 @@ public final class AlarmController { /** * Cancel the alarm. This does NOT check if you previously scheduled the alarm. + * @param rescheduleIfRecurring True if the alarm should be rescheduled after cancelling. + * This param will only be considered if the alarm has recurrence + * and is enabled. */ - public void cancelAlarm(Alarm alarm, boolean showSnackbar) { + public void cancelAlarm(Alarm alarm, boolean showSnackbar, boolean rescheduleIfRecurring) { // TODO: Consider doing this in a new thread. Log.d(TAG, "Cancelling alarm " + alarm); AlarmManager am = (AlarmManager) mAppContext.getSystemService(Context.ALARM_SERVICE); @@ -130,7 +133,7 @@ public final class AlarmController { if (!alarm.hasRecurrence()) { alarm.setEnabled(false); - } else if (alarm.isEnabled()) { + } else if (alarm.isEnabled() && rescheduleIfRecurring) { if (alarm.ringsWithinHours(hoursToNotifyInAdvance)) { // Still upcoming today, so wait until the normal ring time // passes before rescheduling the alarm. 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 2aa9736..368cdcb 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 @@ -157,7 +157,7 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { } else { // Dismisses the current upcoming alarm and handles scheduling the next alarm for us. // Since changes are saved to the database, this prompts a UI refresh. - mAlarmController.cancelAlarm(alarm, true); + mAlarmController.cancelAlarm(alarm, true, true); } // TOneverDO: AlarmUtils.cancelAlarm() otherwise it will be called twice /* @@ -209,7 +209,7 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { // TODO: On 21+, upcoming notification doesn't post immediately persistUpdatedAlarm(alarm, true); } else { - mAlarmController.cancelAlarm(alarm, true); + mAlarmController.cancelAlarm(alarm, true, false); // cancelAlarm() already calls save() for you. } mSwitch.setPressed(false); // clear the pressed focus, esp. if setPressed(true) was called manually diff --git a/app/src/main/java/com/philliphsu/clock2/ringtone/AlarmActivity.java b/app/src/main/java/com/philliphsu/clock2/ringtone/AlarmActivity.java index 96a1fa9..d244800 100644 --- a/app/src/main/java/com/philliphsu/clock2/ringtone/AlarmActivity.java +++ b/app/src/main/java/com/philliphsu/clock2/ringtone/AlarmActivity.java @@ -104,7 +104,7 @@ public class AlarmActivity extends RingtoneActivity { @Override protected void onRightButtonClick() { // TODO do we really need to cancel the intent and alarm? - mAlarmController.cancelAlarm(getRingingObject(), false); + mAlarmController.cancelAlarm(getRingingObject(), false, true); stopAndFinish(); } diff --git a/app/src/main/java/com/philliphsu/clock2/ringtone/playback/AlarmRingtoneService.java b/app/src/main/java/com/philliphsu/clock2/ringtone/playback/AlarmRingtoneService.java index 783f2db..842cd5d 100644 --- a/app/src/main/java/com/philliphsu/clock2/ringtone/playback/AlarmRingtoneService.java +++ b/app/src/main/java/com/philliphsu/clock2/ringtone/playback/AlarmRingtoneService.java @@ -29,7 +29,7 @@ public class AlarmRingtoneService extends RingtoneService { if (ACTION_SNOOZE.equals(intent.getAction())) { mAlarmController.snoozeAlarm(getRingingObject()); } else if (ACTION_DISMISS.equals(intent.getAction())) { - mAlarmController.cancelAlarm(getRingingObject(), false); // TODO do we really need to cancel the intent and alarm? + mAlarmController.cancelAlarm(getRingingObject(), false, true); // TODO do we really need to cancel the intent and alarm? } else { throw new UnsupportedOperationException(); } @@ -49,7 +49,7 @@ public class AlarmRingtoneService extends RingtoneService { @Override protected void onAutoSilenced() { // TODO do we really need to cancel the alarm and intent? - mAlarmController.cancelAlarm(getRingingObject(), false); + mAlarmController.cancelAlarm(getRingingObject(), false, true); } @Override