summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java9
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java23
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java20
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java75
-rwxr-xr-xcore/src/main/res/drawable-hdpi/ic_av_fast_forward_80dp.pngbin0 -> 1228 bytes
-rwxr-xr-xcore/src/main/res/drawable-hdpi/ic_av_rewind_80dp.pngbin0 -> 1277 bytes
-rwxr-xr-xcore/src/main/res/drawable-mdpi/ic_av_fast_forward_80dp.pngbin0 -> 760 bytes
-rwxr-xr-xcore/src/main/res/drawable-mdpi/ic_av_rewind_80dp.pngbin0 -> 853 bytes
-rwxr-xr-xcore/src/main/res/drawable-xhdpi/ic_av_fast_forward_80dp.pngbin0 -> 1968 bytes
-rwxr-xr-xcore/src/main/res/drawable-xhdpi/ic_av_rewind_80dp.pngbin0 -> 1992 bytes
-rwxr-xr-xcore/src/main/res/drawable-xxhdpi/ic_av_fast_forward_80dp.pngbin0 -> 3207 bytes
-rwxr-xr-xcore/src/main/res/drawable-xxhdpi/ic_av_rewind_80dp.pngbin0 -> 3502 bytes
-rwxr-xr-xcore/src/main/res/drawable-xxxhdpi/ic_av_fast_forward_80dp.pngbin0 -> 5878 bytes
-rwxr-xr-xcore/src/main/res/drawable-xxxhdpi/ic_av_rewind_80dp.pngbin0 -> 6299 bytes
-rw-r--r--core/src/main/res/values/strings.xml11
20 files changed, 87 insertions, 68 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
index 00b32de5f..d8c32f55e 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
@@ -78,11 +78,11 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
/*
* 0: auto download disabled
- * 1: auto download enabled
+ * 1: auto download enabled (default)
* > 1: auto download enabled, (approx.) timestamp of the last failed attempt
* where last digit denotes the number of failed attempts
*/
- private long autoDownload = 0;
+ private long autoDownload = 1;
/**
* Any tags assigned to this item
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java
index a7d553120..ae22d5460 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java
@@ -8,6 +8,7 @@ import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.Nullable;
+import android.text.TextUtils;
import java.util.Date;
import java.util.List;
@@ -167,6 +168,11 @@ public class FeedMedia extends FeedFile implements Playable {
}
public void updateFromOther(FeedMedia other) {
+ // we try to cover two cases: (1) feed did include file before (2) feed contained wrong URL
+ // if item.getAutoDownload() is false, the file has been downloaded before
+ if((TextUtils.isEmpty(download_url) || item.getAutoDownload()) && !TextUtils.isEmpty(other.download_url)) {
+ item.setNew();
+ }
super.updateFromOther(other);
if (other.size > 0) {
size = other.size;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
index c3afff276..d69228ceb 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java
@@ -204,8 +204,10 @@ public class DownloadService extends Service {
return;
}
FeedItem item = media.getItem();
- if (status.getReason() == DownloadError.ERROR_HTTP_DATA_ERROR &&
- Integer.valueOf(status.getReasonDetailed()) == HttpURLConnection.HTTP_NOT_FOUND) {
+ boolean httpNotFound = status.getReason() == DownloadError.ERROR_HTTP_DATA_ERROR
+ && String.valueOf(HttpURLConnection.HTTP_NOT_FOUND).equals(status.getReasonDetailed());
+ boolean notEnoughSpace = status.getReason() == DownloadError.ERROR_NOT_ENOUGH_SPACE;
+ if (httpNotFound || notEnoughSpace) {
DBWriter.saveFeedItemAutoDownloadFailed(item).get();
}
// to make lists reload the failed item, we fake an item update
@@ -361,7 +363,8 @@ public class DownloadService extends Service {
int numDownloads = requester.getNumberOfDownloads();
String downloadsLeft;
if (numDownloads > 0) {
- downloadsLeft = requester.getNumberOfDownloads() + getString(R.string.downloads_left);
+ downloadsLeft = getResources()
+ .getQuantityString(R.plurals.downloads_left, numDownloads, numDownloads);
} else {
downloadsLeft = getString(R.string.downloads_processing);
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java
index 4e0c8a109..680fb8777 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java
@@ -39,7 +39,7 @@ public class PlaybackServiceTaskManager {
/**
* Notification interval of widget updater in milliseconds.
*/
- public static final int WIDGET_UPDATER_NOTIFICATION_INTERVAL = 1500;
+ public static final int WIDGET_UPDATER_NOTIFICATION_INTERVAL = 1000;
private static final int SCHED_EX_POOL_SIZE = 2;
private final ScheduledThreadPoolExecutor schedExecutor;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
index 16e65f9f3..bc4c671a2 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
@@ -408,7 +408,7 @@ public final class DBReader {
return items;
}
- static LongList getFavoriteIDList() {
+ public static LongList getFavoriteIDList() {
Log.d(TAG, "getFavoriteIDList() called");
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
index d1d6bd750..e728abc3b 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
@@ -993,7 +993,6 @@ public class DBWriter {
public static Future<?> saveFeedItemAutoDownloadFailed(final FeedItem feedItem) {
return dbExec.submit(() -> {
int failedAttempts = feedItem.getFailedAutoDownloadAttempts() + 1;
- Log.d(TAG, "failedAttempts: " + failedAttempts);
long autoDownload;
if(!feedItem.getAutoDownload() || failedAttempts >= 10) {
autoDownload = 0; // giving up, disable auto download
@@ -1001,8 +1000,6 @@ public class DBWriter {
} else {
long now = System.currentTimeMillis();
autoDownload = (now / 10) * 10 + failedAttempts;
- Log.d(TAG, "now: " + now);
- Log.d(TAG, "autoDownload: " + autoDownload);
}
final PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java
index 9b9849c49..99c4cd67a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSITunes.java
@@ -19,6 +19,8 @@ public class NSITunes extends Namespace {
private static final String AUTHOR = "author";
public static final String DURATION = "duration";
+ public static final String SUBTITLE = "subtitle";
+ public static final String SUMMARY = "summary";
@Override
@@ -67,13 +69,28 @@ public class NSITunes extends Namespace {
} else {
return;
}
-
state.getTempObjects().put(DURATION, duration);
} catch (NumberFormatException e) {
e.printStackTrace();
}
+ } else if (localName.equals(SUBTITLE)) {
+ String subtitle = state.getContentBuf().toString();
+ if (state.getCurrentItem() != null) {
+ if (TextUtils.isEmpty(state.getCurrentItem().getDescription())) {
+ state.getCurrentItem().setDescription(subtitle);
+ }
+ } else {
+ if (TextUtils.isEmpty(state.getFeed().getDescription())) {
+ state.getFeed().setDescription(subtitle);
+ }
+ }
+ } else if (localName.equals(SUMMARY)) {
+ String summary = state.getContentBuf().toString();
+ if (state.getCurrentItem() != null) {
+ state.getCurrentItem().setDescription(summary);
+ } else {
+ state.getFeed().setDescription(summary);
+ }
}
-
}
-
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java
index a690e7646..b23a142af 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java
@@ -4,7 +4,6 @@ import android.util.Log;
import org.xml.sax.Attributes;
-import de.danoeh.antennapod.core.BuildConfig;
import de.danoeh.antennapod.core.feed.FeedImage;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
@@ -88,16 +87,15 @@ public class NSAtom extends Namespace {
size = Long.parseLong(strSize);
}
} catch (NumberFormatException e) {
- if (BuildConfig.DEBUG) Log.d(TAG, "Length attribute could not be parsed.");
+ Log.d(TAG, "Length attribute could not be parsed.");
}
String type = attributes.getValue(LINK_TYPE);
if (SyndTypeUtils.enclosureTypeValid(type)
- || (type = SyndTypeUtils
- .getValidMimeTypeFromUrl(href)) != null) {
- state.getCurrentItem().setMedia(
- new FeedMedia(state.getCurrentItem(), href,
- size, type)
- );
+ || (type = SyndTypeUtils.getValidMimeTypeFromUrl(href)) != null) {
+ FeedItem currItem = state.getCurrentItem();
+ if(!currItem.hasMedia()) {
+ currItem.setMedia(new FeedMedia(currItem, href, size, type));
+ }
}
} else if (rel.equals(LINK_REL_PAYMENT)) {
state.getCurrentItem().setPaymentLink(href);
@@ -111,9 +109,11 @@ public class NSAtom extends Namespace {
* LINK_TYPE_HTML or LINK_TYPE_XHTML
*/
if ((type == null && state.getFeed().getLink() == null)
- || (type != null && (type.equals(LINK_TYPE_HTML) || type.equals(LINK_TYPE_XHTML)))) {
+ || (type != null && (type.equals(LINK_TYPE_HTML)
+ || type.equals(LINK_TYPE_XHTML)))) {
state.getFeed().setLink(href);
- } else if (type != null && (type.equals(LINK_TYPE_ATOM) || type.equals(LINK_TYPE_RSS))) {
+ } else if (type != null && (type.equals(LINK_TYPE_ATOM)
+ || type.equals(LINK_TYPE_RSS))) {
// treat as podlove alternate feed
String title = attributes.getValue(LINK_TITLE);
if (title == null) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
index 1952c068f..31cb25d40 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
@@ -18,7 +18,6 @@ import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import android.view.SurfaceHolder;
-import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.SeekBar;
@@ -78,18 +77,18 @@ public abstract class PlaybackController {
this.activity = activity;
this.reinitOnPause = reinitOnPause;
schedExecutor = new ScheduledThreadPoolExecutor(SCHED_EX_POOLSIZE,
- r -> {
- Thread t = new Thread(r);
- t.setPriority(Thread.MIN_PRIORITY);
- return t;
- }, new RejectedExecutionHandler() {
- @Override
- public void rejectedExecution(Runnable r,
- ThreadPoolExecutor executor) {
- Log.w(TAG,
+ r -> {
+ Thread t = new Thread(r);
+ t.setPriority(Thread.MIN_PRIORITY);
+ return t;
+ }, new RejectedExecutionHandler() {
+ @Override
+ public void rejectedExecution(Runnable r,
+ ThreadPoolExecutor executor) {
+ Log.w(TAG,
"Rejected execution of runnable in schedExecutor");
- }
}
+ }
);
}
@@ -415,7 +414,6 @@ public abstract class PlaybackController {
Log.d(TAG, "status: " + status.toString());
switch (status) {
-
case ERROR:
postStatusMsg(R.string.player_error_msg);
handleError(MediaPlayer.MEDIA_ERROR_UNKNOWN);
@@ -575,37 +573,32 @@ public abstract class PlaybackController {
}
public OnClickListener newOnPlayButtonClickListener() {
- return new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (playbackService != null) {
- switch (status) {
- case PLAYING:
- playbackService.pause(true, reinitOnPause);
- break;
- case PAUSED:
- case PREPARED:
- playbackService.resume();
- break;
- case PREPARING:
- playbackService.setStartWhenPrepared(!playbackService
- .isStartWhenPrepared());
- if (reinitOnPause
- && playbackService.isStartWhenPrepared() == false) {
- playbackService.reinit();
- }
- break;
- case INITIALIZED:
- playbackService.setStartWhenPrepared(true);
- playbackService.prepare();
- break;
+ return v -> {
+ if (playbackService == null) {
+ Log.w(TAG, "Play/Pause button was pressed, but playbackservice was null!");
+ return;
+ }
+ switch (status) {
+ case PLAYING:
+ playbackService.pause(true, reinitOnPause);
+ break;
+ case PAUSED:
+ case PREPARED:
+ playbackService.resume();
+ break;
+ case PREPARING:
+ playbackService.setStartWhenPrepared(!playbackService
+ .isStartWhenPrepared());
+ if (reinitOnPause
+ && playbackService.isStartWhenPrepared() == false) {
+ playbackService.reinit();
}
- } else {
- Log.w(TAG,
- "Play/Pause button was pressed, but playbackservice was null!");
- }
+ break;
+ case INITIALIZED:
+ playbackService.setStartWhenPrepared(true);
+ playbackService.prepare();
+ break;
}
-
};
}
diff --git a/core/src/main/res/drawable-hdpi/ic_av_fast_forward_80dp.png b/core/src/main/res/drawable-hdpi/ic_av_fast_forward_80dp.png
new file mode 100755
index 000000000..a32968a19
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_av_fast_forward_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-hdpi/ic_av_rewind_80dp.png b/core/src/main/res/drawable-hdpi/ic_av_rewind_80dp.png
new file mode 100755
index 000000000..e39de4dcf
--- /dev/null
+++ b/core/src/main/res/drawable-hdpi/ic_av_rewind_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_av_fast_forward_80dp.png b/core/src/main/res/drawable-mdpi/ic_av_fast_forward_80dp.png
new file mode 100755
index 000000000..69b81c10d
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_av_fast_forward_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-mdpi/ic_av_rewind_80dp.png b/core/src/main/res/drawable-mdpi/ic_av_rewind_80dp.png
new file mode 100755
index 000000000..5355abfd6
--- /dev/null
+++ b/core/src/main/res/drawable-mdpi/ic_av_rewind_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_av_fast_forward_80dp.png b/core/src/main/res/drawable-xhdpi/ic_av_fast_forward_80dp.png
new file mode 100755
index 000000000..ed34e22a1
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_av_fast_forward_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xhdpi/ic_av_rewind_80dp.png b/core/src/main/res/drawable-xhdpi/ic_av_rewind_80dp.png
new file mode 100755
index 000000000..3dc7bf5cb
--- /dev/null
+++ b/core/src/main/res/drawable-xhdpi/ic_av_rewind_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_av_fast_forward_80dp.png b/core/src/main/res/drawable-xxhdpi/ic_av_fast_forward_80dp.png
new file mode 100755
index 000000000..f90617f45
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_av_fast_forward_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxhdpi/ic_av_rewind_80dp.png b/core/src/main/res/drawable-xxhdpi/ic_av_rewind_80dp.png
new file mode 100755
index 000000000..81709e0ae
--- /dev/null
+++ b/core/src/main/res/drawable-xxhdpi/ic_av_rewind_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_av_fast_forward_80dp.png b/core/src/main/res/drawable-xxxhdpi/ic_av_fast_forward_80dp.png
new file mode 100755
index 000000000..c9b68abf0
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_av_fast_forward_80dp.png
Binary files differ
diff --git a/core/src/main/res/drawable-xxxhdpi/ic_av_rewind_80dp.png b/core/src/main/res/drawable-xxxhdpi/ic_av_rewind_80dp.png
new file mode 100755
index 000000000..87b0756eb
--- /dev/null
+++ b/core/src/main/res/drawable-xxxhdpi/ic_av_rewind_80dp.png
Binary files differ
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 03c407a2c..e4097feed 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -187,7 +187,10 @@
<string name="download_error_io_error">IO Error</string>
<string name="download_error_request_error">Request Error</string>
<string name="download_error_db_access">Database Access Error</string>
- <string name="downloads_left">\u0020Downloads left</string>
+ <plurals name="downloads_left">
+ <item quantity="one">%d download left</item>
+ <item quantity="other">%d downloads left</item>
+ </plurals>
<string name="downloads_processing">Processing downloads</string>
<string name="download_notification_title">Downloading podcast data</string>
<string name="download_report_content">%1$d downloads succeeded, %2$d failed</string>
@@ -267,7 +270,7 @@
<!-- Variable Speed -->
<string name="download_plugin_label">Download Plugin</string>
<string name="no_playback_plugin_title">Plugin Not Installed</string>
- <string name="no_playback_plugin_or_sonic_msg">For variable speed playback to work, you have to install a third party library or enable the experimental Sonic player [Android 4.1+].\n\nTap \'Download Plugin\' to download a free plugin from the Play Store.\n\nAny problems found using this plugin are not the responsibility of AntennaPod and should be reported to the plugin owner.</string>
+ <string name="no_playback_plugin_or_sonic_msg">For variable speed playback to work, we recommend to enable the built-in Sonic mediaplayer [Android 4.1+].\n\nAlternatively, you can download the third party plugin <i>Prestissimo</i> from the Play Store.\nAny problems with Prestissimo are not the responsibility of AntennaPod and should be reported to the plugin owner.</string>
<string name="set_playback_speed_label">Playback Speeds</string>
<string name="enable_sonic">Enable Sonic</string>
@@ -283,7 +286,7 @@
<string name="services_label">Services</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Episode Cleanup</string>
- <string name="pref_episode_cleanup_summary">Episodes that aren\'t in the queue and aren\'t favorites should be eligible for removal if space is needed</string>
+ <string name="pref_episode_cleanup_summary">Episodes that aren\'t in the queue and aren\'t favorites should be eligible for removal if Auto Download needs space for new episodes</string>
<string name="pref_pauseOnDisconnect_sum">Pause playback when headphones or bluetooth are disconnected</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Resume playback when the headphones are reconnected</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Resume playback when bluetooth reconnects</string>
@@ -380,7 +383,7 @@
<string name="send_email">Send e-mail</string>
<string name="experimental_pref">Experimental</string>
<string name="pref_sonic_title">Sonic media player</string>
- <string name="pref_sonic_message">Use built-in sonic media player as a replacement for Prestissimo</string>
+ <string name="pref_sonic_message">Use built-in sonic media player as a replacement for Android\'s native mediaplayer and Prestissimo</string>
<string name="pref_current_value">Current value: %1$s</string>
<!-- Auto-Flattr dialog -->