From 9441b5da10f487742329f9d29733841f794cb3c5 Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Mon, 6 Jun 2016 14:04:06 -0700 Subject: [PATCH] Added dismiss now action to upcoming alarm notification --- .../clock2/UpcomingAlarmReceiver.java | 55 +++++++++++-------- .../clock2/editalarm/AlarmUtils.java | 1 + .../philliphsu/clock2/util/DurationUtils.java | 4 +- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/philliphsu/clock2/UpcomingAlarmReceiver.java b/app/src/main/java/com/philliphsu/clock2/UpcomingAlarmReceiver.java index c21fe13..d2d56df 100644 --- a/app/src/main/java/com/philliphsu/clock2/UpcomingAlarmReceiver.java +++ b/app/src/main/java/com/philliphsu/clock2/UpcomingAlarmReceiver.java @@ -2,13 +2,16 @@ package com.philliphsu.clock2; import android.app.Notification; import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.support.v4.app.NotificationCompat; +import com.philliphsu.clock2.editalarm.AlarmUtils; import com.philliphsu.clock2.model.AlarmsRepository; +import static android.app.PendingIntent.FLAG_ONE_SHOT; import static com.philliphsu.clock2.util.DateFormatUtils.formatTime; import static com.philliphsu.clock2.util.Preconditions.checkNotNull; @@ -19,6 +22,8 @@ public class UpcomingAlarmReceiver extends BroadcastReceiver { = "com.philliphsu.clock2.action.CANCEL_NOTIFICATION"; public static final String ACTION_SHOW_SNOOZING = "com.philliphsu.clock2.action.SHOW_SNOOZING"; + /*TOneverDO: not private*/ private static final String ACTION_DISMISS_NOW + = "com.philliphsu.clock2.action.DISMISS_NOW"; public static final String EXTRA_ALARM_ID = "com.philliphsu.clock2.extra.ALARM_ID"; @@ -34,37 +39,39 @@ public class UpcomingAlarmReceiver extends BroadcastReceiver { nm.cancel(getClass().getName(), (int) id); } else { Alarm alarm = checkNotNull(AlarmsRepository.getInstance(context).getItem(id)); - if (ACTION_SHOW_SNOOZING.equals(intent.getAction())) { - if (!alarm.isSnoozed()) { - throw new IllegalStateException("Can't show snoozing notif. if alarm not snoozed!"); + if (ACTION_DISMISS_NOW.equals(intent.getAction())) { + AlarmUtils.cancelAlarm(context, alarm); + } else { + // Prepare notification + String title; + String text; + if (ACTION_SHOW_SNOOZING.equals(intent.getAction())) { + if (!alarm.isSnoozed()) + throw new IllegalStateException("Can't show snoozing notif. if alarm not snoozed!"); + title = alarm.label().isEmpty() ? context.getString(R.string.alarm) : alarm.label(); + text = context.getString(R.string.title_snoozing_until, + formatTime(context, alarm.snoozingUntil())); + } else { + // No intent action required for default behavior + title = context.getString(R.string.upcoming_alarm); + text = formatTime(context, alarm.ringsAt()); + if (!alarm.label().isEmpty()) { + text = alarm.label() + ", " + text; + } } - String title = alarm.label().isEmpty() - ? context.getString(R.string.alarm) - : alarm.label(); - String text = context.getString(R.string.title_snoozing_until, - formatTime(context, alarm.snoozingUntil())); + + Intent in = new Intent(context, getClass()) + .putExtra(EXTRA_ALARM_ID, id) // TOneverDO: cast to int + .setAction(ACTION_DISMISS_NOW); + PendingIntent pi = PendingIntent.getBroadcast(context, (int) id, in, FLAG_ONE_SHOT); Notification note = new NotificationCompat.Builder(context) .setSmallIcon(R.mipmap.ic_launcher) // TODO: alarm icon .setContentTitle(title) .setContentText(text) .setOngoing(true) + .addAction(R.mipmap.ic_launcher, context.getString(R.string.dismiss_now), pi) .build(); - // todo actions - nm.notify(getClass().getName(), alarm.intId(), note); - } else { - // No intent action required for default behavior - String text = formatTime(context, alarm.ringsAt()); - if (!alarm.label().isEmpty()) { - text = alarm.label() + ", " + text; - } - Notification note = new NotificationCompat.Builder(context) - .setSmallIcon(R.mipmap.ic_launcher) - .setContentTitle(context.getString(R.string.upcoming_alarm)) - .setContentText(text) - .setOngoing(true) - .build(); - // todo actions - nm.notify(getClass().getName(), alarm.intId(), note); + nm.notify(getClass().getName(), (int) id, note); } } } diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/AlarmUtils.java b/app/src/main/java/com/philliphsu/clock2/editalarm/AlarmUtils.java index a0f63aa..8bc8011 100644 --- a/app/src/main/java/com/philliphsu/clock2/editalarm/AlarmUtils.java +++ b/app/src/main/java/com/philliphsu/clock2/editalarm/AlarmUtils.java @@ -50,6 +50,7 @@ public final class AlarmUtils { } public static void cancelAlarm(Context c, Alarm a) { + Log.d(TAG, "Cancelling alarm " + a); AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE); PendingIntent pi = alarmIntent(c, a, true); diff --git a/app/src/main/java/com/philliphsu/clock2/util/DurationUtils.java b/app/src/main/java/com/philliphsu/clock2/util/DurationUtils.java index 6976add..fd2890d 100644 --- a/app/src/main/java/com/philliphsu/clock2/util/DurationUtils.java +++ b/app/src/main/java/com/philliphsu/clock2/util/DurationUtils.java @@ -27,7 +27,7 @@ public class DurationUtils { if (abbreviate) { if (numHours == 0) { if (numMins == 0) { - res = R.string.abbrev_less_than_one_minute; // TODO: verify formatArgs can be passed in but are ignored + res = R.string.abbrev_less_than_one_minute; } else { res = R.string.abbrev_minutes; } @@ -41,7 +41,7 @@ public class DurationUtils { } else { if (numHours == 0) { if (numMins == 0) { - res = R.string.less_than_one_minute; // TODO: verify formatArgs can be passed in but are ignored + res = R.string.less_than_one_minute; } else if (numMins == 1) { res = R.string.minute; } else {