diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt index 2758ba934..5a8d42936 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt @@ -54,6 +54,15 @@ class PendingIntentFactory }, FLAG_UPDATE_CURRENT) + fun cancelNotification(habit: Habit): PendingIntent = + PendingIntent.getBroadcast( + context, 3, + Intent(context, WidgetReceiver::class.java).apply { + action = WidgetReceiver.ACTION_CANCEL_REPETITION + data = Uri.parse(habit.uriString) + }, + FLAG_UPDATE_CURRENT) + fun showHabit(habit: Habit): PendingIntent = android.support.v4.app.TaskStackBuilder .create(context) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt index 1a13d417f..e269df6cb 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt @@ -61,6 +61,12 @@ class AndroidNotificationTray context.getString(R.string.snooze), pendingIntents.snoozeNotification(habit)) + val cancelAction = Action( + R.drawable.ic_action_cancel, + context.getString(android.R.string.no), + pendingIntents.cancelNotification(habit) + ) + val wearableBg = decodeResource(context.resources, R.drawable.stripe) // Even though the set of actions is the same on the phone and @@ -70,6 +76,7 @@ class AndroidNotificationTray .setBackground(wearableBg) .addAction(checkAction) .addAction(snoozeAction) + .addAction(cancelAction) val notification = NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_notification) @@ -79,6 +86,7 @@ class AndroidNotificationTray .setDeleteIntent(pendingIntents.dismissNotification(habit)) .addAction(checkAction) .addAction(snoozeAction) + .addAction(cancelAction) .setSound(ringtoneManager.getURI()) .extend(wearableExtender) .setWhen(reminderTime) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java index 7074224e8..9f98bd191 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/WidgetReceiver.java @@ -46,6 +46,9 @@ public class WidgetReceiver extends BroadcastReceiver public static final String ACTION_REMOVE_REPETITION = "org.isoron.uhabits.ACTION_REMOVE_REPETITION"; + public static final String ACTION_CANCEL_REPETITION = + "org.isoron.uhabits.ACTION_CANCEL_REPETITION"; + public static final String ACTION_TOGGLE_REPETITION = "org.isoron.uhabits.ACTION_TOGGLE_REPETITION"; @@ -88,6 +91,11 @@ public class WidgetReceiver extends BroadcastReceiver controller.onRemoveRepetition(data.getHabit(), data.getTimestamp()); break; + + case ACTION_CANCEL_REPETITION: + controller.onCancelRepetition(data.getHabit(), + data.getTimestamp()); + break; } } catch (RuntimeException e) diff --git a/uhabits-android/src/main/res/drawable-hdpi/ic_action_cancel.png b/uhabits-android/src/main/res/drawable-hdpi/ic_action_cancel.png new file mode 100644 index 000000000..374fc6fc0 Binary files /dev/null and b/uhabits-android/src/main/res/drawable-hdpi/ic_action_cancel.png differ diff --git a/uhabits-android/src/main/res/drawable-mdpi/ic_action_cancel.png b/uhabits-android/src/main/res/drawable-mdpi/ic_action_cancel.png new file mode 100644 index 000000000..e7de03a06 Binary files /dev/null and b/uhabits-android/src/main/res/drawable-mdpi/ic_action_cancel.png differ diff --git a/uhabits-android/src/main/res/drawable-xhdpi/ic_action_cancel.png b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_cancel.png new file mode 100644 index 000000000..dbd10906c Binary files /dev/null and b/uhabits-android/src/main/res/drawable-xhdpi/ic_action_cancel.png differ diff --git a/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_cancel.png b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_cancel.png new file mode 100644 index 000000000..20591def4 Binary files /dev/null and b/uhabits-android/src/main/res/drawable-xxhdpi/ic_action_cancel.png differ diff --git a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java index 1f9500123..4615a2487 100644 --- a/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java +++ b/uhabits-core/src/main/java/org/isoron/uhabits/core/ui/widgets/WidgetBehavior.java @@ -61,6 +61,12 @@ public class WidgetBehavior performToggle(habit, timestamp); } + public void onCancelRepetition(@NonNull Habit habit, Timestamp timestamp) + { + onRemoveRepetition(habit, timestamp); + notificationTray.cancel(habit); + } + public void onToggleRepetition(@NonNull Habit habit, Timestamp timestamp) { performToggle(habit, timestamp);