From eae0d66f51dc1b2a2377bf47f58bc73cb6704134 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 11 May 2016 07:30:45 -0400 Subject: [PATCH] Dismiss notification automatically when user adds a checkmark --- .../uhabits/HabitBroadcastReceiver.java | 22 ++++++++++++++----- .../java/org/isoron/uhabits/MainActivity.java | 11 ++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java index c529639ff..e1a45aa5e 100644 --- a/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java +++ b/app/src/main/java/org/isoron/uhabits/HabitBroadcastReceiver.java @@ -167,9 +167,7 @@ public class HabitBroadcastReceiver extends BroadcastReceiver { if (todayValue != Checkmark.UNCHECKED) return; if (!checkWeekday(intent, habit)) return; - - // Check if reminder has been turned off after alarm was scheduled - if (habit.reminderHour == null) return; + if (!habit.hasReminder()) return; Intent contentIntent = new Intent(context, MainActivity.class); contentIntent.setData(data); @@ -184,10 +182,12 @@ public class HabitBroadcastReceiver extends BroadcastReceiver NotificationCompat.WearableExtender wearableExtender = new NotificationCompat.WearableExtender().setBackground( - BitmapFactory.decodeResource(context.getResources(), R.drawable.stripe)); + BitmapFactory.decodeResource(context.getResources(), + R.drawable.stripe)); Notification notification = - new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_notification) + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_notification) .setContentTitle(habit.name) .setContentText(habit.description) .setContentIntent(contentPendingIntent) @@ -205,7 +205,8 @@ public class HabitBroadcastReceiver extends BroadcastReceiver notification.flags |= Notification.FLAG_AUTO_CANCEL; NotificationManager notificationManager = - (NotificationManager) context.getSystemService(Activity.NOTIFICATION_SERVICE); + (NotificationManager) context.getSystemService( + Activity.NOTIFICATION_SERVICE); int notificationId = (int) (habit.getId() % Integer.MAX_VALUE); notificationManager.notify(notificationId, notification); @@ -261,4 +262,13 @@ public class HabitBroadcastReceiver extends BroadcastReceiver return reminderDays[weekday]; } + public static void dismissNotification(Context context, Habit habit) + { + NotificationManager notificationManager = + (NotificationManager) context.getSystemService( + Activity.NOTIFICATION_SERVICE); + + int notificationId = (int) (habit.getId() % Integer.MAX_VALUE); + notificationManager.cancel(notificationId); + } } diff --git a/app/src/main/java/org/isoron/uhabits/MainActivity.java b/app/src/main/java/org/isoron/uhabits/MainActivity.java index 0499ef002..a8dad23b8 100644 --- a/app/src/main/java/org/isoron/uhabits/MainActivity.java +++ b/app/src/main/java/org/isoron/uhabits/MainActivity.java @@ -44,6 +44,7 @@ import org.isoron.uhabits.fragments.ListHabitsFragment; import org.isoron.uhabits.helpers.DateHelper; import org.isoron.uhabits.helpers.ReminderHelper; import org.isoron.uhabits.helpers.UIHelper; +import org.isoron.uhabits.models.Checkmark; import org.isoron.uhabits.models.Habit; import org.isoron.uhabits.tasks.BaseTask; import org.isoron.uhabits.widgets.CheckmarkWidgetProvider; @@ -271,11 +272,21 @@ public class MainActivity extends BaseActivity @Override protected void doInBackground() { + dismissNotifications(MainActivity.this); updateWidgets(MainActivity.this); } }.execute(); } + private void dismissNotifications(Context context) + { + for(Habit h : Habit.getHabitsWithReminder()) + { + if(h.checkmarks.getTodayValue() != Checkmark.UNCHECKED) + HabitBroadcastReceiver.dismissNotification(context, h); + } + } + public static void updateWidgets(Context context) { updateWidgets(context, CheckmarkWidgetProvider.class);