diff --git a/app/src/main/java/org/isoron/uhabits/HabitsApplication.java b/app/src/main/java/org/isoron/uhabits/HabitsApplication.java index be58809c9..865b2b40e 100644 --- a/app/src/main/java/org/isoron/uhabits/HabitsApplication.java +++ b/app/src/main/java/org/isoron/uhabits/HabitsApplication.java @@ -25,6 +25,7 @@ import android.support.annotation.*; import com.activeandroid.*; +import org.isoron.uhabits.notifications.*; import org.isoron.uhabits.utils.*; import org.isoron.uhabits.widgets.*; @@ -43,6 +44,8 @@ public class HabitsApplication extends Application private ReminderScheduler reminderScheduler; + private NotificationTray notificationTray; + public AppComponent getComponent() { return component; @@ -54,6 +57,7 @@ public class HabitsApplication extends Application } @NonNull + @Deprecated public static Context getContext() { if (context == null) throw new RuntimeException("context is null"); @@ -100,6 +104,9 @@ public class HabitsApplication extends Application reminderScheduler = component.getReminderScheduler(); reminderScheduler.startListening(); + notificationTray = component.getNotificationTray(); + notificationTray.startListening(); + DatabaseUtils.initializeActiveAndroid(); } @@ -111,6 +118,7 @@ public class HabitsApplication extends Application reminderScheduler.stopListening(); widgetUpdater.stopListening(); + notificationTray.stopListening(); super.onTerminate(); } } diff --git a/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java b/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java index 17f907d95..5cc2fa8ba 100644 --- a/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java +++ b/app/src/main/java/org/isoron/uhabits/commands/ToggleRepetitionCommand.java @@ -46,4 +46,9 @@ public class ToggleRepetitionCommand extends Command { execute(); } + + public Habit getHabit() + { + return habit; + } } \ No newline at end of file diff --git a/app/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java b/app/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java index 22856f4f0..f24437469 100644 --- a/app/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java +++ b/app/src/main/java/org/isoron/uhabits/notifications/NotificationTray.java @@ -26,6 +26,7 @@ import android.support.v4.app.*; import android.support.v4.app.NotificationCompat.*; import org.isoron.uhabits.*; +import org.isoron.uhabits.commands.*; import org.isoron.uhabits.intents.*; import org.isoron.uhabits.models.*; import org.isoron.uhabits.tasks.*; @@ -37,7 +38,7 @@ import static android.graphics.BitmapFactory.*; import static org.isoron.uhabits.utils.RingtoneUtils.*; @AppScope -public class NotificationTray +public class NotificationTray implements CommandRunner.Listener { @NonNull private final Context context; @@ -48,14 +49,18 @@ public class NotificationTray @NonNull private final PendingIntentFactory pendingIntents; + private CommandRunner commandRunner; + @Inject public NotificationTray(@AppContext @NonNull Context context, @NonNull TaskRunner taskRunner, - @NonNull PendingIntentFactory pendingIntents) + @NonNull PendingIntentFactory pendingIntents, + @NonNull CommandRunner commandRunner) { this.context = context; this.taskRunner = taskRunner; this.pendingIntents = pendingIntents; + this.commandRunner = commandRunner; } public void cancel(@NonNull Habit habit) @@ -64,12 +69,37 @@ public class NotificationTray NotificationManagerCompat.from(context).cancel(notificationId); } + @Override + public void onCommandExecuted(@NonNull Command command, + @Nullable Long refreshKey) + { + if (!(command instanceof ToggleRepetitionCommand)) + return; + + ToggleRepetitionCommand toggleCommand = + (ToggleRepetitionCommand) command; + + Habit habit = toggleCommand.getHabit(); + if(habit.getCheckmarks().getTodayValue() != Checkmark.UNCHECKED) + cancel(habit); + } + public void show(@NonNull Habit habit, long timestamp, long reminderTime) { taskRunner.execute( new ShowNotificationTask(habit, timestamp, reminderTime)); } + public void startListening() + { + commandRunner.addListener(this); + } + + public void stopListening() + { + commandRunner.removeListener(this); + } + private int getNotificationId(Habit habit) { Long id = habit.getId();