From 1d65ad305e529c201ff7fefd11d7778dededdfe7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 13 Sep 2016 21:40:51 +0200 Subject: [PATCH] add rescheduling monthly and yearly events --- .../simplemobiletools/calendar/Constants.java | 2 +- .../simplemobiletools/calendar/DBHelper.java | 1 + .../com/simplemobiletools/calendar/Utils.java | 37 ++++++++++++++++--- .../calendar/activities/EventActivity.java | 2 +- .../receivers/NotificationReceiver.java | 13 +------ 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/simplemobiletools/calendar/Constants.java b/app/src/main/java/com/simplemobiletools/calendar/Constants.java index 20376255d..3a48748a7 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/Constants.java +++ b/app/src/main/java/com/simplemobiletools/calendar/Constants.java @@ -9,7 +9,7 @@ public class Constants { public static final int DAY = 86400; public static final int WEEK = 604800; - public static final int MONTH = 2592000; + public static final int MONTH = 2592000; // exact value not taken into account, Joda is used for adding months and years public static final int YEAR = 31536000; // Shared Preferences diff --git a/app/src/main/java/com/simplemobiletools/calendar/DBHelper.java b/app/src/main/java/com/simplemobiletools/calendar/DBHelper.java index 798ff6676..4c8d2e4bd 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/DBHelper.java +++ b/app/src/main/java/com/simplemobiletools/calendar/DBHelper.java @@ -217,6 +217,7 @@ public class DBHelper extends SQLiteOpenHelper { } events.addAll(currEvents); } + return events; } diff --git a/app/src/main/java/com/simplemobiletools/calendar/Utils.java b/app/src/main/java/com/simplemobiletools/calendar/Utils.java index 26cd304d4..9fdae1377 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/Utils.java +++ b/app/src/main/java/com/simplemobiletools/calendar/Utils.java @@ -11,6 +11,8 @@ import android.widget.Toast; import com.simplemobiletools.calendar.models.Event; import com.simplemobiletools.calendar.receivers.NotificationReceiver; +import org.joda.time.DateTime; + public class Utils { public static int adjustAlpha(int color, float factor) { @@ -25,16 +27,41 @@ public class Utils { Toast.makeText(context, context.getResources().getString(resId), Toast.LENGTH_SHORT).show(); } - public static void scheduleNotification(Context context, Event event) { - if (event.getReminderMinutes() == -1) { - return; + public static void scheduleNextEvent(Context context, Event event) { + int startTS = event.getStartTS() - event.getReminderMinutes() * 60; + int newTS = 0; + if (event.getRepeatInterval() == Constants.DAY || event.getRepeatInterval() == Constants.WEEK) { + while (startTS < System.currentTimeMillis() / 1000 + 5) { + startTS += event.getRepeatInterval(); + } + newTS = startTS; + } else if (event.getRepeatInterval() == Constants.MONTH) { + newTS = getNewTS(startTS, true); + } else if (event.getRepeatInterval() == Constants.YEAR) { + newTS = getNewTS(startTS, false); } - scheduleEventIn(context, event.getStartTS(), event); + if (newTS != 0) + Utils.scheduleEventIn(context, newTS, event); + } + + private static int getNewTS(int ts, boolean isMonthly) { + DateTime dateTime = Formatter.getDateTimeFromTS(ts); + while (dateTime.isBeforeNow()) { + dateTime = isMonthly ? dateTime.plusMonths(1) : dateTime.plusYears(1); + } + return (int) (dateTime.getMillis() / 1000); + } + + public static void scheduleNotification(Context context, Event event) { + if (event.getReminderMinutes() == -1) + return; + + scheduleNextEvent(context, event); } public static void scheduleEventIn(Context context, int notifTS, Event event) { - final long delayFromNow = (long) notifTS * 1000 - event.getReminderMinutes() * 60000 - System.currentTimeMillis(); + final long delayFromNow = (long) notifTS * 1000 - System.currentTimeMillis(); if (delayFromNow < 0) return; diff --git a/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java b/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java index 559258b60..c5849c152 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java +++ b/app/src/main/java/com/simplemobiletools/calendar/activities/EventActivity.java @@ -355,9 +355,9 @@ public class EventActivity extends SimpleActivity implements DBHelper.DBOperatio if (DateTime.now().isAfter(mEventStartDateTime.getMillis())) { Utils.showToast(getApplicationContext(), R.string.past_event_added); } else { - Utils.scheduleNotification(getApplicationContext(), event); Utils.showToast(getApplicationContext(), R.string.event_added); } + Utils.scheduleNotification(getApplicationContext(), event); finish(); } diff --git a/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java b/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java index 109114914..2ec504e7a 100644 --- a/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java +++ b/app/src/main/java/com/simplemobiletools/calendar/receivers/NotificationReceiver.java @@ -38,18 +38,7 @@ public class NotificationReceiver extends BroadcastReceiver { notificationManager.notify(id, notification); if (event.getRepeatInterval() != 0) - scheduleNextEvent(context, event); - } - - private void scheduleNextEvent(Context context, Event event) { - if (event.getRepeatInterval() == Constants.DAY || event.getRepeatInterval() == Constants.WEEK) { - int startTS = event.getStartTS(); - while (startTS < System.currentTimeMillis() / 1000 + 5) { - startTS += event.getRepeatInterval(); - } - - Utils.scheduleEventIn(context, startTS, event); - } + Utils.scheduleNextEvent(context, event); } private PendingIntent getPendingIntent(Context context, Event event) {