From 0314d0f95d86752d2d5a6d506153d2b8087d95e4 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Tue, 7 Jul 2015 19:51:48 -0400 Subject: setRepeating is setInexactRepeating on API 19+, that means we can go as long as interval*2 before updates. Switched to use 'set()' instead to get behavior that matches what users expect. --- .../core/preferences/UserPreferences.java | 27 +++++++++++++--------- .../core/receiver/AlarmUpdateReceiver.java | 2 +- .../core/receiver/FeedUpdateReceiver.java | 2 ++ 3 files changed, 19 insertions(+), 12 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index c9bfe2153..c1b913c27 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -343,23 +343,25 @@ public class UserPreferences { } /** - * Sets the update interval value. Should only be used for testing purposes! + * Sets the update interval value. */ public static void setUpdateInterval(long hours) { prefs.edit() .putString(PREF_UPDATE_INTERVAL, String.valueOf(hours)) .apply(); - restartUpdateAlarm(); + // when updating with an interval, we assume the user wants + // to update *now* and then every 'hours' interval thereafter. + restartUpdateAlarm(true); } /** - * Sets the update interval value. Should only be used for testing purposes! + * Sets the update interval value. */ public static void setUpdateTimeOfDay(int hourOfDay, int minute) { prefs.edit() .putString(PREF_UPDATE_INTERVAL, hourOfDay + ":" + minute) .apply(); - restartUpdateAlarm(); + restartUpdateAlarm(false); } /** @@ -538,13 +540,18 @@ public class UserPreferences { } } - public static void restartUpdateAlarm() { + public static void restartUpdateAlarm(boolean now) { int[] timeOfDay = getUpdateTimeOfDay(); + Log.d(TAG, "timeOfDay: " + Arrays.toString(timeOfDay)); if (timeOfDay.length == 2) { restartUpdateTimeOfDayAlarm(timeOfDay[0], timeOfDay[1]); } else { long hours = getUpdateInterval(); - restartUpdateIntervalAlarm(TimeUnit.SECONDS.toMillis(10), hours); + long startTrigger = hours; + if (now) { + startTrigger = TimeUnit.SECONDS.toMillis(10); + } + restartUpdateIntervalAlarm(startTrigger, hours); } } @@ -558,9 +565,8 @@ public class UserPreferences { new Intent(ClientConfig.applicationCallbacks.getApplicationInstance(), FeedUpdateReceiver.class), 0); alarmManager.cancel(updateIntent); if (intervalMillis > 0) { - alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + triggerAtMillis, - intervalMillis, updateIntent); Log.d(TAG, "Changed alarm to new interval " + TimeUnit.MILLISECONDS.toHours(intervalMillis) + " h"); } else { @@ -585,10 +591,9 @@ public class UserPreferences { if(alarm.before(now)) { alarm.add(Calendar.DATE, 1); } - - alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, + Log.d(TAG, "Alarm set for: " + alarm.toString() + " : " + alarm.getTimeInMillis()); + alarmManager.set(AlarmManager.RTC_WAKEUP, alarm.getTimeInMillis(), - AlarmManager.INTERVAL_DAY, updateIntent); Log.d(TAG, "Changed alarm to new time of day " + hoursOfDay + ":" + minute); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java index ec3e9d9ea..7fa92f30c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/AlarmUpdateReceiver.java @@ -25,7 +25,7 @@ public class AlarmUpdateReceiver extends BroadcastReceiver { } PlaybackPreferences.init(context); UserPreferences.init(context); - UserPreferences.restartUpdateAlarm(); + UserPreferences.restartUpdateAlarm(false); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java index d37f97a5f..d98086003 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/FeedUpdateReceiver.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.Intent; import android.util.Log; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.util.NetworkUtils; @@ -23,6 +24,7 @@ public class FeedUpdateReceiver extends BroadcastReceiver { } else { Log.d(TAG, "Blocking automatic update: no wifi available / no mobile updates allowed"); } + UserPreferences.restartUpdateAlarm(false); } } -- cgit v1.2.3