From c68176ad095f34cb5c49bcc302c1343ffa0ade6c Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Wed, 24 Feb 2016 05:50:34 -0500 Subject: [PATCH] Add timestamp to notifications --- .../java/org/isoron/helpers/DateHelper.java | 7 +++ .../isoron/uhabits/ReminderAlarmReceiver.java | 49 +++++++++++++------ .../uhabits/helpers/ReminderHelper.java | 16 +++--- 3 files changed, 48 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/org/isoron/helpers/DateHelper.java b/app/src/main/java/org/isoron/helpers/DateHelper.java index a693b8047..9df4d93c0 100644 --- a/app/src/main/java/org/isoron/helpers/DateHelper.java +++ b/app/src/main/java/org/isoron/helpers/DateHelper.java @@ -35,6 +35,13 @@ public class DateHelper return now + tz.getOffset(now); } + public static long toLocalTime(long timestamp) + { + TimeZone tz = TimeZone.getDefault(); + long now = new Date(timestamp).getTime(); + return now + tz.getOffset(now); + } + public static long getStartOfDay(long timestamp) { return (timestamp / millisecondsInOneDay) * millisecondsInOneDay; diff --git a/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java b/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java index 2cdfbe33d..02f5a28c3 100644 --- a/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java +++ b/app/src/main/java/org/isoron/uhabits/ReminderAlarmReceiver.java @@ -31,6 +31,7 @@ import android.net.Uri; import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; +import org.isoron.helpers.DateHelper; import org.isoron.uhabits.helpers.ReminderHelper; import org.isoron.uhabits.models.Habit; @@ -38,25 +39,36 @@ import java.util.Date; public class ReminderAlarmReceiver extends BroadcastReceiver { - - public static String ACTION_CHECK = "org.isoron.uhabits.ACTION_CHECK"; - public static String ACTION_DISMISS = "org.isoron.uhabits.ACTION_DISMISS"; - public static String ACTION_REMIND = "org.isoron.uhabits.ACTION_REMIND"; - public static String ACTION_REMOVE_REMINDER = "org.isoron.uhabits.ACTION_REMOVE_REMINDER"; - public static String ACTION_SNOOZE = "org.isoron.uhabits.ACTION_SNOOZE"; + public static final String ACTION_CHECK = "org.isoron.uhabits.ACTION_CHECK"; + public static final String ACTION_DISMISS = "org.isoron.uhabits.ACTION_DISMISS"; + public static final String ACTION_REMIND = "org.isoron.uhabits.ACTION_REMIND"; + public static final String ACTION_REMOVE_REMINDER = "org.isoron.uhabits.ACTION_REMOVE_REMINDER"; + public static final String ACTION_SNOOZE = "org.isoron.uhabits.ACTION_SNOOZE"; @Override public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - - if (action.equals(ACTION_REMIND)) createNotification(context, intent.getData()); - - else if (action.equals(ACTION_DISMISS)) dismissAllHabits(); - - else if (action.equals(ACTION_CHECK)) checkHabit(context, intent.getData()); - - else if (action.equals(ACTION_SNOOZE)) snoozeHabit(context, intent.getData()); + switch (intent.getAction()) + { + case ACTION_REMIND: + createNotification(context, intent.getData()); + break; + + case ACTION_DISMISS: + dismissAllHabits(); + ReminderHelper.createReminderAlarms(context); + break; + + case ACTION_CHECK: + checkHabit(context, intent.getData()); + ReminderHelper.createReminderAlarms(context); + break; + + case ACTION_SNOOZE: + snoozeHabit(context, intent.getData()); + ReminderHelper.createReminderAlarms(context); + break; + } } private void snoozeHabit(Context context, Uri data) @@ -73,8 +85,13 @@ public class ReminderAlarmReceiver extends BroadcastReceiver private void checkHabit(Context context, Uri data) { + Long timestamp = DateHelper.getStartOfToday(); + String paramTimestamp = data.getQueryParameter("timestamp"); + + if(paramTimestamp != null) timestamp = Long.parseLong(paramTimestamp); + Habit habit = Habit.get(ContentUris.parseId(data)); - habit.toggleRepetitionToday(); + habit.toggleRepetition(timestamp); habit.save(); dismissNotification(context, habit); } diff --git a/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java b/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java index 10731ccf7..45edc1efe 100644 --- a/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java +++ b/app/src/main/java/org/isoron/uhabits/helpers/ReminderHelper.java @@ -24,6 +24,7 @@ import android.net.Uri; import android.os.Build; import android.util.Log; +import org.isoron.helpers.DateHelper; import org.isoron.uhabits.ReminderAlarmReceiver; import org.isoron.uhabits.models.Habit; @@ -41,8 +42,6 @@ public class ReminderHelper public static void createReminderAlarm(Context context, Habit habit, Long reminderTime) { - Uri uri = Uri.parse("content://org.isoron.uhabits/habit/" + habit.getId()); - if (reminderTime == null) { Calendar calendar = Calendar.getInstance(); @@ -54,11 +53,16 @@ public class ReminderHelper reminderTime = calendar.getTimeInMillis(); if (System.currentTimeMillis() > reminderTime) - { reminderTime += AlarmManager.INTERVAL_DAY; - } } + long timestamp = DateHelper.getStartOfDay(DateHelper.toLocalTime(reminderTime)); + + Uri uri = Uri.parse(String.format("content://org.isoron.uhabits/habit/%d?timestamp=%d", + habit.getId(), timestamp)); + + Log.d("Alarm", uri.toString()); + Intent alarmIntent = new Intent(context, ReminderAlarmReceiver.class); alarmIntent.setAction(ReminderAlarmReceiver.ACTION_REMIND); alarmIntent.setData(uri); @@ -69,13 +73,9 @@ public class ReminderHelper AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if (Build.VERSION.SDK_INT >= 19) - { manager.setExact(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent); - } else - { manager.set(AlarmManager.RTC_WAKEUP, reminderTime, pendingIntent); - } Log.d("Alarm", String.format("Setting alarm (%s): %s", DateFormat.getDateTimeInstance().format(new Date(reminderTime)), habit.name));