summaryrefslogtreecommitdiff
path: root/core/src/main/java/de/danoeh
diff options
context:
space:
mode:
authorTom Hennen <TomHennen@users.noreply.github.com>2015-06-27 08:24:01 -0400
committerTom Hennen <TomHennen@users.noreply.github.com>2015-06-27 08:24:01 -0400
commite332df4af572528f673745da2c7c13bf6ef43def (patch)
tree62c87c172a2825062427e3b54f9de64f32c78196 /core/src/main/java/de/danoeh
parentddf34dccf385e4f2cd5a7d5d7d501b32d0010eb6 (diff)
parent8f75777b41c3ca23e8f834025cafd74c0e96f3bc (diff)
downloadAntennaPod-e332df4af572528f673745da2c7c13bf6ef43def.zip
Merge pull request #957 from mfietz/issue/798-update-time
Set interval or time of day for automatic updates
Diffstat (limited to 'core/src/main/java/de/danoeh')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java68
1 files changed, 63 insertions, 5 deletions
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 5d53db5b3..d96d25fc2 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
@@ -19,6 +19,7 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -206,7 +207,24 @@ public class UserPreferences {
}
public static long getUpdateInterval() {
- return readUpdateInterval(prefs.getString(PREF_UPDATE_INTERVAL, "0"));
+ String updateInterval = prefs.getString(PREF_UPDATE_INTERVAL, "0");
+ if(false == updateInterval.contains(":")) {
+ return readUpdateInterval(updateInterval);
+ } else {
+ return 0;
+ }
+ }
+
+ public static int[] getUpdateTimeOfDay() {
+ String datetime = prefs.getString(PREF_UPDATE_INTERVAL, "");
+ if(datetime.length() >= 3 && datetime.contains(":")) {
+ String[] parts = datetime.split(":");
+ int hourOfDay = Integer.valueOf(parts[0]);
+ int minute = Integer.valueOf(parts[1]);
+ return new int[] { hourOfDay, minute };
+ } else {
+ return new int[0];
+ }
}
public static boolean isAllowMobileUpdate() {
@@ -317,6 +335,16 @@ public class UserPreferences {
}
/**
+ * Sets the update interval value. Should only be used for testing purposes!
+ */
+ public static void setUpdateTimeOfDay(int hourOfDay, int minute) {
+ prefs.edit()
+ .putString(PREF_UPDATE_INTERVAL, hourOfDay + ":" + minute)
+ .apply();
+ restartUpdateAlarm();
+ }
+
+ /**
* Change the auto-flattr settings
*
* @param enabled Whether automatic flattring should be enabled at all
@@ -493,14 +521,19 @@ public class UserPreferences {
}
public static void restartUpdateAlarm() {
- long hours = getUpdateInterval();
- restartUpdateAlarm(TimeUnit.SECONDS.toMillis(10), hours);
+ int[] timeOfDay = getUpdateTimeOfDay();
+ if (timeOfDay.length == 2) {
+ restartUpdateTimeOfDayAlarm(timeOfDay[0], timeOfDay[1]);
+ } else {
+ long hours = getUpdateInterval();
+ restartUpdateIntervalAlarm(TimeUnit.SECONDS.toMillis(10), hours);
+ }
}
/**
- * Updates alarm registered with the AlarmManager service or deactivates it.
+ * Sets the interval in which the feeds are refreshed automatically
*/
- public static void restartUpdateAlarm(long triggerAtMillis, long intervalMillis) {
+ public static void restartUpdateIntervalAlarm(long triggerAtMillis, long intervalMillis) {
Log.d(TAG, "Restarting update alarm.");
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent updateIntent = PendingIntent.getBroadcast(context, 0,
@@ -518,6 +551,31 @@ public class UserPreferences {
}
/**
+ * Sets time of day the feeds are refreshed automatically
+ */
+ public static void restartUpdateTimeOfDayAlarm(int hoursOfDay, int minute) {
+ Log.d(TAG, "Restarting update alarm.");
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ PendingIntent updateIntent = PendingIntent.getBroadcast(context, 0,
+ new Intent(ClientConfig.applicationCallbacks.getApplicationInstance(), FeedUpdateReceiver.class), 0);
+ alarmManager.cancel(updateIntent);
+
+ Calendar now = Calendar.getInstance();
+ Calendar alarm = (Calendar)now.clone();
+ alarm.set(Calendar.HOUR_OF_DAY, hoursOfDay);
+ alarm.set(Calendar.MINUTE, minute);
+ if(alarm.before(now)) {
+ alarm.add(Calendar.DATE, 1);
+ }
+
+ alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
+ alarm.getTimeInMillis(),
+ AlarmManager.INTERVAL_DAY,
+ updateIntent);
+ Log.d(TAG, "Changed alarm to new time of day " + hoursOfDay + ":" + minute);
+ }
+
+ /**
* Reads episode cache size as it is saved in the episode_cache_size_values array.
*/
public static int readEpisodeCacheSize(String valueFromPrefs) {