diff options
author | Tom Hennen <TomHennen@users.noreply.github.com> | 2015-06-27 08:24:01 -0400 |
---|---|---|
committer | Tom Hennen <TomHennen@users.noreply.github.com> | 2015-06-27 08:24:01 -0400 |
commit | e332df4af572528f673745da2c7c13bf6ef43def (patch) | |
tree | 62c87c172a2825062427e3b54f9de64f32c78196 /core/src/main/java/de/danoeh | |
parent | ddf34dccf385e4f2cd5a7d5d7d501b32d0010eb6 (diff) | |
parent | 8f75777b41c3ca23e8f834025cafd74c0e96f3bc (diff) | |
download | AntennaPod-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.java | 68 |
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) { |