summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java8
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBQueueCleanupAlgorithmTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java8
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java15
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java57
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java1
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java2
-rw-r--r--app/src/main/AndroidManifest.xml4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/PodcastApp.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/UpdateManager.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java85
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java27
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java98
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java22
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java28
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java16
-rw-r--r--app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java13
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java30
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java3
-rw-r--r--app/src/main/res/layout/feedinfo.xml11
-rw-r--r--app/src/main/res/layout/itemdescription_listitem.xml49
-rw-r--r--build.gradle2
-rw-r--r--changelog/de.md12
-rw-r--r--changelog/fr.md2
-rw-r--r--changelog/pt.md34
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java37
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java22
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java29
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java28
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java5
-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/DBTasks.java80
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java15
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java39
-rw-r--r--core/src/main/res/values-az/strings.xml5
-rw-r--r--core/src/main/res/values-ca/strings.xml13
-rw-r--r--core/src/main/res/values-cs-rCZ/strings.xml48
-rw-r--r--core/src/main/res/values-da/strings.xml5
-rw-r--r--core/src/main/res/values-de/strings.xml49
-rw-r--r--core/src/main/res/values-es-rES/strings.xml6
-rw-r--r--core/src/main/res/values-es/strings.xml77
-rw-r--r--core/src/main/res/values-fr/strings.xml47
-rw-r--r--core/src/main/res/values-hi-rIN/strings.xml5
-rw-r--r--core/src/main/res/values-it-rIT/strings.xml8
-rw-r--r--core/src/main/res/values-iw-rIL/strings.xml6
-rw-r--r--core/src/main/res/values-ja/strings.xml46
-rw-r--r--core/src/main/res/values-ko/strings.xml47
-rw-r--r--core/src/main/res/values-nb/strings.xml13
-rw-r--r--core/src/main/res/values-nl/strings.xml47
-rw-r--r--core/src/main/res/values-pl-rPL/strings.xml12
-rw-r--r--core/src/main/res/values-pt-rBR/strings.xml7
-rw-r--r--core/src/main/res/values-pt/strings.xml37
-rw-r--r--core/src/main/res/values-ro-rRO/strings.xml5
-rw-r--r--core/src/main/res/values-ru/strings.xml13
-rw-r--r--core/src/main/res/values-sv-rSE/strings.xml49
-rw-r--r--core/src/main/res/values-tr/strings.xml12
-rw-r--r--core/src/main/res/values-uk-rUA/strings.xml13
-rw-r--r--core/src/main/res/values-zh-rCN/strings.xml10
-rw-r--r--core/src/main/res/values/strings.xml2
-rw-r--r--description/pt.txt6
76 files changed, 877 insertions, 572 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java b/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java
index 5836bb699..ee454ce8a 100644
--- a/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java
@@ -162,7 +162,7 @@ public class FeedHandlerTest extends InstrumentationTestCase {
if (withImage) {
image = new FeedImage(0, "image", null, "http://example.com/picture", false);
}
- Feed feed = new Feed(0, new Date(), "title", "http://example.com", "This is the description",
+ Feed feed = new Feed(0, null, "title", "http://example.com", "This is the description",
"http://example.com/payment", "Daniel", "en", null, "http://example.com/feed", image, file.getAbsolutePath(),
"http://example.com/feed", true);
feed.setItems(new ArrayList<FeedItem>());
diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java
index d7a170c17..7862e986d 100644
--- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java
@@ -115,7 +115,7 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
private Playable writeTestPlayable(String downloadUrl, String fileUrl) {
final Context c = getInstrumentation().getTargetContext();
- Feed f = new Feed(0, new Date(), "f", "l", "d", null, null, null, null, "i", null, null, "l", false);
+ Feed f = new Feed(0, null, "f", "l", "d", null, null, null, null, "i", null, null, "l", false);
FeedPreferences prefs = new FeedPreferences(f.getId(), false, FeedPreferences.AutoDeleteAction.NO, null, null);
f.setPreferences(prefs);
f.setItems(new ArrayList<>());
diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
index f06d2f2a6..5c3d32960 100644
--- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
@@ -48,7 +48,7 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
private List<FeedItem> writeTestQueue(String pref) {
final Context c = getInstrumentation().getTargetContext();
final int NUM_ITEMS = 10;
- Feed f = new Feed(0, new Date(), "title", "link", "d", null, null, null, null, "id", null, "null", "url", false);
+ Feed f = new Feed(0, null, "title", "link", "d", null, null, null, null, "id", null, "null", "url", false);
f.setItems(new ArrayList<>());
for (int i = 0; i < NUM_ITEMS; i++) {
f.getItems().add(new FeedItem(0, pref + i, pref + i, "link", new Date(), FeedItem.PLAYED, f));
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java b/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java
index afdaeead0..7300df395 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java
@@ -87,7 +87,7 @@ public class DBCleanupTests extends InstrumentationTestCase {
public void testPerformAutoCleanupShouldDelete() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<>();
feed.setItems(items);
List<File> files = new ArrayList<>();
@@ -143,7 +143,7 @@ public class DBCleanupTests extends InstrumentationTestCase {
public void testPerformAutoCleanupHandleUnplayed() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<FeedItem>();
feed.setItems(items);
List<File> files = new ArrayList<File>();
@@ -159,7 +159,7 @@ public class DBCleanupTests extends InstrumentationTestCase {
public void testPerformAutoCleanupShouldNotDeleteBecauseInQueue() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<>();
feed.setItems(items);
List<File> files = new ArrayList<>();
@@ -198,7 +198,7 @@ public class DBCleanupTests extends InstrumentationTestCase {
public void testPerformAutoCleanupShouldNotDeleteBecauseFavorite() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<>();
feed.setItems(items);
List<File> files = new ArrayList<>();
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java
index 18a8d63d1..7205b42c4 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java
@@ -82,7 +82,7 @@ public class DBNullCleanupAlgorithmTest extends InstrumentationTestCase {
public void testPerformAutoCleanupShouldNotDelete() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<>();
feed.setItems(items);
List<File> files = new ArrayList<>();
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBQueueCleanupAlgorithmTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBQueueCleanupAlgorithmTest.java
index 890897f43..3bd508eaf 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBQueueCleanupAlgorithmTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBQueueCleanupAlgorithmTest.java
@@ -32,7 +32,7 @@ public class DBQueueCleanupAlgorithmTest extends DBCleanupTests {
public void testPerformAutoCleanupHandleUnplayed() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<>();
feed.setItems(items);
List<File> files = new ArrayList<>();
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
index 3988669ce..0fc3b1892 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
@@ -54,10 +54,10 @@ public class DBReaderTest extends InstrumentationTestCase {
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
- Feed feed1 = new Feed(0, new Date(), "A", "link", "d", null, null, null, "rss", "A", null, "", "", true);
- Feed feed2 = new Feed(0, new Date(), "b", "link", "d", null, null, null, "rss", "b", null, "", "", true);
- Feed feed3 = new Feed(0, new Date(), "C", "link", "d", null, null, null, "rss", "C", null, "", "", true);
- Feed feed4 = new Feed(0, new Date(), "d", "link", "d", null, null, null, "rss", "d", null, "", "", true);
+ Feed feed1 = new Feed(0, null, "A", "link", "d", null, null, null, "rss", "A", null, "", "", true);
+ Feed feed2 = new Feed(0, null, "b", "link", "d", null, null, null, "rss", "b", null, "", "", true);
+ Feed feed3 = new Feed(0, null, "C", "link", "d", null, null, null, "rss", "C", null, "", "", true);
+ Feed feed4 = new Feed(0, null, "d", "link", "d", null, null, null, "rss", "d", null, "", "", true);
adapter.setCompleteFeed(feed1);
adapter.setCompleteFeed(feed2);
adapter.setCompleteFeed(feed3);
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java
index 1894d6585..5b2393d45 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java
@@ -1,13 +1,9 @@
package de.test.antennapod.storage;
import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
import android.test.FlakyTest;
import android.test.InstrumentationTestCase;
-import java.io.File;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@@ -15,14 +11,11 @@ import java.util.List;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
-import static de.test.antennapod.storage.DBTestUtils.saveFeedlist;
-
/**
* Test class for DBTasks
*/
@@ -57,7 +50,7 @@ public class DBTasksTest extends InstrumentationTestCase {
public void testUpdateFeedNewFeed() {
final int NUM_ITEMS = 10;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
for (int i = 0; i < NUM_ITEMS; i++) {
feed.getItems().add(new FeedItem(0, "item " + i, "id " + i, "link " + i, new Date(), FeedItem.UNPLAYED, feed));
@@ -75,8 +68,8 @@ public class DBTasksTest extends InstrumentationTestCase {
/** Two feeds with the same title, but different download URLs should be treated as different feeds. */
public void testUpdateFeedSameTitle() {
- Feed feed1 = new Feed("url1", new Date(), "title");
- Feed feed2 = new Feed("url2", new Date(), "title");
+ Feed feed1 = new Feed("url1", null, "title");
+ Feed feed2 = new Feed("url2", null, "title");
feed1.setItems(new ArrayList<>());
feed2.setItems(new ArrayList<>());
@@ -91,7 +84,7 @@ public class DBTasksTest extends InstrumentationTestCase {
final int NUM_ITEMS_OLD = 10;
final int NUM_ITEMS_NEW = 10;
- final Feed feed = new Feed("url", new Date(), "title");
+ final Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
for (int i = 0; i < NUM_ITEMS_OLD; i++) {
feed.getItems().add(new FeedItem(0, "item " + i, "id " + i, "link " + i, new Date(i), FeedItem.PLAYED, feed));
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
index 0af8afa83..78b807710 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
@@ -44,7 +44,7 @@ public class DBTestUtils {
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
for (int i = 0; i < numFeeds; i++) {
- Feed f = new Feed(0, new Date(), "feed " + i, "link" + i, "descr", null, null,
+ Feed f = new Feed(0, null, "feed " + i, "link" + i, "descr", null, null,
null, null, "id" + i, null, null, "url" + i, false, new FlattrStatus(), false, null, null, false);
f.setItems(new ArrayList<>());
for (int j = 0; j < numItems; j++) {
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
index eaae9323c..0e1d19f7b 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
@@ -59,13 +59,14 @@ public class DBWriterTest extends InstrumentationTestCase {
adapter.close();
}
- public void testSetFeedMediaPlaybackInformation() throws IOException, ExecutionException, InterruptedException {
+ public void testSetFeedMediaPlaybackInformation()
+ throws IOException, ExecutionException, InterruptedException, TimeoutException {
final int POSITION = 50;
final long LAST_PLAYED_TIME = 1000;
final int PLAYED_DURATION = 60;
final int DURATION = 100;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<>();
feed.setItems(items);
FeedItem item = new FeedItem(0, "Item", "Item", "url", new Date(), FeedItem.PLAYED, feed);
@@ -73,13 +74,13 @@ public class DBWriterTest extends InstrumentationTestCase {
FeedMedia media = new FeedMedia(0, item, DURATION, 1, 1, "mime_type", "dummy path", "download_url", true, null, 0, 0);
item.setMedia(media);
- DBWriter.setFeedItem(item).get();
+ DBWriter.setFeedItem(item).get(TIMEOUT, TimeUnit.SECONDS);
media.setPosition(POSITION);
media.setLastPlayedTime(LAST_PLAYED_TIME);
media.setPlayedDuration(PLAYED_DURATION);
- DBWriter.setFeedMediaPlaybackInformation(item.getMedia()).get();
+ DBWriter.setFeedMediaPlaybackInformation(item.getMedia()).get(TIMEOUT, TimeUnit.SECONDS);
FeedItem itemFromDb = DBReader.getFeedItem(item.getId());
FeedMedia mediaFromDb = itemFromDb.getMedia();
@@ -90,12 +91,13 @@ public class DBWriterTest extends InstrumentationTestCase {
assertEquals(DURATION, mediaFromDb.getDuration());
}
- public void testDeleteFeedMediaOfItemFileExists() throws IOException, ExecutionException, InterruptedException {
+ public void testDeleteFeedMediaOfItemFileExists()
+ throws IOException, ExecutionException, InterruptedException, TimeoutException {
File dest = new File(getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER), "testFile");
assertTrue(dest.createNewFile());
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
List<FeedItem> items = new ArrayList<>();
feed.setItems(items);
FeedItem item = new FeedItem(0, "Item", "Item", "url", new Date(), FeedItem.PLAYED, feed);
@@ -112,7 +114,8 @@ public class DBWriterTest extends InstrumentationTestCase {
assertTrue(media.getId() != 0);
assertTrue(item.getId() != 0);
- DBWriter.deleteFeedMediaOfItem(getInstrumentation().getTargetContext(), media.getId()).get();
+ DBWriter.deleteFeedMediaOfItem(getInstrumentation().getTargetContext(), media.getId())
+ .get(TIMEOUT, TimeUnit.SECONDS);
media = DBReader.getFeedMedia(media.getId());
assertNotNull(media);
assertFalse(dest.exists());
@@ -124,7 +127,7 @@ public class DBWriterTest extends InstrumentationTestCase {
File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
assertNotNull(destFolder);
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
// create Feed image
@@ -197,7 +200,7 @@ public class DBWriterTest extends InstrumentationTestCase {
File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
assertNotNull(destFolder);
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
feed.setImage(null);
@@ -253,7 +256,7 @@ public class DBWriterTest extends InstrumentationTestCase {
File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
assertNotNull(destFolder);
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(null);
// create Feed image
@@ -290,7 +293,7 @@ public class DBWriterTest extends InstrumentationTestCase {
File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
assertNotNull(destFolder);
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
// create Feed image
@@ -342,7 +345,7 @@ public class DBWriterTest extends InstrumentationTestCase {
File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
assertNotNull(destFolder);
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
// create Feed image
@@ -400,7 +403,7 @@ public class DBWriterTest extends InstrumentationTestCase {
File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
assertNotNull(destFolder);
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
// create Feed image
@@ -472,7 +475,7 @@ public class DBWriterTest extends InstrumentationTestCase {
File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
assertNotNull(destFolder);
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<FeedItem>());
// create Feed image
@@ -528,7 +531,7 @@ public class DBWriterTest extends InstrumentationTestCase {
private FeedMedia playbackHistorySetup(Date playbackCompletionDate) {
final Context context = getInstrumentation().getTargetContext();
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<FeedItem>());
FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), FeedItem.PLAYED, feed);
FeedMedia media = new FeedMedia(0, item, 10, 0, 1, "mime", null, "url", false, playbackCompletionDate, 0, 0);
@@ -542,9 +545,10 @@ public class DBWriterTest extends InstrumentationTestCase {
return media;
}
- public void testAddItemToPlaybackHistoryNotPlayedYet() throws ExecutionException, InterruptedException {
+ public void testAddItemToPlaybackHistoryNotPlayedYet()
+ throws ExecutionException, InterruptedException, TimeoutException {
FeedMedia media = playbackHistorySetup(null);
- DBWriter.addItemToPlaybackHistory(media).get();
+ DBWriter.addItemToPlaybackHistory(media).get(TIMEOUT, TimeUnit.SECONDS);
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
media = DBReader.getFeedMedia(media.getId());
@@ -554,11 +558,12 @@ public class DBWriterTest extends InstrumentationTestCase {
assertNotNull(media.getPlaybackCompletionDate());
}
- public void testAddItemToPlaybackHistoryAlreadyPlayed() throws ExecutionException, InterruptedException {
+ public void testAddItemToPlaybackHistoryAlreadyPlayed()
+ throws ExecutionException, InterruptedException, TimeoutException {
final long OLD_DATE = 0;
FeedMedia media = playbackHistorySetup(new Date(OLD_DATE));
- DBWriter.addItemToPlaybackHistory(media).get();
+ DBWriter.addItemToPlaybackHistory(media).get(TIMEOUT, TimeUnit.SECONDS);
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
media = DBReader.getFeedMedia(media.getId());
@@ -571,7 +576,7 @@ public class DBWriterTest extends InstrumentationTestCase {
private Feed queueTestSetupMultipleItems(final int NUM_ITEMS) throws InterruptedException, ExecutionException, TimeoutException {
final Context context = getInstrumentation().getTargetContext();
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
for (int i = 0; i < NUM_ITEMS; i++) {
FeedItem item = new FeedItem(0, "title " + i, "id " + i, "link " + i, new Date(), FeedItem.PLAYED, feed);
@@ -598,7 +603,7 @@ public class DBWriterTest extends InstrumentationTestCase {
public void testAddQueueItemSingleItem() throws InterruptedException, ExecutionException, TimeoutException {
final Context context = getInstrumentation().getTargetContext();
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), FeedItem.PLAYED, feed);
feed.getItems().add(item);
@@ -622,7 +627,7 @@ public class DBWriterTest extends InstrumentationTestCase {
public void testAddQueueItemSingleItemAlreadyInQueue() throws InterruptedException, ExecutionException, TimeoutException {
final Context context = getInstrumentation().getTargetContext();
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), FeedItem.PLAYED, feed);
feed.getItems().add(item);
@@ -688,7 +693,7 @@ public class DBWriterTest extends InstrumentationTestCase {
public void testRemoveQueueItem() throws InterruptedException, ExecutionException, TimeoutException {
final int NUM_ITEMS = 10;
final Context context = getInstrumentation().getTargetContext();
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
for (int i = 0; i < NUM_ITEMS; i++) {
FeedItem item = new FeedItem(0, "title " + i, "id " + i, "link " + i, new Date(), FeedItem.PLAYED, feed);
@@ -733,7 +738,7 @@ public class DBWriterTest extends InstrumentationTestCase {
public void testMoveQueueItem() throws InterruptedException, ExecutionException, TimeoutException {
final int NUM_ITEMS = 10;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
for (int i = 0; i < NUM_ITEMS; i++) {
FeedItem item = new FeedItem(0, "title " + i, "id " + i, "link " + i, new Date(), FeedItem.PLAYED, feed);
@@ -779,7 +784,7 @@ public class DBWriterTest extends InstrumentationTestCase {
public void testMarkFeedRead() throws InterruptedException, ExecutionException, TimeoutException {
final int NUM_ITEMS = 10;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<FeedItem>());
for (int i = 0; i < NUM_ITEMS; i++) {
FeedItem item = new FeedItem(0, "title " + i, "id " + i, "link " + i, new Date(), FeedItem.UNPLAYED, feed);
@@ -805,7 +810,7 @@ public class DBWriterTest extends InstrumentationTestCase {
public void testMarkAllItemsReadSameFeed() throws InterruptedException, ExecutionException, TimeoutException {
final int NUM_ITEMS = 10;
- Feed feed = new Feed("url", new Date(), "title");
+ Feed feed = new Feed("url", null, "title");
feed.setItems(new ArrayList<>());
for (int i = 0; i < NUM_ITEMS; i++) {
FeedItem item = new FeedItem(0, "title " + i, "id " + i, "link " + i, new Date(), FeedItem.UNPLAYED, feed);
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
index e456f3891..4e214cf81 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
@@ -142,6 +142,7 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
return ((MainActivity) solo.getCurrentActivity()).getSupportActionBar().getTitle().toString();
}
+ @SuppressWarnings("unchecked")
@FlakyTest(tolerance = 3)
public void testGoToPreferences() {
openNavDrawer();
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
index 13abbb1cc..432d4a4e6 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
@@ -143,7 +143,7 @@ public class UITestUtils {
for (int i = 0; i < NUM_FEEDS; i++) {
File bitmapFile = newBitmapFile("image" + i);
FeedImage image = new FeedImage(0, "image " + i, null, hostFile(bitmapFile), false);
- Feed feed = new Feed(0, new Date(), "Title " + i, "http://example.com/" + i, "Description of feed " + i,
+ Feed feed = new Feed(0, null, "Title " + i, "http://example.com/" + i, "Description of feed " + i,
"http://example.com/pay/feed" + i, "author " + i, "en", Feed.TYPE_RSS2, "feed" + i, image, null,
"http://example.com/feed/src/" + i, false);
image.setOwner(feed);
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 287c17978..9d7bbee67 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.danoeh.antennapod"
- android:versionCode="1050002"
- android:versionName="1.5.0.2">
+ android:versionCode="1050004"
+ android:versionName="1.5.0.4">
<!--
Version code schema:
"1.2.3-SNAPSHOT" -> 1020300
diff --git a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
index c1d4bc4fd..829a49a15 100644
--- a/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
+++ b/app/src/main/java/de/danoeh/antennapod/PodcastApp.java
@@ -57,8 +57,8 @@ public class PodcastApp extends Application {
singleton = this;
PodDBAdapter.init(this);
- UpdateManager.init(this);
UserPreferences.init(this);
+ UpdateManager.init(this);
PlaybackPreferences.init(this);
NetworkUtils.init(this);
EventDistributor.getInstance();
diff --git a/app/src/main/java/de/danoeh/antennapod/UpdateManager.java b/app/src/main/java/de/danoeh/antennapod/UpdateManager.java
index b1d7fffc8..0b3c43381 100644
--- a/app/src/main/java/de/danoeh/antennapod/UpdateManager.java
+++ b/app/src/main/java/de/danoeh/antennapod/UpdateManager.java
@@ -5,14 +5,18 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.os.Build;
import android.util.Log;
+import org.antennapod.audio.MediaPlayer;
+
import java.io.File;
import java.util.List;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedImage;
import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
@@ -83,6 +87,11 @@ public class UpdateManager {
}
}.start();
}
+ if(oldVersionCode < 1050004) {
+ if(MediaPlayer.isPrestoLibraryInstalled(context) && Build.VERSION.SDK_INT >= 16) {
+ UserPreferences.enableSonic(true);
+ }
+ }
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
index 50d557735..12bae2f51 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
@@ -6,11 +6,11 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Build;
+import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
-import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
@@ -28,6 +28,7 @@ import android.widget.ListView;
import com.viewpagerindicator.CirclePageIndicator;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.ChaptersListAdapter;
@@ -83,6 +84,8 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
AddFeedFragment.TAG
};
+ private AtomicBoolean isSetup = new AtomicBoolean(false);
+
private DrawerLayout drawerLayout;
private NavListAdapter navAdapter;
private ListView navList;
@@ -108,6 +111,16 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+ // don't risk creating memory leaks
+ navAdapter = null;
+ drawerToggle = null;
+ mPager = null;
+ mPagerAdapter = null;
+ }
+
+ @Override
protected void chooseTheme() {
setTheme(UserPreferences.getNoTitleTheme());
}
@@ -116,7 +129,6 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
if(mPager == null) {
return;
}
-
Log.d(TAG, "Saving preferences");
SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
prefs.edit()
@@ -156,10 +168,9 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
}
if(mPagerAdapter != null && controller != null && controller.getMedia() != media) {
media = controller.getMedia();
- mPagerAdapter.notifyDataSetChanged();
+ mPagerAdapter.onMediaChanged(media);
}
-
EventDistributor.getInstance().register(contentUpdate);
loadData();
}
@@ -193,6 +204,9 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
@Override
protected void setupGUI() {
+ if(isSetup.getAndSet(true)) {
+ return;
+ }
super.setupGUI();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
@@ -242,13 +256,11 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
});
mPager = (ViewPager) findViewById(R.id.pager);
- if(mPager.getAdapter() == null) {
- mPagerAdapter = new AudioplayerPagerAdapter(getSupportFragmentManager());
- mPager.setAdapter(mPagerAdapter);
- CirclePageIndicator pageIndicator = (CirclePageIndicator) findViewById(R.id.page_indicator);
- pageIndicator.setViewPager(mPager);
- loadLastFragment();
- }
+ mPagerAdapter = new AudioplayerPagerAdapter(getSupportFragmentManager());
+ mPager.setAdapter(mPagerAdapter);
+ CirclePageIndicator pageIndicator = (CirclePageIndicator) findViewById(R.id.page_indicator);
+ pageIndicator.setViewPager(mPager);
+ loadLastFragment();
mPager.onSaveInstanceState();
}
@@ -265,16 +277,18 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
}
if(controller.getMedia() != media) {
media = controller.getMedia();
- mPagerAdapter.notifyDataSetChanged();
+ mPagerAdapter.onMediaChanged(media);
}
return true;
}
public void notifyMediaPositionChanged() {
- ListFragment chapterFragment = (ListFragment) mPagerAdapter.getItem(POS_CHAPTERS);
- ChaptersListAdapter adapter = (ChaptersListAdapter) chapterFragment.getListAdapter();
- if(adapter != null) {
- adapter.notifyDataSetChanged();
+ ChaptersFragment chaptersFragment = mPagerAdapter.getChaptersFragment();
+ if(chaptersFragment != null) {
+ ChaptersListAdapter adapter = (ChaptersListAdapter) chaptersFragment.getListAdapter();
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
+ }
}
}
@@ -510,7 +524,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
};
public interface AudioplayerContentFragment {
- void onDataSetChanged(Playable media);
+ void onMediaChanged(Playable media);
}
private class AudioplayerPagerAdapter extends FragmentStatePagerAdapter {
@@ -519,22 +533,51 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
super(fm);
}
+ private CoverFragment coverFragment;
+ private ItemDescriptionFragment itemDescriptionFragment;
+ private ChaptersFragment chaptersFragment;
+
+ public void onMediaChanged(Playable media) {
+ if(coverFragment != null) {
+ coverFragment.onMediaChanged(media);
+ }
+ if(itemDescriptionFragment != null) {
+ itemDescriptionFragment.onMediaChanged(media);
+ }
+ if(chaptersFragment != null) {
+ chaptersFragment.onMediaChanged(media);
+ }
+ }
+
+ @Nullable
+ public ChaptersFragment getChaptersFragment() {
+ return chaptersFragment;
+ }
+
@Override
public Fragment getItem(int position) {
Log.d(TAG, "getItem(" + position + ")");
switch (position) {
case POS_COVER:
- return CoverFragment.newInstance(media);
+ if(coverFragment == null) {
+ coverFragment = CoverFragment.newInstance(media);
+ }
+ return coverFragment;
case POS_DESCR:
- return ItemDescriptionFragment.newInstance(media, true, true);
+ if(itemDescriptionFragment == null) {
+ itemDescriptionFragment = ItemDescriptionFragment.newInstance(media, true, true);
+ }
+ return itemDescriptionFragment;
case POS_CHAPTERS:
- return ChaptersFragment.newInstance(media, controller);
+ if(chaptersFragment == null) {
+ chaptersFragment = ChaptersFragment.newInstance(media, controller);
+ }
+ return chaptersFragment;
default:
return null;
}
}
-
@Override
public int getCount() {
return NUM_CONTENT_FRAGMENTS;
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java
index dedc3d9fd..9116decb0 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java
@@ -18,7 +18,6 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.CheckBox;
-import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioButton;
@@ -67,6 +66,7 @@ public class FeedInfoActivity extends ActionBarActivity {
private RadioButton rdoFilterInclude;
private RadioButton rdoFilterExclude;
private CheckBox cbxAutoDownload;
+ private CheckBox cbxKeepUpdated;
private Spinner spnAutoDelete;
private boolean filterInclude = true;
@@ -106,6 +106,7 @@ public class FeedInfoActivity extends ActionBarActivity {
txtvAuthor = (TextView) findViewById(R.id.txtvAuthor);
txtvUrl = (TextView) findViewById(R.id.txtvUrl);
cbxAutoDownload = (CheckBox) findViewById(R.id.cbxAutoDownload);
+ cbxKeepUpdated = (CheckBox) findViewById(R.id.cbxKeepUpdated);
spnAutoDelete = (Spinner) findViewById(R.id.spnAutoDelete);
etxtUsername = (EditText) findViewById(R.id.etxtUsername);
etxtPassword = (EditText) findViewById(R.id.etxtPassword);
@@ -168,16 +169,18 @@ public class FeedInfoActivity extends ActionBarActivity {
cbxAutoDownload.setEnabled(UserPreferences.isEnableAutodownload());
cbxAutoDownload.setChecked(prefs.getAutoDownload());
- cbxAutoDownload.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- feed.getPreferences().setAutoDownload(checked);
- feed.savePreferences(FeedInfoActivity.this);
- updateAutoDownloadSettings();
- ApplyToEpisodesDialog dialog = new ApplyToEpisodesDialog(FeedInfoActivity.this,
- feed, checked);
- dialog.createNewDialog().show();
- }
+ cbxAutoDownload.setOnCheckedChangeListener((compoundButton, checked) -> {
+ feed.getPreferences().setAutoDownload(checked);
+ feed.savePreferences(FeedInfoActivity.this);
+ updateAutoDownloadSettings();
+ ApplyToEpisodesDialog dialog = new ApplyToEpisodesDialog(FeedInfoActivity.this,
+ feed, checked);
+ dialog.createNewDialog().show();
+ });
+ cbxKeepUpdated.setChecked(prefs.getKeepUpdated());
+ cbxKeepUpdated.setOnCheckedChangeListener((compoundButton, checked) -> {
+ feed.getPreferences().setKeepUpdated(checked);
+ feed.savePreferences(FeedInfoActivity.this);
});
spnAutoDelete.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
@@ -221,10 +224,12 @@ public class FeedInfoActivity extends ActionBarActivity {
etxtFilterText.setText(filter.getIncludeFilter());
rdoFilterInclude.setChecked(true);
rdoFilterExclude.setChecked(false);
+ filterInclude = true;
} else if (filter.excludeOnly()) {
etxtFilterText.setText(filter.getExcludeFilter());
rdoFilterInclude.setChecked(false);
rdoFilterExclude.setChecked(true);
+ filterInclude = false;
} else {
Log.d(TAG, "No filter set");
rdoFilterInclude.setChecked(false);
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
index 8c2b7f838..c7426c006 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
@@ -35,7 +35,6 @@ import org.jsoup.nodes.Document;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -258,7 +257,7 @@ public class OnlineFeedViewActivity extends ActionBarActivity {
private void startFeedDownload(String url, String username, String password) {
Log.d(TAG, "Starting feed download");
url = URLChecker.prepareURL(url);
- feed = new Feed(url, new Date(0));
+ feed = new Feed(url, null);
if (username != null && password != null) {
feed.setPreferences(new FeedPreferences(0, false, FeedPreferences.AutoDeleteAction.GLOBAL, username, password));
}
@@ -410,7 +409,7 @@ public class OnlineFeedViewActivity extends ActionBarActivity {
subscribeButton.setOnClickListener(v -> {
try {
- Feed f = new Feed(selectedDownloadUrl, new Date(0), feed.getTitle());
+ Feed f = new Feed(selectedDownloadUrl, null, feed.getTitle());
f.setPreferences(feed.getPreferences());
this.feed = f;
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java
index d974e0e1b..46dabec12 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportBaseActivity.java
@@ -1,16 +1,27 @@
package de.danoeh.antennapod.activity;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Environment;
+import android.support.v4.app.ActivityCompat;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
-import de.danoeh.antennapod.BuildConfig;
-import de.danoeh.antennapod.asynctask.OpmlFeedQueuer;
-import de.danoeh.antennapod.asynctask.OpmlImportWorker;
-import de.danoeh.antennapod.core.opml.OpmlElement;
+import com.afollestad.materialdialogs.MaterialDialog;
+
+import org.apache.commons.lang3.ArrayUtils;
+
+import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.asynctask.OpmlFeedQueuer;
+import de.danoeh.antennapod.asynctask.OpmlImportWorker;
+import de.danoeh.antennapod.core.opml.OpmlElement;
+import de.danoeh.antennapod.core.util.LangUtils;
+
/**
* Base activity for Opml Import - e.g. with code what to do afterwards
* */
@@ -19,22 +30,23 @@ public class OpmlImportBaseActivity extends ActionBarActivity {
private static final String TAG = "OpmlImportBaseActivity";
private OpmlImportWorker importWorker;
- /**
+ private static final int PERMISSION_REQUEST_READ_EXTERNAL_STORAGE = 5;
+ private Uri uri;
+
+ /**
* Handles the choices made by the user in the OpmlFeedChooserActivity and
* starts the OpmlFeedQueuer if necessary.
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Received result");
+ Log.d(TAG, "Received result");
if (resultCode == RESULT_CANCELED) {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Activity was cancelled");
- if (finishWhenCanceled())
- finish();
+ Log.d(TAG, "Activity was cancelled");
+ if (finishWhenCanceled()) {
+ finish();
+ }
} else {
- int[] selected = data
- .getIntArrayExtra(OpmlFeedChooserActivity.EXTRA_SELECTED_ITEMS);
+ int[] selected = data.getIntArrayExtra(OpmlFeedChooserActivity.EXTRA_SELECTED_ITEMS);
if (selected != null && selected.length > 0) {
OpmlFeedQueuer queuer = new OpmlFeedQueuer(this, selected) {
@@ -50,35 +62,75 @@ public class OpmlImportBaseActivity extends ActionBarActivity {
};
queuer.executeAsync();
} else {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "No items were selected");
+ Log.d(TAG, "No items were selected");
}
}
}
- /** Starts the import process. */
- protected void startImport(Reader reader) {
+ protected void importUri(Uri uri) {
+ this.uri = uri;
+ if(uri.toString().contains(Environment.getExternalStorageDirectory().toString())) {
+ int permission = ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE);
+ if (permission != PackageManager.PERMISSION_GRANTED) {
+ requestPermission();
+ return;
+ }
+ }
+ startImport();
+ }
+
+ private void requestPermission() {
+ String[] permissions = { android.Manifest.permission.READ_EXTERNAL_STORAGE };
+ ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_READ_EXTERNAL_STORAGE);
+ }
- if (reader != null) {
- importWorker = new OpmlImportWorker(this, reader) {
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ String[] permissions,
+ int[] grantResults) {
+ if (requestCode != PERMISSION_REQUEST_READ_EXTERNAL_STORAGE) {
+ return;
+ }
+ if (grantResults.length > 0 && ArrayUtils.contains(grantResults, PackageManager.PERMISSION_GRANTED)) {
+ startImport();
+ } else {
+ new MaterialDialog.Builder(this)
+ .content(R.string.opml_import_ask_read_permission)
+ .positiveText(android.R.string.ok)
+ .negativeText(R.string.cancel_label)
+ .onPositive((dialog, which) -> requestPermission())
+ .onNegative((dialog, which) -> finish())
+ .show();
+ }
+ }
+
+ /** Starts the import process. */
+ protected void startImport() {
+ try {
+ Reader mReader = new InputStreamReader(getContentResolver().openInputStream(uri), LangUtils.UTF_8);
+ importWorker = new OpmlImportWorker(this, mReader) {
@Override
protected void onPostExecute(ArrayList<OpmlElement> result) {
super.onPostExecute(result);
if (result != null) {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Parsing was successful");
+ Log.d(TAG, "Parsing was successful");
OpmlImportHolder.setReadElements(result);
startActivityForResult(new Intent(
OpmlImportBaseActivity.this,
OpmlFeedChooserActivity.class), 0);
} else {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Parser error occurred");
+ Log.d(TAG, "Parser error occurred");
}
}
};
importWorker.executeAsync();
+ } catch (Exception e) {
+ Log.d(TAG, Log.getStackTraceString(e));
+ new MaterialDialog.Builder(this)
+ .content("Cannot open OPML file: " + e.getMessage())
+ .positiveText(android.R.string.ok)
+ .show();
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java
index 46e5f0e8e..ab4b0d0ee 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java
@@ -2,25 +2,14 @@ package de.danoeh.antennapod.activity;
import android.net.Uri;
import android.os.Bundle;
-import android.support.v7.app.AlertDialog;
-import android.util.Log;
import de.danoeh.antennapod.core.preferences.UserPreferences;
-import de.danoeh.antennapod.core.util.LangUtils;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.URL;
/** Lets the user start the OPML-import process. */
public class OpmlImportFromIntentActivity extends OpmlImportBaseActivity {
private static final String TAG = "OpmlImportFromIntentAct";
-
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(UserPreferences.getTheme());
@@ -28,15 +17,8 @@ public class OpmlImportFromIntentActivity extends OpmlImportBaseActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- try {
- Uri uri = getIntent().getData();
-
- Reader mReader = new InputStreamReader(getContentResolver().openInputStream(uri), LangUtils.UTF_8);
- startImport(mReader);
- } catch (Exception e) {
- new AlertDialog.Builder(this).setMessage("Cannot open XML - Reason: " + e.getMessage()).show();
- }
-
+ Uri uri = getIntent().getData();
+ importUri(uri);
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java
index 6e3991739..15d97cc2c 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java
@@ -11,16 +11,9 @@ import android.view.View;
import android.widget.Button;
import android.widget.TextView;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.util.IntentUtils;
-import de.danoeh.antennapod.core.util.LangUtils;
import de.danoeh.antennapod.core.util.StorageUtils;
/**
@@ -114,19 +107,6 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
}
}
- private void startImport(File file) {
- Reader mReader = null;
- try {
- mReader = new InputStreamReader(new FileInputStream(file),
- LangUtils.UTF_8);
- Log.d(TAG, "Parsing " + file.toString());
- startImport(mReader);
- } catch (FileNotFoundException e) {
- Log.d(TAG, "File not found which really should be there");
- // this should never happen as it is a file we have just chosen
- }
- }
-
/*
* Creates an implicit intent to launch a file manager which lets
* the user choose a specific OPML-file to import from.
@@ -155,13 +135,7 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == CHOOSE_OPML_FILE) {
Uri uri = data.getData();
-
- try {
- Reader mReader = new InputStreamReader(getContentResolver().openInputStream(uri), LangUtils.UTF_8);
- startImport(mReader);
- } catch (FileNotFoundException e) {
- Log.d(TAG, "File not found");
- }
+ importUri(uri);
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
index fbea102eb..ee459dbc6 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
@@ -20,6 +20,7 @@ import android.widget.ProgressBar;
import android.widget.SeekBar;
import java.lang.ref.WeakReference;
+import java.util.concurrent.atomic.AtomicBoolean;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.feed.MediaType;
@@ -43,6 +44,8 @@ public class VideoplayerActivity extends MediaplayerActivity {
private VideoControlsHider videoControlsHider = new VideoControlsHider(this);
+ private AtomicBoolean isSetup = new AtomicBoolean(false);
+
private LinearLayout controls;
private LinearLayout videoOverlay;
private AspectRatioVideoView videoview;
@@ -115,6 +118,9 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
protected void setupGUI() {
+ if(isSetup.getAndSet(true)) {
+ return;
+ }
super.setupGUI();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
controls = (LinearLayout) findViewById(R.id.controls);
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java
index 582538fb8..893c92907 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java
@@ -13,8 +13,6 @@ import android.widget.Toast;
import com.joanzapata.iconify.Iconify;
import com.joanzapata.iconify.widget.IconButton;
-import java.util.Date;
-
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.core.feed.Feed;
@@ -123,9 +121,8 @@ public class DownloadLogAdapter extends BaseAdapter {
if(holder.typeId == Feed.FEEDFILETYPE_FEED) {
Feed feed = DBReader.getFeed(holder.id);
if (feed != null) {
- feed.setLastUpdate(new Date(0)); // force refresh
try {
- DBTasks.refreshFeed(context, feed);
+ DBTasks.forceRefreshFeed(context, feed);
} catch (DownloadRequestException e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java
index 9011c8b02..5b205e91f 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java
@@ -6,11 +6,13 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.feed.FeedItem;
import java.util.List;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.util.DateUtils;
+
/**
* List adapter for showing a list of FeedItems with their title and description.
*/
@@ -33,6 +35,7 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter<FeedItem> {
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.itemdescription_listitem, parent, false);
holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
+ holder.pubDate = (TextView) convertView.findViewById(R.id.txtvPubDate);
holder.description = (TextView) convertView.findViewById(R.id.txtvDescription);
convertView.setTag(holder);
@@ -41,15 +44,20 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter<FeedItem> {
}
holder.title.setText(item.getTitle());
+ holder.pubDate.setText(DateUtils.formatAbbrev(getContext(), item.getPubDate()));
if (item.getDescription() != null) {
- holder.description.setText(item.getDescription());
+ String description = item.getDescription()
+ .replaceAll("\n", " ")
+ .replaceAll("\\s+", " ")
+ .trim();
+ holder.description.setText(description);
}
-
return convertView;
}
static class Holder {
TextView title;
+ TextView pubDate;
TextView description;
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java
index 00327bce0..cc27b6c9d 100644
--- a/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java
+++ b/app/src/main/java/de/danoeh/antennapod/asynctask/OpmlFeedQueuer.java
@@ -6,7 +6,6 @@ import android.content.Context;
import android.os.AsyncTask;
import java.util.Arrays;
-import java.util.Date;
import de.danoeh.antennapod.activity.OpmlImportHolder;
import de.danoeh.antennapod.core.R;
@@ -47,7 +46,7 @@ public class OpmlFeedQueuer extends AsyncTask<Void, Void, Void> {
for (int idx = 0; idx < selection.length; idx++) {
OpmlElement element = OpmlImportHolder.getReadElements().get(
selection[idx]);
- Feed feed = new Feed(element.getXmlUrl(), new Date(0),
+ Feed feed = new Feed(element.getXmlUrl(), null,
element.getText());
try {
requester.downloadFeed(context.getApplicationContext(), feed);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
index abc9f3d22..96abdd835 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
@@ -55,11 +55,20 @@ public class ChaptersFragment extends ListFragment implements AudioplayerContent
}
}
+ public void onDestroy() {
+ super.onDestroy();
+ adapter = null;
+ }
+
@Override
- public void onDataSetChanged(Playable media) {
+ public void onMediaChanged(Playable media) {
+ if(this.media == media || adapter == null) {
+ return;
+ }
+ this.media = media;
adapter.setMedia(media);
adapter.notifyDataSetChanged();
- if(media.getChapters() == null) {
+ if(media == null || media.getChapters() == null || media.getChapters().size() == 0) {
setEmptyText(getString(R.string.no_items_label));
} else {
setEmptyText(null);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
index a3e9723ea..931d14924 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
@@ -19,8 +19,8 @@ import de.danoeh.antennapod.core.util.playback.Playable;
/**
* Displays the cover and the title of a FeedItem.
*/
-public class CoverFragment extends Fragment implements
- AudioplayerContentFragment {
+public class CoverFragment extends Fragment implements AudioplayerContentFragment {
+
private static final String TAG = "CoverFragment";
private static final String ARG_PLAYABLE = "arg.playable";
@@ -71,14 +71,12 @@ public class CoverFragment extends Fragment implements
Log.d(TAG, "episode title: " + media.getEpisodeTitle());
txtvPodcastTitle.setText(media.getFeedTitle());
txtvEpisodeTitle.setText(media.getEpisodeTitle());
- imgvCover.post(() -> {
- Glide.with(this)
- .load(media.getImageUri())
- .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
- .dontAnimate()
- .fitCenter()
- .into(imgvCover);
- });
+ Glide.with(this)
+ .load(media.getImageUri())
+ .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
+ .dontAnimate()
+ .fitCenter()
+ .into(imgvCover);
} else {
Log.w(TAG, "loadMediaInfo was called while media was null");
}
@@ -97,7 +95,17 @@ public class CoverFragment extends Fragment implements
}
@Override
- public void onDataSetChanged(Playable media) {
+ public void onDestroy() {
+ super.onDestroy();
+ // prevent memory leaks
+ root = null;
+ }
+
+ @Override
+ public void onMediaChanged(Playable media) {
+ if(this.media == media) {
+ return;
+ }
this.media = media;
loadMediaInfo();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
index 9790e66b3..4c723e5ff 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
@@ -21,7 +21,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.webkit.WebSettings.LayoutAlgorithm;
+import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
@@ -67,7 +67,6 @@ public class ItemDescriptionFragment extends Fragment implements AudioplayerCont
private ShownotesProvider shownotesProvider;
private Playable media;
-
private Subscription webViewLoader;
/**
@@ -124,7 +123,7 @@ public class ItemDescriptionFragment extends Fragment implements AudioplayerCont
ta.recycle();
webvDescription.setBackgroundColor(backgroundColor);
webvDescription.getSettings().setUseWideViewPort(false);
- webvDescription.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
+ webvDescription.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webvDescription.getSettings().setLoadWithOverviewMode(true);
webvDescription.setOnLongClickListener(webViewLongClickListener);
webvDescription.setWebViewClient(new WebViewClient() {
@@ -384,7 +383,10 @@ public class ItemDescriptionFragment extends Fragment implements AudioplayerCont
}
@Override
- public void onDataSetChanged(Playable media) {
+ public void onMediaChanged(Playable media) {
+ if(this.media == media) {
+ return;
+ }
this.media = media;
this.shownotesProvider = media;
load();
diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
index 830e9d419..38030f4ea 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
@@ -63,10 +63,10 @@ public class FeedMenuHandler {
final Feed selectedFeed) throws DownloadRequestException {
switch (item.getItemId()) {
case R.id.refresh_item:
- DBTasks.refreshFeed(context, selectedFeed);
+ DBTasks.forceRefreshFeed(context, selectedFeed);
break;
case R.id.refresh_complete_item:
- DBTasks.refreshCompleteFeed(context, selectedFeed);
+ DBTasks.forceRefreshCompleteFeed(context, selectedFeed);
break;
case R.id.filter_items:
showFilterDialog(context, selectedFeed);
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
index 083ac5202..785944768 100644
--- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
+++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
@@ -397,12 +397,11 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
ui.findPreference("prefSendCrashReport").setOnPreferenceClickListener(preference -> {
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
- String to[] = { "Martin.Fietz@gmail.com" };
- emailIntent .putExtra(Intent.EXTRA_EMAIL, to);
+ emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"Martin.Fietz@gmail.com"});
+ emailIntent.putExtra(Intent.EXTRA_SUBJECT, "AntennaPod Crash Report");
+ emailIntent.putExtra(Intent.EXTRA_TEXT, "Please describe what you were doing when the app crashed");
// the attachment
- emailIntent .putExtra(Intent.EXTRA_STREAM, Uri.fromFile(CrashReportWriter.getFile()));
- // the mail subject
- emailIntent .putExtra(Intent.EXTRA_SUBJECT, "AntennaPod Crash Report");
+ emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(CrashReportWriter.getFile()));
String intentTitle = ui.getActivity().getString(R.string.send_email);
ui.getActivity().startActivity(Intent.createChooser(emailIntent, intentTitle));
return true;
diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java
index ef6330f82..8201fe3e2 100644
--- a/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java
+++ b/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java
@@ -8,7 +8,6 @@ import android.util.Log;
import android.widget.Toast;
import java.util.Arrays;
-import java.util.Date;
import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
@@ -35,7 +34,7 @@ public class SPAReceiver extends BroadcastReceiver{
if (feedUrls != null) {
if (BuildConfig.DEBUG) Log.d(TAG, "Received feeds list: " + Arrays.toString(feedUrls));
for (String url : feedUrls) {
- Feed f = new Feed(url, new Date(0));
+ Feed f = new Feed(url, null);
try {
DownloadRequester.getInstance().downloadFeed(context, f);
} catch (DownloadRequestException e) {
diff --git a/app/src/main/res/layout/feedinfo.xml b/app/src/main/res/layout/feedinfo.xml
index efc367c8b..4b545e3cc 100644
--- a/app/src/main/res/layout/feedinfo.xml
+++ b/app/src/main/res/layout/feedinfo.xml
@@ -181,6 +181,17 @@
android:clickable="true" />
</android.support.v7.widget.GridLayout>
+ <CheckBox
+ android:id="@+id/cbxKeepUpdated"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:text="@string/keep_updated"
+ android:enabled="true"
+ android:textColor="?android:attr/textColorPrimary"
+ tools:background="@android:color/holo_red_light"
+ android:checked="true" />
+
<TextView
android:id="@+id/txtvAuthentication"
android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/itemdescription_listitem.xml b/app/src/main/res/layout/itemdescription_listitem.xml
index ca8f974bf..51bc9a5eb 100644
--- a/app/src/main/res/layout/itemdescription_listitem.xml
+++ b/app/src/main/res/layout/itemdescription_listitem.xml
@@ -1,30 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:paddingBottom="8dp"
tools:background="@android:color/holo_orange_light">
<TextView
+ android:id="@+id/txtvPubDate"
+ style="@android:style/TextAppearance.Small"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentTop="true"
+ android:layout_marginLeft="8dp"
+ android:textSize="14sp"
+ android:textColor="?android:textColorSecondary"
+ android:ellipsize="end"
+ android:lines="1"
+ tools:text="22 Jan 2016"
+ tools:background="@android:color/holo_green_dark" />
+
+ <TextView
android:id="@+id/txtvTitle"
- style="@style/AntennaPod.TextView.ListItemPrimaryTitle"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_margin="16dp"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:layout_toLeftOf="@id/txtvPubDate"
+ android:textSize="16sp"
+ android:textColor="?android:attr/textColorPrimary"
+ android:ellipsize="end"
+ android:maxLines="2"
tools:text="Feed item title"
tools:background="@android:color/holo_green_dark" />
<TextView
android:id="@+id/txtvDescription"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp"
- android:lines="3"
+ android:layout_below="@id/txtvTitle"
+ android:textSize="14sp"
+ android:textColor="?android:attr/textColorSecondary"
+ android:ellipsize="end"
+ android:maxLines="3"
tools:text="Feed item description"
tools:background="@android:color/holo_green_dark" />
-</LinearLayout>
+
+</RelativeLayout>
diff --git a/build.gradle b/build.gradle
index b4609233f..521a691ac 100644
--- a/build.gradle
+++ b/build.gradle
@@ -57,7 +57,7 @@ project.ext {
rxJavaVersion = "1.1.0"
rxJavaRulesVersion = "1.1.0.0"
- audioPlayerVersion = "v1.0.10"
+ audioPlayerVersion = "v1.0.11"
}
task wrapper(type: Wrapper) {
diff --git a/changelog/de.md b/changelog/de.md
index 52307f222..766848877 100644
--- a/changelog/de.md
+++ b/changelog/de.md
@@ -2,12 +2,12 @@
==========
Version 1.4.1
-------------
-Performance-Verbesserungen
-* Hardware buttons now ff and rewind instead of skipping
-* Option to have forward button skip
-* Option to send crash reports directly to developers
-* Highlight currently playing episode
-* Widget improvements
+* Performance-Verbesserungen
+* Tasten spulen nun vor oder zurück statt zur nächsten Episode zu springen
+* Einstellung, zur nächsten Episode zu springen statt vorzuspulen
+* Möglichkeit, Absturzberichte an Entwickler zu schicken
+* Hebe Episode hervor, die gerade abgespielt wird
+* Widget-Verbesserungen
Version 1.4.0.12
----------------
diff --git a/changelog/fr.md b/changelog/fr.md
index 89709b830..3f9dadfdf 100644
--- a/changelog/fr.md
+++ b/changelog/fr.md
@@ -118,7 +118,7 @@ Version 0.9.9.0
Version 0.9.8.3
---------------
* Intégration d'une fonctionnalité de protection par mot de passe pour les flux et les épisodes
-* Possibilité d'avoir plus de types d'images d'épisodes
+* Support de plus de types d'images pour les épisodes
* Ajout de l'Hébreu
* Correction de bogues et améliorations
diff --git a/changelog/pt.md b/changelog/pt.md
index 631ac1665..f15605e0b 100644
--- a/changelog/pt.md
+++ b/changelog/pt.md
@@ -30,12 +30,12 @@ Versão 1.4
Versão 1.3
-----------
-* Ações em lote nos episódios (transferir, colocar na fila, apagar)
+* Ações em lote nos episódios (descarga, colocar na fila, apagar)
* Redução do tamanho utilizado pelas imagens
* Atualização automática de fontes num dado período
* Indicadores e ordenação personalizada de fontes
* Possibilidade de partilhar fontes
-* Melhorias na transferência automática
+* Melhorias na descarga automática
* Diversas melhorias de usabilidade e correções
Versão 1.2
@@ -52,7 +52,7 @@ Versão 1.1
-----------
* Adicionada integração com o iTunes
* Deslize para remover os episódios da fila de reprodução
-* Possibilidade de definir o número de transferências simultâneas
+* Possibilidade de definir o número de descargas simultâneas
* Correções para gpodder.net em alguns dispositivos
* Corrigidos problemas de datas em algumas fontes
* Melhorias de exibição
@@ -109,7 +109,7 @@ Versão 0.9.9.1
Versão 0.9.9.0
---------------
* Nova interface
-* As transferências falhadas são retomadas ao reiniciar
+* As descargas falhadas são retomadas ao reiniciar
* Adicionado o suporte às fontes alternativas Podlove
* Adicionado o suporte ao protocolo pcast
* Adicionadas funcionalidades de backup e restauro. Esta opção tem que ser ativada nas definições do Android para funcionar
@@ -137,12 +137,12 @@ Versão 0.9.8.0
---------------
* Adição do acesso ao diretório gpodder.net
* Adicionada a possibilidade de sincronizar as subscrições com o gpodder.net
-* Adicionada a possibilidade de ativar ou desativar a transferência automática de podcasts específicos
+* Adicionada a possibilidade de ativar ou desativar a descarga automática para podcasts específicos
* Adicionada a possibilidade de colocar em pausa a reprodução se outra aplicação quiser reproduzir sons
* Adição da tradução em holandês e hindi
* Correção de erros com a transferência automática de podcasts
* Corrigido um erro com a visualização de botões no ecrã dos episódios
-* Corrigido um erro em que os episódios eram novamente transferidos sem haver essa necessidade
+* Corrigido um erro em que os episódios eram novamente descarregados sem haver essa necessidade
* Diversas correções e melhorias
Versão 0.9.7.5
@@ -169,14 +169,14 @@ Versão 0.9.7.3
Versão 0.9.7.2
---------------
-* Possibilidade de desativar as transferências automáticas
+* Possibilidade de desativar as descargas automáticas
* Adição da tradução em italiano (Itália)
* Diversas correções
Versão 0.9.7.1
---------------
-* Adicionada a possibilidade de transferência automática de episódios
-* Adicionada uma opção para especificar o número de episódios transferidos a manter no dispositivo
+* Adicionada a possibilidade de descarregar automaticamente os episódios
+* Adicionada uma opção para especificar o número de episódios descarregados a manter no dispositivo
* Adicionado o suporte à reprodução de ficheiros externos
* Diversas correções e melhorias
* Adição da tradução em catalão
@@ -205,7 +205,7 @@ Versão 0.9.6.3
Versão 0.9.6.2
---------------
* Corrigidos alguns erros de importação de ficheiros OPML
-* Corrigidos erros relacionados com transferências
+* Corrigidos erros nas descargas
* O AntennaPod já reconhece as alterações às informações dos episódios
* Diversas correções e melhorias
@@ -237,7 +237,7 @@ Versão 0.9.5.2
Versão 0.9.5.1
---------------
* Adicionado o histórico de reprodução
-* Melhorias nas notificações de transferências
+* Melhorias nas notificações de descargas
* Melhorias nos controlo dos auriculares
* Correção no processador de fontes
* Botão "Importação OPML" movido para o ecrã "Adicionar fonte e botão "Exportação OPML" para o ecrã de definições
@@ -247,7 +247,7 @@ Versão 0.9.5
*Adicionado suporte experimental a capítulos MP3
* Novo menu de opções para a lista de novos ficheiros e para a fila
* Adicionado a opção de eliminação automática
-* Melhoria nos relatórios de transferências
+* Melhoria nos relatórios de descargas
* Diversas correções
Versão 0.9.4.6
@@ -269,21 +269,21 @@ Versão 0.9.4.4
Versão 0.9.4.3
---------------
* Melhorias no processador de fontes
-* Melhorias nos relatórios de transferências
+* Melhorias nos relatórios de descargas
Versão 0.9.4.2
---------------
* Correção de erros no importador OPML
* Melhoria na utilização de memória para imagens
-* Corrigidos erros de transferências em alguns dispositivos
+* Corrigidos erros de descargas em alguns dispositivos
Versão 0.9.4.1
---------------
-* Melhorias nos relatórios de transferências
+* Melhorias nas notificações das descargas
Versão 0.9.4
-------------
-* Transferências mais rápidas e fiáveis
+* Descargas mais rápidas e mais fiáveis
* Adição de controlos do reprodutor para dispositivos com o Android 4.x
* Diversas correções
@@ -298,7 +298,7 @@ Versão 0.9.3
-------------
* Integração com o guia Miro
* Correções no reprodutor multimédia
-* Os episódios são adicionados à fila assim que forem transferidos
+* Os episódios são adicionados à fila assim que forem descarregados
Versão 0.9.2
-------------
diff --git a/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java b/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java
index 5ea0ba904..690fbdfc6 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java
@@ -156,10 +156,9 @@ public class OpmlBackupAgent extends BackupAgentHelper {
ArrayList<OpmlElement> opmlElements = new OpmlReader().readDocument(reader);
mChecksum = digester == null ? null : digester.digest();
DownloadRequester downloader = DownloadRequester.getInstance();
- Date lastUpdated = new Date();
for (OpmlElement opmlElem : opmlElements) {
- Feed feed = new Feed(opmlElem.getXmlUrl(), lastUpdated, opmlElem.getText());
+ Feed feed = new Feed(opmlElem.getXmlUrl(), null, opmlElem.getText());
try {
downloader.downloadFeed(mContext, feed);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java
index 4be788f33..d2d7cbc73 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java
@@ -44,10 +44,12 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
private String author;
private FeedImage image;
private List<FeedItem> items;
+
/**
- * Date of last refresh.
+ * String that identifies the last update (adopted from Last-Modified or ETag header)
*/
- private Date lastUpdate;
+ private String lastUpdate;
+
private FlattrStatus flattrStatus;
private String paymentLink;
/**
@@ -91,18 +93,14 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
/**
* This constructor is used for restoring a feed from the database.
*/
- public Feed(long id, Date lastUpdate, String title, String link, String description, String paymentLink,
+ public Feed(long id, String lastUpdate, String title, String link, String description, String paymentLink,
String author, String language, String type, String feedIdentifier, FeedImage image, String fileUrl,
String downloadUrl, boolean downloaded, FlattrStatus status, boolean paged, String nextPageLink,
String filter, boolean lastUpdateFailed) {
super(fileUrl, downloadUrl, downloaded);
this.id = id;
this.title = title;
- if (lastUpdate != null) {
- this.lastUpdate = (Date) lastUpdate.clone();
- } else {
- this.lastUpdate = null;
- }
+ this.lastUpdate = lastUpdate;
this.link = link;
this.description = description;
this.paymentLink = paymentLink;
@@ -126,7 +124,7 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
/**
* This constructor is used for test purposes and uses a default flattr status object.
*/
- public Feed(long id, Date lastUpdate, String title, String link, String description, String paymentLink,
+ public Feed(long id, String lastUpdate, String title, String link, String description, String paymentLink,
String author, String language, String type, String feedIdentifier, FeedImage image, String fileUrl,
String downloadUrl, boolean downloaded) {
this(id, lastUpdate, title, link, description, paymentLink, author, language, type, feedIdentifier, image,
@@ -138,7 +136,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
*/
public Feed() {
super();
- lastUpdate = new Date();
this.flattrStatus = new FlattrStatus();
}
@@ -146,9 +143,9 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
* This constructor is used for requesting a feed download (it must not be used for anything else!). It should NOT be
* used if the title of the feed is already known.
*/
- public Feed(String url, Date lastUpdate) {
+ public Feed(String url, String lastUpdate) {
super(null, url, false);
- this.lastUpdate = (lastUpdate != null) ? (Date) lastUpdate.clone() : null;
+ this.lastUpdate = lastUpdate;
this.flattrStatus = new FlattrStatus();
}
@@ -156,7 +153,7 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
* This constructor is used for requesting a feed download (it must not be used for anything else!). It should be
* used if the title of the feed is already known.
*/
- public Feed(String url, Date lastUpdate, String title) {
+ public Feed(String url, String lastUpdate, String title) {
this(url, lastUpdate);
this.title = title;
this.flattrStatus = new FlattrStatus();
@@ -166,7 +163,7 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
* This constructor is used for requesting a feed download (it must not be used for anything else!). It should be
* used if the title of the feed is already known.
*/
- public Feed(String url, Date lastUpdate, String title, String username, String password) {
+ public Feed(String url, String lastUpdate, String title, String username, String password) {
this(url, lastUpdate, title);
preferences = new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL, username, password);
}
@@ -191,11 +188,9 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
int indexHide = cursor.getColumnIndex(PodDBAdapter.KEY_HIDE);
int indexLastUpdateFailed = cursor.getColumnIndex(PodDBAdapter.KEY_LAST_UPDATE_FAILED);
- Date lastUpdate = new Date(cursor.getLong(indexLastUpdate));
-
Feed feed = new Feed(
cursor.getLong(indexId),
- lastUpdate,
+ cursor.getString(indexLastUpdate),
cursor.getString(indexTitle),
cursor.getString(indexLink),
cursor.getString(indexDescription),
@@ -430,12 +425,12 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
this.items = list;
}
- public Date getLastUpdate() {
- return (lastUpdate != null) ? (Date) lastUpdate.clone() : null;
+ public String getLastUpdate() {
+ return lastUpdate;
}
- public void setLastUpdate(Date lastUpdate) {
- this.lastUpdate = (lastUpdate != null) ? (Date) lastUpdate.clone() : null;
+ public void setLastUpdate(String lastModified) {
+ this.lastUpdate = lastModified;
}
public String getFeedIdentifier() {
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 ae22d5460..56b996d1c 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
@@ -168,9 +168,8 @@ 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)) {
+ // reset to new if feed item did link to a file before
+ if(TextUtils.isEmpty(download_url) && !TextUtils.isEmpty(other.download_url)) {
item.setNew();
}
super.updateFromOther(other);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java
index 9e95d5276..faf23a37a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedPreferences.java
@@ -18,6 +18,7 @@ public class FeedPreferences {
private FeedFilter filter;
private long feedID;
private boolean autoDownload;
+ private boolean keepUpdated;
public enum AutoDeleteAction {
GLOBAL,
@@ -29,12 +30,13 @@ public class FeedPreferences {
private String password;
public FeedPreferences(long feedID, boolean autoDownload, AutoDeleteAction auto_delete_action, String username, String password) {
- this(feedID, autoDownload, auto_delete_action, username, password, new FeedFilter());
+ this(feedID, autoDownload, true, auto_delete_action, username, password, new FeedFilter());
}
- public FeedPreferences(long feedID, boolean autoDownload, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter) {
+ public FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated, AutoDeleteAction auto_delete_action, String username, String password, @NonNull FeedFilter filter) {
this.feedID = feedID;
this.autoDownload = autoDownload;
+ this.keepUpdated = keepUpdated;
this.auto_delete_action = auto_delete_action;
this.username = username;
this.password = password;
@@ -44,6 +46,7 @@ public class FeedPreferences {
public static FeedPreferences fromCursor(Cursor cursor) {
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
int indexAutoDownload = cursor.getColumnIndex(PodDBAdapter.KEY_AUTO_DOWNLOAD);
+ int indexAutoRefresh = cursor.getColumnIndex(PodDBAdapter.KEY_KEEP_UPDATED);
int indexAutoDeleteAction = cursor.getColumnIndex(PodDBAdapter.KEY_AUTO_DELETE_ACTION);
int indexUsername = cursor.getColumnIndex(PodDBAdapter.KEY_USERNAME);
int indexPassword = cursor.getColumnIndex(PodDBAdapter.KEY_PASSWORD);
@@ -52,13 +55,14 @@ public class FeedPreferences {
long feedId = cursor.getLong(indexId);
boolean autoDownload = cursor.getInt(indexAutoDownload) > 0;
+ boolean autoRefresh = cursor.getInt(indexAutoRefresh) > 0;
int autoDeleteActionIndex = cursor.getInt(indexAutoDeleteAction);
AutoDeleteAction autoDeleteAction = AutoDeleteAction.values()[autoDeleteActionIndex];
String username = cursor.getString(indexUsername);
String password = cursor.getString(indexPassword);
String includeFilter = cursor.getString(indexIncludeFilter);
String excludeFilter = cursor.getString(indexExcludeFilter);
- return new FeedPreferences(feedId, autoDownload, autoDeleteAction, username, password, new FeedFilter(includeFilter, excludeFilter));
+ return new FeedPreferences(feedId, autoDownload, autoRefresh, autoDeleteAction, username, password, new FeedFilter(includeFilter, excludeFilter));
}
/**
@@ -73,6 +77,18 @@ public class FeedPreferences {
}
/**
+ * @return true if this feed should be refreshed when everything else is being refreshed
+ * if false the feed should only be refreshed if requested directly.
+ */
+ public boolean getKeepUpdated() {
+ return keepUpdated;
+ }
+
+ public void setKeepUpdated(boolean keepUpdated) {
+ this.keepUpdated = keepUpdated;
+ }
+
+ /**
* Compare another FeedPreferences with this one. The feedID, autoDownload and AutoDeleteAction attribute are excluded from the
* comparison.
*
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java
index 0b90cef6c..e7ebff154 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java
@@ -175,7 +175,7 @@ public class GpodnetSyncService extends Service {
for (String downloadUrl : changes.getAdded()) {
if (false == localSubscriptions.contains(downloadUrl) &&
false == localRemoved.contains(downloadUrl)) {
- Feed feed = new Feed(downloadUrl, new Date(0));
+ Feed feed = new Feed(downloadUrl, null);
DownloadRequester.getInstance().downloadFeed(this, feed);
}
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java
index bc3006eea..7f40ea6e2 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java
@@ -4,6 +4,7 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import de.danoeh.antennapod.core.feed.FeedFile;
import de.danoeh.antennapod.core.util.URLChecker;
@@ -15,7 +16,7 @@ public class DownloadRequest implements Parcelable {
private final String title;
private String username;
private String password;
- private long ifModifiedSince;
+ private String lastModified;
private boolean deleteOnFailure;
private final long feedfileId;
private final int feedfileType;
@@ -60,7 +61,7 @@ public class DownloadRequest implements Parcelable {
this.feedfileType = builder.feedfileType;
this.username = builder.username;
this.password = builder.password;
- this.ifModifiedSince = builder.ifModifiedSince;
+ this.lastModified = builder.lastModified;
this.deleteOnFailure = builder.deleteOnFailure;
this.arguments = (builder.arguments != null) ? builder.arguments : new Bundle();
}
@@ -71,7 +72,7 @@ public class DownloadRequest implements Parcelable {
title = in.readString();
feedfileId = in.readLong();
feedfileType = in.readInt();
- ifModifiedSince = in.readLong();
+ lastModified = in.readString();
deleteOnFailure = (in.readByte() > 0);
arguments = in.readBundle();
if (in.dataAvail() > 0) {
@@ -98,7 +99,7 @@ public class DownloadRequest implements Parcelable {
dest.writeString(title);
dest.writeLong(feedfileId);
dest.writeInt(feedfileType);
- dest.writeLong(ifModifiedSince);
+ dest.writeString(lastModified);
dest.writeByte((deleteOnFailure) ? (byte) 1 : 0);
dest.writeBundle(arguments);
if (username != null) {
@@ -127,7 +128,7 @@ public class DownloadRequest implements Parcelable {
DownloadRequest that = (DownloadRequest) o;
- if (ifModifiedSince != that.ifModifiedSince) return false;
+ if (lastModified != that.lastModified) return false;
if (deleteOnFailure != that.deleteOnFailure) return false;
if (feedfileId != that.feedfileId) return false;
if (feedfileType != that.feedfileType) return false;
@@ -143,7 +144,6 @@ public class DownloadRequest implements Parcelable {
if (title != null ? !title.equals(that.title) : that.title != null) return false;
if (username != null ? !username.equals(that.username) : that.username != null)
return false;
-
return true;
}
@@ -154,7 +154,7 @@ public class DownloadRequest implements Parcelable {
result = 31 * result + (title != null ? title.hashCode() : 0);
result = 31 * result + (username != null ? username.hashCode() : 0);
result = 31 * result + (password != null ? password.hashCode() : 0);
- result = 31 * result + (int)ifModifiedSince;
+ result = 31 * result + (lastModified != null ? lastModified.hashCode() : 0);
result = 31 * result + (deleteOnFailure ? 1 : 0);
result = 31 * result + (int) (feedfileId ^ (feedfileId >>> 32));
result = 31 * result + feedfileType;
@@ -234,13 +234,14 @@ public class DownloadRequest implements Parcelable {
this.password = password;
}
- public DownloadRequest setIfModifiedSince(long time) {
- this.ifModifiedSince = time;
+ public DownloadRequest setLastModified(@Nullable String lastModified) {
+ this.lastModified = lastModified;
return this;
}
- public long getIfModifiedSince() {
- return this.ifModifiedSince;
+ @Nullable
+ public String getLastModified() {
+ return lastModified;
}
public boolean isDeleteOnFailure() {
@@ -257,7 +258,7 @@ public class DownloadRequest implements Parcelable {
private String title;
private String username;
private String password;
- private long ifModifiedSince;
+ private String lastModified;
private boolean deleteOnFailure = false;
private long feedfileId;
private int feedfileType;
@@ -276,8 +277,8 @@ public class DownloadRequest implements Parcelable {
return this;
}
- public Builder ifModifiedSince(long time) {
- this.ifModifiedSince = time;
+ public Builder lastModified(String lastModified) {
+ this.lastModified = lastModified;
return this;
}
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 d69228ceb..72fa1e1f8 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
@@ -824,7 +824,7 @@ public class DownloadService extends Service {
}
private Pair<DownloadRequest, FeedHandlerResult> parseFeed(DownloadRequest request) {
- Feed feed = new Feed(request.getSource(), new Date());
+ Feed feed = new Feed(request.getSource(), request.getLastModified());
feed.setFile_url(request.getDestination());
feed.setId(request.getFeedfileId());
feed.setDownloaded(true);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
index 0b9fba6f7..e3a195253 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
@@ -8,7 +8,6 @@ import com.squareup.okhttp.Protocol;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;
-import com.squareup.okhttp.internal.http.HttpDate;
import org.apache.commons.io.IOUtils;
@@ -28,6 +27,7 @@ import java.util.Date;
import de.danoeh.antennapod.core.ClientConfig;
import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.feed.FeedImage;
+import de.danoeh.antennapod.core.util.DateUtils;
import de.danoeh.antennapod.core.util.DownloadError;
import de.danoeh.antennapod.core.util.StorageUtils;
import de.danoeh.antennapod.core.util.URIUtil;
@@ -67,13 +67,19 @@ public class HttpDownloader extends Downloader {
final URI uri = URIUtil.getURIFromRequestUrl(request.getSource());
Request.Builder httpReq = new Request.Builder().url(uri.toURL())
.header("User-Agent", ClientConfig.USER_AGENT);
- if(request.getIfModifiedSince() > 0) {
- long threeDaysAgo = System.currentTimeMillis() - 1000*60*60*24*3;
- if(request.getIfModifiedSince() > threeDaysAgo) {
- Date date = new Date(request.getIfModifiedSince());
- String httpDate = HttpDate.format(date);
- Log.d(TAG, "addHeader(\"If-Modified-Since\", \"" + httpDate + "\")");
- httpReq.addHeader("If-Modified-Since", httpDate);
+ if(!TextUtils.isEmpty(request.getLastModified())) {
+ String lastModified = request.getLastModified();
+ Date lastModifiedDate = DateUtils.parse(lastModified);
+ if(lastModifiedDate != null) {
+ long threeDaysAgo = System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 3;
+ if (lastModifiedDate.getTime() > threeDaysAgo) {
+ Log.d(TAG, "addHeader(\"If-Modified-Since\", \"" + lastModified + "\")");
+ httpReq.addHeader("If-Modified-Since", lastModified);
+ }
+ } else {
+ String eTag = lastModified;
+ Log.d(TAG, "addHeader(\"If-None-Match\", \"" + eTag + "\")");
+ httpReq.addHeader("If-None-Match", eTag);
}
}
@@ -235,6 +241,12 @@ public class HttpDownloader extends Downloader {
onFail(DownloadError.ERROR_IO_ERROR, "Download completed, but nothing was read");
return;
}
+ String lastModified = response.header("Last-Modified");
+ if(lastModified != null) {
+ request.setLastModified(lastModified);
+ } else {
+ request.setLastModified(response.header("ETag"));
+ }
onSuccess();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java
index aa73b17a7..a82e82506 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java
@@ -24,7 +24,6 @@ import android.view.SurfaceHolder;
import android.view.WindowManager;
import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.target.Target;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
@@ -982,6 +981,8 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
playerLock.lock();
releaseWifiLockIfNecessary();
+ boolean isPlaying = playerStatus == PlayerStatus.PLAYING;
+
if (playerStatus != PlayerStatus.INDETERMINATE) {
setPlayerStatus(PlayerStatus.INDETERMINATE, media);
}
@@ -990,7 +991,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
}
audioManager.abandonAudioFocus(audioFocusChangeListener);
- callback.endPlayback(true, wasSkipped);
+ callback.endPlayback(isPlaying, wasSkipped);
playerLock.unlock();
});
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 bc4c671a2..0563f878f 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
@@ -371,7 +371,7 @@ public final class DBReader {
/**
* Loads a list of FeedItems that are considered new.
- *
+ * Excludes items from feeds that do not have keep updated enabled.
* @return A list of FeedItems that are considered new.
*/
public static List<FeedItem> getNewItemsList() {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
index 157e6d28c..ed593bb82 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
@@ -26,6 +26,7 @@ import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.feed.FeedPreferences;
import de.danoeh.antennapod.core.service.GpodnetSyncService;
import de.danoeh.antennapod.core.service.download.DownloadStatus;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
@@ -186,21 +187,30 @@ public final class DBTasks {
}
}
+ /**
+ * @param context
+ * @param feedList the list of feeds to refresh
+ */
private static void refreshFeeds(final Context context,
final List<Feed> feedList) {
for (Feed feed : feedList) {
- try {
- refreshFeed(context, feed);
- } catch (DownloadRequestException e) {
- e.printStackTrace();
- DBWriter.addDownloadStatus(
- new DownloadStatus(feed, feed
- .getHumanReadableIdentifier(),
- DownloadError.ERROR_REQUEST_ERROR, false, e
- .getMessage()
- )
- );
+ FeedPreferences prefs = feed.getPreferences();
+ // feeds with !getKeepUpdated can only be refreshed
+ // directly from the FeedActivity
+ if (prefs.getKeepUpdated()) {
+ try {
+ refreshFeed(context, feed);
+ } catch (DownloadRequestException e) {
+ e.printStackTrace();
+ DBWriter.addDownloadStatus(
+ new DownloadStatus(feed, feed
+ .getHumanReadableIdentifier(),
+ DownloadError.ERROR_REQUEST_ERROR, false, e
+ .getMessage()
+ )
+ );
+ }
}
}
@@ -214,7 +224,28 @@ public final class DBTasks {
*/
public static void refreshCompleteFeed(final Context context, final Feed feed) {
try {
- refreshFeed(context, feed, true);
+ refreshFeed(context, feed, true, false);
+ } catch (DownloadRequestException e) {
+ e.printStackTrace();
+ DBWriter.addDownloadStatus(
+ new DownloadStatus(feed, feed
+ .getHumanReadableIdentifier(),
+ DownloadError.ERROR_REQUEST_ERROR, false, e
+ .getMessage()
+ )
+ );
+ }
+ }
+
+ /**
+ * Downloads all pages of the given feed even if feed has not been modified since last refresh
+ *
+ * @param context Used for requesting the download.
+ * @param feed The Feed object.
+ */
+ public static void forceRefreshCompleteFeed(final Context context, final Feed feed) {
+ try {
+ refreshFeed(context, feed, true, true);
} catch (DownloadRequestException e) {
e.printStackTrace();
DBWriter.addDownloadStatus(
@@ -238,11 +269,11 @@ public final class DBTasks {
public static void loadNextPageOfFeed(final Context context, Feed feed, boolean loadAllPages) throws DownloadRequestException {
if (feed.isPaged() && feed.getNextPageLink() != null) {
int pageNr = feed.getPageNr() + 1;
- Feed nextFeed = new Feed(feed.getNextPageLink(), new Date(), feed.getTitle() + "(" + pageNr + ")");
+ Feed nextFeed = new Feed(feed.getNextPageLink(), null, feed.getTitle() + "(" + pageNr + ")");
nextFeed.setPageNr(pageNr);
nextFeed.setPaged(true);
nextFeed.setId(feed.getId());
- DownloadRequester.getInstance().downloadFeed(context, nextFeed, loadAllPages);
+ DownloadRequester.getInstance().downloadFeed(context, nextFeed, loadAllPages, false);
} else {
Log.e(TAG, "loadNextPageOfFeed: Feed was either not paged or contained no nextPageLink");
}
@@ -258,12 +289,25 @@ public final class DBTasks {
public static void refreshFeed(Context context, Feed feed)
throws DownloadRequestException {
Log.d(TAG, "refreshFeed(feed.id: " + feed.getId() +")");
- refreshFeed(context, feed, false);
+ refreshFeed(context, feed, false, false);
}
- private static void refreshFeed(Context context, Feed feed, boolean loadAllPages) throws DownloadRequestException {
+ /**
+ * Refresh a specific feed even if feed has not been modified since last refresh
+ *
+ * @param context Used for requesting the download.
+ * @param feed The Feed object.
+ */
+ public static void forceRefreshFeed(Context context, Feed feed)
+ throws DownloadRequestException {
+ Log.d(TAG, "refreshFeed(feed.id: " + feed.getId() +")");
+ refreshFeed(context, feed, false, true);
+ }
+
+ private static void refreshFeed(Context context, Feed feed, boolean loadAllPages, boolean force)
+ throws DownloadRequestException {
Feed f;
- Date lastUpdate = feed.hasLastUpdateFailed() ? new Date(0) : feed.getLastUpdate();
+ String lastUpdate = feed.hasLastUpdateFailed() ? null : feed.getLastUpdate();
if (feed.getPreferences() == null) {
f = new Feed(feed.getDownload_url(), lastUpdate, feed.getTitle());
} else {
@@ -271,7 +315,7 @@ public final class DBTasks {
feed.getPreferences().getUsername(), feed.getPreferences().getPassword());
}
f.setId(feed.getId());
- DownloadRequester.getInstance().downloadFeed(context, f, loadAllPages);
+ DownloadRequester.getInstance().downloadFeed(context, f, loadAllPages, force);
}
/**
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java
index 0dc1dadeb..22c9538ca 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java
@@ -88,7 +88,7 @@ public class DownloadRequester {
private void download(Context context, FeedFile item, FeedFile container, File dest,
boolean overwriteIfExists, String username, String password,
- long ifModifiedSince, boolean deleteOnFailure, Bundle arguments) {
+ String lastModified, boolean deleteOnFailure, Bundle arguments) {
final boolean partiallyDownloadedFileExists = item.getFile_url() != null;
if (isDownloadingFile(item)) {
Log.e(TAG, "URL " + item.getDownload_url()
@@ -129,7 +129,7 @@ public class DownloadRequester {
DownloadRequest.Builder builder = new DownloadRequest.Builder(dest.toString(), item)
.withAuthentication(username, password)
- .ifModifiedSince(ifModifiedSince)
+ .lastModified(lastModified)
.deleteOnFailure(deleteOnFailure)
.withArguments(arguments);
DownloadRequest request = builder.build();
@@ -162,24 +162,25 @@ public class DownloadRequester {
* @param feed Feed to download
* @param loadAllPages Set to true to download all pages
*/
- public synchronized void downloadFeed(Context context, Feed feed, boolean loadAllPages)
+ public synchronized void downloadFeed(Context context, Feed feed, boolean loadAllPages,
+ boolean force)
throws DownloadRequestException {
if (feedFileValid(feed)) {
String username = (feed.getPreferences() != null) ? feed.getPreferences().getUsername() : null;
String password = (feed.getPreferences() != null) ? feed.getPreferences().getPassword() : null;
- long ifModifiedSince = feed.isPaged() ? 0 : feed.getLastUpdate().getTime();
+ String lastModified = feed.isPaged() || force ? null : feed.getLastUpdate();
Bundle args = new Bundle();
args.putInt(REQUEST_ARG_PAGE_NR, feed.getPageNr());
args.putBoolean(REQUEST_ARG_LOAD_ALL_PAGES, loadAllPages);
download(context, feed, null, new File(getFeedfilePath(context),
- getFeedfileName(feed)), true, username, password, ifModifiedSince, true, args);
+ getFeedfileName(feed)), true, username, password, lastModified, true, args);
}
}
public synchronized void downloadFeed(Context context, Feed feed) throws DownloadRequestException {
- downloadFeed(context, feed, false);
+ downloadFeed(context, feed, false, false);
}
public synchronized void downloadMedia(Context context, FeedMedia feedmedia)
@@ -204,7 +205,7 @@ public class DownloadRequester {
getMediafilename(feedmedia));
}
download(context, feedmedia, feed,
- dest, false, username, password, 0, false, null);
+ dest, false, username, password, null, false, null);
}
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
index 6ade990cd..5b7f5f720 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
@@ -92,6 +92,7 @@ public class PodDBAdapter {
public static final String KEY_CHAPTER_TYPE = "type";
public static final String KEY_PLAYBACK_COMPLETION_DATE = "playback_completion_date";
public static final String KEY_AUTO_DOWNLOAD = "auto_download";
+ public static final String KEY_KEEP_UPDATED = "keep_updated";
public static final String KEY_AUTO_DELETE_ACTION = "auto_delete_action";
public static final String KEY_PLAYED_DURATION = "played_duration";
public static final String KEY_USERNAME = "username";
@@ -132,6 +133,7 @@ public class PodDBAdapter {
+ KEY_PASSWORD + " TEXT,"
+ KEY_INCLUDE_FILTER + " TEXT DEFAULT '',"
+ KEY_EXCLUDE_FILTER + " TEXT DEFAULT '',"
+ + KEY_KEEP_UPDATED + " INTEGER DEFAULT 1,"
+ KEY_IS_PAGED + " INTEGER DEFAULT 0,"
+ KEY_NEXT_PAGE_LINK + " TEXT,"
+ KEY_HIDE + " TEXT,"
@@ -234,6 +236,7 @@ public class PodDBAdapter {
TABLE_NAME_FEEDS + "." + KEY_TYPE,
TABLE_NAME_FEEDS + "." + KEY_FEED_IDENTIFIER,
TABLE_NAME_FEEDS + "." + KEY_AUTO_DOWNLOAD,
+ TABLE_NAME_FEEDS + "." + KEY_KEEP_UPDATED,
TABLE_NAME_FEEDS + "." + KEY_FLATTR_STATUS,
TABLE_NAME_FEEDS + "." + KEY_IS_PAGED,
TABLE_NAME_FEEDS + "." + KEY_NEXT_PAGE_LINK,
@@ -365,7 +368,7 @@ public class PodDBAdapter {
values.put(KEY_FILE_URL, feed.getFile_url());
values.put(KEY_DOWNLOAD_URL, feed.getDownload_url());
values.put(KEY_DOWNLOADED, feed.isDownloaded());
- values.put(KEY_LASTUPDATE, feed.getLastUpdate().getTime());
+ values.put(KEY_LASTUPDATE, feed.getLastUpdate());
values.put(KEY_TYPE, feed.getType());
values.put(KEY_FEED_IDENTIFIER, feed.getFeedIdentifier());
@@ -398,6 +401,7 @@ public class PodDBAdapter {
}
ContentValues values = new ContentValues();
values.put(KEY_AUTO_DOWNLOAD, prefs.getAutoDownload());
+ values.put(KEY_KEEP_UPDATED, prefs.getKeepUpdated());
values.put(KEY_AUTO_DELETE_ACTION,prefs.getAutoDeleteAction().ordinal());
values.put(KEY_USERNAME, prefs.getUsername());
values.put(KEY_PASSWORD, prefs.getPassword());
@@ -1127,13 +1131,6 @@ public class PodDBAdapter {
return c;
}
- public final Cursor getNewItemIdsCursor() {
- final String query = "SELECT " + KEY_ID
- + " FROM " + TABLE_NAME_FEED_ITEMS
- + " WHERE " + KEY_READ + "=" + FeedItem.NEW;
- return db.rawQuery(query, null);
- }
-
/**
* Returns a cursor which contains all items of a feed that are considered new.
* The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection.
@@ -1150,13 +1147,19 @@ public class PodDBAdapter {
/**
* Returns a cursor which contains all feed items that are considered new.
+ * Excludes those feeds that do not have 'Keep Updated' enabled.
* The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection.
*/
public final Cursor getNewItemsCursor() {
- final String query = "SELECT " + SEL_FI_SMALL_STR
- + " FROM " + TABLE_NAME_FEED_ITEMS
- + " WHERE " + KEY_READ + "=" + FeedItem.NEW
- + " ORDER BY " + KEY_PUBDATE + " DESC";
+ Object[] args = new String[] {
+ SEL_FI_SMALL_STR,
+ TABLE_NAME_FEED_ITEMS,
+ TABLE_NAME_FEEDS,
+ TABLE_NAME_FEED_ITEMS + "." + KEY_FEED + "=" + TABLE_NAME_FEEDS + "." + KEY_ID,
+ TABLE_NAME_FEED_ITEMS + "." + KEY_READ + "=" + FeedItem.NEW + " AND " + TABLE_NAME_FEEDS + "." + KEY_KEEP_UPDATED + " > 0",
+ KEY_PUBDATE + " DESC"
+ };
+ final String query = String.format("SELECT %s FROM %s INNER JOIN %s ON %s WHERE %s ORDER BY %s", args);
Cursor c = db.rawQuery(query, null);
return c;
}
@@ -1509,7 +1512,7 @@ public class PodDBAdapter {
*/
private static class PodDBHelper extends SQLiteOpenHelper {
- private final static int VERSION = 1050003;
+ private final static int VERSION = 1050004;
private Context context;
@@ -1753,7 +1756,6 @@ public class PodDBAdapter {
db.execSQL(PodDBAdapter.CREATE_INDEX_FEEDITEMS_PUBDATE);
db.execSQL(PodDBAdapter.CREATE_INDEX_FEEDITEMS_READ);
}
-
if (oldVersion < 1050003) {
// Migrates feed list filter data
@@ -1796,6 +1798,15 @@ public class PodDBAdapter {
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
+ " ADD COLUMN " + PodDBAdapter.KEY_EXCLUDE_FILTER + " TEXT DEFAULT ''");
+
+ // and now auto refresh
+ db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
+ + " ADD COLUMN " + PodDBAdapter.KEY_KEEP_UPDATED + " INTEGER DEFAULT 1");
+ }
+ if (oldVersion < 1050004) {
+ // prevent old timestamps to be misinterpreted as ETags
+ db.execSQL("UPDATE " + PodDBAdapter.TABLE_NAME_FEEDS
+ +" SET " + PodDBAdapter.KEY_LASTUPDATE + "=NULL");
}
EventBus.getDefault().post(ProgressEvent.end());
diff --git a/core/src/main/res/values-az/strings.xml b/core/src/main/res/values-az/strings.xml
index a2fbdd825..d305e8127 100644
--- a/core/src/main/res/values-az/strings.xml
+++ b/core/src/main/res/values-az/strings.xml
@@ -37,7 +37,6 @@
<string name="length_prefix">Müddət:\u0020</string>
<string name="size_prefix">Ölçü:\u0020</string>
<string name="processing_label">Hazırlaşma</string>
- <string name="loading_label">Yükləmə...</string>
<string name="close_label">Bağla</string>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">Kanalın URLı</string>
@@ -79,7 +78,6 @@
<string name="download_error_malformed_url">Yanlış URL</string>
<string name="download_error_io_error">IO xətasi</string>
<string name="download_error_request_error">Tələbin xətası</string>
- <string name="downloads_left">\u0020yükləmə galdı</string>
<string name="download_notification_title">Podkast məlumatların yüklənişi</string>
<string name="download_report_content">%1$d yükləmə uğurludur, %2$d uğursuzdur</string>
<string name="download_log_title_unknown">Naməlum başliğ</string>
@@ -177,7 +175,6 @@
<string name="select_all_label">Hamısını seç</string>
<string name="deselect_all_label">Seçimi ləğv et</string>
<string name="opml_export_label">OPML ixraçı</string>
- <string name="exporting_label">İxrac...</string>
<string name="export_error_label">İxracın xətası</string>
<string name="opml_export_success_sum">OPML fayl:\u0020 yazılıb</string>
<!--Sleep timer-->
@@ -202,10 +199,10 @@
<string name="folder_not_empty_dialog_msg">Seçilən qovluq boş deyil. Mediya yükləmələr və başka fayllar bu qovluqa yazılacaqlar. Necə olsa davam olsunmu?</string>
<string name="set_to_default_folder">Başlanğıc qovluqu seç</string>
<!--Online feed view-->
- <string name="downloading_label">Yükləmə...</string>
<!--Content descriptions for image buttons-->
<!--Feed information screen-->
<!--Progress information-->
<!--AntennaPodSP-->
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-ca/strings.xml b/core/src/main/res/values-ca/strings.xml
index 772742753..290c16176 100644
--- a/core/src/main/res/values-ca/strings.xml
+++ b/core/src/main/res/values-ca/strings.xml
@@ -66,7 +66,6 @@
<string name="length_prefix">Durada:\u0020</string>
<string name="size_prefix">Mida:\u0020</string>
<string name="processing_label">S\'està processant</string>
- <string name="loading_label">S\'està carregant...</string>
<string name="save_username_password_label">Desa nom d\'usuari i contrasenya</string>
<string name="close_label">Tanca</string>
<string name="retry_label">Reintenta</string>
@@ -78,7 +77,6 @@
<string name="feed_auto_download_global">Global</string>
<string name="feed_auto_download_always">Sempre</string>
<string name="feed_auto_download_never">Mai</string>
- <string name="send_label">Envia...</string>
<string name="episode_cleanup_never">Mai</string>
<string name="episode_cleanup_queue_removal">Quan no està a la cua</string>
<string name="episode_cleanup_after_listening">Després d\'acabar</string>
@@ -101,7 +99,6 @@
<string name="mark_all_seen_label">Marca tot com a llegit</string>
<string name="show_info_label">Mostra informació</string>
<string name="remove_feed_label">Esborra podcast</string>
- <string name="share_label">Comparteix...</string>
<string name="share_link_label">Comparteix l\'enllaç</string>
<string name="share_link_with_position_label">Comparteix enllaç amb posició</string>
<string name="share_feed_url_label">Comparteix adreça del canal</string>
@@ -170,7 +167,6 @@
<string name="download_error_io_error">Error d\'E/S</string>
<string name="download_error_request_error">Error de petició</string>
<string name="download_error_db_access">Error d\'accés a la base de dades</string>
- <string name="downloads_left">\u0020Baixades pendents</string>
<string name="downloads_processing">S\'estan processant les baixades</string>
<string name="download_notification_title">S\'estan baixant les dades del podcast</string>
<string name="download_report_content">%1$d baixades finalitzades, %2$d fallides</string>
@@ -243,7 +239,6 @@
<!--Variable Speed-->
<string name="download_plugin_label">Baixa el connector</string>
<string name="no_playback_plugin_title">Connector no instal·lat</string>
- <string name="no_playback_plugin_or_sonic_msg">Perque la reproducció de velocitat variable funcioni, ha d\'instal lar el connector de tercers o activar el reproductor experimental Sonic [Android 4.1+].\n\nPrem \'Baixa el connector\' per baixar el connector gratuït de la Play Store.\n\nQualsevol problema que us trobeu amb l\'ús d\'aquest connector no són responsabilitat d\'AntennaPod i han de ser reportats al propietari del connector.</string>
<string name="set_playback_speed_label">Velocitats de reproducció</string>
<string name="enable_sonic">Activa Sonic</string>
<!--Empty list labels-->
@@ -256,7 +251,6 @@
<string name="services_label">Serveis</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Neteja l\'episodi</string>
- <string name="pref_episode_cleanup_summary">Episodis que no estan a la cua i no són favorits haurien de ser escollits per eliminar-los si es requereix espai</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Continua la reproducció en connectar novament els auriculars</string>
<string name="pref_followQueue_sum">Salta al següent element de la cua en acabar la reproducció</string>
<string name="pref_auto_delete_sum">Suprimeix l\'episodi quan s\'acabi de reproduir</string>
@@ -341,7 +335,6 @@
<string name="pref_image_cache_size_sum">Mida de la memòria cau en el disc de les imatges.</string>
<string name="experimental_pref">Experimental</string>
<string name="pref_sonic_title">Reproductor multimèdia Sonic</string>
- <string name="pref_sonic_message">Utilitzeu la funció incorporada del reproductor multimèdia Sonic com a reemplaçament per Prestissimo</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Activa la compartició automàtica per Flattr</string>
<string name="auto_flattr_after_percent">Comparteix per Flattr l\'episodi en haver-ne reproduït el %d per cent</string>
@@ -368,11 +361,9 @@
<string name="opml_import_error_dir_empty">El directori d\'importacions és buit.</string>
<string name="select_all_label">Selecciona-ho tot</string>
<string name="deselect_all_label">Deselecciona-ho tot</string>
- <string name="select_options_label">Sel·lecciona...</string>
<string name="choose_file_from_filesystem">Des de sistema d\'arxius local</string>
<string name="choose_file_from_external_application">Utilitza aplicació externa</string>
<string name="opml_export_label">Exportació OPML</string>
- <string name="exporting_label">S\'està exportant...</string>
<string name="export_error_label">Error d\'exportació</string>
<string name="opml_export_success_title">S\'ha exportat l\'OPML correctament.</string>
<string name="opml_export_success_sum">El fitxer OPML s\'ha escrit a:\u0020</string>
@@ -449,7 +440,6 @@
<!--Online feed view-->
<string name="subscribe_label">Subscriu</string>
<string name="subscribed_label">Subscrit</string>
- <string name="downloading_label">S\'està baixant...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Mostra els capítols</string>
<string name="show_shownotes_label">Mostra les notes del programa</string>
@@ -477,7 +467,6 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">S\'estan important les subscripcions des de les apps de propòsit únic...</string>
<string name="search_itunes_label">Cerca a iTunes</string>
- <string name="select_label"><b>Seleccionar...</b></string>
<string name="all_label">Tot</string>
<string name="selected_all_label">Selecciona tots els episodis</string>
<string name="none_label">Cap</string>
@@ -490,7 +479,6 @@
<string name="selected_downloaded_label">Selecciona episodis descarregats</string>
<string name="not_downloaded_label">No baixat</string>
<string name="selected_not_downloaded_label">Selecciona episodis sense descarregar</string>
- <string name="sort_title"><b>Ordena per...</b></string>
<string name="sort_title_a_z">Títol (A \u2192 Z)</string>
<string name="sort_title_z_a">Títol (Z \u2192 A)</string>
<string name="sort_date_new_old">Data (Nou \u2192 Antic)</string>
@@ -498,4 +486,5 @@
<string name="sort_duration_short_long">Duració (Curt \u2192 Llarg)</string>
<string name="sort_duration_long_short">Duration (Llarg \u2192 Curt)</string>
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml
index 987b2e7b5..335232675 100644
--- a/core/src/main/res/values-cs-rCZ/strings.xml
+++ b/core/src/main/res/values-cs-rCZ/strings.xml
@@ -23,6 +23,8 @@
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">Login pro gpodder.net</string>
<string name="free_space_label">%1$s volné</string>
+ <string name="episode_cache_full_title">Odkládací prostor pro epizody je plný</string>
+ <string name="episode_cache_full_message">Došlo k zaplnění limitu odkládacího prostoru pro epizody. Můžete navýšit vyhrazený prostor v Nastavení.</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">Nedávno zveřejněné</string>
<string name="episode_filter_label">Zobrazit pouze nové epizody</string>
@@ -68,7 +70,7 @@
<string name="length_prefix">Délka:\u0020</string>
<string name="size_prefix">Velikost:\u0020</string>
<string name="processing_label">Zpracovávám</string>
- <string name="loading_label">Načítám...</string>
+ <string name="loading_label">Načítání</string>
<string name="save_username_password_label">Uložit uživatelské jméno a heslo</string>
<string name="close_label">Zavřít</string>
<string name="retry_label">Zkusit znovu</string>
@@ -80,7 +82,7 @@
<string name="feed_auto_download_global">Globální</string>
<string name="feed_auto_download_always">Vždy</string>
<string name="feed_auto_download_never">Nikdy</string>
- <string name="send_label">Odeslat...</string>
+ <string name="send_label">Odeslat</string>
<string name="episode_cleanup_never">Nikdy</string>
<string name="episode_cleanup_queue_removal">Pokud není ve frontě</string>
<string name="episode_cleanup_after_listening">Po dokončení</string>
@@ -104,7 +106,7 @@
<string name="mark_all_seen_label">Označit vše jako zobrazené</string>
<string name="show_info_label">Informace o zdroji</string>
<string name="remove_feed_label">Odstranit podcast</string>
- <string name="share_label">Sdílet...</string>
+ <string name="share_label">Sdílet</string>
<string name="share_link_label">Sdílet odkaz</string>
<string name="share_link_with_position_label">Sdílet odkaz s pozicí</string>
<string name="share_feed_url_label">Sdílet URL kanálu</string>
@@ -139,7 +141,9 @@
<string name="added_to_queue_label">Přidáno do fronty</string>
<string name="remove_from_queue_label">Odebrat z fronty</string>
<string name="add_to_favorite_label">Přidat k oblíbeným</string>
+ <string name="added_to_favorites">Přidáno k oblíbeným</string>
<string name="remove_from_favorite_label">Odebrat z obíbených</string>
+ <string name="removed_from_favorites">Odebráno z oblíbených</string>
<string name="visit_website_label">Navštívit stránku</string>
<string name="support_label">Flattrovat</string>
<string name="enqueue_all_new">Vše do fronty</string>
@@ -173,7 +177,11 @@
<string name="download_error_io_error">IO chyba</string>
<string name="download_error_request_error">Chyba požadavku</string>
<string name="download_error_db_access">Chyba přístupu do databáze</string>
- <string name="downloads_left">\u0020Stahování zbývá</string>
+ <plurals name="downloads_left">
+ <item quantity="one">%d čekající na stažení</item>
+ <item quantity="few">%d čekající na stažení</item>
+ <item quantity="other">%d čekajících na stažení</item>
+ </plurals>
<string name="downloads_processing">Probíhá stahování</string>
<string name="download_notification_title">Stahuji podcast data</string>
<string name="download_report_content">%1$d úspěšných stahování, %2$d selhalo</string>
@@ -205,6 +213,8 @@
<!--Queue operations-->
<string name="lock_queue">Zamknout frontu</string>
<string name="unlock_queue">Odemknout frontu</string>
+ <string name="queue_locked">Fronta zamknuta</string>
+ <string name="queue_unlocked">Fronta odemknuta</string>
<string name="clear_queue_label">Vyprázdnit frontu</string>
<string name="undo">Zpět</string>
<string name="removed_from_queue">Položka odebrána</string>
@@ -246,12 +256,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">Stáhnout modul</string>
<string name="no_playback_plugin_title">Modul není nainstalován</string>
- <string name="no_playback_plugin_or_sonic_msg">Pro možnost měnit rychlost přehrávání musí být nainstalovaná knihovna třetí strany nebo povolen experimentální přehrávač Sonic [Android 4.1+].\n\nKlikněte na \"Stáhnout modul\" k jeho stažení z Obchodu Play.\n\nAntennaPod nenese žádnou odpovědnost za jakékoliv problémy způsobené tímto modulem. Chyby hlaste jeho vývojářům.</string>
+ <string name="no_playback_plugin_or_sonic_msg">Pro fungující proměnné rychlosti přehrávání doporučujeme povolit zabudovaný Sonic mediaplayer [Android 4.1+].\n\nAlternativně je možné z Obchodu Play stáhnout zásuvný modul třetí strany <i>Prestissimo</i>.\nAntennaPod nenese zodpovědnost za jakékoliv problémy s modulem Prestissimo a ty by měly být hlášeny jeho vývojářům.</string>
<string name="set_playback_speed_label">Rychlosti přehrávání</string>
<string name="enable_sonic">Povolit Sonic</string>
<!--Empty list labels-->
<string name="no_items_label">Žádné položky v seznamu.</string>
<string name="no_feeds_label">Zatím nebyly přidány žádné kanály.</string>
+ <string name="no_chapters_label">Tato epizoda nemá žádné kapitoly.</string>
<!--Preferences-->
<string name="other_pref">Ostatní</string>
<string name="about_pref">O aplikaci</string>
@@ -259,7 +270,7 @@
<string name="services_label">Služby</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Vyčistit epizody</string>
- <string name="pref_episode_cleanup_summary">Epizody které nejsou ve frontě a nejsou označeny jako oblíbené lze smazat pro uvolnění místa</string>
+ <string name="pref_episode_cleanup_summary">Epizody, které nejsou ve frontě a nejsou označeny za oblíbené by mělo být možné smazat, pokud bude funkce automatického stahování potřebovat místo pro nové epizody</string>
<string name="pref_pauseOnDisconnect_sum">Při odpojení sluchátek nebo bluetooth připojení pozastavit přehrávání.</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Pokračovat v přehrávání po připojení sluchátek</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Pokračovat v přehrávání po připojení bluetooth</string>
@@ -280,6 +291,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">Vypnout</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Nastavit interval</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Nastavit čas v průběhu dne</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">každých %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">v %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Stahovat soubory pouze pomocí WiFi</string>
<string name="pref_followQueue_title">Kontinuální přehrávání</string>
<string name="pref_downloadMediaOnWifiOnly_title">WiFi stahování</string>
@@ -354,7 +367,8 @@
<string name="send_email">Poslat email</string>
<string name="experimental_pref">Experimentální</string>
<string name="pref_sonic_title">Přehrávač médií Sonic</string>
- <string name="pref_sonic_message">Použít vestavěný přehrávač médií Sonic, jako náhradu za Prestissimo</string>
+ <string name="pref_sonic_message">Použít připojený sonic media player jako náhradu za výchozí přehrávač médií pro Android a Prestissimo</string>
+ <string name="pref_current_value">Aktuální hodnota: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Povolit automatické flattrování</string>
<string name="auto_flattr_after_percent">Flattrovat díl jakmile bude odehráno %d procent</string>
@@ -381,11 +395,11 @@
<string name="opml_import_error_dir_empty">Adresář importu je prázdný.</string>
<string name="select_all_label">Označit vše</string>
<string name="deselect_all_label">Zrušit výběr</string>
- <string name="select_options_label">Vybrat ...</string>
+ <string name="select_options_label">Vybrat</string>
<string name="choose_file_from_filesystem">Z místního souborového systému</string>
<string name="choose_file_from_external_application">Použít externí aplikaci</string>
<string name="opml_export_label">OPML export</string>
- <string name="exporting_label">Exportuji...</string>
+ <string name="exporting_label">Export</string>
<string name="export_error_label">Chyba exportu</string>
<string name="opml_export_success_title">OPML export byl úspěšný.</string>
<string name="opml_export_success_sum">OPML soubor byl zapsán do:\u0020</string>
@@ -469,7 +483,7 @@
<!--Online feed view-->
<string name="subscribe_label">Odebírat</string>
<string name="subscribed_label">Odebíráno</string>
- <string name="downloading_label">Stahuji...</string>
+ <string name="downloading_label">Stahování</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Zobrazit kapitoly</string>
<string name="show_shownotes_label">Zobrazit poznámky o pořadu</string>
@@ -497,7 +511,8 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importuji odběry z jednoúčelových aplikací...</string>
<string name="search_itunes_label">Prohledat iTunes</string>
- <string name="select_label"><b>Vybrat ...</b></string>
+ <string name="select_label"><b>Vybrat…</b></string>
+ <string name="filter">Filtr</string>
<string name="all_label">Vše</string>
<string name="selected_all_label">Vybrány všechny epizody</string>
<string name="none_label">Žádné</string>
@@ -510,7 +525,7 @@
<string name="selected_downloaded_label">Vybrány stažené epizody</string>
<string name="not_downloaded_label">Nestažené</string>
<string name="selected_not_downloaded_label">Vybrány nestažené epizody</string>
- <string name="sort_title"><b>Řadit podle ...</b></string>
+ <string name="sort_title"><b>Řadit dle</b></string>
<string name="sort_title_a_z">Názvu (A \u2192 Z)</string>
<string name="sort_title_z_a">Názvu (Z \u2192 A)</string>
<string name="sort_date_new_old">Data (Nové \u2192 Staré)</string>
@@ -523,4 +538,13 @@
<string name="rating_never_label">Neobtěžuj mě</string>
<string name="rating_later_label">Upozornit později</string>
<string name="rating_now_label">Jasně, s radostí!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">Audio ovládání</string>
+ <string name="playback_speed">Rychlost přehrávání</string>
+ <string name="volume">Hlasitost</string>
+ <string name="left_short">L</string>
+ <string name="right_short">P</string>
+ <string name="audio_effects">Audio efekty</string>
+ <string name="stereo_to_mono">Downmix: Stereo na mono</string>
+ <string name="sonic_only">Pouze Sonic</string>
</resources>
diff --git a/core/src/main/res/values-da/strings.xml b/core/src/main/res/values-da/strings.xml
index 2c32ad5de..13f576bfe 100644
--- a/core/src/main/res/values-da/strings.xml
+++ b/core/src/main/res/values-da/strings.xml
@@ -52,7 +52,6 @@
<string name="length_prefix">Længde:\u0020</string>
<string name="size_prefix">Størrelse:\u0020</string>
<string name="processing_label">Behandler</string>
- <string name="loading_label">Indlæser...</string>
<string name="save_username_password_label">Gem brugernavn og kodeord</string>
<string name="close_label">Luk</string>
<string name="retry_label">Prøv igen</string>
@@ -112,7 +111,6 @@
<string name="download_error_io_error">IO fejl</string>
<string name="download_error_request_error">Anmode fejl</string>
<string name="download_error_db_access">Adgangsfejl i database</string>
- <string name="downloads_left">\u0020Downloads tilbage</string>
<string name="downloads_processing">Bearbejder downloads</string>
<string name="download_notification_title">Downloader podcast data</string>
<string name="download_report_content">%1$d downloads lykkedes, %2$d fejlet</string>
@@ -264,7 +262,6 @@
<string name="select_all_label">Vælg alt</string>
<string name="deselect_all_label">Fravælg alt</string>
<string name="opml_export_label">OPML eksport</string>
- <string name="exporting_label">Eksporterer...</string>
<string name="export_error_label">Eksport fejl</string>
<string name="opml_export_success_title">Opml eksport lykkedes.</string>
<string name="opml_export_success_sum">.opml filen var skrevet til:\u0020</string>
@@ -320,7 +317,6 @@
<!--Online feed view-->
<string name="subscribe_label">Abonner</string>
<string name="subscribed_label">Abonneret</string>
- <string name="downloading_label">Downloader...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Vis kapitler</string>
<string name="show_shownotes_label">Vis shownoter</string>
@@ -347,4 +343,5 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importerer abonnementer fra single-purpose apps…</string>
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-de/strings.xml b/core/src/main/res/values-de/strings.xml
index a2ef1e929..7432f5537 100644
--- a/core/src/main/res/values-de/strings.xml
+++ b/core/src/main/res/values-de/strings.xml
@@ -23,6 +23,8 @@
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">gpodder.net Anmeldung</string>
<string name="free_space_label">%1$s frei</string>
+ <string name="episode_cache_full_title">Episodenspeicher voll</string>
+ <string name="episode_cache_full_message">Der Episodenspeicher ist voll. Du kannst die Größe des Episodenspeichers in den Einstellungen erhöhen.</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">Zuletzt veröffentlicht</string>
<string name="episode_filter_label">Nur neue Episoden anzeigen</string>
@@ -67,7 +69,7 @@
<string name="length_prefix">Länge:\u0020</string>
<string name="size_prefix">Größe:\u0020</string>
<string name="processing_label">Verarbeite</string>
- <string name="loading_label">Lade ...</string>
+ <string name="loading_label">Wird geladen…</string>
<string name="save_username_password_label">Benutzername und Password merken</string>
<string name="close_label">Schließen</string>
<string name="retry_label">Erneut versuchen</string>
@@ -79,7 +81,7 @@
<string name="feed_auto_download_global">Global</string>
<string name="feed_auto_download_always">Immer</string>
<string name="feed_auto_download_never">Nie</string>
- <string name="send_label">Senden...</string>
+ <string name="send_label">Senden…</string>
<string name="episode_cleanup_never">Nie</string>
<string name="episode_cleanup_queue_removal">Wenn nicht in der Abspielliste</string>
<string name="episode_cleanup_after_listening">wenn fertig gespielt gespielt</string>
@@ -102,7 +104,7 @@
<string name="mark_all_seen_label">Alle als gesehen markieren</string>
<string name="show_info_label">Informationen anzeigen</string>
<string name="remove_feed_label">Podcast entfernen</string>
- <string name="share_label">Teile...</string>
+ <string name="share_label">Teilen…</string>
<string name="share_link_label">Webseiten-Link teilen</string>
<string name="share_link_with_position_label">Teile Link mit Zeitmarke</string>
<string name="share_feed_url_label">Teile URL des Podcasts</string>
@@ -137,7 +139,9 @@
<string name="added_to_queue_label">Zur Abspielliste hinzugefügt</string>
<string name="remove_from_queue_label">Aus der Abspielliste entfernen</string>
<string name="add_to_favorite_label">Zu Favoriten hinzufügen</string>
+ <string name="added_to_favorites">Zu Favoriten hinzugefügt</string>
<string name="remove_from_favorite_label">Aus Favoriten entfernen</string>
+ <string name="removed_from_favorites">Aus Favoriten entfernt</string>
<string name="visit_website_label">Webseite besuchen</string>
<string name="support_label">Flattrn</string>
<string name="enqueue_all_new">Alle zur Abspielliste hinzufügen</string>
@@ -171,7 +175,10 @@
<string name="download_error_io_error">E/A Error</string>
<string name="download_error_request_error">Anfragefehler</string>
<string name="download_error_db_access">Datenbankzugriffsfehler</string>
- <string name="downloads_left">\u0020Downloads übrig</string>
+ <plurals name="downloads_left">
+ <item quantity="one">%d Download übrig</item>
+ <item quantity="other">%d Downloads übrig</item>
+ </plurals>
<string name="downloads_processing">Verarbeite Downloads</string>
<string name="download_notification_title">Lade Podcast-Daten</string>
<string name="download_report_content">%1$d Downloads erfolgreich, %2$d fehlgeschlagen</string>
@@ -203,6 +210,8 @@
<!--Queue operations-->
<string name="lock_queue">Abspielliste sperren</string>
<string name="unlock_queue">Abspielliste entsperren</string>
+ <string name="queue_locked">Abspielliste gesperrt</string>
+ <string name="queue_unlocked">Abspielliste entsperrt</string>
<string name="clear_queue_label">Abspielliste leeren</string>
<string name="undo">Rückgängig</string>
<string name="removed_from_queue">Element entfernt</string>
@@ -244,12 +253,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">Plugin herunterladen</string>
<string name="no_playback_plugin_title">Plugin nicht installiert</string>
- <string name="no_playback_plugin_or_sonic_msg">Damit die variable Wiedergabegeschwindigkeit funktioniert, musst du eine Drittanbieterbibliothek oder den experimentellen Sonic Player [Android 4.1+] heruntegeladen.\n\n Drücke \"Plugin herunterladen\", um ein kostenloses Plugin aus dem Play Store zu installieren.\n\nProbleme, die bei der Benutzung des Plugins auftreten, liegen nicht im Verantwortungsbereich von AntennaPod, und sollten dem Entwickler des Plugins gemeldet werden.</string>
+ <string name="no_playback_plugin_or_sonic_msg">Um variable Wiedergabegeschwindigkeit benutzen zu können, empfehlen wir, den integrierten Sonic Mediaplayer [Android 4.1+] zu aktivieren.\n\nAlternativ kannst du das kostenlose Plugin <i>Prestissimo</i> eines Drittanbieters aus dem Play Store herunterladen.\nProbleme mit Prestissimo liegen nicht im Verantwortungsbereich von AntennaPod und sollten dem Entwickler des Plugins gemeldet werden.</string>
<string name="set_playback_speed_label">Wiedergabegeschwindigkeiten</string>
<string name="enable_sonic">Sonic aktivieren</string>
<!--Empty list labels-->
<string name="no_items_label">Es sind keine Einträge in dieser Liste.</string>
<string name="no_feeds_label">Du hast noch keine Feeds abonniert.</string>
+ <string name="no_chapters_label">Diese Episode hat keine Kapitel.</string>
<!--Preferences-->
<string name="other_pref">Anderes</string>
<string name="about_pref">Über</string>
@@ -257,7 +267,7 @@
<string name="services_label">Dienste</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Automatisches Löschen</string>
- <string name="pref_episode_cleanup_summary">Episoden, die nicht in der Abspielliste und nicht favorisiert sind, werden zum Aufräumen freigegeben, wenn Speicherplatz benötigt wird</string>
+ <string name="pref_episode_cleanup_summary">Episoden, die weder in Abspielliste noch favorisiert sind, können gelöscht werden, wenn beim automatischen Herunterladen Speicherplatz für neue Episoden gebraucht wird</string>
<string name="pref_pauseOnDisconnect_sum">Wiedergabe pausieren, wenn Kopfhörer ausgesteckt oder Bluetooth getrennt wird</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Wiedergabe fortsetzen, wenn Kopfhörer wieder eingesteckt werden</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Wiedergabe fortsetzen, wenn Bluetooth wieder verbunden ist</string>
@@ -278,6 +288,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">Deaktivieren</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Intervall einstellen</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Tageszeit festlegen</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">jede %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">um %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Lade Mediendateien nur über WiFi</string>
<string name="pref_followQueue_title">Durchgehendes Abspielen</string>
<string name="pref_downloadMediaOnWifiOnly_title">WiFi Medien-Download</string>
@@ -351,8 +363,9 @@
<string name="crash_report_sum">Sende den aktuellen Absturzbericht per E-Mail</string>
<string name="send_email">E-Mail senden</string>
<string name="experimental_pref">Experimentell</string>
- <string name="pref_sonic_title">Sonic Media Player</string>
- <string name="pref_sonic_message">Benutze den eingebauten Sonic Media Player als Ersatz für Prestissimo</string>
+ <string name="pref_sonic_title">Sonic Mediaplayer</string>
+ <string name="pref_sonic_message">Benutze den integrierten Sonic Mediaplayer als Ersatz für Androids eigenen Mediaplayer und Prestissimo</string>
+ <string name="pref_current_value">Aktueller Wert: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Automatisches Flattrn aktivieren</string>
<string name="auto_flattr_after_percent">Flattr eine Episode, sobald %d Prozent gespielt worden sind</string>
@@ -379,11 +392,11 @@
<string name="opml_import_error_dir_empty">Der Import-Ordner ist leer.</string>
<string name="select_all_label">Alle auswählen</string>
<string name="deselect_all_label">Auswahl zurücksetzen</string>
- <string name="select_options_label">Wähle aus ...</string>
+ <string name="select_options_label">Auswählen…</string>
<string name="choose_file_from_filesystem">Vom lokalen Dateisystem</string>
<string name="choose_file_from_external_application">Verwende externe Anwendung</string>
<string name="opml_export_label">OPML Export</string>
- <string name="exporting_label">Exportiere...</string>
+ <string name="exporting_label">Exportiere…</string>
<string name="export_error_label">Exportfehler</string>
<string name="opml_export_success_title">OPML Export erfolgreich</string>
<string name="opml_export_success_sum">Die OPML Datei wurde unter dem folgenden Pfad gespeichert:\u0020</string>
@@ -464,7 +477,7 @@
<!--Online feed view-->
<string name="subscribe_label">Abonnieren</string>
<string name="subscribed_label">Abonniert</string>
- <string name="downloading_label">Lade herunter...</string>
+ <string name="downloading_label">Lade herunter…</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Kapitel anzeigen</string>
<string name="show_shownotes_label">Sendungsnotizen anzeigen</string>
@@ -492,7 +505,8 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importiere Abonnements aus Single-Purpose Apps</string>
<string name="search_itunes_label">iTunes durchsuchen</string>
- <string name="select_label"><b>Wähle aus ...</b></string>
+ <string name="select_label"><b>Wähle aus…</b></string>
+ <string name="filter">Filtern</string>
<string name="all_label">Alle</string>
<string name="selected_all_label">Alle Episoden ausgewählt</string>
<string name="none_label">Keine</string>
@@ -505,7 +519,7 @@
<string name="selected_downloaded_label">Heruntergeladene Episoden ausgewählt</string>
<string name="not_downloaded_label">Nicht heruntergeladen</string>
<string name="selected_not_downloaded_label">Nicht heruntergeladene Episoden ausgewählt</string>
- <string name="sort_title"><b>Sortieren nach ...</b></string>
+ <string name="sort_title"><b>Sortiere nach…</b></string>
<string name="sort_title_a_z">Titel (A \u2192 Z)</string>
<string name="sort_title_z_a">Titel (Z \u2192 A)</string>
<string name="sort_date_new_old">Datum (neu \u2192 alt)</string>
@@ -518,4 +532,13 @@
<string name="rating_never_label">Lass mich in Ruhe</string>
<string name="rating_later_label">Erinnere mich später</string>
<string name="rating_now_label">Sicher, los geht\'s!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">Audioregler</string>
+ <string name="playback_speed">Abspielgeschwindigkeit</string>
+ <string name="volume">Lautstärke</string>
+ <string name="left_short">L</string>
+ <string name="right_short">R</string>
+ <string name="audio_effects">Audioeffekte</string>
+ <string name="stereo_to_mono">Heruntermischen: Stereo zu Mono</string>
+ <string name="sonic_only">nur Sonic</string>
</resources>
diff --git a/core/src/main/res/values-es-rES/strings.xml b/core/src/main/res/values-es-rES/strings.xml
index 52a3f9e6f..7c851db62 100644
--- a/core/src/main/res/values-es-rES/strings.xml
+++ b/core/src/main/res/values-es-rES/strings.xml
@@ -61,7 +61,6 @@
<string name="length_prefix">Duración:\u0020</string>
<string name="size_prefix">Tamaño:\u0020</string>
<string name="processing_label">Procesando</string>
- <string name="loading_label">Cargando...</string>
<string name="save_username_password_label">Guardar nombre de usuario y contraseña</string>
<string name="close_label">Cerrar</string>
<string name="retry_label">Intentar de nuevo</string>
@@ -70,7 +69,6 @@
<string name="feed_auto_download_global">Global</string>
<string name="feed_auto_download_always">Siempre</string>
<string name="feed_auto_download_never">Nunca</string>
- <string name="send_label">Enviar...</string>
<string name="episode_cleanup_never">Nunca</string>
<string name="episode_cleanup_queue_removal">Cuando no en la lista</string>
<string name="episode_cleanup_after_listening">Despues de terminar</string>
@@ -89,7 +87,6 @@
<string name="mark_all_seen_label">Marcar todos como visto</string>
<string name="show_info_label">Información del programa</string>
<string name="remove_feed_label">Eliminar podcast</string>
- <string name="share_label">Compartir...</string>
<string name="share_link_label">Compartir el enlace de la web</string>
<string name="feed_delete_confirmation_msg">Confirme que quiere eliminar este canal y TODOS los episodios descargados del mismo.</string>
<!--actions on feeditems-->
@@ -125,7 +122,6 @@
<string name="download_error_malformed_url">URL malformada</string>
<string name="download_error_io_error">Error de E/S</string>
<string name="download_error_request_error">Error de petición</string>
- <string name="downloads_left">\u0020descargas restantes</string>
<string name="download_notification_title">Descargando datos del podcast</string>
<string name="download_report_content">%1$d descargas exitosas, %2$d fallidas</string>
<string name="download_log_title_unknown">Título desconocido</string>
@@ -212,7 +208,6 @@
<string name="select_all_label">Seleccionar todo</string>
<string name="deselect_all_label">Deseleccionar todo</string>
<string name="opml_export_label">Exportar a OPML</string>
- <string name="exporting_label">Exportando...</string>
<string name="export_error_label">Error en la exportación</string>
<string name="opml_export_success_sum">El archivo OPML se ha escrito en:\u0020</string>
<!--Sleep timer-->
@@ -244,4 +239,5 @@
<string name="all_label">Todos</string>
<string name="none_label">Ningun</string>
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml
index a99a052d4..a2abd5d85 100644
--- a/core/src/main/res/values-es/strings.xml
+++ b/core/src/main/res/values-es/strings.xml
@@ -18,7 +18,7 @@
<string name="downloads_running_label">En curso</string>
<string name="downloads_completed_label">Completadas</string>
<string name="downloads_log_label">Registro</string>
- <string name="cancel_download_label">Cancelar descarga</string>
+ <string name="cancel_download_label">Cancelar\ndescarga</string>
<string name="playback_history_label">Historial de reproducciones</string>
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">Iniciar sesión en gpodder.net</string>
@@ -41,7 +41,7 @@
<string name="open_in_browser_label">Abrir en el navegador</string>
<string name="copy_url_label">Copiar URL</string>
<string name="share_url_label">Compartir URL</string>
- <string name="copied_url_msg">URL copiada en el portapapeles.</string>
+ <string name="copied_url_msg">URL copiado en el portapapeles</string>
<string name="go_to_position_label">Ir a esta posición</string>
<!--Playback history-->
<string name="clear_history_label">Vaciar el historial</string>
@@ -67,19 +67,19 @@
<string name="length_prefix">Duración:\u0020</string>
<string name="size_prefix">Tamaño:\u0020</string>
<string name="processing_label">Procesando</string>
- <string name="loading_label">Cargando...</string>
+ <string name="loading_label">Cargando…</string>
<string name="save_username_password_label">Guardar usuario y contraseña</string>
<string name="close_label">Cerrar</string>
<string name="retry_label">Reintentar</string>
<string name="auto_download_label">Incluir en descargas automáticas</string>
<string name="auto_download_apply_to_items_title">Aplicar a episodios anteriores</string>
<string name="auto_download_apply_to_items_message">La nueva opción <i>Auto Descarga</i> se aplicará automáticamente a episodios nuevos.\n¿También desea aplicarlo a episodios anteriores?</string>
- <string name="auto_delete_label">Auto borrar episodio\n(Ignorando los ajustes globales)</string>
+ <string name="auto_delete_label">Eliminar episodio automáticamente\n(ignorar config. global)</string>
<string name="parallel_downloads_suffix">\u0020descargas paralelas</string>
<string name="feed_auto_download_global">Global</string>
<string name="feed_auto_download_always">Siempre</string>
<string name="feed_auto_download_never">Nunca</string>
- <string name="send_label">Enviar...</string>
+ <string name="send_label">Enviar…</string>
<string name="episode_cleanup_never">Nunca</string>
<string name="episode_cleanup_queue_removal">Cuando no esté en cola</string>
<string name="episode_cleanup_after_listening">Después de acabar</string>
@@ -89,7 +89,7 @@
</plurals>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">URL del canal</string>
- <string name="etxtFeedurlHint">URL del canal o del sitio web</string>
+ <string name="etxtFeedurlHint">www.ejemplo.com/feed</string>
<string name="txtvfeedurl_label">Añadir podcast por URL</string>
<string name="podcastdirectories_label">Buscar podcast en directorio</string>
<string name="podcastdirectories_descr">Es posible buscar podcasts nuevos por nombre, categoría o popularidad en el directorio de gpodder.net.</string>
@@ -97,12 +97,12 @@
<!--Actions on feeds-->
<string name="mark_all_read_label">Marcar todos como escuchado</string>
<string name="mark_all_read_msg">Se marcaron todos los episodios como escuchados</string>
- <string name="mark_all_read_confirmation_msg">Por favor, confirme que desea marcar todos los episodios como escuchados.</string>
- <string name="mark_all_read_feed_confirmation_msg">Por favor, confirme que desea marcar todos los episodios de este feed como escuchados.</string>
+ <string name="mark_all_read_confirmation_msg">Confirme que quiere marcar todos los episodios como escuchados.</string>
+ <string name="mark_all_read_feed_confirmation_msg">Confirme que quiere marcar todos los episodios de este canal como escuchados.</string>
<string name="mark_all_seen_label">Marcar todos como vistos</string>
<string name="show_info_label">Información del programa</string>
<string name="remove_feed_label">Eliminar podcast</string>
- <string name="share_label">Compartir...</string>
+ <string name="share_label">Compartir…</string>
<string name="share_link_label">Compartir el enlace de la web</string>
<string name="share_link_with_position_label">Compartir enlace con posición</string>
<string name="share_feed_url_label">Compartir URL del canal</string>
@@ -136,8 +136,10 @@
<string name="add_to_queue_label">Añadir a la cola</string>
<string name="added_to_queue_label">Añadido a la cola</string>
<string name="remove_from_queue_label">Quitar de la cola</string>
- <string name="add_to_favorite_label">Agregar a Favoritos</string>
+ <string name="add_to_favorite_label">Añadir a Favoritos</string>
+ <string name="added_to_favorites">Añadido a Favoritos</string>
<string name="remove_from_favorite_label">Eliminar de Favoritos</string>
+ <string name="removed_from_favorites">Quitado de Favoritos</string>
<string name="visit_website_label">Visitar el sitio web</string>
<string name="support_label">Añadir a Flattr</string>
<string name="enqueue_all_new">Ponerlos todos en cola</string>
@@ -164,14 +166,17 @@
<string name="download_error_unauthorized">Error de autenticación</string>
<string name="cancel_all_downloads_label">Cancelar todas las descargas</string>
<string name="download_canceled_msg">Descarga cancelada</string>
- <string name="download_canceled_autodownload_enabled_msg">Cancelada descarga\nDeshabilitada <i>Descarga Automática</i> para este ítem</string>
+ <string name="download_canceled_autodownload_enabled_msg">Descarga cancelada\nSe desactivó <i>Descarga automática</i> en este elemento</string>
<string name="download_report_title">Descargas completadas con error(es)</string>
<string name="download_report_content_title">Informe de descarga</string>
<string name="download_error_malformed_url">URL con formato incorrecto</string>
<string name="download_error_io_error">Error de E/S</string>
<string name="download_error_request_error">Error de solicitud</string>
<string name="download_error_db_access">Error de acceso a la base de datos</string>
- <string name="downloads_left">\u0020descargas restantes</string>
+ <plurals name="downloads_left">
+ <item quantity="one">Queda %d descarga</item>
+ <item quantity="other">Quedan %d descargas</item>
+ </plurals>
<string name="downloads_processing">Procesando descargas</string>
<string name="download_notification_title">Descargando datos del podcast</string>
<string name="download_report_content">%1$d descargas exitosas, %2$d fallidas</string>
@@ -183,10 +188,10 @@
<string name="authentication_notification_title">Se necesita autenticación</string>
<string name="authentication_notification_msg">Para acceder al recurso solicitado debe proporcionar un usuario y contraseña</string>
<string name="confirm_mobile_download_dialog_title">Confirmar descarga por red móvil</string>
- <string name="confirm_mobile_download_dialog_message_not_in_queue">Las descargas sobre la red móvil están deshabilitadas en ajustes.\n\nHabilitar temporalmente o sólo agregar a la cola?\n\n<small>Esta elección será recordada por 10 minutos.</small></string>
- <string name="confirm_mobile_download_dialog_message">Las descargas sobre la red móvil están deshabilitadas en ajustes.\n\nHabilitar temporalmente?\n\n<small>Esta elección será recordada por 10 minutos.</small></string>
- <string name="confirm_mobile_download_dialog_only_add_to_queue">Sólo agregar a la cola</string>
- <string name="confirm_mobile_download_dialog_enable_temporarily">Habilitar temporalmente</string>
+ <string name="confirm_mobile_download_dialog_message_not_in_queue">Se desactivaron las descargas por red de datos móviles en la configuración.\n\nPuede elegir entre añadir el episodio a la cola o permitir las descargas temporalmente.\n\n<small>Se recordará la elección por 10 minutos.</small></string>
+ <string name="confirm_mobile_download_dialog_message">Se desactivaron las descargas por red de datos móviles en la configuración.\n\n¿Quiere permitir las descargas temporalmente?\n\n<small>Se recordará la elección por 10 minutos.</small></string>
+ <string name="confirm_mobile_download_dialog_only_add_to_queue">Añadir a la cola</string>
+ <string name="confirm_mobile_download_dialog_enable_temporarily">Permitir temporalmente</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Error</string>
<string name="player_stopped_msg">No hay medios en reproducción</string>
@@ -203,9 +208,11 @@
<!--Queue operations-->
<string name="lock_queue">Bloquear cola</string>
<string name="unlock_queue">Desbloquear cola</string>
+ <string name="queue_locked">Cola bloqueada</string>
+ <string name="queue_unlocked">Cola desbloqueada</string>
<string name="clear_queue_label">Vaciar la cola</string>
<string name="undo">Deshacer</string>
- <string name="removed_from_queue">Artículo eliminado</string>
+ <string name="removed_from_queue">Se quitó el elemento</string>
<string name="move_to_top_label">Mover al principio</string>
<string name="move_to_bottom_label">Mover al final</string>
<string name="sort">Ordenar</string>
@@ -214,7 +221,7 @@
<string name="duration">Duración</string>
<string name="ascending">Ascendente</string>
<string name="descending">Descendente</string>
- <string name="clear_queue_confirmation_msg">Por favor, confirme que desea borrar TODOS los episodios de la cola</string>
+ <string name="clear_queue_confirmation_msg">Confirme que quiere borrar TODOS los episodios de la cola</string>
<!--Flattr-->
<string name="flattr_auth_label">Identificarse en Flattr</string>
<string name="flattr_auth_explanation">Pulse el botón inferior para comenzar la autenticación. Su navegador abrirá la pantalla de identificación de Flattr y le preguntará si quiere conceder permiso a AntennaPod para valorar cosas. Tras concederlo, volverá a esta pantalla automáticamente.</string>
@@ -222,7 +229,7 @@
<string name="return_home_label">Volver a la pantalla principal</string>
<string name="flattr_auth_success">Autentificación exitosa. Ya puede valorar cosas en Flattr desde la aplicación.</string>
<string name="no_flattr_token_title">No se ha encontrado un token de Flattr</string>
- <string name="no_flattr_token_notification_msg">Tu cuenta Flatter parece no estar conectada con AntennaPod. Pulsa aquí para autenticar.</string>
+ <string name="no_flattr_token_notification_msg">Parece que su cuenta de Flattr no está conectada con AntennaPod. Toque aquí para autenticarse.</string>
<string name="no_flattr_token_msg">Su cuenta de Flattr no está conectada con AntennaPod. Puede conectarla o puede visitar la página web de cada cosa para valorarla desde allí.</string>
<string name="authenticate_now_label">Autenticarse</string>
<string name="action_forbidden_title">Acción prohibida</string>
@@ -230,10 +237,10 @@
<string name="access_revoked_title">Acceso revocado</string>
<string name="access_revoked_info">Ha revocado el token de acceso de AntennaPod a su cuenta. Para completar el proceso debe eliminar esta aplicación de la lista de aplicaciones aprobadas, en los ajustes de Flattr.</string>
<!--Flattr-->
- <string name="flattr_click_success">¡Flattr una cosa!</string>
- <string name="flattr_click_success_count">¡Flattr %d cosas!</string>
+ <string name="flattr_click_success">Ha hecho Flattr en un elemento.</string>
+ <string name="flattr_click_success_count">Ha hecho Flattr en %d elementos.</string>
<string name="flattr_click_success_queue">Flattr: %s.</string>
- <string name="flattr_click_failure_count">¡Falló Flattr de %d cosas!</string>
+ <string name="flattr_click_failure_count">No se pudo hacer Flattr en %d elementos.</string>
<string name="flattr_click_failure">No se hizo Flattr: %s.</string>
<string name="flattr_click_enqueued">Se hará Flattr de esta cosa más tarde</string>
<string name="flattring_thing">Haciendo Flattr de %s</string>
@@ -244,12 +251,12 @@
<!--Variable Speed-->
<string name="download_plugin_label">Descargar complemento</string>
<string name="no_playback_plugin_title">Complemento no instalado</string>
- <string name="no_playback_plugin_or_sonic_msg">Para que funcione la reproducción a velocidad variable, es necesaria una librería de terceros o habilitar el reproductor experimental Sonic Player [Android 4.1+].\n\nPulsa «Descargar plugin» para descargar un plugin gratuito desde el Play Store\n\nCualquier problema relacionado con este plugin no es responsabilidad de AntennaPod y deberían ser reportados al autor del plugin.</string>
<string name="set_playback_speed_label">Velocidades de reproducción</string>
- <string name="enable_sonic">Habilitar Sonic</string>
+ <string name="enable_sonic">Activar Sonic</string>
<!--Empty list labels-->
<string name="no_items_label">Esta lista no tiene elementos.</string>
<string name="no_feeds_label">No se ha suscrito a ningún canal.</string>
+ <string name="no_chapters_label">Este episodio no tiene capítulos.</string>
<!--Preferences-->
<string name="other_pref">Otros</string>
<string name="about_pref">Acerca de</string>
@@ -257,7 +264,7 @@
<string name="services_label">Servicios</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Limpieza de episodios</string>
- <string name="pref_episode_cleanup_summary">Los episodios que no están en la cola ni son favoritos serían candidatos a eliminarse si hace falta espacio</string>
+ <string name="pref_episode_cleanup_summary">Los episodios que no estén en la cola ni en Favoritos pueden eliminarse si Descarga automática necesita espacio para episodios nuevos</string>
<string name="pref_pauseOnDisconnect_sum">Pausar la reproducción al desconectar los auriculares o el bluetooth</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Reanudar reproducción cuando se reconecten los auriculares</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Reanudar reproducción cuando se reconecte el bluetooth</string>
@@ -278,6 +285,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">Deshabilitar</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Ajustar intervalo</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Ajustar hora del día</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">todos los %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">a las %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Solo descargar los contenidos por WiFi</string>
<string name="pref_followQueue_title">Reproducción continua</string>
<string name="pref_downloadMediaOnWifiOnly_title">Descarga de contenidos por WiFi</string>
@@ -352,7 +361,7 @@
<string name="send_email">Enviar e-mail</string>
<string name="experimental_pref">Experimental</string>
<string name="pref_sonic_title">Sonic media player</string>
- <string name="pref_sonic_message">Usar sonic media player integrado como sustitución de Prestissimo</string>
+ <string name="pref_current_value">Valor actual: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Habilitar Flattr automático</string>
<string name="auto_flattr_after_percent">Hacer Flattr del episodio en cuanto se haya reproducido el %d por ciento</string>
@@ -379,11 +388,11 @@
<string name="opml_import_error_dir_empty">El directorio de importación está vacío.</string>
<string name="select_all_label">Seleccionar todo</string>
<string name="deselect_all_label">Deseleccionar todo</string>
- <string name="select_options_label">Seleccionar...</string>
+ <string name="select_options_label">Seleccionar…</string>
<string name="choose_file_from_filesystem">Desde el sistema de ficheros local</string>
<string name="choose_file_from_external_application">Usar aplicación externa</string>
<string name="opml_export_label">Exportar a OPML</string>
- <string name="exporting_label">Exportando...</string>
+ <string name="exporting_label">Exportando…</string>
<string name="export_error_label">Error en la exportación</string>
<string name="opml_export_success_title">Exportación a OPML exitosa</string>
<string name="opml_export_success_sum">El archivo OPML se ha escrito en:\u0020</string>
@@ -492,7 +501,8 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importando subscripciones de aplicaciones de uso específico...</string>
<string name="search_itunes_label">Buscar en iTunes</string>
- <string name="select_label"><b>Seleccionar...</b></string>
+ <string name="select_label"><b>Seleccionar…</b></string>
+ <string name="filter">Filtro</string>
<string name="all_label">Todo</string>
<string name="selected_all_label">Seleccionados todos los episodios</string>
<string name="none_label">Ninguno</string>
@@ -505,7 +515,7 @@
<string name="selected_downloaded_label">Seleccionados episodios descargados</string>
<string name="not_downloaded_label">No descargado</string>
<string name="selected_not_downloaded_label">Seleccionados episodios no descargados</string>
- <string name="sort_title"><b>Ordenar por...</b></string>
+ <string name="sort_title"><b>Ordenar por…</b></string>
<string name="sort_title_a_z">Título (A \u2192 Z)</string>
<string name="sort_title_z_a">Título (Z \u2192 A)</string>
<string name="sort_date_new_old">Fecha (Nuevo \u2192 Antiguo)</string>
@@ -518,4 +528,11 @@
<string name="rating_never_label">Déjame en paz</string>
<string name="rating_later_label">Recuérdamelo después</string>
<string name="rating_now_label">¡Venga, hagámoslo!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">Controles de audio</string>
+ <string name="playback_speed">Velocidad de reproducción</string>
+ <string name="volume">Volumen</string>
+ <string name="left_short">I</string>
+ <string name="right_short">D</string>
+ <string name="audio_effects">Efectos de audio</string>
</resources>
diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml
index 952d0e7d1..38eef41df 100644
--- a/core/src/main/res/values-fr/strings.xml
+++ b/core/src/main/res/values-fr/strings.xml
@@ -22,7 +22,9 @@
<string name="playback_history_label">Journal des lectures</string>
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">Identifiants gpodder.net</string>
- <string name="free_space_label">%1$s libre</string>
+ <string name="free_space_label">%1$s d\'espace libre</string>
+ <string name="episode_cache_full_title">L\'emplacement pour stocker les épisodes est plein</string>
+ <string name="episode_cache_full_message">Le volume maximum d\'épisode à stocker a été atteint. Vous pouvez augmenter la taille du cache dans les paramètres.</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">Publié récemment</string>
<string name="episode_filter_label">N\'afficher que les nouveaux épisodes</string>
@@ -67,7 +69,7 @@
<string name="length_prefix">Durée :\u0020</string>
<string name="size_prefix">Taille :\u0020</string>
<string name="processing_label">Traitement en cours</string>
- <string name="loading_label">En chargement...</string>
+ <string name="loading_label">Chargement...</string>
<string name="save_username_password_label">Sauvegarder votre identifiant et votre mot de passe</string>
<string name="close_label">Fermer</string>
<string name="retry_label">Réessayer</string>
@@ -79,7 +81,7 @@
<string name="feed_auto_download_global">Global</string>
<string name="feed_auto_download_always">Toujours</string>
<string name="feed_auto_download_never">Jamais</string>
- <string name="send_label">Envoyer....</string>
+ <string name="send_label">Envoyer...</string>
<string name="episode_cleanup_never">Jamais</string>
<string name="episode_cleanup_queue_removal">Quand l’épisode n\'est pas dans la liste</string>
<string name="episode_cleanup_after_listening">Après avoir terminé</string>
@@ -137,7 +139,9 @@
<string name="added_to_queue_label">Ajouté à la liste</string>
<string name="remove_from_queue_label">Supprimer de la liste</string>
<string name="add_to_favorite_label">Ajouter aux Favoris</string>
+ <string name="added_to_favorites">Ajouter aux Favoris</string>
<string name="remove_from_favorite_label">Supprimer des Favoris</string>
+ <string name="removed_from_favorites">Supprimer des Favoris</string>
<string name="visit_website_label">Visiter le site</string>
<string name="support_label">Flattr ça!</string>
<string name="enqueue_all_new">Ajouter tous à la liste</string>
@@ -171,7 +175,10 @@
<string name="download_error_io_error">Erreur d\'E/S</string>
<string name="download_error_request_error">Erreur de requête</string>
<string name="download_error_db_access">Problème d\'accès à la base de données</string>
- <string name="downloads_left">\u0020téléchargements restants</string>
+ <plurals name="downloads_left">
+ <item quantity="one">%d téléchargement restant</item>
+ <item quantity="other">%d téléchargements restants</item>
+ </plurals>
<string name="downloads_processing">Traitement des téléchargements</string>
<string name="download_notification_title">Téléchargement des données du podcast</string>
<string name="download_report_content">%1$d téléchargements réussis, %2$d échoués</string>
@@ -203,6 +210,8 @@
<!--Queue operations-->
<string name="lock_queue">Bloquer la liste</string>
<string name="unlock_queue">Débloquer la liste</string>
+ <string name="queue_locked">Liste de lecture verrouillée</string>
+ <string name="queue_unlocked">Liste de lecture déverrouillée</string>
<string name="clear_queue_label">Effacer la liste</string>
<string name="undo">Annuler</string>
<string name="removed_from_queue">Élément retiré</string>
@@ -244,12 +253,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">Télécharger une extension</string>
<string name="no_playback_plugin_title">Extension non installée</string>
- <string name="no_playback_plugin_or_sonic_msg">Pour pouvoir changer la vitesse de lecture il est nécessaire d\'installer une librairie tierce ou d\'activer le lecteur expérimental Sonic [Android 4.1+].\n\nSélectionnez \"Télécharger une extension\" pour télécharger une extension gratuite depuis le Play Store.\n\nLes problème rencontrés avec cette extension ne sont pas de la responsabilité d\'AntennaPod. Veillez à notifier le créateur de l\'extension pour tout problème.</string>
+ <string name="no_playback_plugin_or_sonic_msg">Pour pouvoir changer la vitesse de lecture il est recommandé d\'activer le lecteur interne Sonic [Android 4.1+].\n\nSinon vous pouvez télécharger l\'extension <i>Prestissimo</i> depuis le Play Store.\nLes problème rencontrés avec Prestissimo ne sont pas de la responsabilité d\'AntennaPod et sont à communiquer au créateur de l\'extension.</string>
<string name="set_playback_speed_label">Vitesses de lecture</string>
<string name="enable_sonic">Activer Sonic</string>
<!--Empty list labels-->
<string name="no_items_label">Cette liste est vide.</string>
<string name="no_feeds_label">Vous n\'êtes encore abonné à aucun flux.</string>
+ <string name="no_chapters_label">Cet épisode n\'a pas de chapitres.</string>
<!--Preferences-->
<string name="other_pref">Autres</string>
<string name="about_pref">À propos</string>
@@ -257,7 +267,7 @@
<string name="services_label">Services</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Nettoyage des épisodes</string>
- <string name="pref_episode_cleanup_summary">Les épisodes qui ne sont ni dans la liste ni dans les favoris peuvent être supprimés si l\'espace disque devient faible</string>
+ <string name="pref_episode_cleanup_summary">Les épisodes qui ne sont pas dans la liste de lecture et qui ne sont pas marqués comme favoris peuvent être supprimés si l\'espace est insuffisant pour le téléchargement automatique de nouveaux épisodes</string>
<string name="pref_pauseOnDisconnect_sum">Interrompre la lecture lorsque le casque ou le bluetooth sont déconnectés</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Reprendre la lecture quand les écouteurs sont reconnectés</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Reprendre la lecture quand le Bluetooth se reconnecte</string>
@@ -278,6 +288,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">Désactiver</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Définir intervalle</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Régler l\'heure</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">toutes les %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">à %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Ne télécharger les épisodes que par Wi-Fi</string>
<string name="pref_followQueue_title">Lecture continue</string>
<string name="pref_downloadMediaOnWifiOnly_title">Téléchargement en Wi-Fi</string>
@@ -352,7 +364,8 @@
<string name="send_email">Envoyer e-mail</string>
<string name="experimental_pref">Expérimental</string>
<string name="pref_sonic_title">Lecteur multimédia Sonic</string>
- <string name="pref_sonic_message">Utiliser le lecteur multimédia interne Sonic au lieu de Prestissimo</string>
+ <string name="pref_sonic_message">Utiliser le lecteur interne Sonic au lieu du lecteur natif d\'Android et de Prestissimo</string>
+ <string name="pref_current_value">Valeur actuelle : %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Activer le paiement flattr automatique</string>
<string name="auto_flattr_after_percent">Lancer un paiement flattr pour un épisode dès que %d de l\'épisode a été joué</string>
@@ -379,11 +392,11 @@
<string name="opml_import_error_dir_empty">Le répertoire d\'importation est vide.</string>
<string name="select_all_label">Tout choisir</string>
<string name="deselect_all_label">Ne rien choisir</string>
- <string name="select_options_label">Sélectionner...</string>
+ <string name="select_options_label">Choisir...</string>
<string name="choose_file_from_filesystem">Depuis le système de fichier local</string>
<string name="choose_file_from_external_application">Utiliser une application tierce</string>
<string name="opml_export_label">Exportation OPML</string>
- <string name="exporting_label">Exportation en cours...</string>
+ <string name="exporting_label">Export en cours...</string>
<string name="export_error_label">Erreur d\'exportation</string>
<string name="opml_export_success_title">Exportation OPML réussie.</string>
<string name="opml_export_success_sum">Le fichier .opml a été écrit ici :\u0020</string>
@@ -464,7 +477,7 @@
<!--Online feed view-->
<string name="subscribe_label">S\'abonner</string>
<string name="subscribed_label">Abonné</string>
- <string name="downloading_label">Téléchargement en cours</string>
+ <string name="downloading_label">En cours de téléchargement...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Afficher chapitres</string>
<string name="show_shownotes_label">Afficher notes d\'épisode</string>
@@ -492,7 +505,8 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importation des abonnements à partir d\'applications à usage unique...</string>
<string name="search_itunes_label">Chercher sur iTunes</string>
- <string name="select_label"><b>Sélectionner ...</b></string>
+ <string name="select_label"><b>Sélectionner…</b></string>
+ <string name="filter">Filtrer</string>
<string name="all_label">Tout</string>
<string name="selected_all_label">Tous les épisodes ont été sélectionné</string>
<string name="none_label">Aucun</string>
@@ -505,7 +519,7 @@
<string name="selected_downloaded_label">Episodes téléchargés sélectionnés</string>
<string name="not_downloaded_label">Non téléchargés</string>
<string name="selected_not_downloaded_label">Épisodes non téléchargés sélectionnés</string>
- <string name="sort_title"><b>Trier par ...</b></string>
+ <string name="sort_title"><b>Trier par...</b></string>
<string name="sort_title_a_z">Titre (A \u2192 Z)</string>
<string name="sort_title_z_a">Titre (Z \u2192 A)</string>
<string name="sort_date_new_old">Date (Nouveau \u2192 Ancien)</string>
@@ -518,4 +532,13 @@
<string name="rating_never_label">Laissez moi tranquille</string>
<string name="rating_later_label">Rappelez le moi plus tard</string>
<string name="rating_now_label">Okay, c\'est parti !</string>
+ <!--Audio controls-->
+ <string name="audio_controls">Contrôles audio</string>
+ <string name="playback_speed">Vitesse de lecture</string>
+ <string name="volume">Volume</string>
+ <string name="left_short">G</string>
+ <string name="right_short">D</string>
+ <string name="audio_effects">Effets audio</string>
+ <string name="stereo_to_mono">Mixage : stéréo à mono</string>
+ <string name="sonic_only">Sonic seulement</string>
</resources>
diff --git a/core/src/main/res/values-hi-rIN/strings.xml b/core/src/main/res/values-hi-rIN/strings.xml
index 9fa3d716f..87aa77caf 100644
--- a/core/src/main/res/values-hi-rIN/strings.xml
+++ b/core/src/main/res/values-hi-rIN/strings.xml
@@ -41,7 +41,6 @@
<string name="length_prefix">लंबाई:\u0020</string>
<string name="size_prefix">साइज:\u0020</string>
<string name="processing_label">प्रसंस्करण</string>
- <string name="loading_label">लोड हो रहा है ...</string>
<string name="save_username_password_label">यूज़रनेम और पासवर्ड सहेजें</string>
<string name="close_label">बंद करें</string>
<string name="retry_label">पुन: प्रयास</string>
@@ -95,7 +94,6 @@
<string name="download_error_io_error">आईओ त्रुटि</string>
<string name="download_error_request_error">अनुरोध त्रुटि</string>
<string name="download_error_db_access">डेटाबेस का उपयोग त्रुटि</string>
- <string name="downloads_left">\u0020Downloads छोड़ा</string>
<string name="download_notification_title">पॉडकास्ट डेटा डाउनलोड करें</string>
<string name="download_report_content">%1$d डाउनलोड सफल रहा, %2$d में विफल रहा है</string>
<string name="download_log_title_unknown">अज्ञात शीर्षक</string>
@@ -212,7 +210,6 @@
<string name="select_all_label">सभी का चयन करें</string>
<string name="deselect_all_label">सभी का चयन रद्द करें</string>
<string name="opml_export_label">OPML निर्यात</string>
- <string name="exporting_label">निर्यात ...</string>
<string name="export_error_label">निर्यात त्रुटि</string>
<string name="opml_export_success_sum">.ompl फ़ाइल लिखा गया था:\u0020</string>
<!--Sleep timer-->
@@ -266,10 +263,10 @@
<!--Online feed view-->
<string name="subscribe_label">सदस्यता लें</string>
<string name="subscribed_label">सदस्यता ली गई</string>
- <string name="downloading_label">डाउनलोड कर रहा है ...</string>
<!--Content descriptions for image buttons-->
<!--Feed information screen-->
<!--Progress information-->
<!--AntennaPodSP-->
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-it-rIT/strings.xml b/core/src/main/res/values-it-rIT/strings.xml
index adf4bd748..d7aff71cf 100644
--- a/core/src/main/res/values-it-rIT/strings.xml
+++ b/core/src/main/res/values-it-rIT/strings.xml
@@ -63,7 +63,6 @@
<string name="length_prefix">Durata:\u0020</string>
<string name="size_prefix">Dimensione:\u0020</string>
<string name="processing_label">Elaborazione in corso</string>
- <string name="loading_label">Caricamento in corso...</string>
<string name="save_username_password_label">Salva nome utente e password</string>
<string name="close_label">Chiudi</string>
<string name="retry_label">Riprova</string>
@@ -73,7 +72,6 @@
<string name="feed_auto_download_global">Globale</string>
<string name="feed_auto_download_always">Sempre</string>
<string name="feed_auto_download_never">Mai</string>
- <string name="send_label">Invia...</string>
<string name="episode_cleanup_never">Mai</string>
<plurals name="episode_cleanup_days_after_listening">
<item quantity="one">1 giorno dopo il completamento</item>
@@ -92,7 +90,6 @@
<string name="mark_all_seen_label">Segna tutti come visti</string>
<string name="show_info_label">Informazioni</string>
<string name="remove_feed_label">Rimuovi un podcast</string>
- <string name="share_label">Condividi...</string>
<string name="share_link_label">Condividi il link al sito</string>
<string name="share_link_with_position_label">Condividi il Link con la Posizione</string>
<string name="share_feed_url_label">Condividi URL del Feed</string>
@@ -159,7 +156,6 @@
<string name="download_error_io_error">Errore IO</string>
<string name="download_error_request_error">Errore della richiesta</string>
<string name="download_error_db_access">Errore di accesso al database</string>
- <string name="downloads_left">\u0020Download rimasti</string>
<string name="downloads_processing">Elaborazione dei download in corso</string>
<string name="download_notification_title">Download podcast in corso</string>
<string name="download_report_content">%1$d download con successo, %2$d falliti</string>
@@ -323,7 +319,6 @@
<string name="choose_file_from_filesystem">Dal filesystem locale</string>
<string name="choose_file_from_external_application">Utilizza un\'applicazione esterna</string>
<string name="opml_export_label">Esportazione su OPML</string>
- <string name="exporting_label">Esportazione in corso...</string>
<string name="export_error_label">Errore di esportazione</string>
<string name="opml_export_success_title">Esportazione OPML avvenuta con successo.</string>
<string name="opml_export_success_sum">Il file .opml è stato scritto su:\u0020</string>
@@ -395,7 +390,6 @@
<!--Online feed view-->
<string name="subscribe_label">Abbonati</string>
<string name="subscribed_label">Abbonato</string>
- <string name="downloading_label">Download in corso...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Mostra i capitoli</string>
<string name="show_shownotes_label">Mostra le note dell\'episodio</string>
@@ -422,7 +416,6 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importazione di sottoscrizioni da applicazioni monouso in corso...</string>
<string name="search_itunes_label">Cerca su iTunes</string>
- <string name="select_label"><b>Seleziona ...</b></string>
<string name="all_label">Tutti</string>
<string name="selected_all_label">Tutti gli Episodi Selezionati</string>
<string name="none_label">Nessuno</string>
@@ -436,4 +429,5 @@
<string name="sort_duration_short_long">Durata (Short \u2192 Long)</string>
<string name="sort_duration_long_short">Durata (Long \u2192 Short)</string>
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml
index 52a6a170a..6adc16fd6 100644
--- a/core/src/main/res/values-iw-rIL/strings.xml
+++ b/core/src/main/res/values-iw-rIL/strings.xml
@@ -56,7 +56,6 @@
<string name="length_prefix">אורך:\u0020</string>
<string name="size_prefix">גודל:\u0020</string>
<string name="processing_label">מעבד</string>
- <string name="loading_label">טוען...</string>
<string name="save_username_password_label">שמור שם משתמש וססמה</string>
<string name="close_label">סגור</string>
<string name="retry_label">נסה שוב</string>
@@ -81,7 +80,6 @@
<string name="mark_all_read_feed_confirmation_msg">אנא אשר שאתה רוצה לסמן את כל פרקים בהזנה זו כנקראים.</string>
<string name="show_info_label">הצג מידע</string>
<string name="remove_feed_label">הסר פודקאסט</string>
- <string name="share_label">שתף...</string>
<string name="share_link_label">שתף קישור אתר</string>
<string name="feed_delete_confirmation_msg">אשר מחיקת הזנה זו ואת כל פרקי ההזנה שהורדת.</string>
<string name="feed_remover_msg">הסר הזנה</string>
@@ -128,7 +126,6 @@
<string name="download_error_io_error">שגיאת קלט פלט</string>
<string name="download_error_request_error">שגיאת בקשה</string>
<string name="download_error_db_access">שגיאת גישה למסד הנתונים</string>
- <string name="downloads_left">הורדות נותרוu0020\</string>
<string name="downloads_processing">מעבד הורדות</string>
<string name="download_notification_title">מוריד פודקאסט</string>
<string name="download_report_content">%1$d הורדות הצליחו, %2$d ניכשלו</string>
@@ -289,7 +286,6 @@
<string name="choose_file_from_filesystem">ממערכת הקבצים המקומית</string>
<string name="choose_file_from_external_application">השתמש באפליקציה חיצונית</string>
<string name="opml_export_label">יצוא OPML</string>
- <string name="exporting_label">מייצא...</string>
<string name="export_error_label">שגיאת יצוא</string>
<string name="opml_export_success_title">יצוא OPML הצליח.</string>
<string name="opml_export_success_sum">קובץ OPML נכתב ל:\u0020</string>
@@ -345,7 +341,6 @@
<!--Online feed view-->
<string name="subscribe_label">הרשם</string>
<string name="subscribed_label">נרשם</string>
- <string name="downloading_label">מוריד...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">הצג פרקים</string>
<string name="show_shownotes_label">הצג הערות פרק</string>
@@ -373,4 +368,5 @@
<string name="sp_apps_importing_feeds_msg">מייבא רישום מאפליקציות יעודיות...</string>
<string name="search_itunes_label">חפש בiTunes</string>
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-ja/strings.xml b/core/src/main/res/values-ja/strings.xml
index 0bedd912f..3e3b5b97f 100644
--- a/core/src/main/res/values-ja/strings.xml
+++ b/core/src/main/res/values-ja/strings.xml
@@ -23,6 +23,8 @@
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">gpodder.net ログイン</string>
<string name="free_space_label">%1$s 空き</string>
+ <string name="episode_cache_full_title">エピソードキャッシュが一杯です</string>
+ <string name="episode_cache_full_message">エピソードキャッシュが制限に達しました。設定でキャッシュサイズを増やすことができます。</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">最近公開された</string>
<string name="episode_filter_label">新しいエピソードのみ表示</string>
@@ -67,7 +69,7 @@
<string name="length_prefix">長さ:\u0020</string>
<string name="size_prefix">サイズ:\u0020</string>
<string name="processing_label">処理中</string>
- <string name="loading_label">読み込み中...</string>
+ <string name="loading_label">ロード中…</string>
<string name="save_username_password_label">ユーザ名とパスワードを保存する</string>
<string name="close_label">閉じる</string>
<string name="retry_label">再試行</string>
@@ -79,7 +81,7 @@
<string name="feed_auto_download_global">全般</string>
<string name="feed_auto_download_always">常に</string>
<string name="feed_auto_download_never">しない</string>
- <string name="send_label">送信...</string>
+ <string name="send_label">送信…</string>
<string name="episode_cleanup_never">しない</string>
<string name="episode_cleanup_queue_removal">キューにない時</string>
<string name="episode_cleanup_after_listening">完了後</string>
@@ -101,7 +103,7 @@
<string name="mark_all_seen_label">参照済としてマーク</string>
<string name="show_info_label">情報を表示</string>
<string name="remove_feed_label">ポッドキャストを削除</string>
- <string name="share_label">共有...</string>
+ <string name="share_label">共有…</string>
<string name="share_link_label">Webサイトのリンクを共有</string>
<string name="share_link_with_position_label">場所とリンクを共有</string>
<string name="share_feed_url_label">フィード URLを共有</string>
@@ -136,7 +138,9 @@
<string name="added_to_queue_label">キューに追加しました</string>
<string name="remove_from_queue_label">キューから削除</string>
<string name="add_to_favorite_label">お気に入りに追加</string>
+ <string name="added_to_favorites">お気に入りに追加</string>
<string name="remove_from_favorite_label">お気に入りから削除</string>
+ <string name="removed_from_favorites">お気に入りから削除</string>
<string name="visit_website_label">Webサイトを訪問</string>
<string name="support_label">これをFlattr</string>
<string name="enqueue_all_new">すべてキューに入れる</string>
@@ -170,7 +174,9 @@
<string name="download_error_io_error">IOエラー</string>
<string name="download_error_request_error">リクエストエラー</string>
<string name="download_error_db_access">データベース アクセスエラー</string>
- <string name="downloads_left">\u0020ダウンロード残</string>
+ <plurals name="downloads_left">
+ <item quantity="other">%d ダウンロード残</item>
+ </plurals>
<string name="downloads_processing">ダウンロード処理中</string>
<string name="download_notification_title">ポッドキャストデータをダウンロード中</string>
<string name="download_report_content">%1$d ダウンロード成功, %2$d 失敗</string>
@@ -202,6 +208,8 @@
<!--Queue operations-->
<string name="lock_queue">キューをロック</string>
<string name="unlock_queue">キューのロックを解除</string>
+ <string name="queue_locked">キューをロックしました</string>
+ <string name="queue_unlocked">キューのロックを解除しました</string>
<string name="clear_queue_label">キューをクリア</string>
<string name="undo">元に戻す</string>
<string name="removed_from_queue">アイテムを削除しました</string>
@@ -243,12 +251,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">プラグインをダウンロード</string>
<string name="no_playback_plugin_title">プラグイン はインストールされていません</string>
- <string name="no_playback_plugin_or_sonic_msg">再生速度の変更が機能するには、サードパーティのライブラリをインストールするか、実験的に Sonic プレーヤー [Android 4.1+] を有効にする必要があります。\n\n\'プラグインをダウンロード\' をタップして、Google Playから無料のプラグインをダウンロードしてください\n\nこのプラグインを使用して見つかったすべての問題は AntennaPodの責任ではなく、プラグインのオーナーに報告すべきです。</string>
+ <string name="no_playback_plugin_or_sonic_msg">再生速度の変更を機能させるには、内蔵の Sonic メディアプレーヤーを有効にすることを推奨します [Android 4.1+]。代わりに、Google Play からサードパーティのプラグイン <i>Prestissimo</i> をダウンロードすることができます。\nPrestissimo での問題は AntennaPod の責任ではなく、プラグインのオーナーに報告すべきです。</string>
<string name="set_playback_speed_label">再生速度</string>
<string name="enable_sonic">Sonic を有効にする</string>
<!--Empty list labels-->
<string name="no_items_label">このリストにはアイテムがありません。</string>
<string name="no_feeds_label">まだフィードを何も購読していません。</string>
+ <string name="no_chapters_label">このエピソードにチャプターはありません。</string>
<!--Preferences-->
<string name="other_pref">その他</string>
<string name="about_pref">について</string>
@@ -256,7 +265,7 @@
<string name="services_label">サービス</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">エピソード クリーンアップ</string>
- <string name="pref_episode_cleanup_summary">空き容量が必要な場合、キューに含まれていおらず、お気に入りでもないエピソードは、削除の対象になります</string>
+ <string name="pref_episode_cleanup_summary">キューに含まれておらず、お気に入りではないエピソードは、自動ダウンロードで新しいエピソードのためにスペースが必要な場合、除去の対象になります</string>
<string name="pref_pauseOnDisconnect_sum">ヘッドフォンまたはBluetoothの接続が切断された時、再生を一時停止します</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">ヘッドフォンが再接続された時に再生を再開します</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Bluetoothが再接続された時に再生を再開します</string>
@@ -277,6 +286,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">無効</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">間隔をセット</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">時間をセット</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">%1$s ごと</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">%1$s に</string>
<string name="pref_downloadMediaOnWifiOnly_sum">WiFi接続時のみメディアファイルをダウンロードします</string>
<string name="pref_followQueue_title">連続再生</string>
<string name="pref_downloadMediaOnWifiOnly_title">WiFiメディアダウンロード</string>
@@ -351,7 +362,8 @@
<string name="send_email">メールを送信</string>
<string name="experimental_pref">実験的</string>
<string name="pref_sonic_title">Sonic メディアプレーヤー</string>
- <string name="pref_sonic_message">Prestissimo の代わりに、内蔵の Sonic メディアプレーヤーを使用します</string>
+ <string name="pref_sonic_message">Android 標準のメディアプレーヤーと Prestissimo の代わりに、内蔵のソニックメディアプレーヤーを使用します</string>
+ <string name="pref_current_value">現在の値: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">自動Flattrを有効にする</string>
<string name="auto_flattr_after_percent">%d %再生したらエピソードをFlattr </string>
@@ -378,11 +390,11 @@
<string name="opml_import_error_dir_empty">インポートディレクトリが空です。</string>
<string name="select_all_label">すべてを選択</string>
<string name="deselect_all_label">選択解除</string>
- <string name="select_options_label">選択 ...</string>
+ <string name="select_options_label">選択…</string>
<string name="choose_file_from_filesystem">ローカル ファイルシステムから</string>
<string name="choose_file_from_external_application">外部アプリケーションを使用する</string>
<string name="opml_export_label">OPMLエクスポート</string>
- <string name="exporting_label">エクスポート中...</string>
+ <string name="exporting_label">エクスポート中…</string>
<string name="export_error_label">エクスポートエラー</string>
<string name="opml_export_success_title">OPMLをエクスポートしました。</string>
<string name="opml_export_success_sum">.opml ファイルを書き込みました:\u0020</string>
@@ -460,7 +472,7 @@
<!--Online feed view-->
<string name="subscribe_label">購読</string>
<string name="subscribed_label">購読しました</string>
- <string name="downloading_label">ダウンロード中...</string>
+ <string name="downloading_label">ダウンロード中…</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">チャプターを表示</string>
<string name="show_shownotes_label">ショーノートを表示</string>
@@ -488,7 +500,8 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">単一目的のアプリから購読をインポート中…</string>
<string name="search_itunes_label">iTunes を検索</string>
- <string name="select_label"><b>選択 ...</b></string>
+ <string name="select_label"><b>選択…</b></string>
+ <string name="filter">フィルター</string>
<string name="all_label">すべて</string>
<string name="selected_all_label">すべてのエピソードを選択しました</string>
<string name="none_label">なし</string>
@@ -501,7 +514,7 @@
<string name="selected_downloaded_label">ダウンロード済のエピソードを選択しました</string>
<string name="not_downloaded_label">ダウンロードしていません</string>
<string name="selected_not_downloaded_label">ダウンロードしていないエピソードを選択しました</string>
- <string name="sort_title"><b>並び替え順 ...</b></string>
+ <string name="sort_title"><b>並び替え…</b></string>
<string name="sort_title_a_z">タイトル (A \u2192 Z)</string>
<string name="sort_title_z_a">タイトル (Z \u2192 A)</string>
<string name="sort_date_new_old">日付 (新 \u2192 旧)</string>
@@ -514,4 +527,13 @@
<string name="rating_never_label">構わないで</string>
<string name="rating_later_label">後で確認する</string>
<string name="rating_now_label">もちろん、します!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">自動コントロール</string>
+ <string name="playback_speed">再生速度</string>
+ <string name="volume">音量</string>
+ <string name="left_short">左</string>
+ <string name="right_short">右</string>
+ <string name="audio_effects">オーディオエフェクト</string>
+ <string name="stereo_to_mono">ダウンミックス: ステレオからモノラル</string>
+ <string name="sonic_only">Sonic のみ</string>
</resources>
diff --git a/core/src/main/res/values-ko/strings.xml b/core/src/main/res/values-ko/strings.xml
index a19645d8f..6802cc36d 100644
--- a/core/src/main/res/values-ko/strings.xml
+++ b/core/src/main/res/values-ko/strings.xml
@@ -22,6 +22,9 @@
<string name="playback_history_label">재생 기록</string>
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">gpodder.net 로그인</string>
+ <string name="free_space_label">%1$s 남음</string>
+ <string name="episode_cache_full_title">에피소드 캐시 꽉 참</string>
+ <string name="episode_cache_full_message">에피소드 캐시 한계값에 도달했습니다. 설정에서 캐시 크기를 늘릴 수 있습니다.</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">최근에 발표</string>
<string name="episode_filter_label">새 에피소드만 표시</string>
@@ -66,7 +69,7 @@
<string name="length_prefix">길이:\u0020</string>
<string name="size_prefix">크기:\u0020</string>
<string name="processing_label">처리 중</string>
- <string name="loading_label">읽어들이는 중...</string>
+ <string name="loading_label">읽어들이는 중…</string>
<string name="save_username_password_label">사용자 이름 및 암호 저장</string>
<string name="close_label">닫기</string>
<string name="retry_label">다시 시도</string>
@@ -78,7 +81,7 @@
<string name="feed_auto_download_global">전체 설정</string>
<string name="feed_auto_download_always">항상</string>
<string name="feed_auto_download_never">안 함</string>
- <string name="send_label">보내기...</string>
+ <string name="send_label">보내기…</string>
<string name="episode_cleanup_never">안 함</string>
<string name="episode_cleanup_queue_removal">대기열에 없을 때</string>
<string name="episode_cleanup_after_listening">재생이 끝나고 나서</string>
@@ -100,7 +103,7 @@
<string name="mark_all_seen_label">모두 봤다고 표시</string>
<string name="show_info_label">정보 표시</string>
<string name="remove_feed_label">팟캐스트 제거</string>
- <string name="share_label">공유...</string>
+ <string name="share_label">공유…</string>
<string name="share_link_label">홈페이지 링크 공유</string>
<string name="share_link_with_position_label">위치와 같이 링크 공유</string>
<string name="share_feed_url_label">피드 URL 공유</string>
@@ -135,7 +138,9 @@
<string name="added_to_queue_label">대기열에 추가함</string>
<string name="remove_from_queue_label">대기열에서 제거</string>
<string name="add_to_favorite_label">즐겨찾기에 추가</string>
+ <string name="added_to_favorites">즐겨찾기에 추가함</string>
<string name="remove_from_favorite_label">즐겨찾기에서 제거</string>
+ <string name="removed_from_favorites">즐겨찾기에서 제거함</string>
<string name="visit_website_label">홈페이지 보기</string>
<string name="support_label">Flattr하기</string>
<string name="enqueue_all_new">모두 대기열에 추가</string>
@@ -169,7 +174,9 @@
<string name="download_error_io_error">입출력 오류</string>
<string name="download_error_request_error">요청 오류</string>
<string name="download_error_db_access">데이터베이스 접근 오류</string>
- <string name="downloads_left">개\u0020다운로드 남음</string>
+ <plurals name="downloads_left">
+ <item quantity="other">다운로드 %d개 남음</item>
+ </plurals>
<string name="downloads_processing">다운로드 처리 중</string>
<string name="download_notification_title">팟캐스트 데이터 다운로드 중</string>
<string name="download_report_content">다운로드 %1$d개 성공, %2$d개 실패</string>
@@ -201,6 +208,8 @@
<!--Queue operations-->
<string name="lock_queue">대기열 잠그기</string>
<string name="unlock_queue">대기열 잠금 해제</string>
+ <string name="queue_locked">대기열 잠겨짐</string>
+ <string name="queue_unlocked">대기열 잠금 풀림</string>
<string name="clear_queue_label">대기열 지우기</string>
<string name="undo">실행 취소</string>
<string name="removed_from_queue">항목을 제거했습니다</string>
@@ -242,12 +251,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">플러그인 다운로드</string>
<string name="no_playback_plugin_title">플러그인을 설치하지 않았습니다</string>
- <string name="no_playback_plugin_or_sonic_msg">가변 재생 속도를 사용하려면 제3자 라이브러리를 설치하거나 실험적인 \'소닉 플레이어[Android 4.1 이상]\'를 사용해야 합니다. \'플러그인 다운로드\'를 눌러 Play Store에서 무료 플러그인을 다운로드하십시오. 플러그인을 사용해서 발생하는 모든 문제는 AntennaPod의 책임이 아니며 플러그인 제작자에게 보고하십시오.</string>
+ <string name="no_playback_plugin_or_sonic_msg">여러가지 속도로 재생이 동작하려면 내부의 소닉 미디어 플레이어를 활성화해야 합니다. [Android 4.1 이상]\n\n아니면, 서드파티 플러그인 <i>Prestissimo</i>를 플레이스토어에서 다운로드할 수도 있습니다.\nPrestissimo에서 발생하는 문제는 안테나팟의 책임이 아니므로 플러그인 개발자에게 문의하십시오.</string>
<string name="set_playback_speed_label">재생 속도</string>
<string name="enable_sonic">소닉 플레이어 사용</string>
<!--Empty list labels-->
<string name="no_items_label">이 목록에 항목이 없습니다.</string>
<string name="no_feeds_label">아직 어떤 피드도 구독하지 않았습니다.</string>
+ <string name="no_chapters_label">에피소드에 챕터가 없습니다.</string>
<!--Preferences-->
<string name="other_pref">기타</string>
<string name="about_pref">정보</string>
@@ -255,7 +265,7 @@
<string name="services_label">서비스</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">에피소드 정리</string>
- <string name="pref_episode_cleanup_summary">여유 공간이 필요할 때, 대기열에 있지 않고 즐겨찾기도 아닌 에피소드가 삭제 대상이 됩니다.</string>
+ <string name="pref_episode_cleanup_summary">대기열에 없고 즐겨찾기에 넣지 않은 에피소드는 자동 다운로드에서 새 에피소드에 공간이 필요할 경우 제거될 수 있습니다.</string>
<string name="pref_pauseOnDisconnect_sum">헤드폰이나 블루투스가 연결 해제되었을 경우 일시정지</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">헤드폰 다시 연결할 때 재생 계속</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">블루투스가 다시 연결되면 재생 재개 </string>
@@ -276,6 +286,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">사용 안 함</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">주기 지정</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">하루 중 시각 지정</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">매 %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">%1$s에서</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Wi-Fi를 통해서만 미디어 파일 다운로드</string>
<string name="pref_followQueue_title">연속 재생</string>
<string name="pref_downloadMediaOnWifiOnly_title">Wi-Fi 미디어 다운로드</string>
@@ -350,7 +362,8 @@
<string name="send_email">전자메일 보내기</string>
<string name="experimental_pref">실험적 기능</string>
<string name="pref_sonic_title">소닉 미디어 플레이어</string>
- <string name="pref_sonic_message">Prestissimo 대신 내장 소닉 미디어 플레이어 사용</string>
+ <string name="pref_sonic_message">내장 소닉 미디어 플레이어를 안드로이드 고유 미디어 플레이어와 Prestissimo 대신 사용합니다.</string>
+ <string name="pref_current_value">현재 값: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">자동 flattr 사용</string>
<string name="auto_flattr_after_percent">%d 퍼센트를 재생하면 에피소드에 flattr합니다</string>
@@ -377,11 +390,11 @@
<string name="opml_import_error_dir_empty">가져오기 디렉터리가 비어 있습니다.</string>
<string name="select_all_label">모두 선택</string>
<string name="deselect_all_label">모두 선택 해제</string>
- <string name="select_options_label">선택...</string>
+ <string name="select_options_label">선택…</string>
<string name="choose_file_from_filesystem">로컬 파일시스템에서</string>
<string name="choose_file_from_external_application">외부 앱 사용</string>
<string name="opml_export_label">OPML 내보내기</string>
- <string name="exporting_label">내보내는 중...</string>
+ <string name="exporting_label">내보내는 중…</string>
<string name="export_error_label">내보내기 오류</string>
<string name="opml_export_success_title">OPML 내보내기가 성공했습니다.</string>
<string name="opml_export_success_sum">OPML 파일을 다음에 저장했습니다:\u0020</string>
@@ -459,7 +472,7 @@
<!--Online feed view-->
<string name="subscribe_label">구독</string>
<string name="subscribed_label">구독함</string>
- <string name="downloading_label">다운로드하는 중...</string>
+ <string name="downloading_label">다운로드하는 중…</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">챕터 보이기</string>
<string name="show_shownotes_label">프로그램 메모 표시</string>
@@ -487,7 +500,8 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">단일 용도 앱에서 구독 정보를 가져옵니다...</string>
<string name="search_itunes_label">iTunes 검색</string>
- <string name="select_label"><b>선택 ...</b></string>
+ <string name="select_label"><b>선택…</b></string>
+ <string name="filter">필터</string>
<string name="all_label">모두</string>
<string name="selected_all_label">모든 에피소드 선택</string>
<string name="none_label">없음</string>
@@ -500,7 +514,7 @@
<string name="selected_downloaded_label">다운로드한 에피소드 선택</string>
<string name="not_downloaded_label">다운로드 안 함</string>
<string name="selected_not_downloaded_label">다운로드 안 한 에피소드 선택</string>
- <string name="sort_title"><b>정렬 ...</b></string>
+ <string name="sort_title"><b>정렬…</b></string>
<string name="sort_title_a_z">제목 (A \u2192 Z)</string>
<string name="sort_title_z_a">제목 (Z \u2192 A)</string>
<string name="sort_date_new_old">시각 (최근 \u2192 과거)</string>
@@ -513,4 +527,13 @@
<string name="rating_never_label">안 할래요</string>
<string name="rating_later_label">나중에 알림</string>
<string name="rating_now_label">해봅시다!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">오디오 조정</string>
+ <string name="playback_speed">재생 속도</string>
+ <string name="volume">볼륨</string>
+ <string name="left_short">좌</string>
+ <string name="right_short">우</string>
+ <string name="audio_effects">오디오 효과</string>
+ <string name="stereo_to_mono">다운믹스: 스테레오에서 모노로</string>
+ <string name="sonic_only">소닉 전용</string>
</resources>
diff --git a/core/src/main/res/values-nb/strings.xml b/core/src/main/res/values-nb/strings.xml
index 698e45e46..e3aa1ca5d 100644
--- a/core/src/main/res/values-nb/strings.xml
+++ b/core/src/main/res/values-nb/strings.xml
@@ -67,7 +67,6 @@
<string name="length_prefix">Lengde:\u0020</string>
<string name="size_prefix">Størrelse:\u0020</string>
<string name="processing_label">Behandler</string>
- <string name="loading_label">Laster opp...</string>
<string name="save_username_password_label">Lagre brukernavn og passord</string>
<string name="close_label">Lukk</string>
<string name="retry_label">Prøv igjen</string>
@@ -79,7 +78,6 @@
<string name="feed_auto_download_global">Global</string>
<string name="feed_auto_download_always">Alltid</string>
<string name="feed_auto_download_never">Aldri</string>
- <string name="send_label">Send ...</string>
<string name="episode_cleanup_never">AldriAldri</string>
<string name="episode_cleanup_queue_removal">Når ikke i kø</string>
<string name="episode_cleanup_after_listening">Etter den er ferdig</string>
@@ -102,7 +100,6 @@
<string name="mark_all_seen_label">Marker alle som sett</string>
<string name="show_info_label">Vis informasjon</string>
<string name="remove_feed_label">Fjern podcast</string>
- <string name="share_label">Del ...</string>
<string name="share_link_label">Del lenke</string>
<string name="share_link_with_position_label">Del lenke med plassering</string>
<string name="share_feed_url_label">Del strømmens URL</string>
@@ -171,7 +168,6 @@
<string name="download_error_io_error">IO feil</string>
<string name="download_error_request_error">Forespørselfeil</string>
<string name="download_error_db_access">Tilgangsfeil for database</string>
- <string name="downloads_left">\u0020Nedlastninger igjen</string>
<string name="downloads_processing">Behandler nedlastninger</string>
<string name="download_notification_title">Laster ned data til podcast</string>
<string name="download_report_content">%1$d nedlastninger lyktes, %2$d mislyktes</string>
@@ -244,7 +240,6 @@
<!--Variable Speed-->
<string name="download_plugin_label">Last ned programtillegg</string>
<string name="no_playback_plugin_title">Programtillegg er ikke installert</string>
- <string name="no_playback_plugin_or_sonic_msg">For at variabel avspillingshastighet skal fungere må du installere et tredjepartsbibliotek eller aktivere den eksperimentelle Sonic-avspilleren [Android 4.1+].\n\nTrykk på «Last ned programtillegg» for å laste ned en gratis tilleggsmodul fra Google Play.\n\nEventuelle problemer som måtte oppstå på grunn av denne modulen er ikke AntennaPods ansvar og skal rapporteres til eieren av modulen.</string>
<string name="set_playback_speed_label">Avspillingshastigheter</string>
<string name="enable_sonic">Skru på Sonic</string>
<!--Empty list labels-->
@@ -257,7 +252,6 @@
<string name="services_label">Tjenester</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Episodeopprydding</string>
- <string name="pref_episode_cleanup_summary">Episoder som ikke er i køen og ikke er merket som favoritt vil være markert for sletting dersom lagringsplass trengs</string>
<string name="pref_pauseOnDisconnect_sum">Sett playback på pause når hodetelefoner eller bluetooth er frakoblet</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Gjenoppta avspilling når hodetelefoner gjeninnkoples</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Fortsett avspilling når bluetooth er tilkoblet igjen</string>
@@ -352,7 +346,6 @@
<string name="send_email">Send e-post</string>
<string name="experimental_pref">Eksperimentell</string>
<string name="pref_sonic_title">Sonic medieavspiller</string>
- <string name="pref_sonic_message">Bruk den innebygde Sonic medieavspilleren som en erstatning for Prestissimo</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Aktiver automatisk flattring</string>
<string name="auto_flattr_after_percent">Flattre episode så snart %d prosent er avspilt</string>
@@ -379,11 +372,9 @@
<string name="opml_import_error_dir_empty">Importkatalogen er tom.</string>
<string name="select_all_label">Velg alle</string>
<string name="deselect_all_label">Opphev alle markeringene</string>
- <string name="select_options_label">Velg ...</string>
<string name="choose_file_from_filesystem">Fra lokalt filsystem</string>
<string name="choose_file_from_external_application">Bruk ekstern applikasjon</string>
<string name="opml_export_label">OPML-eksportering</string>
- <string name="exporting_label">Eksporterer...</string>
<string name="export_error_label">Eksporteringserror</string>
<string name="opml_export_success_title">OPML-import vellykket.</string>
<string name="opml_export_success_sum">.opml-filen ble skrevet til:\u0020</string>
@@ -464,7 +455,6 @@
<!--Online feed view-->
<string name="subscribe_label">Abonner</string>
<string name="subscribed_label">Abonnert</string>
- <string name="downloading_label">Laster ned...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Vis kapitler</string>
<string name="show_shownotes_label">Vis notater</string>
@@ -492,7 +482,6 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importerer abbonementer fra enkeltstående applikasjoner ...</string>
<string name="search_itunes_label">Søk på iTunes</string>
- <string name="select_label"><b>Velg ...</b></string>
<string name="all_label">Alle</string>
<string name="selected_all_label">Valgte alle episoder</string>
<string name="none_label">Ingen</string>
@@ -505,7 +494,6 @@
<string name="selected_downloaded_label">Valgte nedlastede episoder</string>
<string name="not_downloaded_label">Ikke nedlastet</string>
<string name="selected_not_downloaded_label">Valgte ikke-nedlastede episoder</string>
- <string name="sort_title"><b>Sorter på ...</b></string>
<string name="sort_title_a_z">Tittel (A \u2192 Z)</string>
<string name="sort_title_z_a">Tittel (Z \u2192 A)</string>
<string name="sort_date_new_old">Dato (Ny \u2192 Gammel)</string>
@@ -518,4 +506,5 @@
<string name="rating_never_label">La meg være i fred</string>
<string name="rating_later_label">Minn meg på dette senere</string>
<string name="rating_now_label">Naturligvis, kom igjen!</string>
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-nl/strings.xml b/core/src/main/res/values-nl/strings.xml
index c34cad045..5cbc40d78 100644
--- a/core/src/main/res/values-nl/strings.xml
+++ b/core/src/main/res/values-nl/strings.xml
@@ -23,6 +23,8 @@
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">gpodder.net login</string>
<string name="free_space_label">%1$s beschikbaar</string>
+ <string name="episode_cache_full_title">Afleveringen cache is vol</string>
+ <string name="episode_cache_full_message">Het maximum aantal gecachte afleveringen is bereikt. U kunt het maximum verhogen in de instellingen.</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">Recent gepubliceerd</string>
<string name="episode_filter_label">Alleen nieuwe afleveringen weergeven</string>
@@ -67,7 +69,7 @@
<string name="length_prefix">Lengte:\u0020</string>
<string name="size_prefix">Grootte:\u0020</string>
<string name="processing_label">Aan het verwerken</string>
- <string name="loading_label">Laden...</string>
+ <string name="loading_label">Laden…</string>
<string name="save_username_password_label">Gebruikersnaam en wachtwoord opslaan</string>
<string name="close_label">Sluiten</string>
<string name="retry_label">Opnieuw proberen</string>
@@ -79,7 +81,7 @@
<string name="feed_auto_download_global">Standaardinstelling</string>
<string name="feed_auto_download_always">Altijd</string>
<string name="feed_auto_download_never">Nooit</string>
- <string name="send_label">Versturen...</string>
+ <string name="send_label">Versturen…</string>
<string name="episode_cleanup_never">Nooit</string>
<string name="episode_cleanup_queue_removal">Wanneer niet in de wachtrij</string>
<string name="episode_cleanup_after_listening">Wanneer aflevering volledig is afgespeeld</string>
@@ -102,7 +104,7 @@
<string name="mark_all_seen_label">\'Nieuw\' label van alle afleveringen verwijderen.</string>
<string name="show_info_label">Toon informatie</string>
<string name="remove_feed_label">Podcast verwijderen</string>
- <string name="share_label">Delen...</string>
+ <string name="share_label">Delen…</string>
<string name="share_link_label">Link van de aflevering delen</string>
<string name="share_link_with_position_label">Link van de aflevering met tijdstip delen</string>
<string name="share_feed_url_label">URL van de feed delen</string>
@@ -137,7 +139,9 @@
<string name="added_to_queue_label">Aan wachtrij toegevoegd</string>
<string name="remove_from_queue_label">Verwijder van wachtrij</string>
<string name="add_to_favorite_label">Toevoegen aan favorieten</string>
+ <string name="added_to_favorites">Aan favorieten toegevoegd</string>
<string name="remove_from_favorite_label">Verwijderen uit favorieten</string>
+ <string name="removed_from_favorites">Verwijderd uit favorieten</string>
<string name="visit_website_label">Website bezoeken</string>
<string name="support_label">Flattr dit</string>
<string name="enqueue_all_new">Alle aan wachtrij toevoegen</string>
@@ -171,7 +175,10 @@
<string name="download_error_io_error">IO fout</string>
<string name="download_error_request_error">Fout in de aanvraag</string>
<string name="download_error_db_access">Databasetoegangsfout</string>
- <string name="downloads_left">Nog \u0020 downloads</string>
+ <plurals name="downloads_left">
+ <item quantity="one">Nog %d download</item>
+ <item quantity="other">Nog %d downloads</item>
+ </plurals>
<string name="downloads_processing">Downloads verwerken</string>
<string name="download_notification_title">Podcast gegevens aan het downloaden</string>
<string name="download_report_content">%1$d downloads geslaagd, %2$d mislukt</string>
@@ -203,6 +210,8 @@
<!--Queue operations-->
<string name="lock_queue">Wachtrij vastzetten</string>
<string name="unlock_queue">Wachtrij ontgrendelen</string>
+ <string name="queue_locked">Wachtrij vergrendeld</string>
+ <string name="queue_unlocked">Wachtrij ontgrendeld</string>
<string name="clear_queue_label">Wachtrij leeg maken</string>
<string name="undo">Ongedaan maken</string>
<string name="removed_from_queue">Item verwijderd</string>
@@ -244,12 +253,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">Plugin downloaden</string>
<string name="no_playback_plugin_title">Plugin niet geïnstalleerd</string>
- <string name="no_playback_plugin_or_sonic_msg">Om variabele afspeelsnelheid te kunnen gebruiken, moet een bibliotheek van derden worden geïnstalleerd of de experimentele Sonic Player worden geactiveerd (beschikbaar voor Android 4.1 en hoger).\n\nKies \'Plugin Downloaden\' om de gratis plugin via de Play Store te installeren.\n\nProblemen bij het gebruik van deze plugin zijn niet de verantwoordelijkheid van AntennaPod en moeten gemeld worden bij de ontwikkelaar van de plugin.</string>
+ <string name="no_playback_plugin_or_sonic_msg">Om variabele afspeelsnelheid te kunnen gebruiken, raden wij u aan om de ingebouwde Sonic mediaspeler te activeren [Android 4.1+]\n\nEventueel kunt u de externe plugin <i>Prestissimo</i> downloaden van de Play Store.\nProblemen bij het gebruik van deze plugin zijn niet de verantwoordelijkheid van AntennaPod en moeten gemeld worden bij de ontwikkelaar van de plugin.</string>
<string name="set_playback_speed_label">Afspeelsnelheden</string>
<string name="enable_sonic">Sonic instellen</string>
<!--Empty list labels-->
<string name="no_items_label">Er zijn geen items in deze lijst.</string>
<string name="no_feeds_label">U bent nog tot geen enkele feed geabonneerd.</string>
+ <string name="no_chapters_label">Deze aflevering heeft geen hoofdstukken.</string>
<!--Preferences-->
<string name="other_pref">Overig</string>
<string name="about_pref">Over AntennaPod</string>
@@ -257,7 +267,7 @@
<string name="services_label">Services</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Automatisch opschonen</string>
- <string name="pref_episode_cleanup_summary">Afleveringen die niet in de wachtrij staan en niet zijn gemarkeerd als favoriet, komen in aanmerking voor verwijdering bij automatisch opschonen.</string>
+ <string name="pref_episode_cleanup_summary">Afleveringen die niet in de wachtrij staan en die niet als favoriet zijn gemarkeerd, mogen verwijderd worden als Automatisch Downloaden ruimte nodig heeft voor nieuwe afleveringen.</string>
<string name="pref_pauseOnDisconnect_sum">Afspelen pauzeren wanneer de koptelefoon wordt losgekoppeld of de bluetooth verbinding wordt verbroken</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Afspelen hervatten wanneer de koptelefoon opnieuw wordt aangesloten</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Afspelen hervatten wanneer de bluetooth verbinding hervat wordt</string>
@@ -278,6 +288,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">Uitschakelen</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Interval instellen</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Tijdstip instellen</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">elke %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">op %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Download mediabestanden alleen via WiFi</string>
<string name="pref_followQueue_title">Continu afspelen</string>
<string name="pref_downloadMediaOnWifiOnly_title">WiFi download van media</string>
@@ -352,7 +364,8 @@
<string name="send_email">Verstuur email</string>
<string name="experimental_pref">Experimentele functie</string>
<string name="pref_sonic_title">Sonic mediaspeler</string>
- <string name="pref_sonic_message">Sonic, de standaard mediaspeler van Android, gebruiken als alternatief voor Prestissimo</string>
+ <string name="pref_sonic_message">Gebruik AntennaPod\'s ingebouwde Sonic mediaspeler als een alternatief voor Prestissimo en de mediaspeler van Android.</string>
+ <string name="pref_current_value">Huidige instelling: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Automatisch flattr\'en aanzetten</string>
<string name="auto_flattr_after_percent">Flattr een aflevering zodra %d procent is afgespeeld</string>
@@ -379,11 +392,11 @@
<string name="opml_import_error_dir_empty">De import map is leeg.</string>
<string name="select_all_label">Selecteer alles</string>
<string name="deselect_all_label">Deselecteer alles</string>
- <string name="select_options_label">Selecteren …</string>
+ <string name="select_options_label">Selecteren…</string>
<string name="choose_file_from_filesystem">Via bestandsbeheer</string>
<string name="choose_file_from_external_application">Via externe app</string>
<string name="opml_export_label">OPML export</string>
- <string name="exporting_label">Aan het exporteren...</string>
+ <string name="exporting_label">Exporteren…</string>
<string name="export_error_label">Export fout</string>
<string name="opml_export_success_title">OPML bestand succesvol geëxporteerd.</string>
<string name="opml_export_success_sum"> Het OPML-bestand is in \u0020 geplaatst</string>
@@ -464,7 +477,7 @@
<!--Online feed view-->
<string name="subscribe_label">Abonneren</string>
<string name="subscribed_label">Geabonneerd</string>
- <string name="downloading_label">Aan het downloaden</string>
+ <string name="downloading_label">Downloaden…</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Hoofdstukken tonen</string>
<string name="show_shownotes_label">Shownotes tonen</string>
@@ -492,7 +505,8 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Abonnementen aan het importeren vanuit single-purpose apps...</string>
<string name="search_itunes_label">Zoeken in iTunes</string>
- <string name="select_label"><b>Selecteren …</b></string>
+ <string name="select_label"><b>Selecteren…</b></string>
+ <string name="filter">Filter</string>
<string name="all_label">Alle</string>
<string name="selected_all_label">Alle afleveringen selecteren</string>
<string name="none_label">Geen</string>
@@ -505,7 +519,7 @@
<string name="selected_downloaded_label">Gedownloadde afleveringen geselecteerd</string>
<string name="not_downloaded_label">Niet gedownload</string>
<string name="selected_not_downloaded_label">Niet gedownloadde afleveringen geselecteerd</string>
- <string name="sort_title"><b>Sorteren op ...</b></string>
+ <string name="sort_title"><b>Sorteren op…</b></string>
<string name="sort_title_a_z">Titel (A \u2192 Z)</string>
<string name="sort_title_z_a">Titel (A \u2192 A)</string>
<string name="sort_date_new_old">Datum (nieuw \u2192 oud)</string>
@@ -518,4 +532,13 @@
<string name="rating_never_label">Nee, bedankt.</string>
<string name="rating_later_label">Herinner me later</string>
<string name="rating_now_label">Ja, doen we!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">Audio-instellingen</string>
+ <string name="playback_speed">Afspeelsnelheid</string>
+ <string name="volume">Volume</string>
+ <string name="left_short">L</string>
+ <string name="right_short">R</string>
+ <string name="audio_effects">Terugmixen</string>
+ <string name="stereo_to_mono">Stereo terugmixen tot monogeluid op beide kanalen</string>
+ <string name="sonic_only">Alleen Sonic</string>
</resources>
diff --git a/core/src/main/res/values-pl-rPL/strings.xml b/core/src/main/res/values-pl-rPL/strings.xml
index dffe09b6f..81d9ebec4 100644
--- a/core/src/main/res/values-pl-rPL/strings.xml
+++ b/core/src/main/res/values-pl-rPL/strings.xml
@@ -65,7 +65,6 @@
<string name="length_prefix">Długość:\u0020</string>
<string name="size_prefix">Rozmiar:\u0020</string>
<string name="processing_label">Przetwarzanie</string>
- <string name="loading_label">Ładowanie...</string>
<string name="save_username_password_label">Zapisz nazwę użytkownika i hasło</string>
<string name="close_label">Zamknij</string>
<string name="retry_label">Spróbuj ponownie</string>
@@ -77,7 +76,6 @@
<string name="feed_auto_download_global">Globalnie</string>
<string name="feed_auto_download_always">Zawsze</string>
<string name="feed_auto_download_never">Nigdy</string>
- <string name="send_label">Wyślij...</string>
<string name="episode_cleanup_never">Nigdy</string>
<string name="episode_cleanup_queue_removal">Kiedy nie są w kolejce</string>
<string name="episode_cleanup_after_listening">Po odtworzeniu</string>
@@ -99,7 +97,6 @@
<string name="mark_all_seen_label">Oznacz wszystkie jako widziane</string>
<string name="show_info_label">Pokaż informacje</string>
<string name="remove_feed_label">Usuń podcast</string>
- <string name="share_label">Udostępnij...</string>
<string name="share_link_label">Udostępnij stronę</string>
<string name="share_link_with_position_label">Udostępnij link z aktualną pozycją</string>
<string name="share_feed_url_label">Udostępnij adres kanału</string>
@@ -163,7 +160,6 @@
<string name="download_error_io_error">Błąd wejścia/wyjścia</string>
<string name="download_error_request_error">Błąd żądania</string>
<string name="download_error_db_access">Błąd dostępu do bazy danych</string>
- <string name="downloads_left">:\u0020pobrań pozostało</string>
<string name="downloads_processing">Przetwarzanie pobranych</string>
<string name="download_notification_title">Pobieranie danych podcastu</string>
<string name="download_report_content">%1$d pobierania poprawne, %2$d nieudane</string>
@@ -247,7 +243,6 @@
<string name="services_label">Usługi</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Usuwanie odcinków</string>
- <string name="pref_episode_cleanup_summary">Odcinki nie będące w Kolejce lub Ulubionych mogą zostać usunięte, gdy brakuje miejsca</string>
<string name="pref_pauseOnDisconnect_sum">Wstrzymaj odtwarzanie po rozłączeniu słuchawek lub Bluetooth</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Wznów odtwarzanie kiedy słuchawki zostaną podłączone ponownie</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Wznów odtwarzanie po przywróceniu połączenia Bluetooth</string>
@@ -333,7 +328,6 @@
<string name="send_email">Wyślij e-mail</string>
<string name="experimental_pref">Eksperymentalne</string>
<string name="pref_sonic_title">Odtwarzacz mediów Sonic</string>
- <string name="pref_sonic_message">Użyj wbudowanego odtwarzacza mediów Sonic jako zamiennika dla Prestissimo</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Włącz automatyczne wspieranie na flattr.</string>
<string name="auto_flattr_after_percent">Z-flattr-uj odcinki odegrane %d procentach.</string>
@@ -357,10 +351,8 @@
<string name="opml_import_error_dir_empty">Katalog importowania jest pusty.</string>
<string name="select_all_label">Zaznacz wszystko</string>
<string name="deselect_all_label">Odznacz wszystko</string>
- <string name="select_options_label">Wybierz...</string>
<string name="choose_file_from_external_application">Użyj zewnętrznej aplikacji</string>
<string name="opml_export_label">Eksport OPML</string>
- <string name="exporting_label">Eksportowanie...</string>
<string name="export_error_label">Błąd eksportu</string>
<string name="opml_export_success_title">Eksport OPML udany.</string>
<string name="opml_export_success_sum">Plik .opml został zapisany do:\u0020</string>
@@ -445,7 +437,6 @@ https://gpodder.net/register/</string>
<!--Online feed view-->
<string name="subscribe_label">Subskrybuj</string>
<string name="subscribed_label">Subskrybowane</string>
- <string name="downloading_label">Pobieranie...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Pokaż rozdziały</string>
<string name="show_shownotes_label">Pokaż opis odcinka</string>
@@ -473,7 +464,6 @@ https://gpodder.net/register/</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importowanie subskrybcji z jednozadaniowych aplikacji</string>
<string name="search_itunes_label">Szukaj w iTunes</string>
- <string name="select_label"><b>Zaznacz...</b></string>
<string name="all_label">Wszystkie</string>
<string name="selected_all_label">Zaznaczono wszystkie odcinki</string>
<string name="none_label">Brak</string>
@@ -486,7 +476,6 @@ https://gpodder.net/register/</string>
<string name="selected_downloaded_label">Zaznaczono pobrane odcinki</string>
<string name="not_downloaded_label">Nie pobrane</string>
<string name="selected_not_downloaded_label">Zaznaczono niepobrane odcinki</string>
- <string name="sort_title"><b>Sortuj według...</b></string>
<string name="sort_title_a_z">Tytuł (A \u2192 Z)</string>
<string name="sort_title_z_a">Tytuł (Z \u2192 A)</string>
<string name="sort_date_new_old">Data (Nowe \u2192 Stare)</string>
@@ -499,4 +488,5 @@ https://gpodder.net/register/</string>
<string name="rating_never_label">Daj mi spokój</string>
<string name="rating_later_label">Przypomnij później</string>
<string name="rating_now_label">Pewnie, zróbmy to!</string>
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-pt-rBR/strings.xml b/core/src/main/res/values-pt-rBR/strings.xml
index c57f20177..95b279022 100644
--- a/core/src/main/res/values-pt-rBR/strings.xml
+++ b/core/src/main/res/values-pt-rBR/strings.xml
@@ -53,7 +53,6 @@
<string name="length_prefix">Duração:\u0020</string>
<string name="size_prefix">Tamanho:\u0020</string>
<string name="processing_label">Processando</string>
- <string name="loading_label">Carregando...</string>
<string name="save_username_password_label">Salvar nome do usuário e senha</string>
<string name="close_label">Fechar</string>
<string name="retry_label">Tentar novamente</string>
@@ -69,7 +68,6 @@
<string name="mark_all_seen_label">Marcar todos como lido</string>
<string name="show_info_label">Mostrar informação</string>
<string name="remove_feed_label">Remover Podcast</string>
- <string name="share_label">Compartilhar...</string>
<string name="share_link_label">Compartilhar link do site</string>
<string name="share_link_with_position_label">Compartilhar link com posição</string>
<string name="share_item_url_label">Compartilhar url do episódio</string>
@@ -124,7 +122,6 @@
<string name="download_error_io_error">Erro de IO</string>
<string name="download_error_request_error">Erro de requisição</string>
<string name="download_error_db_access">Erro no acesso ao Banco de dados</string>
- <string name="downloads_left">\u0020Downloads restantes</string>
<string name="downloads_processing">Processando downloads</string>
<string name="download_notification_title">Baixando dados do podcast</string>
<string name="download_report_content">%1$d downloads com sucesso, %2$d falharam</string>
@@ -244,9 +241,7 @@
<string name="opml_import_error_dir_empty">O diretório de importação está vazio.</string>
<string name="select_all_label">Selecionar todos</string>
<string name="deselect_all_label">Remover seleção</string>
- <string name="select_options_label">Selecionar</string>
<string name="opml_export_label">Exportar OPML</string>
- <string name="exporting_label">Exportando...</string>
<string name="export_error_label">Erro na exportação</string>
<string name="opml_export_success_sum">O arquivo .opml foi gravado em:\u0020</string>
<!--Sleep timer-->
@@ -304,7 +299,6 @@
<!--Online feed view-->
<string name="subscribe_label">Assinar</string>
<string name="subscribed_label">Assinado</string>
- <string name="downloading_label">Baixando...</string>
<!--Content descriptions for image buttons-->
<string name="show_cover_label">Mostrar imagem</string>
<string name="butAction_label">Mais ações</string>
@@ -317,4 +311,5 @@
<!--Progress information-->
<!--AntennaPodSP-->
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-pt/strings.xml b/core/src/main/res/values-pt/strings.xml
index 225f71def..f3fbc0623 100644
--- a/core/src/main/res/values-pt/strings.xml
+++ b/core/src/main/res/values-pt/strings.xml
@@ -23,6 +23,8 @@
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">Dados gpodder.net</string>
<string name="free_space_label">%1$s disponível</string>
+ <string name="episode_cache_full_title">Cache de episódios cheia</string>
+ <string name="episode_cache_full_message">Atingido o limite máximo de itens em cache. Pode aumentar o tamanho de cache nas definições.</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">Publicados recentemente</string>
<string name="episode_filter_label">Mostrar apenas novos episódios</string>
@@ -108,7 +110,7 @@
<string name="share_feed_url_label">Partilhar URL da fonte</string>
<string name="share_item_url_label">Partilhar URL do episódio</string>
<string name="share_item_url_with_position_label">Partilhar URL do episódio com posição</string>
- <string name="feed_delete_confirmation_msg">Confirma de que deseja apagar esta fonte e todos os episódios descarregados?</string>
+ <string name="feed_delete_confirmation_msg">Confirma a remoção desta fonte e de todos os episódios descarregados?</string>
<string name="feed_remover_msg">Remover fonte</string>
<string name="load_complete_feed">Atualizar todas as páginas da fonte</string>
<string name="hide_episodes_title">Ocultar episódios</string>
@@ -137,7 +139,9 @@
<string name="added_to_queue_label">Adicionado à fila</string>
<string name="remove_from_queue_label">Remover da fila</string>
<string name="add_to_favorite_label">Adicionar aos favoritos</string>
+ <string name="added_to_favorites">Adicionado aos favoritos</string>
<string name="remove_from_favorite_label">Remover dos favoritos</string>
+ <string name="removed_from_favorites">Removido dos favoritos</string>
<string name="visit_website_label">Aceder ao sítio web</string>
<string name="support_label">Flattr</string>
<string name="enqueue_all_new">Colocar tudo na fila</string>
@@ -171,7 +175,10 @@
<string name="download_error_io_error">Erro I/O</string>
<string name="download_error_request_error">Erro de pedido</string>
<string name="download_error_db_access">Erro de acesso à base de dados</string>
- <string name="downloads_left">\u0020Descargas em falta</string>
+ <plurals name="downloads_left">
+ <item quantity="one">%d descarga em curso</item>
+ <item quantity="other">%d descargas em curso</item>
+ </plurals>
<string name="downloads_processing">Processamento de descargas</string>
<string name="download_notification_title">A descarregar dados do podcast</string>
<string name="download_report_content">%1$d descargas efetuadas, %2$d falhadas</string>
@@ -203,6 +210,8 @@
<!--Queue operations-->
<string name="lock_queue">Bloquear fila</string>
<string name="unlock_queue">Desbloquear fila</string>
+ <string name="queue_locked">Fila bloqueada</string>
+ <string name="queue_unlocked">Fila desbloqueada</string>
<string name="clear_queue_label">Limpar fila</string>
<string name="undo">Anular</string>
<string name="removed_from_queue">Item removido</string>
@@ -244,12 +253,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">Descarregar extra</string>
<string name="no_playback_plugin_title">Extra não instalado</string>
- <string name="no_playback_plugin_or_sonic_msg">Para que a velocidade variável de reprodução funcione, tem que instalar um biblioteca de terceiros ou ativar o reprodutor Sonic [Android 4.1+].\n\nClique em \'Descarregar extra\' para a descarregar no Google Play.\n\nQuaisquer erros que ocorram na utilização do extra não são da responsabilidade do AntennaPod e devem ser reportados diretamente ao seu programador.</string>
+ <string name="no_playback_plugin_or_sonic_msg">Para que a velocidade variável de reprodução funcione, recomendamos que ative o Sonic Media Player incorporado [Android 4.1+].\n\nEm alternativa, pode transferir o extra <i>Prestissimo</i>, disponível na Google Play.\nQuaisquer problemas que ocorram com o Prestissimo não são da responsabilidade dos programadores do AntennaPod e devem ser reportados ao dono do extra.</string>
<string name="set_playback_speed_label">Velocidades de reprodução</string>
<string name="enable_sonic">Ativar Sonic</string>
<!--Empty list labels-->
<string name="no_items_label">Não existem itens nesta lista</string>
<string name="no_feeds_label">Ainda não possui quaisquer fontes</string>
+ <string name="no_chapters_label">Este episódio não tem capítulos.</string>
<!--Preferences-->
<string name="other_pref">Outras</string>
<string name="about_pref">Sobre</string>
@@ -257,7 +267,7 @@
<string name="services_label">Serviços</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Limpeza de episódios</string>
- <string name="pref_episode_cleanup_summary">Os episódios que não estiverem na fila ou que não sejam favoritos são elegiveis para remoção se necessitar de espaço</string>
+ <string name="pref_episode_cleanup_summary">Os episódios que não estejam na fila e não sejam favoritos podem ser elegíveis para serem removidos se a Descarga automática necessitar de espaço para novos episódios.</string>
<string name="pref_pauseOnDisconnect_sum">Pausa na reprodução ao desligar os auscultadores ou o bluetooth</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Continuar reprodução ao ligar os auscultadores</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Continuar reprodução ao estabelecer a ligação bluetooth</string>
@@ -278,6 +288,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">Desativar</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Definir intervalo</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Definir hora do dia</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">a cada %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">às %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Apenas descarregar através de redes sem fios</string>
<string name="pref_followQueue_title">Reprodução contínua</string>
<string name="pref_downloadMediaOnWifiOnly_title">Descarregar por Wi-Fi</string>
@@ -352,7 +364,8 @@
<string name="send_email">Enviar e-mail</string>
<string name="experimental_pref">Experimental</string>
<string name="pref_sonic_title">Reprodutor Sonic</string>
- <string name="pref_sonic_message">Utilizar reprodutor multimédia Sonic como substituto de Prestissimo</string>
+ <string name="pref_sonic_message">Utilizar o Sonic Media Player como substituto do reprodutor nativo do Android e do Prestissimo</string>
+ <string name="pref_current_value">Valor atual: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Ativar flattr automático</string>
<string name="auto_flattr_after_percent">Flattr de episódios ao atingir %d porcento de reprodução</string>
@@ -383,7 +396,7 @@
<string name="choose_file_from_filesystem">Do sistema local de ficheiros</string>
<string name="choose_file_from_external_application">Utilizar aplicação externa</string>
<string name="opml_export_label">Exportação OPML</string>
- <string name="exporting_label">Exportação...</string>
+ <string name="exporting_label">A exportar...</string>
<string name="export_error_label">Erro de exportação</string>
<string name="opml_export_success_title">Exportação efetuada</string>
<string name="opml_export_success_sum">O ficheiro .opml foi guardado em:\u0020</string>
@@ -493,6 +506,7 @@
<string name="sp_apps_importing_feeds_msg">Importar subscrições de aplicações single-purpose...</string>
<string name="search_itunes_label">Procurar no iTunes</string>
<string name="select_label"><b>Selecionar...</b></string>
+ <string name="filter">Filtro</string>
<string name="all_label">Todos</string>
<string name="selected_all_label">Marcar todos os episódios</string>
<string name="none_label">Nenhum</string>
@@ -505,7 +519,7 @@
<string name="selected_downloaded_label">Selecionar episódios descarregados</string>
<string name="not_downloaded_label">Não descarregados</string>
<string name="selected_not_downloaded_label">Selecionar episódios não descarregados</string>
- <string name="sort_title"><b>Ordenar por...</b></string>
+ <string name="sort_title"><b>Ordenar por…</b></string>
<string name="sort_title_a_z">Título (A \u2192 Z)</string>
<string name="sort_title_z_a">Título (Z \u2192 A)</string>
<string name="sort_date_new_old">Data (Recente \u2192 Antiga)</string>
@@ -518,4 +532,13 @@
<string name="rating_never_label">Não avaliar</string>
<string name="rating_later_label">Lembrar mais tarde</string>
<string name="rating_now_label">Claro, vamos a isso!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">Controlos de áudio</string>
+ <string name="playback_speed">Velocidade de reprodução</string>
+ <string name="volume">Volume</string>
+ <string name="left_short">E</string>
+ <string name="right_short">D</string>
+ <string name="audio_effects">Efeitos áudio</string>
+ <string name="stereo_to_mono">Mistura: estéreo para mono</string>
+ <string name="sonic_only">Apenas Sonic</string>
</resources>
diff --git a/core/src/main/res/values-ro-rRO/strings.xml b/core/src/main/res/values-ro-rRO/strings.xml
index 0512a989b..a112db8dd 100644
--- a/core/src/main/res/values-ro-rRO/strings.xml
+++ b/core/src/main/res/values-ro-rRO/strings.xml
@@ -39,7 +39,6 @@
<string name="length_prefix">Durată:\u0020</string>
<string name="size_prefix">Dimensiune:\u0020</string>
<string name="processing_label">Procesează</string>
- <string name="loading_label">Încărcare...</string>
<string name="save_username_password_label">Salvează numele de utilizator și parola</string>
<string name="close_label">închide</string>
<string name="retry_label">Reîncearcă</string>
@@ -83,7 +82,6 @@
<string name="download_error_malformed_url">URL malformat</string>
<string name="download_error_io_error">Eroare IO</string>
<string name="download_error_request_error">Eroare cerere</string>
- <string name="downloads_left">\u0020descărcări rămase</string>
<string name="download_notification_title">Descarcă date podcast</string>
<string name="download_report_content">%1$d descărcari cu succes, %2$d eșuate</string>
<string name="download_log_title_unknown">Titlu necunoscut</string>
@@ -186,7 +184,6 @@
<string name="select_all_label">Selectează toate</string>
<string name="deselect_all_label">Deselectează toate</string>
<string name="opml_export_label">Exportă OPML</string>
- <string name="exporting_label">Exportă...</string>
<string name="export_error_label">Eroare exportare</string>
<string name="opml_export_success_sum">Fișierul .opml a fost scris în:\u0020</string>
<!--Sleep timer-->
@@ -229,10 +226,10 @@
<!--Online feed view-->
<string name="subscribe_label">Abonează-te</string>
<string name="subscribed_label">Abonat</string>
- <string name="downloading_label">Se descarcă...</string>
<!--Content descriptions for image buttons-->
<!--Feed information screen-->
<!--Progress information-->
<!--AntennaPodSP-->
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-ru/strings.xml b/core/src/main/res/values-ru/strings.xml
index fdc43fced..46a9d5feb 100644
--- a/core/src/main/res/values-ru/strings.xml
+++ b/core/src/main/res/values-ru/strings.xml
@@ -66,7 +66,6 @@
<string name="length_prefix">Продолжительность:\u0020</string>
<string name="size_prefix">Размер:\u0020</string>
<string name="processing_label">Обработка</string>
- <string name="loading_label">Загрузка...</string>
<string name="save_username_password_label">Сохранить имя пользователя и пароль</string>
<string name="close_label">Закрыть</string>
<string name="retry_label">Повторить</string>
@@ -78,7 +77,6 @@
<string name="feed_auto_download_global">Общие</string>
<string name="feed_auto_download_always">Всегда</string>
<string name="feed_auto_download_never">Никогда</string>
- <string name="send_label">Отправить...</string>
<string name="episode_cleanup_never">Никогда</string>
<string name="episode_cleanup_queue_removal">Когда не в очереди</string>
<string name="episode_cleanup_after_listening">После прослушивания</string>
@@ -97,7 +95,6 @@
<string name="mark_all_seen_label">Отметить все как про</string>
<string name="show_info_label">Показать информацию</string>
<string name="remove_feed_label">Удалить подкаст</string>
- <string name="share_label">Поделиться...</string>
<string name="share_link_label">Поделиться ссылкой</string>
<string name="share_link_with_position_label">Поделиться ссылкой с отметкой времени</string>
<string name="share_feed_url_label">Поделиться ссылкой на канал</string>
@@ -165,7 +162,6 @@
<string name="download_error_io_error">Ошибка ввода-вывода</string>
<string name="download_error_request_error">Ошибка запроса</string>
<string name="download_error_db_access">Ошибка доступа к базе данных</string>
- <string name="downloads_left">Осталось\u0020загрузок</string>
<string name="downloads_processing">Производится загрузка</string>
<string name="download_notification_title">Получение данных подкаста</string>
<string name="download_report_content">%1$d загрузок завершено, %2$d не удалось</string>
@@ -238,7 +234,6 @@
<!--Variable Speed-->
<string name="download_plugin_label">Загрузить плагин</string>
<string name="no_playback_plugin_title">Плагин не установлен</string>
- <string name="no_playback_plugin_or_sonic_msg">Для изменения скорости воспроизведения нужно установить библиотеку стороннего разработчика или включить экспериментальный Sonic player [Android 4.1+].\n\nНажмите \"Загрузить плагин\", чтобы скачать бесплатный плагин из Play Store\n\nЛюбые вопросы по работе плагина находятся вне ответственности AntennaPod и должны быть направлены владельцу плагина.</string>
<string name="set_playback_speed_label">Скорость воспроизведения</string>
<string name="enable_sonic">Включить Sonic</string>
<!--Empty list labels-->
@@ -251,7 +246,6 @@
<string name="services_label">Сервисы</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Удаление выпусков</string>
- <string name="pref_episode_cleanup_summary">Выпуски, которые не стоят в очереди и не отмечены как избранные могут быть удалены для освобождения места.</string>
<string name="pref_pauseOnDisconnect_sum">Приостановить воспроизведение, когда наушники или bluetooth отключены</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Продолжать воспроизведение после подключения наушников</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Продолжать воспроизведение после подключения наушников или восстановления bluetooth-соединения</string>
@@ -343,7 +337,6 @@
<string name="send_email">Отправить Email</string>
<string name="experimental_pref">Экспериментальные настройки</string>
<string name="pref_sonic_title">Проигрыватель Sonic</string>
- <string name="pref_sonic_message">Использовать встроенный проигрыватель Sonic вместо Prestissimo.</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Включить автоматическую поддержку через Flattr</string>
<string name="auto_flattr_after_percent">Поддерживать через Flattr эпизоды, прослушанные на %d процентов</string>
@@ -370,11 +363,9 @@
<string name="opml_import_error_dir_empty">Каталог для импорта пуст.</string>
<string name="select_all_label">Отметить все</string>
<string name="deselect_all_label">Снять все отметки</string>
- <string name="select_options_label">Выбрать...</string>
<string name="choose_file_from_filesystem">Из файловой системы</string>
<string name="choose_file_from_external_application">С помощью внешнего приложения</string>
<string name="opml_export_label">Экспорт в OPML</string>
- <string name="exporting_label">Экспортируется...</string>
<string name="export_error_label">Ошибка экспорта</string>
<string name="opml_export_success_title">OPML успешно экспортирован.</string>
<string name="opml_export_success_sum">Файл OPML был записан в:\u0020</string>
@@ -460,7 +451,6 @@
<!--Online feed view-->
<string name="subscribe_label">Подписаться</string>
<string name="subscribed_label">Подписка оформлена</string>
- <string name="downloading_label">Загрузка...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Показать главы</string>
<string name="show_shownotes_label">Показать примечания к выпуску</string>
@@ -488,7 +478,6 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Импорт подписок из одноцелевых приложений…</string>
<string name="search_itunes_label">Поиск в iTunes</string>
- <string name="select_label"><b>Выбрать ...</b></string>
<string name="all_label">Все</string>
<string name="selected_all_label">Отмечены все выпуски</string>
<string name="none_label">Нет</string>
@@ -501,7 +490,6 @@
<string name="selected_downloaded_label">Выбраны загруженные выпуски</string>
<string name="not_downloaded_label">Не загружено</string>
<string name="selected_not_downloaded_label">Выбраны незагруженные выпуски</string>
- <string name="sort_title"><b>Сортировать по ...</b></string>
<string name="sort_title_a_z">Заголовку (А \u2192 Я)</string>
<string name="sort_title_z_a">Заголовку (Я \u2192 А)</string>
<string name="sort_date_new_old">Дате (Новое \u2192 Старое)</string>
@@ -514,4 +502,5 @@
<string name="rating_never_label">Отстань от меня</string>
<string name="rating_later_label">Напомни позже</string>
<string name="rating_now_label">Конечно, давай!</string>
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-sv-rSE/strings.xml b/core/src/main/res/values-sv-rSE/strings.xml
index 51a75a3e7..b91b030d6 100644
--- a/core/src/main/res/values-sv-rSE/strings.xml
+++ b/core/src/main/res/values-sv-rSE/strings.xml
@@ -23,6 +23,8 @@
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">Inloggning till gpodder.net</string>
<string name="free_space_label">%1$s kvar</string>
+ <string name="episode_cache_full_title">Episodcachen är full</string>
+ <string name="episode_cache_full_message">Episodcachens gräns har nåtts. Du kan öka cachens storlek i inställningarna.</string>
<!--New episodes fragment-->
<string name="recently_published_episodes_label">Nyligen publicerade</string>
<string name="episode_filter_label">Visa bara nya Episoder</string>
@@ -67,7 +69,7 @@
<string name="length_prefix">Längd:\u0020</string>
<string name="size_prefix">Storlek:\u0020</string>
<string name="processing_label">Bearbetar</string>
- <string name="loading_label">Laddar...</string>
+ <string name="loading_label">Laddar…</string>
<string name="save_username_password_label">Spara användarnamn och lösenord</string>
<string name="close_label">Stäng</string>
<string name="retry_label">Försök igen</string>
@@ -79,7 +81,7 @@
<string name="feed_auto_download_global">Global</string>
<string name="feed_auto_download_always">Alltid</string>
<string name="feed_auto_download_never">Aldrig</string>
- <string name="send_label">Skicka...</string>
+ <string name="send_label">Skicka…</string>
<string name="episode_cleanup_never">Aldrig</string>
<string name="episode_cleanup_queue_removal">Om inte köad</string>
<string name="episode_cleanup_after_listening">Efter färdigspelad</string>
@@ -102,7 +104,7 @@
<string name="mark_all_seen_label">Markera alla som sedda</string>
<string name="show_info_label">Visa information</string>
<string name="remove_feed_label">Ta bort Podcast</string>
- <string name="share_label">Dela...</string>
+ <string name="share_label">Dela…</string>
<string name="share_link_label">Dela Länk</string>
<string name="share_link_with_position_label">Dela Länk med Position</string>
<string name="share_feed_url_label">Dela Flödets URL</string>
@@ -137,7 +139,9 @@
<string name="added_to_queue_label">Lägg till i Kö</string>
<string name="remove_from_queue_label">Ta bort från Kön</string>
<string name="add_to_favorite_label">Lägg till i Favoriter</string>
+ <string name="added_to_favorites">Tillagd i Favoriter</string>
<string name="remove_from_favorite_label">Ta bort från Favoriter</string>
+ <string name="removed_from_favorites">Borrtagen ur Favoriter</string>
<string name="visit_website_label">Besök websidan</string>
<string name="support_label">Flattra det här</string>
<string name="enqueue_all_new">Lägg till alla i kön</string>
@@ -171,7 +175,10 @@
<string name="download_error_io_error">IO fel</string>
<string name="download_error_request_error">Förfrågningsfel</string>
<string name="download_error_db_access">Åtkomstfel till databasen</string>
- <string name="downloads_left">\u0020Nedladdningar kvar</string>
+ <plurals name="downloads_left">
+ <item quantity="one">%d nedladdning kvar</item>
+ <item quantity="other">%d nedladdningar kvar</item>
+ </plurals>
<string name="downloads_processing">Bearbetar nedladdningar</string>
<string name="download_notification_title">Laddar ner podcastdata</string>
<string name="download_report_content">%1$d nedladdningar lyckades, %2$d misslyckades</string>
@@ -203,6 +210,8 @@
<!--Queue operations-->
<string name="lock_queue">Lås Kön</string>
<string name="unlock_queue">Lås upp Kön</string>
+ <string name="queue_locked">Kön låst</string>
+ <string name="queue_unlocked">Kön upplåst</string>
<string name="clear_queue_label">Rensa Kön</string>
<string name="undo">Ångra</string>
<string name="removed_from_queue">Föremålet avlägsnades</string>
@@ -244,12 +253,13 @@
<!--Variable Speed-->
<string name="download_plugin_label">Ladda ner tillägg</string>
<string name="no_playback_plugin_title">Tillägg ej installerat</string>
- <string name="no_playback_plugin_or_sonic_msg">För att variabel uppspelningshastighet ska funger måste du installera ett tredjepartsbibliotek eller aktivera den experimentella spelaren Sonic [Android 4.1+].\n\nTryck på \'Ladda ner Plugin\' för att ladda ner en gratis plugin från Play Store.\n\nAntennaPod ansvarar inte för eventualla problem som upptäcks vid användning av denna plugin och de bör rapporteras till pluginens ägare.</string>
+ <string name="no_playback_plugin_or_sonic_msg">För att variabel uppspelningshastighet ska fungera rekommenderas att aktivera den inbyggda Sonic mediaspelaren [Android 4.1+].\n\nAlternativt kan du ladda ner tredjepartstillägget <i>Prestissimo</i> från Google Play.\nProblem med Prestissimo är inte AntennaPods ansvar och bör rapporteras till tilläggets ägare.</string>
<string name="set_playback_speed_label">Uppspelningshastigheter</string>
<string name="enable_sonic">Aktivera Sonic</string>
<!--Empty list labels-->
<string name="no_items_label">Det finns inget i denna lista.</string>
<string name="no_feeds_label">Du har inte prenumererat på något flöde ännu.</string>
+ <string name="no_chapters_label">Denna episod har inga kapitel.</string>
<!--Preferences-->
<string name="other_pref">Annat</string>
<string name="about_pref">Om</string>
@@ -257,7 +267,7 @@
<string name="services_label">Tjänster</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Episodupprensning</string>
- <string name="pref_episode_cleanup_summary">Episoder som inte ligger i kön och inte är favoriter ska kunna tas bort om det behövs utrymme</string>
+ <string name="pref_episode_cleanup_summary">Episoder som inte är i kön och inte är favoriter kan tas bort om Automatisk Nedladdning behöver utrymme för nya episoder</string>
<string name="pref_pauseOnDisconnect_sum">Pausa uppspelningen när hörlurar eller bluetooth kopplas ifrån.</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Fortsätt uppspelningen när hörlurarna återansluts</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Fortsätt uppspelningen när bluetooth återansluts</string>
@@ -278,6 +288,8 @@
<string name="pref_autoUpdateIntervallOrTime_Disable">Avaktivera</string>
<string name="pref_autoUpdateIntervallOrTime_Interval">Sätt intervall</string>
<string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Sätt Tid på Dagen</string>
+ <string name="pref_autoUpdateIntervallOrTime_every">var %1$s</string>
+ <string name="pref_autoUpdateIntervallOrTime_at">vid %1$s</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Hämta mediefiler endast över WiFi</string>
<string name="pref_followQueue_title">Kontinuerlig Uppspelning</string>
<string name="pref_downloadMediaOnWifiOnly_title">WiFi nedladdning</string>
@@ -352,7 +364,8 @@
<string name="send_email">Sänd e-post</string>
<string name="experimental_pref">Experimentellt</string>
<string name="pref_sonic_title">Sonic mediaspelare</string>
- <string name="pref_sonic_message">Använd inbyggda mediaspelaren Sonic som en ersättning för Prestissimo</string>
+ <string name="pref_sonic_message">Använd den inbyggda Sonic mediaspelare som ersättning för Androids egna mediaspelare och Prestissimo</string>
+ <string name="pref_current_value">Nuvarande värde: %1$s</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Aktivera automatisk Flattring</string>
<string name="auto_flattr_after_percent">Flattra episoden så snart %d procent har spelats</string>
@@ -379,11 +392,11 @@
<string name="opml_import_error_dir_empty">Katalogen är tom.</string>
<string name="select_all_label">Välj alla</string>
<string name="deselect_all_label">Avmarkera alla</string>
- <string name="select_options_label">Välj ...</string>
+ <string name="select_options_label">Välj…</string>
<string name="choose_file_from_filesystem">Från lokalt filsystem</string>
<string name="choose_file_from_external_application">Använd extern applikation</string>
<string name="opml_export_label">OPML export</string>
- <string name="exporting_label">Exporterar...</string>
+ <string name="exporting_label">Exporterar…</string>
<string name="export_error_label">Exporteringsfel</string>
<string name="opml_export_success_title">OPML Exportering lyckades.</string>
<string name="opml_export_success_sum">.opml filen skrevs till:\u0020</string>
@@ -464,7 +477,7 @@
<!--Online feed view-->
<string name="subscribe_label">Prenumerera</string>
<string name="subscribed_label">Prenumererar</string>
- <string name="downloading_label">Laddar ner...</string>
+ <string name="downloading_label">Laddar ner…</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Visa kapitel</string>
<string name="show_shownotes_label">Visa shownotes</string>
@@ -490,9 +503,10 @@
<!--Progress information-->
<string name="progress_upgrading_database">Uppgraderar databasen</string>
<!--AntennaPodSP-->
- <string name="sp_apps_importing_feeds_msg">Importerar prenumerationer från appar gjorda för ett enda syfte...</string>
+ <string name="sp_apps_importing_feeds_msg">Importerar prenumerationer från appar gjorda för ett enda syfte…</string>
<string name="search_itunes_label">Leta i iTunes</string>
- <string name="select_label"><b>Välj ...</b></string>
+ <string name="select_label"><b>Välj…</b></string>
+ <string name="filter">Filtrera</string>
<string name="all_label">Alla</string>
<string name="selected_all_label">Välj alla Episoder</string>
<string name="none_label">Inga</string>
@@ -505,7 +519,7 @@
<string name="selected_downloaded_label">Valde nedladdade Episoder</string>
<string name="not_downloaded_label">Ej nedladdade</string>
<string name="selected_not_downloaded_label">Valde ej nedladdade Episoder</string>
- <string name="sort_title"><b>Sortera efter ...</b></string>
+ <string name="sort_title"><b>Sortera efter…</b></string>
<string name="sort_title_a_z">Titel (A \u2192 Ö)</string>
<string name="sort_title_z_a">Titel (Ö \u2192 A)</string>
<string name="sort_date_new_old">Datum (Ny \u2192 Gammal)</string>
@@ -518,4 +532,13 @@
<string name="rating_never_label">Lämna mig ifred</string>
<string name="rating_later_label">Påminn mig senare</string>
<string name="rating_now_label">Okej, gör det nu!</string>
+ <!--Audio controls-->
+ <string name="audio_controls">Ljudkontroller</string>
+ <string name="playback_speed">Uppspelningshastighet</string>
+ <string name="volume">Volym</string>
+ <string name="left_short">V</string>
+ <string name="right_short">H</string>
+ <string name="audio_effects">Ljudeffekter</string>
+ <string name="stereo_to_mono">Nedmixning: Stereo till mono</string>
+ <string name="sonic_only">Bara Sonic</string>
</resources>
diff --git a/core/src/main/res/values-tr/strings.xml b/core/src/main/res/values-tr/strings.xml
index 5494dd48c..6dca19d57 100644
--- a/core/src/main/res/values-tr/strings.xml
+++ b/core/src/main/res/values-tr/strings.xml
@@ -66,7 +66,6 @@
<string name="length_prefix">Uzunluk:\u0020</string>
<string name="size_prefix">Boyut:\u0020</string>
<string name="processing_label">İşleniyor</string>
- <string name="loading_label">Yükleniyor...</string>
<string name="save_username_password_label">Kullanıcı adı ve şifreyi kaydet</string>
<string name="close_label">Kapat</string>
<string name="retry_label">Yeniden dene</string>
@@ -77,7 +76,6 @@
<string name="feed_auto_download_global">Genel</string>
<string name="feed_auto_download_always">Her zaman</string>
<string name="feed_auto_download_never">Hiçbir zaman</string>
- <string name="send_label">Gönder...</string>
<string name="episode_cleanup_never">Hiçbir zaman</string>
<string name="episode_cleanup_queue_removal">Sırada değilse</string>
<string name="episode_cleanup_after_listening">Bittikten sonra</string>
@@ -100,7 +98,6 @@
<string name="mark_all_seen_label">Hepsini görüldü olarak işaretle</string>
<string name="show_info_label">Bilgiyi göster</string>
<string name="remove_feed_label">Cep yayını kaldır</string>
- <string name="share_label">Paylaş...</string>
<string name="share_link_label">Link\'i paylaş</string>
<string name="share_link_with_position_label">Link\'i Konumla birlikte paylaş</string>
<string name="share_feed_url_label">Besleme Adresini Paylaş</string>
@@ -169,7 +166,6 @@
<string name="download_error_io_error">G/Ç Hatası</string>
<string name="download_error_request_error">İstek hatası</string>
<string name="download_error_db_access">Veritabanı erişim hatası</string>
- <string name="downloads_left">\u0020Kalan indirme</string>
<string name="downloads_processing">İndirmeler işleniyor</string>
<string name="download_notification_title">Cep yayını verileri indiriliyor</string>
<string name="download_report_content">%1$d indirme başarılı, %2$d başarısız</string>
@@ -254,7 +250,6 @@
<string name="services_label">Servisler</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Bölüm Temizliği</string>
- <string name="pref_episode_cleanup_summary">Daha fazla yer gerektiğinde kuyrukta olmayan ve favorilere eklenmemiş bölümler kaldırılmak için uygundur</string>
<string name="pref_pauseOnDisconnect_sum">Kulaklıklar çıkarıldığında veya bluetooth bağlantısı kesildiğinde çalmayı duraklat</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Kulaklıklar yeniden bağlandığında çalmaya devam et</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Bluetooth yeniden bağlandığında çalmaya devam et</string>
@@ -337,7 +332,6 @@
<string name="send_email">E-posta gönder</string>
<string name="experimental_pref">Deneysel</string>
<string name="pref_sonic_title">Sonic ortam yürütücüsü</string>
- <string name="pref_sonic_message">Prestissimo yerine sonic ortam yürütücüsünü kullan</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Otomatik Flattr\'lamayı etkinleştir</string>
<string name="auto_flattr_after_percent">Bölümün yüzde %d kısmı oynatıldığında Flattr\'la</string>
@@ -364,11 +358,9 @@
<string name="opml_import_error_dir_empty">İça aktarma dizini boş</string>
<string name="select_all_label">Hepsini seç</string>
<string name="deselect_all_label">Tüm seçimleri geri al</string>
- <string name="select_options_label">Seç ...</string>
<string name="choose_file_from_filesystem">Yerel dosya sisteminden</string>
<string name="choose_file_from_external_application">Harici uygulama kullan</string>
<string name="opml_export_label">OPML dışa aktar</string>
- <string name="exporting_label">Dışa aktarılıyor...</string>
<string name="export_error_label">Dışa aktarma hatası</string>
<string name="opml_export_success_title">Opml dışa aktarma başarılı.</string>
<string name="opml_export_success_sum">.opml dosyasy yazıldı: \u0020</string>
@@ -449,7 +441,6 @@
<!--Online feed view-->
<string name="subscribe_label">Üye ol</string>
<string name="subscribed_label">Üye olundu</string>
- <string name="downloading_label">İndiriliyor...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Kısımları göster</string>
<string name="show_shownotes_label">Notları göster</string>
@@ -477,7 +468,6 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Üyelikler tek-amaçlı uygulamalardan içe aktarılıyor...</string>
<string name="search_itunes_label">iTunes\'da Arama</string>
- <string name="select_label"><b>Seç ...</b></string>
<string name="all_label">Tümü</string>
<string name="selected_all_label">Tüm Bölümler Seçildi</string>
<string name="none_label">Hiçbiri</string>
@@ -490,7 +480,6 @@
<string name="selected_downloaded_label">İndirilen Bölümler Seçildi</string>
<string name="not_downloaded_label">İndirilmeyen</string>
<string name="selected_not_downloaded_label">İndirilmeyen Bölümler Seçildi</string>
- <string name="sort_title"><b>Sırala ...</b></string>
<string name="sort_title_a_z">Başlık (A \u2192 Z)</string>
<string name="sort_title_z_a">Başlık (Z \u2192 A)</string>
<string name="sort_date_new_old">Tarih (Yeni \u2192 Eski)</string>
@@ -503,4 +492,5 @@
<string name="rating_never_label">Bir daha gösterme</string>
<string name="rating_later_label">Daha sonra hatırlat</string>
<string name="rating_now_label">Evet, şimdi yapalım!</string>
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-uk-rUA/strings.xml b/core/src/main/res/values-uk-rUA/strings.xml
index 4fcd811b0..abc5fcec1 100644
--- a/core/src/main/res/values-uk-rUA/strings.xml
+++ b/core/src/main/res/values-uk-rUA/strings.xml
@@ -66,7 +66,6 @@
<string name="length_prefix">Довжина:\u0020</string>
<string name="size_prefix">Розмір:\u0020</string>
<string name="processing_label">Обробка</string>
- <string name="loading_label">Завантаження категорій ...</string>
<string name="save_username_password_label">Зберегти ім\'я користувача та пароль</string>
<string name="close_label">Закрити</string>
<string name="retry_label">Повторити знову</string>
@@ -78,7 +77,6 @@
<string name="feed_auto_download_global">Для всіх</string>
<string name="feed_auto_download_always">Завжди</string>
<string name="feed_auto_download_never">Ніколи</string>
- <string name="send_label">Надіслати...</string>
<string name="episode_cleanup_never">Ніколи</string>
<string name="episode_cleanup_queue_removal">Якщо не в черзі</string>
<string name="episode_cleanup_after_listening">Після закінчення</string>
@@ -102,7 +100,6 @@
<string name="mark_all_seen_label">Позначити всі як переглянуті</string>
<string name="show_info_label">Інформація</string>
<string name="remove_feed_label">Видалити подкаст</string>
- <string name="share_label">Поділитись...</string>
<string name="share_link_label">Поділитися URL сайту</string>
<string name="share_link_with_position_label">Поділитись посиланням на позицію</string>
<string name="share_feed_url_label">Поділитись посиланням на канал</string>
@@ -171,7 +168,6 @@
<string name="download_error_io_error">Помилка IO</string>
<string name="download_error_request_error">Помилка запиту</string>
<string name="download_error_db_access">Помилка бази даних</string>
- <string name="downloads_left">\0020 залишилось завантажити</string>
<string name="downloads_processing">Обробка завантаженого</string>
<string name="download_notification_title">Завантаження даних подкасту</string>
<string name="download_report_content">Завантажилось %1$d успішно, %2$d з помилками</string>
@@ -244,7 +240,6 @@
<!--Variable Speed-->
<string name="download_plugin_label">Завантажити додаток</string>
<string name="no_playback_plugin_title">Додаток не встановлено</string>
- <string name="no_playback_plugin_or_sonic_msg">Для керування швидкістю програвання потрібно встановити додаток або включити експериментальний програвач Sonic [Android 4.1+].\n\nНатисніть \"Завантажити додаток\" для завантаження безкоштовного додатку з Play Store\n\nЯкщо при використанні plugin виникнуть будь які проблеми - це відповідальність автора додатка, а не автора AntennaPod.</string>
<string name="set_playback_speed_label">Швидкість програвання</string>
<string name="enable_sonic">Включити Sonic</string>
<!--Empty list labels-->
@@ -257,7 +252,6 @@
<string name="services_label">Сервіси</string>
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Чищення епізодів</string>
- <string name="pref_episode_cleanup_summary">У разі нестачі пам\'яті видалять епізоди які не знаходяться ні в списку улюблених ні в черзі.</string>
<string name="pref_pauseOnDisconnect_sum">Зупинятись коли навушники або блютуз від’єднано</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Поновити відтворення коли навушники повторно під’єднано</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">Поновити відтворення коли блютуз повторно під’єднано</string>
@@ -347,7 +341,6 @@
<string name="pref_image_cache_size_sum">Розмір дискового кеша для зображень.</string>
<string name="experimental_pref">Експериментальні</string>
<string name="pref_sonic_title">Програвач Sonic</string>
- <string name="pref_sonic_message">Використовивать вбудований програвач sonic media player замість Prestissimo</string>
<!--Auto-Flattr dialog-->
<string name="auto_flattr_enable">Включити автоматичне заохочення авторів через сервіс flattr</string>
<string name="auto_flattr_after_percent">Заохотити автора через Flattr щойно %d відсотків епізода було відтворено</string>
@@ -374,11 +367,9 @@
<string name="opml_import_error_dir_empty">Директорія імпорту пуста</string>
<string name="select_all_label">Обрати все</string>
<string name="deselect_all_label">Убрати виділення</string>
- <string name="select_options_label">Обрати ...</string>
<string name="choose_file_from_filesystem">З локальної файлової системи</string>
<string name="choose_file_from_external_application">За допомогою додатка</string>
<string name="opml_export_label">OPML экспорт</string>
- <string name="exporting_label">Експорт ...</string>
<string name="export_error_label">Помилка експорту</string>
<string name="opml_export_success_title">OPML експорт успішний</string>
<string name="opml_export_success_sum">OPML файл записаний в:\u0020</string>
@@ -458,7 +449,6 @@
<!--Online feed view-->
<string name="subscribe_label">Підписатися</string>
<string name="subscribed_label">Підписано</string>
- <string name="downloading_label">Завантаження...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">Показати глави</string>
<string name="show_shownotes_label">Показати нотатки</string>
@@ -486,7 +476,6 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Імпорт подкастів з інших програм...</string>
<string name="search_itunes_label">Пошук в iTunes</string>
- <string name="select_label"><b>Обрати ...</b></string>
<string name="all_label">Всі</string>
<string name="selected_all_label">Обрано всі епізоди</string>
<string name="none_label">Жодного</string>
@@ -499,7 +488,6 @@
<string name="selected_downloaded_label">Обрано завантажені епізоди</string>
<string name="not_downloaded_label">Незавантажені</string>
<string name="selected_not_downloaded_label">Обрано незавантажені епізоди</string>
- <string name="sort_title"><b>Сортувати за ...</b></string>
<string name="sort_title_a_z">Назва (А \u2192 Я)</string>
<string name="sort_title_z_a">Назва (Я \u2192 А)</string>
<string name="sort_date_new_old">Дата (Нові \u2192 Старі)</string>
@@ -507,4 +495,5 @@
<string name="sort_duration_short_long">Тривалість (Короткі \u2192 Довгі)</string>
<string name="sort_duration_long_short">Тривалість (Довгі \u2192 Короткі)</string>
<!--Rating dialog-->
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values-zh-rCN/strings.xml b/core/src/main/res/values-zh-rCN/strings.xml
index 8347de9ee..78017b383 100644
--- a/core/src/main/res/values-zh-rCN/strings.xml
+++ b/core/src/main/res/values-zh-rCN/strings.xml
@@ -66,7 +66,6 @@
<string name="length_prefix">长度:\u0020</string>
<string name="size_prefix">大小:\u0020</string>
<string name="processing_label">处理中</string>
- <string name="loading_label">加载中...</string>
<string name="save_username_password_label">保存用户名密码</string>
<string name="close_label">关闭</string>
<string name="retry_label">重试</string>
@@ -77,7 +76,6 @@
<string name="feed_auto_download_global">全局</string>
<string name="feed_auto_download_always"> 总是</string>
<string name="feed_auto_download_never">从不</string>
- <string name="send_label">发送……</string>
<string name="episode_cleanup_never">从不</string>
<string name="episode_cleanup_queue_removal">当不在队列中</string>
<string name="episode_cleanup_after_listening">结束后</string>
@@ -99,7 +97,6 @@
<string name="mark_all_seen_label">所有可见</string>
<string name="show_info_label">查看信息</string>
<string name="remove_feed_label">删除播客</string>
- <string name="share_label">分享到...</string>
<string name="share_link_label">分享网站链接</string>
<string name="share_link_with_position_label">分享网站链接与位置</string>
<string name="share_feed_url_label">分享订阅地址</string>
@@ -168,7 +165,6 @@
<string name="download_error_io_error">IO 错误</string>
<string name="download_error_request_error">请求出错</string>
<string name="download_error_db_access">数据库访问错误</string>
- <string name="downloads_left">\u0020 下载剩余</string>
<string name="downloads_processing">正在处理下载</string>
<string name="download_notification_title">下载播客数据</string>
<string name="download_report_content">%1$d 下载成功, %2$d 失败</string>
@@ -356,11 +352,9 @@
<string name="opml_import_error_dir_empty">导入目录为空.</string>
<string name="select_all_label">全选</string>
<string name="deselect_all_label">取消所有选择</string>
- <string name="select_options_label">选择 ...</string>
<string name="choose_file_from_filesystem">来自本地文件系统</string>
<string name="choose_file_from_external_application">使用外部应用</string>
<string name="opml_export_label">OPML 导出</string>
- <string name="exporting_label">导出中...</string>
<string name="export_error_label">导出出错</string>
<string name="opml_export_success_title">OPML 导出成功.</string>
<string name="opml_export_success_sum">.opml 文件已保存到:\u0020</string>
@@ -436,7 +430,6 @@
<!--Online feed view-->
<string name="subscribe_label">订阅</string>
<string name="subscribed_label">已订阅</string>
- <string name="downloading_label">下载中...</string>
<!--Content descriptions for image buttons-->
<string name="show_chapters_label">显示章节</string>
<string name="show_shownotes_label">显示笔记</string>
@@ -464,7 +457,6 @@
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">正在从选定的应用中导入订阅...</string>
<string name="search_itunes_label">搜索 iTunes</string>
- <string name="select_label"><b>选择 ...</b></string>
<string name="all_label">全部</string>
<string name="selected_all_label">全选</string>
<string name="none_label">无</string>
@@ -477,7 +469,6 @@
<string name="selected_downloaded_label">选择已下载的曲目</string>
<string name="not_downloaded_label">未下载</string>
<string name="selected_not_downloaded_label">选择未下载的曲目</string>
- <string name="sort_title"><b>排序 ...</b></string>
<string name="sort_title_a_z">标题 (A \u2192 Z)</string>
<string name="sort_title_z_a">标题 (Z \u2192 A)</string>
<string name="sort_date_new_old">日期 (新 \u2192 旧)</string>
@@ -489,4 +480,5 @@
<string name="rating_never_label">请勿打扰</string>
<string name="rating_later_label">稍后提醒</string>
<string name="rating_now_label">好的, 就这样!</string>
+ <!--Audio controls-->
</resources>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 86875fc23..7f2599474 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -421,6 +421,7 @@
<string name="export_error_label">Export error</string>
<string name="opml_export_success_title">OPML Export successful.</string>
<string name="opml_export_success_sum">The .opml file was written to:\u0020</string>
+ <string name="opml_import_ask_read_permission">Access to external storage is required to read the OPML file</string>
<!-- Sleep timer -->
<string name="set_sleeptimer_label">Set sleep timer</string>
@@ -536,6 +537,7 @@
<string name="episode_filters_include">Include</string>
<string name="episode_filters_exclude">Exclude</string>
<string name="episode_filters_hint">Single words \n\"Multiple Words\"</string>
+ <string name="keep_updated">Keep Updated</string>
<!-- Progress information -->
<string name="progress_upgrading_database">Upgrading the database</string>
diff --git a/description/pt.txt b/description/pt.txt
index 7a33da592..cfb8e0e21 100644
--- a/description/pt.txt
+++ b/description/pt.txt
@@ -1,7 +1,7 @@
Gestor e reprodutor de podcasts simples, flexível e open souce
-O AntennaPod é um gestor de podcasts que lhe permite aceder a milhões de podcasts, gratuitos ou pagos, a partir de diversas fontes tais como as estações BBC, NPR e CNN. A adição de fontes é muito fácil através das base de dados iTunes ou gPodder, ficheiros OPML ou fontes RSS. Poupe tempo, economize bateria e dados móveis através dos mecanismos de controlo de transferências de episódios (possibilidade de especificar intervalos ou horas para as transferências e redes WiFi) e de eliminação de episódios (de acordo com as suas preferências).<br>
-Mas ainda mais importante: pode transferir, emitir ou colocar episódios na lista de reprodução ao seu gosto, pode utilizar velocidades variáveis de reprodução, tem suporte a capítulos e um temporizador. Pode também mostrar o seu apreço aos disponibilizadores dos episódios através do serviço Flattr.
+O AntennaPod é um gestor de podcasts que lhe permite aceder a milhões de podcasts, gratuitos ou pagos, a partir de diversas fontes tais como as estações BBC, NPR e CNN. A adição de fontes é muito fácil através das base de dados iTunes ou gPodder, ficheiros OPML ou fontes RSS. Poupe tempo, economize bateria e dados móveis através dos mecanismos de controlo de descargas de episódios (possibilidade de especificar intervalos ou horas para as descargas e redes WiFi) e de eliminação de episódios (de acordo com as suas preferências).<br>
+Mas ainda mais importante: pode descarregar, emitir ou colocar episódios na lista de reprodução ao seu gosto, pode utilizar velocidades variáveis de reprodução, tem suporte a capítulos e um temporizador. Pode também mostrar o seu apreço aos criadores dos episódios através do serviço Flattr.
Criado por entusiastas de podcasts, o AntennaPod é livre em todos os sentidos da palavra: open source, gratuito e sem publicidade.
@@ -20,7 +20,7 @@ Monitorização, partilha e suporte<br>
&#8226; Ajude os criadores de conteúdos através do serviço Flattr
Controlo do sistema<br>
-&#8226; Controle todas as transferências automáticas: escolha as fontes, exclua redes móveis, especifique as redes Wi-Fi, indique se o telefone deve estar a ser carregado e defina as horas ou intervalos das transferências<br>
+&#8226; Controle todas as descargas automáticas: escolha as fontes, exclua redes móveis, especifique as redes Wi-Fi, indique se o telefone deve estar a ser carregado e defina as horas ou intervalos das descargas<br>
&#8226; Faça a gestão do armazenamento através da cache de episódios, da eliminação inteligente (de acordo com os seus favoritos e estado de reprodução) e selecionado a localização de armazenamento<br>
&#8226; Utilize o AntennaPod no seu idioma (EN, DE, CS, NL, NB, JA, PT, ES, SV, CA, UK, FR, KO, TR, ZH)<br>
&#8226; Adapte-se ao seu ambiente através dos temas claro ou escuro<br>