summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java1
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java67
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java59
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java26
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java50
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java28
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java22
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java18
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java24
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java31
-rw-r--r--core/src/main/res/values/arrays.xml18
-rw-r--r--core/src/main/res/values/strings.xml12
18 files changed, 246 insertions, 127 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java
index 8bd56218c..1127d0b67 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceAuthenticationException.java
@@ -1,6 +1,7 @@
package de.danoeh.antennapod.core.gpoddernet;
public class GpodnetServiceAuthenticationException extends GpodnetServiceException {
+ private static final long serialVersionUID = 1L;
public GpodnetServiceAuthenticationException() {
super();
@@ -17,5 +18,4 @@ public class GpodnetServiceAuthenticationException extends GpodnetServiceExcepti
public GpodnetServiceAuthenticationException(Throwable cause) {
super(cause);
}
-
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java
index 84c085ed2..54c3bc7c8 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceBadStatusCodeException.java
@@ -1,12 +1,12 @@
package de.danoeh.antennapod.core.gpoddernet;
class GpodnetServiceBadStatusCodeException extends GpodnetServiceException {
+ private static final long serialVersionUID = 1L;
+
private final int statusCode;
public GpodnetServiceBadStatusCodeException(String message, int statusCode) {
super(message);
this.statusCode = statusCode;
}
-
-
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java
index 78ddfc945..7b99ddbc4 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetServiceException.java
@@ -1,6 +1,7 @@
package de.danoeh.antennapod.core.gpoddernet;
public class GpodnetServiceException extends Exception {
+ private static final long serialVersionUID = 1L;
GpodnetServiceException() {
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java b/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java
index f63c9aeb0..8b2d4eb98 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/menuhandler/MenuItemUtils.java
@@ -1,6 +1,5 @@
package de.danoeh.antennapod.core.menuhandler;
-import android.support.v4.view.MenuItemCompat;
import android.view.Menu;
import android.view.MenuItem;
@@ -25,7 +24,7 @@ public class MenuItemUtils {
// expand actionview if feeds are being downloaded, collapse otherwise
if (checker.isRefreshing()) {
MenuItem refreshItem = menu.findItem(resId);
- MenuItemCompat.setActionView(refreshItem, R.layout.refresh_action_view);
+ refreshItem.setActionView(R.layout.refresh_action_view);
return true;
} else {
return false;
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 8f5f5ae1e..bcc4f533e 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
@@ -17,7 +17,9 @@ import java.io.IOException;
import java.net.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.core.R;
@@ -78,14 +80,13 @@ public class UserPreferences {
// Network
private static final String PREF_ENQUEUE_DOWNLOADED = "prefEnqueueDownloaded";
public static final String PREF_UPDATE_INTERVAL = "prefAutoUpdateIntervall";
- public static final String PREF_MOBILE_UPDATE = "prefMobileUpdateAllowed";
+ private static final String PREF_MOBILE_UPDATE = "prefMobileUpdateTypes";
public static final String PREF_EPISODE_CLEANUP = "prefEpisodeCleanup";
public static final String PREF_PARALLEL_DOWNLOADS = "prefParallelDownloads";
public static final String PREF_EPISODE_CACHE_SIZE = "prefEpisodeCacheSize";
public static final String PREF_ENABLE_AUTODL = "prefEnableAutoDl";
public static final String PREF_ENABLE_AUTODL_ON_BATTERY = "prefEnableAutoDownloadOnBattery";
public static final String PREF_ENABLE_AUTODL_WIFI_FILTER = "prefEnableAutoDownloadWifiFilter";
- public static final String PREF_ENABLE_AUTODL_ON_MOBILE = "prefEnableAutoDownloadOnMobile";
private static final String PREF_AUTODL_SELECTED_NETWORKS = "prefAutodownloadSelectedNetworks";
private static final String PREF_PROXY_TYPE = "prefProxyType";
private static final String PREF_PROXY_HOST = "prefProxyHost";
@@ -379,16 +380,63 @@ public class UserPreferences {
return prefs.getString(PREF_UPDATE_INTERVAL, "").equals("0");
}
- public static String getMobileUpdatesEnabled() {
- return prefs.getString(PREF_MOBILE_UPDATE, "images");
+ private static boolean isAllowMobileFor(String type) {
+ HashSet<String> defaultValue = new HashSet<>();
+ defaultValue.add("images");
+ Set<String> allowed = prefs.getStringSet(PREF_MOBILE_UPDATE, defaultValue);
+ return allowed.contains(type);
}
- public static boolean isAllowMobileUpdate() {
- return getMobileUpdatesEnabled().equals("everything");
+ public static boolean isAllowMobileFeedRefresh() {
+ return isAllowMobileFor("feed_refresh");
+ }
+
+ public static boolean isAllowMobileEpisodeDownload() {
+ return isAllowMobileFor("episode_download");
+ }
+
+ public static boolean isAllowMobileAutoDownload() {
+ return isAllowMobileFor("auto_download");
+ }
+
+ public static boolean isAllowMobileStreaming() {
+ return isAllowMobileFor("streaming");
}
public static boolean isAllowMobileImages() {
- return isAllowMobileUpdate() || getMobileUpdatesEnabled().equals("images");
+ return isAllowMobileFor("images");
+ }
+
+ private static void setAllowMobileFor(String type, boolean allow) {
+ HashSet<String> defaultValue = new HashSet<>();
+ defaultValue.add("images");
+ Set<String> allowed = prefs.getStringSet(PREF_MOBILE_UPDATE, defaultValue);
+ if (allow) {
+ allowed.remove(type);
+ } else {
+ allowed.add(type);
+ }
+ prefs.edit().putStringSet(PREF_MOBILE_UPDATE, allowed).apply();
+ }
+
+ public static void setAllowMobileFeedRefresh(boolean allow) {
+ setAllowMobileFor("feed_refresh", allow);
+ }
+
+ public static void setAllowMobileEpisodeDownload(boolean allow) {
+ setAllowMobileFor("episode_download", allow);
+ }
+
+ public static void setAllowMobileAutoDownload(boolean allow) {
+ setAllowMobileFor("auto_download", allow);
+ }
+
+ public static void setAllowMobileStreaming(boolean allow) {
+ setAllowMobileFor("streaming", allow);
+ }
+
+ public static void setAllowMobileImages(boolean allow) {
+ setAllowMobileFor("images", allow);
}
public static int getParallelDownloads() {
@@ -420,11 +468,6 @@ public class UserPreferences {
return prefs.getBoolean(PREF_ENABLE_AUTODL_WIFI_FILTER, false);
}
- public static boolean isEnableAutodownloadOnMobile() {
- return prefs.getBoolean(PREF_ENABLE_AUTODL_ON_MOBILE, false);
- }
-
-
public static int getImageCacheSize() {
String cacheSizeString = prefs.getString(PREF_IMAGE_CACHE_SIZE, IMAGE_CACHE_DEFAULT_VALUE);
int cacheSizeInt = Integer.parseInt(cacheSizeString);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index d4be0013f..ab1edc8e9 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -25,6 +25,7 @@ import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.v4.app.NotificationCompat;
+import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.media.MediaBrowserCompat;
import android.support.v4.media.MediaBrowserServiceCompat;
import android.support.v4.media.MediaDescriptionCompat;
@@ -67,10 +68,12 @@ import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.FeedSearcher;
import de.danoeh.antennapod.core.util.IntList;
import de.danoeh.antennapod.core.util.IntentUtils;
+import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.core.util.QueueAccess;
import de.danoeh.antennapod.core.util.gui.NotificationUtils;
import de.danoeh.antennapod.core.util.playback.ExternalMedia;
import de.danoeh.antennapod.core.util.playback.Playable;
+import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
import org.greenrobot.eventbus.EventBus;
/**
@@ -94,6 +97,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
* True if media should be streamed.
*/
public static final String EXTRA_SHOULD_STREAM = "extra.de.danoeh.antennapod.core.service.shouldStream";
+ public static final String EXTRA_ALLOW_STREAM_THIS_TIME = "extra.de.danoeh.antennapod.core.service.allowStream";
/**
* True if playback should be started immediately after media has been
* prepared.
@@ -103,7 +107,6 @@ public class PlaybackService extends MediaBrowserServiceCompat {
public static final String EXTRA_PREPARE_IMMEDIATELY = "extra.de.danoeh.antennapod.core.service.prepareImmediately";
public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.danoeh.antennapod.core.service.playerStatusChanged";
- public static final String EXTRA_NEW_PLAYER_STATUS = "extra.de.danoeh.antennapod.service.playerStatusChanged.newStatus";
private static final String AVRCP_ACTION_PLAYER_STATUS_CHANGED = "com.android.music.playstatechanged";
private static final String AVRCP_ACTION_META_CHANGED = "com.android.music.metachanged";
@@ -206,6 +209,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
private static volatile boolean isCasting = false;
private static final int NOTIFICATION_ID = 1;
+ private static final int NOTIFICATION_ID_STREAMING = 2;
private PlaybackServiceMediaPlayer mediaPlayer;
private PlaybackServiceTaskManager taskManager;
@@ -467,8 +471,8 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
} else if (!flavorHelper.castDisconnect(castDisconnect) && playable != null) {
started = true;
- boolean stream = intent.getBooleanExtra(EXTRA_SHOULD_STREAM,
- true);
+ boolean stream = intent.getBooleanExtra(EXTRA_SHOULD_STREAM, true);
+ boolean allowStreamThisTime = intent.getBooleanExtra(EXTRA_ALLOW_STREAM_THIS_TIME, false);
boolean startWhenPrepared = intent.getBooleanExtra(EXTRA_START_WHEN_PREPARED, false);
boolean prepareImmediately = intent.getBooleanExtra(EXTRA_PREPARE_IMMEDIATELY, false);
sendNotificationBroadcast(NOTIFICATION_TYPE_RELOAD, 0);
@@ -477,6 +481,12 @@ public class PlaybackService extends MediaBrowserServiceCompat {
if (playable instanceof FeedMedia) {
playable = DBReader.getFeedMedia(((FeedMedia) playable).getId());
}
+ if (stream && !NetworkUtils.isStreamingAllowed() && !allowStreamThisTime) {
+ displayStreamingNotAllowedNotification(intent);
+ writePlaybackPreferencesNoMediaPlaying();
+ stopService();
+ return Service.START_NOT_STICKY;
+ }
mediaPlayer.playMediaObject(playable, stream, startWhenPrepared, prepareImmediately);
} else {
Log.d(TAG, "Did not handle intent to PlaybackService: " + intent);
@@ -487,6 +497,29 @@ public class PlaybackService extends MediaBrowserServiceCompat {
return Service.START_NOT_STICKY;
}
+ private void displayStreamingNotAllowedNotification(Intent originalIntent) {
+ Intent intent = new Intent(originalIntent);
+ intent.putExtra(EXTRA_ALLOW_STREAM_THIS_TIME, true);
+ PendingIntent pendingIntent;
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
+ pendingIntent = PendingIntent.getForegroundService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ } else {
+ pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NotificationUtils.CHANNEL_ID_USER_ACTION)
+ .setSmallIcon(R.drawable.stat_notify_sync_error)
+ .setContentTitle(getString(R.string.confirm_mobile_streaming_notification_title))
+ .setContentText(getString(R.string.confirm_mobile_streaming_notification_message))
+ .setStyle(new NotificationCompat.BigTextStyle()
+ .bigText(getString(R.string.confirm_mobile_streaming_notification_message)))
+ .setPriority(NotificationCompat.PRIORITY_DEFAULT)
+ .setContentIntent(pendingIntent)
+ .setAutoCancel(true);
+ NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
+ notificationManager.notify(NOTIFICATION_ID_STREAMING, builder.build());
+ }
+
/**
* Handles media button events
* return: keycode was handled
@@ -578,6 +611,8 @@ public class PlaybackService extends MediaBrowserServiceCompat {
mediaPlayer.playMediaObject(playable, false, true, true);
started = true;
PlaybackService.this.updateMediaSessionMetadata(playable);
+ } else {
+ stopService();
}
}
@@ -822,7 +857,23 @@ public class PlaybackService extends MediaBrowserServiceCompat {
Log.e(TAG, "Error handling the queue in order to retrieve the next item", e);
return null;
}
- return (nextItem != null) ? nextItem.getMedia() : null;
+
+ if (nextItem == null || nextItem.getMedia() == null) {
+ return null;
+ }
+
+ if (!nextItem.getMedia().localFileAvailable() && !NetworkUtils.isStreamingAllowed()) {
+ displayStreamingNotAllowedNotification(
+ new PlaybackServiceStarter(this, nextItem.getMedia())
+ .prepareImmediately(true)
+ .startWhenPrepared(true)
+ .shouldStream(true)
+ .getIntent());
+ writePlaybackPreferencesNoMediaPlaying();
+ stopService();
+ return null;
+ }
+ return nextItem.getMedia();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java
index c85559e20..f152ec531 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequestException.java
@@ -5,21 +5,21 @@ package de.danoeh.antennapod.core.storage;
* or something went wrong while processing the request.
*/
public class DownloadRequestException extends Exception {
+ private static final long serialVersionUID = 1L;
- public DownloadRequestException() {
- super();
- }
+ public DownloadRequestException() {
+ super();
+ }
- public DownloadRequestException(String detailMessage, Throwable throwable) {
- super(detailMessage, throwable);
- }
+ public DownloadRequestException(String message, Throwable cause) {
+ super(message, cause);
+ }
- public DownloadRequestException(String detailMessage) {
- super(detailMessage);
- }
-
- public DownloadRequestException(Throwable throwable) {
- super(throwable);
- }
+ public DownloadRequestException(String message) {
+ super(message);
+ }
+ public DownloadRequestException(Throwable cause) {
+ super(cause);
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java
index fd7d0a4e1..c9f9f19c8 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java
@@ -3,44 +3,42 @@ package de.danoeh.antennapod.core.syndication.handler;
import de.danoeh.antennapod.core.syndication.handler.TypeGetter.Type;
public class UnsupportedFeedtypeException extends Exception {
- private static final long serialVersionUID = 9105878964928170669L;
- private final TypeGetter.Type type;
- private String rootElement;
- private String message = null;
-
- public UnsupportedFeedtypeException(Type type) {
- super();
- this.type = type;
- }
+ private static final long serialVersionUID = 9105878964928170669L;
+ private final TypeGetter.Type type;
+ private String rootElement;
+ private String message = null;
+
+ public UnsupportedFeedtypeException(Type type) {
+ super();
+ this.type = type;
+ }
public UnsupportedFeedtypeException(Type type, String rootElement) {
this.type = type;
this.rootElement = rootElement;
}
- public UnsupportedFeedtypeException(String message) {
- this.message = message;
- type = Type.INVALID;
- }
+ public UnsupportedFeedtypeException(String message) {
+ this.message = message;
+ type = Type.INVALID;
+ }
public TypeGetter.Type getType() {
- return type;
- }
+ return type;
+ }
public String getRootElement() {
return rootElement;
}
@Override
- public String getMessage() {
- if (message != null) {
- return message;
- } else if (type == TypeGetter.Type.INVALID) {
- return "Invalid type";
- } else {
- return "Type " + type + " not supported";
- }
- }
-
-
+ public String getMessage() {
+ if (message != null) {
+ return message;
+ } else if (type == TypeGetter.Type.INVALID) {
+ return "Invalid type";
+ } else {
+ return "Type " + type + " not supported";
+ }
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java
index a0195975f..b425687ae 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/FeedUpdateUtils.java
@@ -24,7 +24,7 @@ public class FeedUpdateUtils {
with().pollInterval(1, TimeUnit.SECONDS)
.await()
.atMost(10, TimeUnit.SECONDS)
- .until(() -> NetworkUtils.networkAvailable() && NetworkUtils.isDownloadAllowed());
+ .until(() -> NetworkUtils.networkAvailable() && NetworkUtils.isFeedRefreshAllowed());
DBTasks.refreshAllFeeds(context, null, callback);
} catch (ConditionTimeoutException ignore) {
Log.d(TAG, "Blocking automatic update: no wifi available / no mobile updates allowed");
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java b/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java
index c98c2d82a..a2795194d 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java
@@ -1,21 +1,23 @@
package de.danoeh.antennapod.core.util;
-/** Thrown if a feed has invalid attribute values. */
+/**
+ * Thrown if a feed has invalid attribute values.
+ */
public class InvalidFeedException extends Exception {
+ private static final long serialVersionUID = 1L;
- public InvalidFeedException() {
- }
+ public InvalidFeedException() {
+ }
- public InvalidFeedException(String detailMessage) {
- super(detailMessage);
- }
+ public InvalidFeedException(String message) {
+ super(message);
+ }
- public InvalidFeedException(Throwable throwable) {
- super(throwable);
- }
-
- public InvalidFeedException(String detailMessage, Throwable throwable) {
- super(detailMessage, throwable);
- }
+ public InvalidFeedException(Throwable cause) {
+ super(cause);
+ }
+ public InvalidFeedException(String message, Throwable cause) {
+ super(message, cause);
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java
index d9431bc5d..ca48c9bc9 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/NetworkUtils.java
@@ -74,7 +74,7 @@ public class NetworkUtils {
return true;
}
} else {
- if (!UserPreferences.isEnableAutodownloadOnMobile()) {
+ if (!UserPreferences.isAllowMobileAutoDownload()) {
Log.d(TAG, "Auto Download not enabled on Mobile");
return false;
}
@@ -95,14 +95,28 @@ public class NetworkUtils {
return info != null && info.isConnected();
}
- public static boolean isDownloadAllowed() {
- return UserPreferences.isAllowMobileUpdate() || !NetworkUtils.isNetworkMetered();
+ public static boolean isEpisodeDownloadAllowed() {
+ return UserPreferences.isAllowMobileEpisodeDownload() || !NetworkUtils.isNetworkMetered();
+ }
+
+ public static boolean isEpisodeHeadDownloadAllowed() {
+ // It is not an image but it is a similarly tiny request
+ // that is probably not even considered a download by most users
+ return isImageAllowed();
}
public static boolean isImageAllowed() {
return UserPreferences.isAllowMobileImages() || !NetworkUtils.isNetworkMetered();
}
+ public static boolean isStreamingAllowed() {
+ return UserPreferences.isAllowMobileStreaming() || !NetworkUtils.isNetworkMetered();
+ }
+
+ public static boolean isFeedRefreshAllowed() {
+ return UserPreferences.isAllowMobileFeedRefresh() || !NetworkUtils.isNetworkMetered();
+ }
+
private static boolean isNetworkMetered() {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -123,7 +137,7 @@ public class NetworkUtils {
public static Single<Long> getFeedMediaSizeObservable(FeedMedia media) {
return Single.create((SingleOnSubscribe<Long>) emitter -> {
- if (!NetworkUtils.isDownloadAllowed()) {
+ if (!NetworkUtils.isEpisodeHeadDownloadAllowed()) {
emitter.onSuccess(0L);
return;
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java b/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java
index e5aaa2db0..412b150fa 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java
@@ -67,7 +67,7 @@ public class AutoUpdateManager {
private static Constraints getConstraints() {
Constraints.Builder constraints = new Constraints.Builder();
- if (UserPreferences.isAllowMobileUpdate()) {
+ if (UserPreferences.isAllowMobileFeedRefresh()) {
constraints.setRequiredNetworkType(NetworkType.CONNECTED);
} else {
constraints.setRequiredNetworkType(NetworkType.UNMETERED);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java b/core/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java
index 3000e2fa4..f9e2e9991 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/exception/MediaFileNotFoundException.java
@@ -3,16 +3,16 @@ package de.danoeh.antennapod.core.util.exception;
import de.danoeh.antennapod.core.feed.FeedMedia;
public class MediaFileNotFoundException extends Exception {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
- private final FeedMedia media;
+ private final FeedMedia media;
- public MediaFileNotFoundException(String msg, FeedMedia media) {
- super(msg);
- this.media = media;
- }
+ public MediaFileNotFoundException(String msg, FeedMedia media) {
+ super(msg);
+ this.media = media;
+ }
- public FeedMedia getMedia() {
- return media;
- }
+ public FeedMedia getMedia() {
+ return media;
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java
index 0c746d7e5..021268adb 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/id3reader/ID3ReaderException.java
@@ -1,20 +1,20 @@
package de.danoeh.antennapod.core.util.id3reader;
public class ID3ReaderException extends Exception {
+ private static final long serialVersionUID = 1L;
- public ID3ReaderException() {
- }
+ public ID3ReaderException() {
+ }
- public ID3ReaderException(String arg0) {
- super(arg0);
- }
+ public ID3ReaderException(String message) {
+ super(message);
+ }
- public ID3ReaderException(Throwable arg0) {
- super(arg0);
- }
-
- public ID3ReaderException(String arg0, Throwable arg1) {
- super(arg0, arg1);
- }
+ public ID3ReaderException(Throwable message) {
+ super(message);
+ }
+ public ID3ReaderException(String message, Throwable cause) {
+ super(message, cause);
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java b/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java
index cc6a8ec90..61072f1ad 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java
@@ -33,8 +33,8 @@ public class HtmlToPlainText {
*/
public String getPlainText(Element element) {
FormattingVisitor formatter = new FormattingVisitor();
- NodeTraversor traversor = new NodeTraversor(formatter);
- traversor.traverse(element); // walk the DOM, and call .head() and .tail() for each node
+ // walk the DOM, and call .head() and .tail() for each node
+ NodeTraversor.traverse(formatter, element);
return formatter.toString();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java
index 89ab20db0..8b0f3052b 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/VorbisCommentReaderException.java
@@ -1,24 +1,21 @@
package de.danoeh.antennapod.core.util.vorbiscommentreader;
-public class VorbisCommentReaderException extends Exception {
- public VorbisCommentReaderException() {
- super();
- // TODO Auto-generated constructor stub
- }
+public class VorbisCommentReaderException extends Exception {
+ private static final long serialVersionUID = 1L;
- public VorbisCommentReaderException(String arg0, Throwable arg1) {
- super(arg0, arg1);
- // TODO Auto-generated constructor stub
- }
+ public VorbisCommentReaderException() {
+ super();
+ }
- public VorbisCommentReaderException(String arg0) {
- super(arg0);
- // TODO Auto-generated constructor stub
- }
+ public VorbisCommentReaderException(String message, Throwable cause) {
+ super(message, cause);
+ }
- public VorbisCommentReaderException(Throwable arg0) {
- super(arg0);
- // TODO Auto-generated constructor stub
- }
+ public VorbisCommentReaderException(String message) {
+ super(message);
+ }
+ public VorbisCommentReaderException(Throwable message) {
+ super(message);
+ }
}
diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml
index 39d1c0a94..0eaf0e5e7 100644
--- a/core/src/main/res/values/arrays.xml
+++ b/core/src/main/res/values/arrays.xml
@@ -49,6 +49,7 @@
<item>25</item>
<item>50</item>
<item>100</item>
+ <item>500</item>
<item>@string/pref_episode_cache_unlimited</item>
</string-array>
@@ -58,19 +59,28 @@
<item>25</item>
<item>50</item>
<item>100</item>
+ <item>500</item>
<item>-1</item>
</string-array>
<string-array name="mobile_update_entries">
- <item>@string/pref_mobileUpdate_nothing</item>
+ <item>@string/pref_mobileUpdate_refresh</item>
+ <item>@string/pref_mobileUpdate_episode_download</item>
+ <item>@string/pref_mobileUpdate_auto_download</item>
+ <item>@string/pref_mobileUpdate_streaming</item>
<item>@string/pref_mobileUpdate_images</item>
- <item>@string/pref_mobileUpdate_everything</item>
</string-array>
<string-array name="mobile_update_values">
- <item>nothing</item>
+ <item>feed_refresh</item>
+ <item>episode_download</item>
+ <item>auto_download</item>
+ <item>streaming</item>
+ <item>images</item>
+ </string-array>
+
+ <string-array name="mobile_update_default_value">
<item>images</item>
- <item>everything</item>
</string-array>
<string-array name="episode_cleanup_entries">
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 6025dc888..a6ba0740e 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -265,6 +265,8 @@
<string name="confirm_mobile_download_dialog_title">Confirm Mobile Download</string>
<string name="confirm_mobile_download_dialog_message_not_in_queue">Downloading over mobile data connection is disabled in the settings.\n\nYou can choose to either only add the episode to the queue or you can allow downloading temporarily.\n\n<small>Your choice will be remembered for 10 minutes.</small></string>
<string name="confirm_mobile_download_dialog_message">Downloading over mobile data connection is disabled in the settings.\n\nDo you want to allow downloading temporarily?\n\n<small>Your choice will be remembered for 10 minutes.</small></string>
+ <string name="confirm_mobile_streaming_notification_title">Confirm Mobile streaming</string>
+ <string name="confirm_mobile_streaming_notification_message">Streaming over mobile data connection is disabled in the settings. Tap to stream anyway.</string>
<string name="confirm_mobile_download_dialog_only_add_to_queue">Enqueue</string>
<string name="confirm_mobile_download_dialog_enable_temporarily">Allow temporarily</string>
@@ -386,10 +388,12 @@
<string name="pref_unpauseOnHeadsetReconnect_title">Headphones Reconnect</string>
<string name="pref_unpauseOnBluetoothReconnect_title">Bluetooth Reconnect</string>
<string name="pref_mobileUpdate_title">Mobile Updates</string>
- <string name="pref_mobileUpdate_sum">Allow updates and manual episode downloads over the mobile data connection</string>
- <string name="pref_mobileUpdate_nothing">Nothing</string>
- <string name="pref_mobileUpdate_images">Images only</string>
- <string name="pref_mobileUpdate_everything">Everything</string>
+ <string name="pref_mobileUpdate_sum">Select what should be allowed over the mobile data connection</string>
+ <string name="pref_mobileUpdate_refresh">Feed refresh</string>
+ <string name="pref_mobileUpdate_images">Cover images</string>
+ <string name="pref_mobileUpdate_auto_download">Auto download</string>
+ <string name="pref_mobileUpdate_episode_download">Episode download</string>
+ <string name="pref_mobileUpdate_streaming">Streaming</string>
<string name="refreshing_label">Refreshing</string>
<string name="user_interface_label">User Interface</string>
<string name="pref_set_theme_title">Select Theme</string>