Commit e00467af by Sebastián Katzer

Fix & simplify repeating on Android

parent 30f8f6aa
...@@ -45,7 +45,7 @@ import java.util.Date; ...@@ -45,7 +45,7 @@ import java.util.Date;
public class Notification { public class Notification {
// Used to differ notifications by their life cycle state // Used to differ notifications by their life cycle state
public static enum Type { public enum Type {
ALL, SCHEDULED, TRIGGERED ALL, SCHEDULED, TRIGGERED
} }
...@@ -162,7 +162,7 @@ public class Notification { ...@@ -162,7 +162,7 @@ public class Notification {
* Schedule the local notification. * Schedule the local notification.
*/ */
public void schedule() { public void schedule() {
long triggerTime = getNextTriggerTime(); long triggerTime = options.getTriggerTime();
persist(); persist();
...@@ -174,15 +174,11 @@ public class Notification { ...@@ -174,15 +174,11 @@ public class Notification {
PendingIntent pi = PendingIntent.getBroadcast( PendingIntent pi = PendingIntent.getBroadcast(
context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
getAlarmMgr().set(AlarmManager.RTC_WAKEUP, triggerTime, pi);
}
/**
* Re-schedule the local notification if repeating.
*/
void reschedule () {
if (isRepeating()) { if (isRepeating()) {
schedule(); getAlarmMgr().setRepeating(AlarmManager.RTC_WAKEUP,
triggerTime, options.getRepeatInterval(), pi);
} else {
getAlarmMgr().set(AlarmManager.RTC_WAKEUP, triggerTime, pi);
} }
} }
...@@ -251,26 +247,11 @@ public class Notification { ...@@ -251,26 +247,11 @@ public class Notification {
} }
/** /**
* Next trigger time.
*/
public long getNextTriggerTime() {
long triggerTime = options.getTriggerTime();
if (!isRepeating() || !isTriggered())
return triggerTime;
long interval = options.getRepeatInterval();
int triggerCount = getTriggerCountSinceSchedule();
return triggerTime + (triggerCount + 1) * interval;
}
/**
* Count of triggers since schedule. * Count of triggers since schedule.
*/ */
public int getTriggerCountSinceSchedule() { public int getTriggerCountSinceSchedule() {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
long initTriggerTime = options.getTriggerTime(); long triggerTime = options.getTriggerTime();
if (!wasInThePast()) if (!wasInThePast())
return 0; return 0;
...@@ -278,7 +259,7 @@ public class Notification { ...@@ -278,7 +259,7 @@ public class Notification {
if (!isRepeating()) if (!isRepeating())
return 1; return 1;
return (int) ((now - initTriggerTime) / options.getRepeatInterval()); return (int) ((now - triggerTime) / options.getRepeatInterval());
} }
/** /**
...@@ -294,6 +275,7 @@ public class Notification { ...@@ -294,6 +275,7 @@ public class Notification {
e.printStackTrace(); e.printStackTrace();
} }
json.remove("firstAt");
json.remove("updatedAt"); json.remove("updatedAt");
json.remove("soundUri"); json.remove("soundUri");
json.remove("iconUri"); json.remove("iconUri");
......
...@@ -189,31 +189,34 @@ public class Options { ...@@ -189,31 +189,34 @@ public class Options {
} }
/** /**
* Trigger date in milliseconds. * ID for the local notification as a number.
*/ */
public long getTriggerTime() { public Integer getId() {
return options.optLong("at", 0) * 1000; return options.optInt("id", 0);
} }
/** /**
* Trigger date. * ID for the local notification as a string.
*/ */
public Date getTriggerDate() { public String getIdStr() {
return new Date(getTriggerTime()); return getId().toString();
} }
/** /**
* ID for the local notification as a number. * Trigger date.
*/ */
public Integer getId() { public Date getTriggerDate() {
return options.optInt("id", 0); return new Date(getTriggerTime());
} }
/** /**
* ID for the local notification as a string. * Trigger date in milliseconds.
*/ */
public String getIdStr() { public long getTriggerTime() {
return getId().toString(); return Math.max(
System.currentTimeMillis(),
options.optLong("at", 0) * 1000
);
} }
/** /**
......
...@@ -42,11 +42,6 @@ public class TriggerReceiver extends AbstractTriggerReceiver { ...@@ -42,11 +42,6 @@ public class TriggerReceiver extends AbstractTriggerReceiver {
*/ */
@Override @Override
public void onTrigger (Notification notification, boolean updated) { public void onTrigger (Notification notification, boolean updated) {
if (notification.isRepeating()) {
notification.reschedule();
}
notification.show(); notification.show();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment