diff options
author | ByteHamster <info@bytehamster.com> | 2018-05-03 18:47:57 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2018-05-03 19:11:30 +0200 |
commit | 2190101cf949d58057e0f0e2ca24dbe81d201426 (patch) | |
tree | 3324d7224ddb33ad448ee51ae39b1bcb56fb0afe /core/src/main/java | |
parent | 3e98ab61ea50b320989c26f6548303fd91447073 (diff) | |
download | AntennaPod-2190101cf949d58057e0f0e2ca24dbe81d201426.zip |
Added JobScheduler for feed updates
Diffstat (limited to 'core/src/main/java')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java | 70 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateJobService.java | 30 |
2 files changed, 88 insertions, 12 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 a93012d59..17362c721 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 @@ -2,17 +2,23 @@ package de.danoeh.antennapod.core.preferences; import android.app.AlarmManager; import android.app.PendingIntent; +import android.app.job.JobInfo; +import android.app.job.JobScheduler; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.os.Build; import android.os.SystemClock; import android.preference.PreferenceManager; import android.support.annotation.IntRange; import android.support.annotation.NonNull; +import android.support.annotation.RequiresApi; import android.support.v4.app.NotificationCompat; import android.text.TextUtils; import android.util.Log; +import de.danoeh.antennapod.core.service.FeedUpdateJobService; import org.json.JSONArray; import org.json.JSONException; @@ -103,6 +109,10 @@ public class UserPreferences { private static final String PREF_DATA_FOLDER = "prefDataFolder"; public static final String PREF_IMAGE_CACHE_SIZE = "prefImageCacheSize"; + // JobScheduler + private static final int JOB_ID_FEED_UPDATE = 42; + private static final float JOB_SCHEDULER_TIME_VARIATION = 1.5f; + // Mediaplayer private static final String PREF_PLAYBACK_SPEED = "prefPlaybackSpeed"; private static final String PREF_FAST_FORWARD_SECS = "prefFastForwardSecs"; @@ -797,18 +807,31 @@ public class UserPreferences { */ private static void restartUpdateIntervalAlarm(long triggerAtMillis, long intervalMillis) { Log.d(TAG, "Restarting update alarm."); + + if (intervalMillis <= 0) { + Log.d(TAG, "Automatic update was deactivated"); + return; + } + + if (Build.VERSION.SDK_INT >= 23) { + JobInfo.Builder builder = getFeedUpdateJobBuilder(); + builder.setOverrideDeadline((long) (triggerAtMillis * JOB_SCHEDULER_TIME_VARIATION)); + JobScheduler jobScheduler = context.getSystemService(JobScheduler.class); + if (jobScheduler != null) { + jobScheduler.schedule(builder.build()); + Log.d(TAG, "JobScheduler was set for " + triggerAtMillis); + } + return; + } + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, FeedUpdateReceiver.class); PendingIntent updateIntent = PendingIntent.getBroadcast(context, 0, intent, 0); alarmManager.cancel(updateIntent); - if (intervalMillis > 0) { - alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + triggerAtMillis, - updateIntent); - Log.d(TAG, "Changed alarm to new interval " + TimeUnit.MILLISECONDS.toHours(intervalMillis) + " h"); - } else { - Log.d(TAG, "Automatic update was deactivated"); - } + alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, + SystemClock.elapsedRealtime() + triggerAtMillis, + updateIntent); + Log.d(TAG, "Changed alarm to new interval " + TimeUnit.MILLISECONDS.toHours(intervalMillis) + " h"); } /** @@ -816,10 +839,6 @@ public class UserPreferences { */ private 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(context, FeedUpdateReceiver.class), 0); - alarmManager.cancel(updateIntent); Calendar now = Calendar.getInstance(); Calendar alarm = (Calendar)now.clone(); @@ -828,6 +847,24 @@ public class UserPreferences { if (alarm.before(now) || alarm.equals(now)) { alarm.add(Calendar.DATE, 1); } + + if (Build.VERSION.SDK_INT >= 23) { + JobInfo.Builder builder = getFeedUpdateJobBuilder(); + long triggerAtMillis = alarm.getTimeInMillis() - now.getTimeInMillis(); + builder.setOverrideDeadline((long) (triggerAtMillis * JOB_SCHEDULER_TIME_VARIATION)); + JobScheduler jobScheduler = context.getSystemService(JobScheduler.class); + if (jobScheduler != null) { + jobScheduler.schedule(builder.build()); + Log.d(TAG, "JobScheduler was set for " + triggerAtMillis); + } + return; + } + + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + PendingIntent updateIntent = PendingIntent.getBroadcast(context, 0, + new Intent(context, FeedUpdateReceiver.class), 0); + alarmManager.cancel(updateIntent); + Log.d(TAG, "Alarm set for: " + alarm.toString() + " : " + alarm.getTimeInMillis()); alarmManager.set(AlarmManager.RTC_WAKEUP, alarm.getTimeInMillis(), @@ -835,6 +872,15 @@ public class UserPreferences { Log.d(TAG, "Changed alarm to new time of day " + hoursOfDay + ":" + minute); } + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + private static JobInfo.Builder getFeedUpdateJobBuilder() { + ComponentName serviceComponent = new ComponentName(context, FeedUpdateJobService.class); + JobInfo.Builder builder = new JobInfo.Builder(JOB_ID_FEED_UPDATE, serviceComponent); + builder.setMinimumLatency(15 * 60 * 1000); + builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); + return builder; + } + /** * Reads episode cache size as it is saved in the episode_cache_size_values array. */ diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateJobService.java b/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateJobService.java new file mode 100644 index 000000000..d9a7e31cc --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/service/FeedUpdateJobService.java @@ -0,0 +1,30 @@ +package de.danoeh.antennapod.core.service; + +import android.app.job.JobParameters; +import android.app.job.JobService; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.util.Log; +import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBTasks; + +@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) +public class FeedUpdateJobService extends JobService { + private static final String TAG = "FeedUpdateJobService"; + + @Override + public boolean onStartJob(JobParameters params) { + Log.d(TAG, "Job started"); + ClientConfig.initialize(getApplicationContext()); + DBTasks.refreshAllFeeds(getApplicationContext(), null); + UserPreferences.restartUpdateAlarm(false); + return true; + } + + @Override + public boolean onStopJob(JobParameters params) { + return true; + } + +} |