Add ability to only do autodl when charging.
Defaults to allow autodl on battery to preserve existing behavior. Might be a good idea to add a receiver for the intent similar to ConnectivityActionReceiver as this will allow us to start/stop downloads as needed.
This commit is contained in:
parent
9ece3a7db4
commit
1b9c96bc76
|
@ -195,6 +195,7 @@ public class PreferenceController {
|
||||||
if (newValue instanceof Boolean) {
|
if (newValue instanceof Boolean) {
|
||||||
ui.findPreference(UserPreferences.PREF_ENABLE_AUTODL_WIFI_FILTER).setEnabled((Boolean) newValue);
|
ui.findPreference(UserPreferences.PREF_ENABLE_AUTODL_WIFI_FILTER).setEnabled((Boolean) newValue);
|
||||||
setSelectedNetworksEnabled((Boolean) newValue && UserPreferences.isEnableAutodownloadWifiFilter());
|
setSelectedNetworksEnabled((Boolean) newValue && UserPreferences.isEnableAutodownloadWifiFilter());
|
||||||
|
ui.findPreference(UserPreferences.PREF_ENABLE_AUTODL_ON_BATTERY).setEnabled((Boolean) newValue);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -376,6 +377,8 @@ public class PreferenceController {
|
||||||
setSelectedNetworksEnabled(UserPreferences.isEnableAutodownload()
|
setSelectedNetworksEnabled(UserPreferences.isEnableAutodownload()
|
||||||
&& UserPreferences.isEnableAutodownloadWifiFilter());
|
&& UserPreferences.isEnableAutodownloadWifiFilter());
|
||||||
|
|
||||||
|
ui.findPreference(UserPreferences.PREF_ENABLE_AUTODL_ON_BATTERY)
|
||||||
|
.setEnabled(UserPreferences.isEnableAutodownload());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setEpisodeCacheSizeText(int cacheSize) {
|
private void setEpisodeCacheSizeText(int cacheSize) {
|
||||||
|
|
|
@ -92,6 +92,11 @@
|
||||||
android:key="prefEnableAutoDl"
|
android:key="prefEnableAutoDl"
|
||||||
android:title="@string/pref_automatic_download_title"
|
android:title="@string/pref_automatic_download_title"
|
||||||
android:defaultValue="false"/>
|
android:defaultValue="false"/>
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:key="prefEnableAutoDownloadOnBattery"
|
||||||
|
android:title="@string/pref_automatic_download_on_battery_title"
|
||||||
|
android:summary="@string/pref_automatic_download_on_battery_sum"
|
||||||
|
android:defaultValue="true"/>
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="prefEnableAutoDownloadWifiFilter"
|
android:key="prefEnableAutoDownloadWifiFilter"
|
||||||
android:title="@string/pref_autodl_wifi_filter_title"
|
android:title="@string/pref_autodl_wifi_filter_title"
|
||||||
|
|
|
@ -51,6 +51,7 @@ public class UserPreferences implements
|
||||||
public static final String PREF_DATA_FOLDER = "prefDataFolder";
|
public static final String PREF_DATA_FOLDER = "prefDataFolder";
|
||||||
public static final String PREF_ENABLE_AUTODL = "prefEnableAutoDl";
|
public static final String PREF_ENABLE_AUTODL = "prefEnableAutoDl";
|
||||||
public static final String PREF_ENABLE_AUTODL_WIFI_FILTER = "prefEnableAutoDownloadWifiFilter";
|
public static final String PREF_ENABLE_AUTODL_WIFI_FILTER = "prefEnableAutoDownloadWifiFilter";
|
||||||
|
public static final String PREF_ENABLE_AUTODL_ON_BATTERY = "prefEnableAutoDownloadOnBattery";
|
||||||
private static final String PREF_AUTODL_SELECTED_NETWORKS = "prefAutodownloadSelectedNetworks";
|
private static final String PREF_AUTODL_SELECTED_NETWORKS = "prefAutodownloadSelectedNetworks";
|
||||||
public static final String PREF_EPISODE_CACHE_SIZE = "prefEpisodeCacheSize";
|
public static final String PREF_EPISODE_CACHE_SIZE = "prefEpisodeCacheSize";
|
||||||
private static final String PREF_PLAYBACK_SPEED = "prefPlaybackSpeed";
|
private static final String PREF_PLAYBACK_SPEED = "prefPlaybackSpeed";
|
||||||
|
@ -82,6 +83,7 @@ public class UserPreferences implements
|
||||||
private int theme;
|
private int theme;
|
||||||
private boolean enableAutodownload;
|
private boolean enableAutodownload;
|
||||||
private boolean enableAutodownloadWifiFilter;
|
private boolean enableAutodownloadWifiFilter;
|
||||||
|
private boolean enableAutodownloadOnBattery;
|
||||||
private String[] autodownloadSelectedNetworks;
|
private String[] autodownloadSelectedNetworks;
|
||||||
private int episodeCacheSize;
|
private int episodeCacheSize;
|
||||||
private String playbackSpeed;
|
private String playbackSpeed;
|
||||||
|
@ -144,6 +146,7 @@ public class UserPreferences implements
|
||||||
episodeCacheSize = readEpisodeCacheSizeInternal(sp.getString(
|
episodeCacheSize = readEpisodeCacheSizeInternal(sp.getString(
|
||||||
PREF_EPISODE_CACHE_SIZE, "20"));
|
PREF_EPISODE_CACHE_SIZE, "20"));
|
||||||
enableAutodownload = sp.getBoolean(PREF_ENABLE_AUTODL, false);
|
enableAutodownload = sp.getBoolean(PREF_ENABLE_AUTODL, false);
|
||||||
|
enableAutodownloadOnBattery = sp.getBoolean(PREF_ENABLE_AUTODL_ON_BATTERY, true);
|
||||||
playbackSpeed = sp.getString(PREF_PLAYBACK_SPEED, "1.0");
|
playbackSpeed = sp.getString(PREF_PLAYBACK_SPEED, "1.0");
|
||||||
playbackSpeedArray = readPlaybackSpeedArray(sp.getString(
|
playbackSpeedArray = readPlaybackSpeedArray(sp.getString(
|
||||||
PREF_PLAYBACK_SPEED_ARRAY, null));
|
PREF_PLAYBACK_SPEED_ARRAY, null));
|
||||||
|
@ -344,6 +347,11 @@ public class UserPreferences implements
|
||||||
return instance.enableAutodownload;
|
return instance.enableAutodownload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isEnableAutodownloadOnBattery() {
|
||||||
|
instanceAvailable();
|
||||||
|
return instance.enableAutodownloadOnBattery;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean shouldPauseForFocusLoss() {
|
public static boolean shouldPauseForFocusLoss() {
|
||||||
instanceAvailable();
|
instanceAvailable();
|
||||||
return instance.pauseForFocusLoss;
|
return instance.pauseForFocusLoss;
|
||||||
|
@ -395,6 +403,8 @@ public class UserPreferences implements
|
||||||
PREF_EPISODE_CACHE_SIZE, "20"));
|
PREF_EPISODE_CACHE_SIZE, "20"));
|
||||||
} else if (key.equals(PREF_ENABLE_AUTODL)) {
|
} else if (key.equals(PREF_ENABLE_AUTODL)) {
|
||||||
enableAutodownload = sp.getBoolean(PREF_ENABLE_AUTODL, false);
|
enableAutodownload = sp.getBoolean(PREF_ENABLE_AUTODL, false);
|
||||||
|
} else if (key.equals(PREF_ENABLE_AUTODL_ON_BATTERY)) {
|
||||||
|
enableAutodownloadOnBattery = sp.getBoolean(PREF_ENABLE_AUTODL_ON_BATTERY, true);
|
||||||
} else if (key.equals(PREF_PLAYBACK_SPEED)) {
|
} else if (key.equals(PREF_PLAYBACK_SPEED)) {
|
||||||
playbackSpeed = sp.getString(PREF_PLAYBACK_SPEED, "1.0");
|
playbackSpeed = sp.getString(PREF_PLAYBACK_SPEED, "1.0");
|
||||||
} else if (key.equals(PREF_PLAYBACK_SPEED_ARRAY)) {
|
} else if (key.equals(PREF_PLAYBACK_SPEED_ARRAY)) {
|
||||||
|
|
|
@ -36,6 +36,7 @@ import de.danoeh.antennapod.core.service.download.DownloadStatus;
|
||||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||||
import de.danoeh.antennapod.core.util.DownloadError;
|
import de.danoeh.antennapod.core.util.DownloadError;
|
||||||
import de.danoeh.antennapod.core.util.NetworkUtils;
|
import de.danoeh.antennapod.core.util.NetworkUtils;
|
||||||
|
import de.danoeh.antennapod.core.util.PowerUtils;
|
||||||
import de.danoeh.antennapod.core.util.QueueAccess;
|
import de.danoeh.antennapod.core.util.QueueAccess;
|
||||||
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
|
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
|
||||||
import de.danoeh.antennapod.core.util.exception.MediaFileNotFoundException;
|
import de.danoeh.antennapod.core.util.exception.MediaFileNotFoundException;
|
||||||
|
@ -449,7 +450,8 @@ public final class DBTasks {
|
||||||
/**
|
/**
|
||||||
* Looks for undownloaded episodes in the queue or list of unread items and request a download if
|
* Looks for undownloaded episodes in the queue or list of unread items and request a download if
|
||||||
* 1. Network is available
|
* 1. Network is available
|
||||||
* 2. There is free space in the episode cache
|
* 2. The device is charging or the user allows auto download on battery
|
||||||
|
* 3. There is free space in the episode cache
|
||||||
* This method is executed on an internal single thread executor.
|
* This method is executed on an internal single thread executor.
|
||||||
*
|
*
|
||||||
* @param context Used for accessing the DB.
|
* @param context Used for accessing the DB.
|
||||||
|
@ -463,8 +465,10 @@ public final class DBTasks {
|
||||||
public void run() {
|
public void run() {
|
||||||
if (BuildConfig.DEBUG)
|
if (BuildConfig.DEBUG)
|
||||||
Log.d(TAG, "Performing auto-dl of undownloaded episodes");
|
Log.d(TAG, "Performing auto-dl of undownloaded episodes");
|
||||||
if (NetworkUtils.autodownloadNetworkAvailable(context)
|
if ((NetworkUtils.autodownloadNetworkAvailable(context)
|
||||||
&& UserPreferences.isEnableAutodownload()) {
|
&& UserPreferences.isEnableAutodownload())
|
||||||
|
&& (PowerUtils.deviceCharging(context)
|
||||||
|
|| UserPreferences.isEnableAutodownloadOnBattery())) {
|
||||||
final List<FeedItem> queue = DBReader.getQueue(context);
|
final List<FeedItem> queue = DBReader.getQueue(context);
|
||||||
final List<FeedItem> unreadItems = DBReader
|
final List<FeedItem> unreadItems = DBReader
|
||||||
.getUnreadItemsList(context);
|
.getUnreadItemsList(context);
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package de.danoeh.antennapod.core.util;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.os.BatteryManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Tom on 1/5/15.
|
||||||
|
*/
|
||||||
|
public class PowerUtils {
|
||||||
|
|
||||||
|
private static final String TAG = "PowerUtils";
|
||||||
|
|
||||||
|
private PowerUtils() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the device is charging
|
||||||
|
*/
|
||||||
|
public static boolean deviceCharging(Context context) {
|
||||||
|
// from http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
|
||||||
|
IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
||||||
|
Intent batteryStatus = context.registerReceiver(null, iFilter);
|
||||||
|
|
||||||
|
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
|
||||||
|
return (status == BatteryManager.BATTERY_STATUS_CHARGING ||
|
||||||
|
status == BatteryManager.BATTERY_STATUS_FULL);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -235,6 +235,8 @@
|
||||||
<string name="pref_automatic_download_sum">Configure the automatic download of episodes.</string>
|
<string name="pref_automatic_download_sum">Configure the automatic download of episodes.</string>
|
||||||
<string name="pref_autodl_wifi_filter_title">Enable Wi-Fi filter</string>
|
<string name="pref_autodl_wifi_filter_title">Enable Wi-Fi filter</string>
|
||||||
<string name="pref_autodl_wifi_filter_sum">Allow automatic download only for selected Wi-Fi networks.</string>
|
<string name="pref_autodl_wifi_filter_sum">Allow automatic download only for selected Wi-Fi networks.</string>
|
||||||
|
<string name="pref_automatic_download_on_battery_title">Automatic download on battery</string>
|
||||||
|
<string name="pref_automatic_download_on_battery_sum">Allow automatic download while on battery</string>
|
||||||
<string name="pref_episode_cache_title">Episode cache</string>
|
<string name="pref_episode_cache_title">Episode cache</string>
|
||||||
<string name="pref_theme_title_light">Light</string>
|
<string name="pref_theme_title_light">Light</string>
|
||||||
<string name="pref_theme_title_dark">Dark</string>
|
<string name="pref_theme_title_dark">Dark</string>
|
||||||
|
|
Loading…
Reference in New Issue