summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md15
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java12
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java18
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java289
-rw-r--r--app/src/main/res/xml/preferences.xml9
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java25
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java12
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java21
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java38
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java10
-rw-r--r--core/src/main/res/values-ca/strings.xml157
-rw-r--r--core/src/main/res/values-cs-rCZ/strings.xml4
-rw-r--r--core/src/main/res/values-de/strings.xml4
-rw-r--r--core/src/main/res/values-es/strings.xml4
-rw-r--r--core/src/main/res/values-fr/strings.xml86
-rw-r--r--core/src/main/res/values-ja/strings.xml4
-rw-r--r--core/src/main/res/values-nl/strings.xml7
-rw-r--r--core/src/main/res/values-pt/strings.xml8
-rw-r--r--core/src/main/res/values-sv-rSE/strings.xml31
-rw-r--r--core/src/main/res/values-uk-rUA/strings.xml2
-rw-r--r--core/src/main/res/values/strings.xml4
-rwxr-xr-xdescription/en.txt64
25 files changed, 537 insertions, 303 deletions
diff --git a/README.md b/README.md
index daf218c67..f3d1df53f 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,17 @@
# AntennaPod
-This is the official repository of AntennaPod, a podcast manager for Android.
+This is the official repository of AntennaPod, the easy-to-use, flexible and open-source podcast manager for Android.
[![Download from Google Play](http://www.android.com/images/brand/android_app_on_play_large.png "Download from Google Play")](https://play.google.com/store/apps/details?id=de.danoeh.antennapod)
-[![AntennaPod on fdroid.org](https://camo.githubusercontent.com/7df0eafa4433fa4919a56f87c3d99cf81b68d01c/68747470733a2f2f662d64726f69642e6f72672f77696b692f696d616765732f632f63342f462d44726f69642d627574746f6e5f617661696c61626c652d6f6e2e706e67 "Download from fdroid.org")](http://f-droid.org/repository/browse/?fdcategory=Multimedia&fdid=de.danoeh.antennapod&fdpage=1)
+[![AntennaPod on fdroid.org](https://camo.githubusercontent.com/7df0eafa4433fa4919a56f87c3d99cf81b68d01c/68747470733a2f2f662d64726f69642e6f72672f77696b692f696d616765732f632f63342f462d44726f69642d627574746f6e5f617661696c61626c652d6f6e2e706e67 "Download from fdroid.org")](https://f-droid.org/repository/browse/?fdid=de.danoeh.antennapod)
## Feedback
You can use the [AntennaPod Google Group](https://groups.google.com/forum/#!forum/antennapod) for discussions about the app.
-Bug reports and feature requests can be submitted [here](https://github.com/danieloeh/AntennaPod/issues/new) (please read the [instructions](https://github.com/danieloeh/AntennaPod/blob/master/CONTRIBUTING.md) on how to report a bug and how to submit a feature request first!).
+Bug reports and feature requests can be submitted [here](https://github.com/AntennaPod/AntennaPod/issues) (please read the [instructions](https://github.com/AntennaPod/AntennaPod/blob/master/CONTRIBUTING.md) on how to report a bug and how to submit a feature request first!).
-## Beta Testing
-You can participate in beta testing by joining the Google Plus [AntennaPod Beta](https://plus.google.com/communities/105484485757508984859) community and then going to [this url](https://play.google.com/apps/testing/de.danoeh.antennapod)
-
-## Alpha Testing
-You can participate in alpha testing by joining the Google Plus [AntennaPod Alpha](https://plus.google.com/communities/117446128636140585144) community and then going to [this url](https://play.google.com/apps/testing/de.danoeh.antennapod)
+## Help test AntennaPod
+AntennaPod has many users and we don't want them to run into trouble when we add a new feature. It's important that we have a significant group test our app, so that we know all possible combinations of phones, Android versions and use cases work as expected. Check out our wiki how to join our [Alpha and Beta testing programmes](https://github.com/AntennaPod/AntennaPod/wiki/Help-test-AntennaPod)!
## Nightly Builds
@@ -27,7 +24,7 @@ Click [here](https://www.dropbox.com/sh/4h2kfa2d2jesnu8/AABF7u5QsOn8Lg8MDie4Z4Am
AntennaPod is licensed under the MIT License. You can find the license text in the LICENSE file.
## Translating AntennaPod
-If you want to translate AntennaPod into another language, you can visit the [Transifex project page](https://www.transifex.com/projects/p/antennapod/).
+If you want to translate AntennaPod into another language, you can visit the [Transifex project page](https://www.transifex.com/antennapod/antennapod/).
## Building AntennaPod
diff --git a/app/build.gradle b/app/build.gradle
index d1c075bb5..9ec87acc2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -27,7 +27,7 @@ dependencies {
compile 'de.greenrobot:eventbus:2.4.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.joanzapata.iconify:android-iconify-fontawesome:2.0.3'
- compile 'com.afollestad:material-dialogs:0.7.8.0'
+ compile 'com.afollestad:material-dialogs:0.7.8.1'
compile 'com.github.AntennaPod:AntennaPod-AudioPlayer:v1.0.2'
@@ -138,4 +138,4 @@ task filterAbout {
}
}
-preBuild.dependsOn filterAbout \ No newline at end of file
+preBuild.dependsOn filterAbout
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java
index 8de4ba3c8..fabc399ba 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java
@@ -125,6 +125,18 @@ public class PreferencesTest extends ActivityInstrumentationTestCase2<Preference
assertTrue(solo.waitForCondition(() -> unpauseOnHeadsetReconnect == UserPreferences.isUnpauseOnHeadsetReconnect(), Timeout.getLargeTimeout()));
}
+ public void testBluetoothReconnect() {
+ if(UserPreferences.isPauseOnHeadsetDisconnect() == false) {
+ solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title));
+ assertTrue(solo.waitForCondition(() -> UserPreferences.isPauseOnHeadsetDisconnect(), Timeout.getLargeTimeout()));
+ }
+ final boolean unpauseOnBluetoothReconnect = UserPreferences.isUnpauseOnBluetoothReconnect();
+ solo.clickOnText(solo.getString(R.string.pref_unpauseOnBluetoothReconnect_title));
+ assertTrue(solo.waitForCondition(() -> unpauseOnBluetoothReconnect != UserPreferences.isUnpauseOnBluetoothReconnect(), Timeout.getLargeTimeout()));
+ solo.clickOnText(solo.getString(R.string.pref_unpauseOnBluetoothReconnect_title));
+ assertTrue(solo.waitForCondition(() -> unpauseOnBluetoothReconnect == UserPreferences.isUnpauseOnBluetoothReconnect(), Timeout.getLargeTimeout()));
+ }
+
public void testContinuousPlayback() {
final boolean continuousPlayback = UserPreferences.isFollowQueue();
solo.clickOnText(solo.getString(R.string.pref_followQueue_title));
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index b03dde404..e92599561 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -551,8 +551,11 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity
menuInfo = lastMenuInfo;
}
- if(menuInfo.targetView.getParent() instanceof ListView == false
- || ((ListView)menuInfo.targetView.getParent()).getId() != R.id.nav_list) {
+ if(menuInfo == null
+ || menuInfo.targetView == null
+ || menuInfo.targetView.getParent() == null
+ || menuInfo.targetView.getParent() instanceof ListView == false
+ || ((ListView)menuInfo.targetView.getParent()).getId() != R.id.nav_list) {
return false;
}
final int position = menuInfo.position;
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
index fe94d82a1..80ccb7c99 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java
@@ -14,6 +14,8 @@ import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.FrameLayout;
+import java.lang.ref.WeakReference;
+
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.preferences.PreferenceController;
@@ -26,7 +28,7 @@ public class PreferenceActivity extends ActionBarActivity {
private PreferenceController preferenceController;
private MainFragment prefFragment;
- private static PreferenceActivity instance;
+ private static WeakReference<PreferenceActivity> instance;
private final PreferenceController.PreferenceUI preferenceUI = new PreferenceController.PreferenceUI() {
@@ -47,8 +49,8 @@ public class PreferenceActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
// This must be the FIRST thing we do, otherwise other code may not have the
// reference it needs
- instance = this;
-
+ instance = new WeakReference<PreferenceActivity>(this);
+
setTheme(UserPreferences.getTheme());
super.onCreate(savedInstanceState);
@@ -102,16 +104,18 @@ public class PreferenceActivity extends ActionBarActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
- if(instance.preferenceController != null) {
- instance.preferenceController.onCreate();
+ PreferenceActivity activity = instance.get();
+ if(activity != null && activity.preferenceController != null) {
+ activity.preferenceController.onCreate();
}
}
@Override
public void onResume() {
super.onResume();
- if(instance.preferenceController != null) {
- instance.preferenceController.onResume();
+ PreferenceActivity activity = instance.get();
+ if(activity != null && activity.preferenceController != null) {
+ activity.preferenceController.onResume();
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
index 6d28478e9..705de636c 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -11,8 +11,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
-import android.support.v4.app.LoaderManager;
-import android.support.v4.content.Loader;
import android.support.v4.util.Pair;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.Toolbar;
@@ -42,12 +40,11 @@ import java.util.List;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
-import de.danoeh.antennapod.core.asynctask.DBTaskLoader;
import de.danoeh.antennapod.core.asynctask.DownloadObserver;
+import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.event.QueueEvent;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.download.Downloader;
@@ -63,11 +60,15 @@ import de.danoeh.antennapod.core.util.ShareUtils;
import de.danoeh.antennapod.core.util.playback.Timeline;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.greenrobot.event.EventBus;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Displays information about a FeedItem and actions.
*/
-public class ItemFragment extends Fragment implements LoaderManager.LoaderCallbacks<Pair<FeedItem, LongList>> {
+public class ItemFragment extends Fragment {
private static final String TAG = "ItemFragment";
@@ -113,6 +114,8 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
private ImageButton butMore;
private PopupMenu popupMenu;
+ private Subscription subscription;
+
/**
* URL that was selected via long-press.
*/
@@ -127,55 +130,6 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
itemID = getArguments().getLong(ARG_FEEDITEM, -1);
}
- @Override
- public void onActivityCreated(@Nullable Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- getLoaderManager().initLoader(0, null, this);
- Toolbar toolbar = ((MainActivity) getActivity()).getToolbar();
- toolbar.addView(header);
- }
-
- @Override
- public void onStart() {
- super.onStart();
- EventDistributor.getInstance().register(contentUpdate);
- EventBus.getDefault().register(this);
- if (downloadObserver != null) {
- downloadObserver.setActivity(getActivity());
- downloadObserver.onResume();
- }
- if (itemsLoaded) {
- onFragmentLoaded();
- }
-
- }
-
- @Override
- public void onStop() {
- super.onStop();
- EventDistributor.getInstance().unregister(contentUpdate);
- EventBus.getDefault().unregister(this);
- }
-
- private void resetViewState() {
- if (downloadObserver != null) {
- downloadObserver.onPause();
- }
- Toolbar toolbar = ((MainActivity) getActivity()).getToolbar();
- toolbar.removeView(header);
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- resetViewState();
- if (webvDescription != null && root != null) {
- root.removeView(webvDescription);
- webvDescription.destroy();
- }
- }
-
-
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -195,19 +149,18 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
webvDescription = (WebView) layout.findViewById(R.id.webvDescription);
if (UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark) {
if (Build.VERSION.SDK_INT >= 11
- && Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
+ && Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
webvDescription.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
webvDescription.setBackgroundColor(getResources().getColor(
- R.color.black));
+ R.color.black));
}
webvDescription.getSettings().setUseWideViewPort(false);
webvDescription.getSettings().setLayoutAlgorithm(
- WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
+ WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webvDescription.getSettings().setLoadWithOverviewMode(true);
webvDescription.setOnLongClickListener(webViewLongClickListener);
webvDescription.setWebViewClient(new WebViewClient() {
-
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
@@ -243,74 +196,111 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
((MainActivity) getActivity()).dismissChildFragment();
}
}
-
-
}
);
- butAction2.setOnClickListener(new View.OnClickListener()
-
- {
- @Override
- public void onClick(View v) {
- if (item == null) {
- return;
- }
+ butAction2.setOnClickListener(v -> {
+ if (item == null) {
+ return;
+ }
- if (item.hasMedia()) {
- FeedMedia media = item.getMedia();
- if (!media.isDownloaded()) {
- DBTasks.playMedia(getActivity(), media, true, true, true);
- ((MainActivity) getActivity()).dismissChildFragment();
- } else {
- DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId());
- }
- } else if (item.getLink() != null) {
- Uri uri = Uri.parse(item.getLink());
- getActivity().startActivity(new Intent(Intent.ACTION_VIEW, uri));
- }
- }
- }
+ if (item.hasMedia()) {
+ FeedMedia media = item.getMedia();
+ if (!media.isDownloaded()) {
+ DBTasks.playMedia(getActivity(), media, true, true, true);
+ ((MainActivity) getActivity()).dismissChildFragment();
+ } else {
+ DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId());
+ }
+ } else if (item.getLink() != null) {
+ Uri uri = Uri.parse(item.getLink());
+ getActivity().startActivity(new Intent(Intent.ACTION_VIEW, uri));
+ }
+ }
);
- butMore.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (item == null) {
- return;
- }
- popupMenu.getMenu().clear();
- popupMenu.inflate(R.menu.feeditem_options);
- if (item.hasMedia()) {
- FeedItemMenuHandler.onPrepareMenu(getActivity(), popupMenuInterface, item, true, queue);
- } else {
- // these are already available via button1 and button2
- FeedItemMenuHandler.onPrepareMenu(getActivity(), popupMenuInterface, item, true, queue,
- R.id.mark_read_item, R.id.visit_website_item);
- }
- popupMenu.show();
- }
- }
+ butMore.setOnClickListener(v -> {
+ if (item == null) {
+ return;
+ }
+ popupMenu.getMenu().clear();
+ popupMenu.inflate(R.menu.feeditem_options);
+ if (item.hasMedia()) {
+ FeedItemMenuHandler.onPrepareMenu(getActivity(), popupMenuInterface, item, true, queue);
+ } else {
+ // these are already available via button1 and button2
+ FeedItemMenuHandler.onPrepareMenu(getActivity(), popupMenuInterface, item, true, queue,
+ R.id.mark_read_item, R.id.visit_website_item);
+ }
+ popupMenu.show();
+ }
);
- popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem menuItem) {
-
- try {
- return FeedItemMenuHandler.onMenuItemClicked(getActivity(), menuItem.getItemId(), item);
- } catch (DownloadRequestException e) {
- e.printStackTrace();
- Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
- return true;
- }
- }
- }
+ popupMenu.setOnMenuItemClickListener(menuItem -> {
+
+ try {
+ return FeedItemMenuHandler.onMenuItemClicked(getActivity(), menuItem.getItemId(), item);
+ } catch (DownloadRequestException e) {
+ e.printStackTrace();
+ Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
+ return true;
+ }
+ }
);
return layout;
}
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ Toolbar toolbar = ((MainActivity) getActivity()).getToolbar();
+ toolbar.addView(header);
+ load();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ EventDistributor.getInstance().register(contentUpdate);
+ EventBus.getDefault().register(this);
+ if (downloadObserver != null) {
+ downloadObserver.setActivity(getActivity());
+ downloadObserver.onResume();
+ }
+ if(itemsLoaded) {
+ updateAppearance();
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ EventDistributor.getInstance().unregister(contentUpdate);
+ EventBus.getDefault().unregister(this);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ resetViewState();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
+ if (webvDescription != null && root != null) {
+ root.removeView(webvDescription);
+ webvDescription.destroy();
+ }
+ }
+
+ private void resetViewState() {
+ if (downloadObserver != null) {
+ downloadObserver.onPause();
+ }
+ Toolbar toolbar = ((MainActivity) getActivity()).getToolbar();
+ toolbar.removeView(header);
+ }
+
private final FeedItemMenuHandler.MenuInterface popupMenuInterface = new FeedItemMenuHandler.MenuInterface() {
@Override
public void setItemVisibility(int id, boolean visible) {
@@ -409,11 +399,6 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
}
}
- public void onEvent(QueueEvent event) {
- Log.d(TAG, "onEvent(" + event + ")");
- getLoaderManager().restartLoader(0, null, ItemFragment.this);
- }
-
private View.OnLongClickListener webViewLongClickListener = new View.OnLongClickListener() {
@Override
@@ -491,46 +476,18 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
}
}
- @Override
- public Loader<Pair<FeedItem,LongList>> onCreateLoader(int id, Bundle args) {
- return new DBTaskLoader<Pair<FeedItem,LongList>>(getActivity()) {
- @Override
- public Pair<FeedItem,LongList> loadInBackground() {
- FeedItem data1 = DBReader.getFeedItem(itemID);
- if (data1 != null) {
- Timeline t = new Timeline(getActivity(), data1);
- webviewData = t.processShownotes(false);
- }
- LongList data2 = DBReader.getQueueIDList();
- return Pair.create(data1, data2);
- }
- };
- }
-
- @Override
- public void onLoadFinished(Loader<Pair<FeedItem,LongList>> loader, Pair<FeedItem,LongList> data) {
-
- if (data != null) {
- item = data.first;
- queue = data.second;
- if (!itemsLoaded) {
- itemsLoaded = true;
- onFragmentLoaded();
- } else {
- updateAppearance();
- }
+ public void onEventMainThread(QueueEvent event) {
+ if(event.contains(itemID)) {
+ updateAppearance();
}
}
- @Override
- public void onLoaderReset(Loader<Pair<FeedItem,LongList>> loader) {
- }
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & EVENTS) != 0) {
- getLoaderManager().restartLoader(0, null, ItemFragment.this);
+ updateAppearance();
}
}
};
@@ -545,4 +502,36 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
}
}
};
+
+ private void load() {
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
+ subscription = Observable.defer(() -> Observable.just(loadInBackground()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ item = result.first;
+ queue = result.second;
+ if (!itemsLoaded) {
+ itemsLoaded = true;
+ onFragmentLoaded();
+ } else {
+ updateAppearance();
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
+ }
+
+ private Pair<FeedItem,LongList> loadInBackground() {
+ FeedItem data1 = DBReader.getFeedItem(itemID);
+ if (data1 != null) {
+ Timeline t = new Timeline(getActivity(), data1);
+ webviewData = t.processShownotes(false);
+ }
+ LongList data2 = DBReader.getQueueIDList();
+ return Pair.create(data1, data2);
+ }
+
}
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 8d507663a..bc020fb36 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -73,7 +73,7 @@
android:defaultValue="true"
android:enabled="true"
android:key="prefPauseOnHeadsetDisconnect"
- android:summary="@string/pref_pauseOnHeadsetDisconnect_sum"
+ android:summary="@string/pref_pauseOnDisconnect_sum"
android:title="@string/pref_pauseOnHeadsetDisconnect_title"/>
<CheckBoxPreference
android:defaultValue="true"
@@ -83,6 +83,13 @@
android:summary="@string/pref_unpauseOnHeadsetReconnect_sum"
android:title="@string/pref_unpauseOnHeadsetReconnect_title"/>
<CheckBoxPreference
+ android:defaultValue="false"
+ android:enabled="true"
+ android:dependency="prefPauseOnHeadsetDisconnect"
+ android:key="prefUnpauseOnBluetoothReconnect"
+ android:summary="@string/pref_unpauseOnBluetoothReconnect_sum"
+ android:title="@string/pref_unpauseOnBluetoothReconnect_title"/>
+ <CheckBoxPreference
android:defaultValue="true"
android:enabled="true"
android:key="prefFollowQueue"
diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java
index 255b95119..bea8d2afd 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java
@@ -3,15 +3,14 @@ package de.danoeh.antennapod.core.asynctask;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
import android.os.AsyncTask;
+
+import java.util.concurrent.ExecutionException;
+
import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.storage.DBWriter;
-import java.util.concurrent.ExecutionException;
-
/** Removes a feed in the background. */
public class FeedRemover extends AsyncTask<Void, Void, Void> {
Context context;
@@ -35,12 +34,7 @@ public class FeedRemover extends AsyncTask<Void, Void, Void> {
}
return null;
}
-
- @Override
- protected void onCancelled() {
- dialog.dismiss();
- }
-
+
@Override
protected void onPostExecute(Void result) {
dialog.dismiss();
@@ -50,15 +44,8 @@ public class FeedRemover extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
dialog = new ProgressDialog(context);
dialog.setMessage(context.getString(R.string.feed_remover_msg));
- dialog.setOnCancelListener(new OnCancelListener() {
-
- @Override
- public void onCancel(DialogInterface dialog) {
- cancel(true);
-
- }
-
- });
+ dialog.setIndeterminate(true);
+ dialog.setCancelable(false);
dialog.show();
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java
index 4d59d75eb..4992252d1 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java
@@ -41,6 +41,18 @@ public class QueueEvent {
this.position = position;
}
+ public boolean contains(long id) {
+ if(item != null) {
+ return item.getId() == id;
+ }
+ for(FeedItem item : items) {
+ if(item.getId() == id) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
index 77db541fa..bd1061fad 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
@@ -59,6 +59,7 @@ public class UserPreferences {
// Playback
public static final String PREF_PAUSE_ON_HEADSET_DISCONNECT = "prefPauseOnHeadsetDisconnect";
public static final String PREF_UNPAUSE_ON_HEADSET_RECONNECT = "prefUnpauseOnHeadsetReconnect";
+ public static final String PREF_UNPAUSE_ON_BLUETOOTH_RECONNECT = "prefUnpauseOnBluetoothReconnect";
public static final String PREF_FOLLOW_QUEUE = "prefFollowQueue";
public static final String PREF_SKIP_KEEPS_EPISODE = "prefSkipKeepsEpisode";
public static final String PREF_AUTO_DELETE = "prefAutoDelete";
@@ -220,6 +221,10 @@ public class UserPreferences {
return prefs.getBoolean(PREF_UNPAUSE_ON_HEADSET_RECONNECT, true);
}
+ public static boolean isUnpauseOnBluetoothReconnect() {
+ return prefs.getBoolean(PREF_UNPAUSE_ON_BLUETOOTH_RECONNECT, false);
+ }
+
public static boolean isFollowQueue() {
return prefs.getBoolean(PREF_FOLLOW_QUEUE, true);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index 5cef2fe79..ab78387a2 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -18,6 +18,7 @@ import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
+import android.os.Vibrator;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
@@ -531,7 +532,7 @@ public class PlaybackService extends Service {
@Override
public boolean onMediaPlayerError(Object inObj, int what, int extra) {
- final String TAG = "PlaybackService.onErrorListener";
+ final String TAG = "PlaybackSvc.onErrorLtsn";
Log.w(TAG, "An error has occured: " + what + " " + extra);
if (mediaPlayer.getPlayerStatus() == PlayerStatus.PLAYING) {
mediaPlayer.pause(true, false);
@@ -1022,7 +1023,7 @@ public class PlaybackService extends Service {
pauseIfPauseOnDisconnect();
} else if (state == PLUGGED) {
Log.d(TAG, "Headset was plugged in during playback.");
- unpauseIfPauseOnDisconnect();
+ unpauseIfPauseOnDisconnect(false);
}
} else {
Log.e(TAG, "Received invalid ACTION_HEADSET_PLUG intent");
@@ -1038,7 +1039,7 @@ public class PlaybackService extends Service {
int state = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, -1);
if (state == BluetoothA2dp.STATE_CONNECTED) {
Log.d(TAG, "Received bluetooth connection intent");
- unpauseIfPauseOnDisconnect();
+ unpauseIfPauseOnDisconnect(true);
}
}
}
@@ -1071,10 +1072,20 @@ public class PlaybackService extends Service {
}
}
- private void unpauseIfPauseOnDisconnect() {
+ /**
+ * @param bluetooth true if the event for unpausing came from bluetooth
+ */
+ private void unpauseIfPauseOnDisconnect(boolean bluetooth) {
if (transientPause) {
transientPause = false;
- if (UserPreferences.isPauseOnHeadsetDisconnect() && UserPreferences.isUnpauseOnHeadsetReconnect()) {
+ if (!bluetooth && UserPreferences.isUnpauseOnHeadsetReconnect()) {
+ mediaPlayer.resume();
+ } else if (bluetooth && UserPreferences.isUnpauseOnBluetoothReconnect()){
+ // let the user know we've started playback again...
+ Vibrator v = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
+ if(v != null) {
+ v.vibrate(500);
+ }
mediaPlayer.resume();
}
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java
index 32cd538d5..4d56e1365 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java
@@ -1,8 +1,7 @@
package de.danoeh.antennapod.core.syndication.handler;
import android.util.Log;
-import de.danoeh.antennapod.core.BuildConfig;
-import de.danoeh.antennapod.core.feed.Feed;
+
import org.apache.commons.io.input.XmlStreamReader;
import org.jsoup.Jsoup;
import org.xmlpull.v1.XmlPullParser;
@@ -14,6 +13,8 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;
+import de.danoeh.antennapod.core.feed.Feed;
+
/** Gets the type of a specific feed by reading the root element. */
public class TypeGetter {
private static final String TAG = "TypeGetter";
@@ -28,11 +29,13 @@ public class TypeGetter {
public Type getType(Feed feed) throws UnsupportedFeedtypeException {
XmlPullParserFactory factory;
if (feed.getFile_url() != null) {
+ Reader reader = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
- xpp.setInput(createReader(feed));
+ reader = createReader(feed);
+ xpp.setInput(reader);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
@@ -40,38 +43,30 @@ public class TypeGetter {
String tag = xpp.getName();
if (tag.equals(ATOM_ROOT)) {
feed.setType(Feed.TYPE_ATOM1);
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Recognized type Atom");
+ Log.d(TAG, "Recognized type Atom");
return Type.ATOM;
} else if (tag.equals(RSS_ROOT)) {
- String strVersion = xpp.getAttributeValue(null,
- "version");
+ String strVersion = xpp.getAttributeValue(null, "version");
if (strVersion != null) {
-
if (strVersion.equals("2.0")) {
feed.setType(Feed.TYPE_RSS2);
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Recognized type RSS 2.0");
+ Log.d(TAG, "Recognized type RSS 2.0");
return Type.RSS20;
} else if (strVersion.equals("0.91")
|| strVersion.equals("0.92")) {
- if (BuildConfig.DEBUG)
- Log.d(TAG,
- "Recognized type RSS 0.91/0.92");
+ Log.d(TAG, "Recognized type RSS 0.91/0.92");
return Type.RSS091;
}
}
throw new UnsupportedFeedtypeException(Type.INVALID);
} else {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Type is invalid");
+ Log.d(TAG, "Type is invalid");
throw new UnsupportedFeedtypeException(Type.INVALID, tag);
}
} else {
eventType = xpp.next();
}
}
-
} catch (XmlPullParserException e) {
e.printStackTrace();
// XML document might actually be a HTML document -> try to parse as HTML
@@ -88,10 +83,17 @@ public class TypeGetter {
} catch (IOException e) {
e.printStackTrace();
+ } finally {
+ if(reader != null) {
+ try {
+ reader.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}
}
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Type is invalid");
+ Log.d(TAG, "Type is invalid");
throw new UnsupportedFeedtypeException(Type.INVALID);
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java
index c0233f684..1a148673c 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java
@@ -88,9 +88,13 @@ public class DateUtils {
for(String pattern : patterns) {
parser.applyPattern(pattern);
pos.setIndex(0);
- Date result = parser.parse(date, pos);
- if(result != null && pos.getIndex() == date.length()) {
- return result;
+ try {
+ Date result = parser.parse(date, pos);
+ if (result != null && pos.getIndex() == date.length()) {
+ return result;
+ }
+ } catch(Exception e) {
+ Log.e(TAG, Log.getStackTraceString(e));
}
}
diff --git a/core/src/main/res/values-ca/strings.xml b/core/src/main/res/values-ca/strings.xml
index c4887e512..0352c1ab9 100644
--- a/core/src/main/res/values-ca/strings.xml
+++ b/core/src/main/res/values-ca/strings.xml
@@ -5,9 +5,11 @@
<string name="feeds_label">Canals</string>
<string name="add_feed_label">Afegeix podcast</string>
<string name="podcasts_label">PODCASTS</string>
- <string name="episodes_label">EPISODIS</string>
+ <string name="episodes_label">Episodis</string>
<string name="new_episodes_label">Episodis nous</string>
<string name="all_episodes_label">Tots els episodis</string>
+ <string name="all_episodes_short_label">Tot</string>
+ <string name="favorite_episodes_label">Favorits</string>
<string name="new_label">Nous</string>
<string name="waiting_list_label">Llista d\'espera</string>
<string name="settings_label">Configuració</string>
@@ -26,6 +28,14 @@
<!--Main activity-->
<string name="drawer_open">Obre menú</string>
<string name="drawer_close">Tanca menú</string>
+ <string name="drawer_preferences">Calaix de preferències</string>
+ <string name="drawer_feed_order_unplayed_episodes">Ordre per durada</string>
+ <string name="drawer_feed_order_alphabetical">Ordre alfabètic</string>
+ <string name="drawer_feed_order_last_update">Ordre per data de publicació</string>
+ <string name="drawer_feed_counter_new_unplayed">Número d\'episodis nous i per reproduir</string>
+ <string name="drawer_feed_counter_new">Número de episodis nous</string>
+ <string name="drawer_feed_counter_unplayed">Número de episodis per reproduir</string>
+ <string name="drawer_feed_counter_none">Cap</string>
<!--Webview actions-->
<string name="open_in_browser_label">Obre en un navegador</string>
<string name="copy_url_label">Copia l\'enllaç</string>
@@ -37,8 +47,11 @@
<!--Other-->
<string name="confirm_label">D\'acord</string>
<string name="cancel_label">Cancel·la</string>
+ <string name="yes">Sí</string>
+ <string name="no">No</string>
<string name="author_label">Autor</string>
<string name="language_label">Llengua</string>
+ <string name="url_label">Adreça web</string>
<string name="podcast_settings_label">Configuració</string>
<string name="cover_label">Imatge</string>
<string name="error_label">Error</string>
@@ -58,6 +71,21 @@
<string name="close_label">Tanca</string>
<string name="retry_label">Reintenta</string>
<string name="auto_download_label">Inclou a baixades automàtiques</string>
+ <string name="auto_download_apply_to_items_title">Aplica als episodis previs</string>
+ <string name="auto_download_apply_to_items_message">El nou ajustament de <i>baixada automàtica</i> s\'aplicarà als nous episodis.\nVols que també sigui aplicat als episodis publicats prèviament?</string>
+ <string name="auto_delete_label">Esborra episodis automàticament\n(anula la preferència global)</string>
+ <string name="parallel_downloads_suffix">\u0020baixades paral·leles</string>
+ <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>
+ <plurals name="episode_cleanup_days_after_listening">
+ <item quantity="one">1 dia després d\'acabar</item>
+ <item quantity="other">%d dies després d\'acabar</item>
+ </plurals>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">Enllaç del canal</string>
<string name="etxtFeedurlHint">URL, canal o lloc web</string>
@@ -68,12 +96,31 @@
<!--Actions on feeds-->
<string name="mark_all_read_label">Marca-ho tot com a llegit</string>
<string name="mark_all_read_msg">S\'han marcat tots els episodis com a llegits</string>
+ <string name="mark_all_read_confirmation_msg">Si us plau confirma que vols marcar tots els episodis com reproduits.</string>
+ <string name="mark_all_read_feed_confirmation_msg">Si us plau confirma que vols marcar tots els episodis d\'aquest canal com reproduits.</string>
+ <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_link_label">Comparteix l\'enllaç de la plana</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>
+ <string name="share_item_url_label">Comparteix adreça d\'Episodi</string>
+ <string name="share_item_url_with_position_label">Comparteix adreça d\'Episodi amb posició</string>
<string name="feed_delete_confirmation_msg">Confirmeu que, efectivament, voleu suprimir aquest canal i tots els episodis que us n\'heu baixat.</string>
<string name="feed_remover_msg">S\'està esborrant el canal</string>
<string name="load_complete_feed">S\'ha actualitzat el canal</string>
+ <string name="hide_episodes_title">Amaga Episodis</string>
+ <string name="episode_actions">Aplica accions</string>
+ <string name="hide_unplayed_episodes_label">Per reproduir</string>
+ <string name="hide_paused_episodes_label">Pausat</string>
+ <string name="hide_played_episodes_label">Reproduit</string>
+ <string name="hide_queued_episodes_label">En cua</string>
+ <string name="hide_not_queued_episodes_label">No en cua</string>
+ <string name="hide_downloaded_episodes_label">Baixat</string>
+ <string name="hide_not_downloaded_episodes_label">No baixat</string>
+ <string name="filtered_label">Filtrat</string>
+ <string name="refresh_failed_msg">{fa-exclamation-circle} Darrera actualització fallida</string>
<!--actions on feeditems-->
<string name="download_label">Baixa</string>
<string name="play_label">Reprodueix</string>
@@ -83,14 +130,22 @@
<string name="remove_label">Suprimeix</string>
<string name="remove_episode_lable">Esborra episodi</string>
<string name="mark_read_label">Marca com a llegit</string>
+ <string name="marked_as_read_label">Marcats com llegits</string>
<string name="mark_unread_label">Marca com a pendent</string>
<string name="add_to_queue_label">Afegeix a la cua</string>
+ <string name="added_to_queue_label">Afegit a la cua</string>
<string name="remove_from_queue_label">Suprimeix de la cua</string>
+ <string name="add_to_favorite_label">Afegit a Favorits</string>
+ <string name="remove_from_favorite_label">Suprimeix de Favorits</string>
<string name="visit_website_label">Visita el lloc web</string>
<string name="support_label">Comparteix amb Flattr</string>
<string name="enqueue_all_new">Posa-ho tot a la cua</string>
<string name="download_all">Baixa-ho tot</string>
<string name="skip_episode_label">Omet l\'episodi</string>
+ <string name="activate_auto_download">Activa baixades automàtiques</string>
+ <string name="deactivate_auto_download">Desactiva les baixades automàtiques</string>
+ <string name="reset_position">Restablir posició de reproducció</string>
+ <string name="removed_item">Element eliminat</string>
<!--Download messages and labels-->
<string name="download_successful">ha funcionat</string>
<string name="download_failed">ha fallat</string>
@@ -108,7 +163,9 @@
<string name="download_error_unauthorized">Error d\'autenticació</string>
<string name="cancel_all_downloads_label">Cancel·la totes les baixades</string>
<string name="download_canceled_msg">S\'ha cancel·lat la baixada</string>
- <string name="download_report_title">Baixades completades</string>
+ <string name="download_canceled_autodownload_enabled_msg">Baixada cancel·lada\nDesactivada les <i>baixades automàtiques</i> per aquest element</string>
+ <string name="download_report_title">Baixades completades amb error(s)</string>
+ <string name="download_report_content_title">Registre de baixades</string>
<string name="download_error_malformed_url">URL mal formatada</string>
<string name="download_error_io_error">Error d\'E/S</string>
<string name="download_error_request_error">Error de petició</string>
@@ -124,6 +181,11 @@
<string name="download_request_error_dialog_message_prefix">S\'ha produït un error en intentar baixar el fitxer:\u0020</string>
<string name="authentication_notification_title">Cal autenticar-se</string>
<string name="authentication_notification_msg">Es necessita un usuari i una contrasenya per accedir al recurs</string>
+ <string name="confirm_mobile_download_dialog_title">Confirma baixada mòvil</string>
+ <string name="confirm_mobile_download_dialog_message_not_in_queue">La baixada amb conexió de dades mòvils està desactivada.\n\nPots escollir ja sigui només afegir l\'episodi a la cua o pot permetre la descàrrega de forma temporal.\n\n<small>La seva elecció serà recordada durant 10 minuts.</small></string>
+ <string name="confirm_mobile_download_dialog_message">La baixada amb conexió de dades mòvils està desactivada.\n\nVols permetre la descàrrega de forma temporal?\n\n<small>La seva elecció serà recordada durant 10 minuts.</small></string>
+ <string name="confirm_mobile_download_dialog_only_add_to_queue">En cua</string>
+ <string name="confirm_mobile_download_dialog_enable_temporarily">Permetre temporalment</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Error</string>
<string name="player_stopped_msg">No s\'està reproduint res</string>
@@ -138,6 +200,8 @@
<string name="playbackservice_notification_title">Podcast en reproducció</string>
<string name="unknown_media_key">AntennaPod - Control desconegut: %1$d</string>
<!--Queue operations-->
+ <string name="lock_queue">Bloqueja la cua</string>
+ <string name="unlock_queue">Desbloqueja la cua</string>
<string name="clear_queue_label">Buida la cua</string>
<string name="undo">Desfés</string>
<string name="removed_from_queue">Ítem esborrat</string>
@@ -149,6 +213,7 @@
<string name="duration">Durada</string>
<string name="ascending">Ascendent</string>
<string name="descending">Descendent</string>
+ <string name="clear_queue_confirmation_msg">Si us plau confirma que vols suprimir tots els episodis de la cua</string>
<!--Flattr-->
<string name="flattr_auth_label">Inici de sessió a Flattr</string>
<string name="flattr_auth_explanation">Premeu el botó per iniciar el procés d\'autenticació. Quan s\'obri la pantalla d\'inici de sessió de Flattr al vostre navegador, introduïu les vostres credencials i concediu a AntennaPod els permisos de compartir mitjançant Flattr. En finalitzar el procés, tornareu automàticament a aquesta pantalla.</string>
@@ -178,8 +243,9 @@
<!--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_msg">Per a què funcioni la velocitat de reproducció variable, cal instal·lar una biblioteca addicional.\n\nFeu un toc a «Baixa el connector» per baixar-vos el connector gratuït des de la Play Store.\n\nQualsevol problema que sorgeixi en utilitzar aquest connector no és culpa de l\'AntennaPod. Cal informar-ne, doncs, al propietari del connector.</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-->
<string name="no_items_label">No hi ha elements a la llista.</string>
<string name="no_feeds_label">No us heu subscrit a cap canal.</string>
@@ -189,13 +255,23 @@
<string name="queue_label">Cua</string>
<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_pauseOnHeadsetDisconnect_sum">Pausa la reproducció en desconnectar els auriculars.</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>
<string name="pref_auto_delete_title">Esborrat automàtic</string>
+ <string name="pref_smart_mark_as_played_sum">Marca episodis com com reproduits, encara que quedi menys d\'una certa quantitat de segons de temps</string>
+ <string name="pref_smart_mark_as_played_title">Marcació intel·ligent com a reproduit</string>
<string name="playback_pref">Reproducció</string>
<string name="network_pref">Xarxa</string>
+ <string name="pref_autoUpdateIntervallOrTime_title">Actualitza interval o horari del dia</string>
+ <string name="pref_autoUpdateIntervallOrTime_sum">Especifica un interval o una hora específica del dia per refrescar els canals de forma automàtica</string>
+ <string name="pref_autoUpdateIntervallOrTime_message">Pots establir un <i>interval</i> com \"cada 2 hores\", establir una <i>hora del dia</i> com \"7:00 AM\" o <i>disactiva</i> l\'actualització automàtica del conjunt.\n\n<small>Pren nota: Les actualitzacions de vegades són inexactes. Es pot trobar una breu demora.</small></string>
+ <string name="pref_autoUpdateIntervallOrTime_Disable">Desactivar</string>
+ <string name="pref_autoUpdateIntervallOrTime_Interval">Establir interval</string>
+ <string name="pref_autoUpdateIntervallOrTime_TimeOfDay">Establir hora del dia</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Només baixa fitxers a través d\'una xarxa sense fils</string>
<string name="pref_followQueue_title">Reproducció continuada</string>
<string name="pref_downloadMediaOnWifiOnly_title">Baixa a través de xarxes sense fils</string>
@@ -215,6 +291,14 @@
<string name="pref_auto_flattr_sum">Configura la compartició automàtica per Flattr</string>
<string name="user_interface_label">Interfície d\'usuari</string>
<string name="pref_set_theme_title">Selecció de tema</string>
+ <string name="pref_nav_drawer_title">Personalitzar navegació del calaix</string>
+ <string name="pref_nav_drawer_sum">Personalitza l\'aparença del calaix de navegació.</string>
+ <string name="pref_nav_drawer_items_title">Establir els elements del calaix de navegació</string>
+ <string name="pref_nav_drawer_items_sum">Canviar els elements que apareixen al calaix de navegació.</string>
+ <string name="pref_nav_drawer_feed_order_title">Establir ordre de subscripció</string>
+ <string name="pref_nav_drawer_feed_order_sum">Canviar l\'ordre de les subscripcions</string>
+ <string name="pref_nav_drawer_feed_counter_title">Establir contador de subscripció</string>
+ <string name="pref_nav_drawer_feed_counter_sum">Canviar la informació mostrada pel comptador de subscripció</string>
<string name="pref_set_theme_sum">Canvieu l\'aparença d\'AntennaPod.</string>
<string name="pref_automatic_download_title">Baixada automàtica</string>
<string name="pref_automatic_download_sum">Configureu la baixada automàtica d\'episodis.</string>
@@ -222,6 +306,7 @@
<string name="pref_autodl_wifi_filter_sum">Permet les baixades automàtiques només per a les xarxes sense fils seleccionades.</string>
<string name="pref_automatic_download_on_battery_title">Baixa mentre no es carrega</string>
<string name="pref_automatic_download_on_battery_sum">Permet les baixades automàtiques mentre la bateria no es carrega</string>
+ <string name="pref_parallel_downloads_title">Baixades paral·leles</string>
<string name="pref_episode_cache_title">Memòria d\'episodis</string>
<string name="pref_theme_title_light">Clar</string>
<string name="pref_theme_title_dark">Fosc</string>
@@ -237,13 +322,27 @@
<string name="pref_gpodnet_setlogin_information_sum">Canvia les dades d\'inici de sessió del vostre compte de gpodder.net</string>
<string name="pref_playback_speed_title">Velocitats de reproducció</string>
<string name="pref_playback_speed_sum">Personalitzeu les velocitats disponibles per a una velocitat de reproducció d\'àudio variable</string>
+ <string name="pref_fast_forward">Temps d\'avançada ràpida</string>
+ <string name="pref_rewind">Temps de rebobinat</string>
<string name="pref_gpodnet_sethostname_title">Definex nom del servidor</string>
<string name="pref_gpodnet_sethostname_use_default_host">Utilitza el servidor per defecte</string>
<string name="pref_expandNotify_title">Amplia la notificació</string>
<string name="pref_expandNotify_sum">Amplia sempre les notificacions per mostrar els botons de reproducció.</string>
<string name="pref_persistNotify_title">Botons de reproducció persistents</string>
<string name="pref_persistNotify_sum">Mantén els controls a l\'àrea de notificacions i pantalla de bloqueig quan la reproducció estigui aturada</string>
+ <string name="pref_lockscreen_background_title">Establir fons de la pantalla de bloqueig</string>
+ <string name="pref_lockscreen_background_sum">Establir el fons de pantalla de bloqueig a la imatge de l\'episodi actual. Com efecte secundari, això també mostrarà la imatge en aplicacions de tercers.</string>
+ <string name="pref_showDownloadReport_title">Mostra informació de baixades</string>
+ <string name="pref_showDownloadReport_sum">Si les descàrregues fallen, genera un informe que mostra els detalls de la falla.</string>
<string name="pref_expand_notify_unsupport_toast">Les versions d\'Android anteriors a la 4.1 no suporten les notificacions ampliades.</string>
+ <string name="pref_queueAddToFront_sum">Afegir nous episodis a la part davantera de la cua.</string>
+ <string name="pref_queueAddToFront_title">Cua al davant</string>
+ <string name="pref_smart_mark_as_played_disabled">Desactivar</string>
+ <string name="pref_image_cache_size_title">Mida de la memòria cau de les imatges</string>
+ <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>
@@ -258,6 +357,10 @@
<string name="found_in_title_label">Trobat al títol</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">Els fitxers OPML us permeten moure els podcasts d\'un gestor de podcasts a un altre.</string>
+ <string name="opml_import_option">Opció %1$d</string>
+ <string name="opml_import_explanation_1">Trieu una ruta de fitxer específic del sistema de fitxers local.</string>
+ <string name="opml_import_explanation_2">Utilitzeu una aplicació externa com Dropbox, Google Drive o el seu gestor de fitxers preferit per obrir un fitxer OPML.</string>
+ <string name="opml_import_explanation_3">Algunes aplicacions com Google Mail, Dropbox, Google Drive i la majoria dels administradors d\'arxius pot <i>obrir</i> arxius OPML <i>amb</i> AntennaPod.</string>
<string name="start_import_label">Inicia la importació</string>
<string name="opml_import_label">Importació OPML</string>
<string name="opml_directory_error">Error!</string>
@@ -266,6 +369,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>
@@ -278,6 +384,24 @@
<string name="sleep_timer_label">Temporitzador</string>
<string name="time_left_label">Temps restant:\u0020</string>
<string name="time_dialog_invalid_input">L\'entrada no és vàlida, ja que el temps ha de ser un nombre i no ho és</string>
+ <string name="timer_about_to_expire_label"><b>Quan el temporitzador està a punt d\'expirar:</b></string>
+ <string name="shake_to_reset_label">Agitar per reiniciar el temporitzador</string>
+ <string name="timer_vibration_label">Vibrar</string>
+ <string name="time_seconds">segons</string>
+ <string name="time_minutes">minuts</string>
+ <string name="time_hours">hores</string>
+ <plurals name="time_seconds_quantified">
+ <item quantity="one">1 segon</item>
+ <item quantity="other">%d segons</item>
+ </plurals>
+ <plurals name="time_minutes_quantified">
+ <item quantity="one">1 minut</item>
+ <item quantity="other">%d minuts</item>
+ </plurals>
+ <plurals name="time_hours_quantified">
+ <item quantity="one">1 hora</item>
+ <item quantity="other">%d hores</item>
+ </plurals>
<!--gpodder.net-->
<string name="gpodnet_taglist_header">CATEGORIES</string>
<string name="gpodnet_toplist_header">TOP PODCASTS</string>
@@ -320,6 +444,9 @@
<string name="set_to_default_folder">Selecciona la carpeta per defecte</string>
<string name="pref_pausePlaybackForFocusLoss_sum">Pausa la reproducció en lloc de baixar el volum quan una altra app necessiti reproduir sons</string>
<string name="pref_pausePlaybackForFocusLoss_title">Pausa en interrompre</string>
+ <string name="pref_resumeAfterCall_sum">Reprendre la reproducció després d\'una trucada telefònica</string>
+ <string name="pref_resumeAfterCall_title">Reprendre després d\'una trucada</string>
+ <string name="pref_restart_required">AntennaPod s\'ha de reiniciar perquè aquest canvi tingui efecte.</string>
<!--Online feed view-->
<string name="subscribe_label">Subscriu</string>
<string name="subscribed_label">Subscrit</string>
@@ -347,6 +474,28 @@
<string name="authentication_label">Autenticació</string>
<string name="authentication_descr">Canvieu el nom d\'usuari i contrasenya per a aquest podcast i els seus episodis.</string>
<!--Progress information-->
+ <string name="progress_upgrading_database">Actualització de la base de dades</string>
<!--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>
+ <string name="deselected_all_label">Deselecciona tots els episodis</string>
+ <string name="played_label">Reproduit</string>
+ <string name="selected_played_label">Selecciona episodis reproduits</string>
+ <string name="unplayed_label">Per reproduir</string>
+ <string name="selected_unplayed_label">Selecciona episodis sense reproduir</string>
+ <string name="downloaded_label">Baixat</string>
+ <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>
+ <string name="sort_date_old_new">Data (Antic \u2192 Nou)</string>
+ <string name="sort_duration_short_long">Duració (Curt \u2192 Llarg)</string>
+ <string name="sort_duration_long_short">Duration (Llarg \u2192 Curt)</string>
</resources>
diff --git a/core/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml
index 2032c307c..24479751b 100644
--- a/core/src/main/res/values-cs-rCZ/strings.xml
+++ b/core/src/main/res/values-cs-rCZ/strings.xml
@@ -266,8 +266,8 @@
<string name="pref_auto_delete_title">Automatické mazání</string>
<string name="pref_smart_mark_as_played_sum">Označit epizody jako poslechnuté i pokud ještě zbývá určitý počet sekund přehrávání do jejich konce</string>
<string name="pref_smart_mark_as_played_title">Chytré označování jako poslechnuté</string>
- <string name="pref_skip_removes_from_queue_sum">Odstranit epizody z fronty při jejich přeskočení</string>
- <string name="pref_skip_removes_from_queue_title">Přeskočení odstraní epizody</string>
+ <string name="pref_skip_keeps_episodes_sum">Neodstraňovat epizody při jejich přeskočení</string>
+ <string name="pref_skip_keeps_episodes_title">Nemazat přeskočené epizody</string>
<string name="playback_pref">Přehrávání</string>
<string name="network_pref">Síť</string>
<string name="pref_autoUpdateIntervallOrTime_title">Aktualizovat interval nebo čas v průběhu dne</string>
diff --git a/core/src/main/res/values-de/strings.xml b/core/src/main/res/values-de/strings.xml
index dab91e9e7..c984a932d 100644
--- a/core/src/main/res/values-de/strings.xml
+++ b/core/src/main/res/values-de/strings.xml
@@ -264,8 +264,8 @@
<string name="pref_auto_delete_title">Automatisches Löschen</string>
<string name="pref_smart_mark_as_played_sum">Episoden werden als gespielt markiert, wenn weniger als eine bestimmte Anzahl Sekunden Restspielzeit übrig sind</string>
<string name="pref_smart_mark_as_played_title">Schlaues als gespielt markieren</string>
- <string name="pref_skip_removes_from_queue_sum">Epsoden aus der Abspielliste entfernen, wenn sie übersprungen werden</string>
- <string name="pref_skip_removes_from_queue_title">Überspringen entfernt Episoden</string>
+ <string name="pref_skip_keeps_episodes_sum">Behalte Episoden beim Überspringen</string>
+ <string name="pref_skip_keeps_episodes_title">Behalte übersprungene Episoden</string>
<string name="playback_pref">Wiedergabe</string>
<string name="network_pref">Netzwerk</string>
<string name="pref_autoUpdateIntervallOrTime_title">Aktualisierungsintervall oder -tageszeit</string>
diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml
index ec4c73373..bd8abe3a2 100644
--- a/core/src/main/res/values-es/strings.xml
+++ b/core/src/main/res/values-es/strings.xml
@@ -264,8 +264,8 @@
<string name="pref_auto_delete_title">Eliminar automáticamente</string>
<string name="pref_smart_mark_as_played_sum">Marcar episodios como escuchados incluso si todavía quedan unos segundos por escuchar</string>
<string name="pref_smart_mark_as_played_title">Marcar como escuchado inteligente</string>
- <string name="pref_skip_removes_from_queue_sum">Eliminar episodios de la cola cuando al saltarlos</string>
- <string name="pref_skip_removes_from_queue_title">Saltar elimina el episodio</string>
+ <string name="pref_skip_keeps_episodes_sum">Conservar episodios al saltarlos</string>
+ <string name="pref_skip_keeps_episodes_title">Conservar episodios saltados</string>
<string name="playback_pref">Reproducción</string>
<string name="network_pref">Red</string>
<string name="pref_autoUpdateIntervallOrTime_title">Intervalo de actualización u hora del día</string>
diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml
index f0a7a864e..9b0685d68 100644
--- a/core/src/main/res/values-fr/strings.xml
+++ b/core/src/main/res/values-fr/strings.xml
@@ -88,17 +88,17 @@
</plurals>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">URL du flux</string>
- <string name="etxtFeedurlHint">URL ou flux ou site web</string>
+ <string name="etxtFeedurlHint">URL du flux</string>
<string name="txtvfeedurl_label">Ajouter un podcast par son URL</string>
<string name="podcastdirectories_label">Trouver le podcast dans la bibliothèque</string>
<string name="podcastdirectories_descr">Vous pouvez chercher de nouveaux podcasts en filtrant par nom, catégorie ou popularité dans la bibliothèque gpodder.net, ou sur l\'iTunes Store.</string>
<string name="browse_gpoddernet_label">Chercher sur gpodder.net</string>
<!--Actions on feeds-->
- <string name="mark_all_read_label">Tous marquer comme lus</string>
+ <string name="mark_all_read_label">Marquer tous les épisodes comme lus</string>
<string name="mark_all_read_msg">Tous les épisodes ont été marqués comme lus</string>
- <string name="mark_all_read_confirmation_msg">Veuillez confirmer que vous voulez bien marquer tous les épisodes comme lus</string>
- <string name="mark_all_read_feed_confirmation_msg">Veuillez confirmer que vous voulez bien marquer tous les épisode de ce flux comme lus</string>
- <string name="mark_all_seen_label">Marquer tout comme vu</string>
+ <string name="mark_all_read_confirmation_msg">Confirmer le marquage de tous les épisode comme lus</string>
+ <string name="mark_all_read_feed_confirmation_msg">Confirmer le marquage de tous les épisode de ce flux comme lus</string>
+ <string name="mark_all_seen_label">Marquer tout les épisodes comme vus</string>
<string name="show_info_label">Voir les détails</string>
<string name="remove_feed_label">Supprimer le podcast</string>
<string name="share_label">Partager...</string>
@@ -115,12 +115,12 @@
<string name="hide_unplayed_episodes_label">Non joués</string>
<string name="hide_paused_episodes_label">En pause</string>
<string name="hide_played_episodes_label">Joués</string>
- <string name="hide_queued_episodes_label">Rajouté à la liste</string>
- <string name="hide_not_queued_episodes_label">Pas rajouté à la liste</string>
+ <string name="hide_queued_episodes_label">Rajouté à la liste d\'attente</string>
+ <string name="hide_not_queued_episodes_label">Pas rajouté à la liste d\'attente</string>
<string name="hide_downloaded_episodes_label">Téléchargé</string>
<string name="hide_not_downloaded_episodes_label">Non téléchargé</string>
<string name="filtered_label">Filtré</string>
- <string name="refresh_failed_msg">{fa-exclamation-circle} Dernière mise à jour échouée</string>
+ <string name="refresh_failed_msg">{fa-exclamation-circle} La dernière mise à jour a échouée</string>
<!--actions on feeditems-->
<string name="download_label">Télécharger</string>
<string name="play_label">Lire</string>
@@ -164,12 +164,12 @@
<string name="cancel_all_downloads_label">Annuler tous les téléchargements</string>
<string name="download_canceled_msg">Téléchargement annulé</string>
<string name="download_canceled_autodownload_enabled_msg">Téléchargement annulé\n <i>Téléchargement Automatique</i> désactivé pour cet élément</string>
- <string name="download_report_title">Téléchargements terminés</string>
+ <string name="download_report_title">Téléchargements terminés avec des erreurs</string>
<string name="download_report_content_title">Rapport des téléchargements</string>
<string name="download_error_malformed_url">URL incorrecte</string>
<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 dans l\'accès à la base de données</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>
<string name="downloads_processing">Traitement des téléchargements</string>
<string name="download_notification_title">Téléchargement des données du podcast</string>
@@ -181,11 +181,11 @@
<string name="download_request_error_dialog_message_prefix">Une erreur s\'est produite durant le téléchargement du fichier :\u0020</string>
<string name="authentication_notification_title">Authentification requise</string>
<string name="authentication_notification_msg">La ressource que vous avez demandé nécessite un nom d\'utilisateur et un mot de passe</string>
- <string name="confirm_mobile_download_dialog_title">Confirmer téléchargement mobile</string>
- <string name="confirm_mobile_download_dialog_message_not_in_queue">Le téléchargement sur la connexion mobile est désactivé dans les options.\n\nVous pouvez choisir d\'ajouter seulement l\’épisode à la liste ou vous pouvez autoriser temporairement le téléchargement.\n\n&lt;small&gt;Votre choix sera retenu pour les 10 prochaines minutes.&lt;small&gt;</string>
+ <string name="confirm_mobile_download_dialog_title">Confirmer le téléchargement mobile</string>
+ <string name="confirm_mobile_download_dialog_message_not_in_queue">Le téléchargement sur la connexion mobile est désactivé dans les options.\n\nVous pouvez choisir d\'ajouter seulement l\'épisode à la liste ou vous pouvez autoriser temporairement le téléchargement.\n\n<small>Votre choix sera retenu pour les 10 prochaines minutes.</small></string>
<string name="confirm_mobile_download_dialog_message">Le téléchargement sur la connexion mobile est désactivé dans les options.\n\nVoulez-vous autoriser temporairement le téléchargement?\n\n&lt;small&gt;Votre choix sera retenu pour les 10 prochaines minutes.&lt;small&gt;</string>
<string name="confirm_mobile_download_dialog_only_add_to_queue">Rajouter à la liste</string>
- <string name="confirm_mobile_download_dialog_enable_temporarily">Permettre temporairement</string>
+ <string name="confirm_mobile_download_dialog_enable_temporarily">Autoriser temporairement</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Erreur !</string>
<string name="player_stopped_msg">Pas de lecture en cours</string>
@@ -216,16 +216,16 @@
<string name="clear_queue_confirmation_msg">Veuillez confirmer que vous voulez bien supprimer TOUS les épisodes de la file d\'attente</string>
<!--Flattr-->
<string name="flattr_auth_label">Connecter à Flattr</string>
- <string name="flattr_auth_explanation">Appuyez sur le bouton ci-dessous pour vous authentifier. Vous serez envoyés à l\'écran de connexion Flattr dans le navigateur, et il vous sera demandé de donner à AntennaPod la permission de flattr. Une fois ceci fait, vous reviendrez automatiquement à cet écran.</string>
+ <string name="flattr_auth_explanation">Appuyez sur le bouton ci-dessous pour vous authentifier. Voter navigateur va s\'ouvrir et vous serez envoyés vers l\'écran de connexion Flattr afin de donner à AntennaPod la permission de flattr. Une fois fait, vous reviendrez automatiquement à cet écran.</string>
<string name="authenticate_label">S\'authentifier</string>
- <string name="return_home_label">Revenir au départ</string>
+ <string name="return_home_label">Retourner à l\'écran d\'accueil</string>
<string name="flattr_auth_success">L\'authentification a réussi. Vous pouvez maintenant flattr depuis cette application.</string>
<string name="no_flattr_token_title">Aucun jeton Flattr trouvé.</string>
- <string name="no_flattr_token_notification_msg">Votre compte flattr semble ne pas être connecté à AntennaPod. Touchez ici pour vous connecter.</string>
+ <string name="no_flattr_token_notification_msg">Votre compte flattr ne semble pas être connecté à AntennaPod. Cliquer ici pour vous connecter.</string>
<string name="no_flattr_token_msg">Votre compte Flattr se semble pas être connecté à AntennaPod. Vous pouvez soit connecter votre compte Flattr à AntennaPod pour pouvoir flattr depuis l\'application, ou vous pouvez aller sur le site de ce que vous voulez flattr.</string>
<string name="authenticate_now_label">S\'authentifier</string>
<string name="action_forbidden_title">Action interdite</string>
- <string name="action_forbidden_msg">AntennaPod n\'a pas la permission pour cette action. Il est possible que l\'accès à votre compte depuis AntennaPod ait été révoqué. Vous pouvez vous authentifier à nouveau, ou bien visiter le site à flattr directement.</string>
+ <string name="action_forbidden_msg">AntennaPod n\'a pas la permission pour cette action. Il est possible que l\'accès à votre compte depuis AntennaPod ait été révoqué. Vous pouvez vous authentifier à nouveau, ou bien visiter le site à Flattrer directement.</string>
<string name="access_revoked_title">Accès révoqué</string>
<string name="access_revoked_info">Vous avez révoqué le jeton d\'accès d\'AntennaPod à votre compte. Pour terminer cette opération, vous devez retirer AntennaPod de la liste des applications autorisées sur le site web de Flattr.</string>
<!--Flattr-->
@@ -238,12 +238,12 @@
<string name="flattring_thing">En train de Flattrer %s</string>
<string name="flattring_label">AntennaPod est en train de Flattrer</string>
<string name="flattrd_label">AntennaPod a Flattré</string>
- <string name="flattrd_failed_label">Flattr d\'AntennaPod a échoué</string>
+ <string name="flattrd_failed_label">Le Flattr d\'AntennaPod a échoué</string>
<string name="flattr_retrieving_status">Obtention de la liste des choses Flattrées</string>
<!--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èmes concernant les extensions sont de la responsabilité de leur créateur et non d\'AntennaPod. Veillez à notifier le créateur de l\'extension de tout problème.</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="set_playback_speed_label">Vitesses de lecture</string>
<string name="enable_sonic">Activer Sonic</string>
<!--Empty list labels-->
@@ -256,21 +256,21 @@
<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 s\'il l\'espace disque devient faible</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_pauseOnHeadsetDisconnect_sum">Interrompre la lecture lorsque le casque est débranché</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Reprendre la lecture quand les écouteurs sont reconnectés</string>
<string name="pref_followQueue_sum">Après la fin d\'un épisode, passer au suivant</string>
<string name="pref_auto_delete_sum">Supprimer l\'épisode quand la lecture est finie</string>
<string name="pref_auto_delete_title">Suppression automatique</string>
- <string name="pref_smart_mark_as_played_sum">Marquer les épisodes comme lus même s\'il reste encore moins d\'un certain intervalle de temps</string>
- <string name="pref_smart_mark_as_played_title">Marquer comme lu intelligent</string>
- <string name="pref_skip_removes_from_queue_sum">Retirer les épisodes de la liste lorsqu\'ils sont passés</string>
- <string name="pref_skip_removes_from_queue_title">Passer l’épisode le retire de la liste</string>
+ <string name="pref_smart_mark_as_played_sum">Marquer les épisodes comme lus même s\'il reste encore un certain nombre de secondes à jouer</string>
+ <string name="pref_smart_mark_as_played_title">Marquer comme lu de manière intelligente</string>
+ <string name="pref_skip_keeps_episodes_sum">Garder les épisodes quand ils sont passés</string>
+ <string name="pref_skip_keeps_episodes_title">Garder les épisodes passés</string>
<string name="playback_pref">Lecture</string>
<string name="network_pref">Réseau</string>
- <string name="pref_autoUpdateIntervallOrTime_title">Intervalle de mise à jour ou heure de la journée</string>
+ <string name="pref_autoUpdateIntervallOrTime_title">Mettre à jour l’intervalle ou l\'heure</string>
<string name="pref_autoUpdateIntervallOrTime_sum">Indiquer un intervalle ou une heure spécifique de mise à jour des flux</string>
- <string name="pref_autoUpdateIntervallOrTime_message">Vous pouvez mettre en place un <i>intervalle</i> comme \"toutes les 2 heures\", une <i>heure précise</i> comme \"7:00\" ou désactiver les mises à jours automatique.\n\n<small>Note: Il est possible qu\'il y ait des délais car les heures mises à jours sont inexactes.</small></string>
+ <string name="pref_autoUpdateIntervallOrTime_message">Vous pouvez mettre en place un <i>intervalle</i> comme \"toutes les 2 heures\", une <i>heure précise</i> comme \"7:00\" ou désactiver les mises à jours automatique.\n\n<small>Note: Il est possible qu\'il y ait un délai car l\'heure de mise à jour peut être inexacte.</small></string>
<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>
@@ -279,7 +279,7 @@
<string name="pref_downloadMediaOnWifiOnly_title">Téléchargement en Wi-Fi</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Déconnexion du casque</string>
<string name="pref_unpauseOnHeadsetReconnect_title">Reconnexion du casque</string>
- <string name="pref_mobileUpdate_title">Mise à jour mobile</string>
+ <string name="pref_mobileUpdate_title">Mises à jour mobile</string>
<string name="pref_mobileUpdate_sum">Autoriser les mises à jour à travers la connexion de données mobile</string>
<string name="refreshing_label">Mise à jour en cours</string>
<string name="flattr_settings_label">Paramètres Flattr</string>
@@ -297,10 +297,10 @@
<string name="pref_nav_drawer_sum">Personnaliser l\'apparence du volet de navigation</string>
<string name="pref_nav_drawer_items_title">Changer les éléments du volet de navigation</string>
<string name="pref_nav_drawer_items_sum">Choisir quels éléments apparaissent dans le volet de navigation</string>
- <string name="pref_nav_drawer_feed_order_title">Définir ordre des abonnements</string>
+ <string name="pref_nav_drawer_feed_order_title">Définir l\'ordre des abonnements</string>
<string name="pref_nav_drawer_feed_order_sum">Change l\'ordre de vos abonnements</string>
- <string name="pref_nav_drawer_feed_counter_title">Définir compteur des abonnements</string>
- <string name="pref_nav_drawer_feed_counter_sum">Change l\'information affichée à côté du compteur des abonnements</string>
+ <string name="pref_nav_drawer_feed_counter_title">Définir le compteur d\'abonnements</string>
+ <string name="pref_nav_drawer_feed_counter_sum">Changer l\'information affichée par le compteur d\'abonnements</string>
<string name="pref_set_theme_sum">Modifier l\'apparence d\'AntennaPod.</string>
<string name="pref_automatic_download_title">Téléchargement automatique</string>
<string name="pref_automatic_download_sum">Configurer le téléchargement automatique des épisodes.</string>
@@ -334,14 +334,14 @@
<string name="pref_persistNotify_sum">Garder les notifications et les boutons de lecture sur l\'écran de verouillage quand la lecture est en pause</string>
<string name="pref_lockscreen_background_title">Changer l’arrière plan de l\'écran de déverrouillage</string>
<string name="pref_lockscreen_background_sum">Placer l\'image de l’épisode en arrière plan de l\'écran de déverrouillage. Cela a pour effet secondaire de montrer l\'image dans les apps tierces.</string>
- <string name="pref_showDownloadReport_title">Afficher rapport des téléchargements</string>
+ <string name="pref_showDownloadReport_title">Afficher le rapport de téléchargements</string>
<string name="pref_showDownloadReport_sum">Si les téléchargements échouent, générer un rapport des détails des échecs.</string>
<string name="pref_expand_notify_unsupport_toast">Les versions d\'Android antérieures à 4.1 ne sont pas compatibles avec les notifications élargies</string>
<string name="pref_queueAddToFront_sum">Ajouter de nouveaux épisodes en tête de file</string>
<string name="pref_queueAddToFront_title">Mettre au début de la file d\'attente</string>
<string name="pref_smart_mark_as_played_disabled">Désactivé</string>
- <string name="pref_image_cache_size_title">Taille de la cache d\'image</string>
- <string name="pref_image_cache_size_sum">Taille de l’espace disque pour stocker temporairement les images.</string>
+ <string name="pref_image_cache_size_title">Taille du cache de l\'image</string>
+ <string name="pref_image_cache_size_sum">Taille de l’espace de stockage temporaire des images.</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>
@@ -358,7 +358,7 @@
<string name="search_label">Recherche</string>
<string name="found_in_title_label">Trouvé dans le titre</string>
<!--OPML import and export-->
- <string name="opml_import_txtv_button_lable">Les fichiers OPML vous permettent de bouger vos podcasts d\'un logiciel à un autre.</string>
+ <string name="opml_import_txtv_button_lable">Les fichiers OPML vous permettent d\'exporter vos podcasts d\'un logiciel à un autre.</string>
<string name="opml_import_option">Option %1$d</string>
<string name="opml_import_explanation_1">Choisir un chemin de fichier spécifique dans le système de fichiers local</string>
<string name="opml_import_explanation_2">Utiliser une application tierce comme Dropbox, Google Drive ou votre gestionnaire de fichier favori pour ouvrir un fichier OPML</string>
@@ -383,7 +383,7 @@
<string name="set_sleeptimer_label">Définir le minuteur d\'arrêt automatique</string>
<string name="disable_sleeptimer_label">Désactiver le minuteur d\'arrêt automatique</string>
<string name="enter_time_here_label">Entrer l\'heure</string>
- <string name="sleep_timer_label">Arrêt automatique</string>
+ <string name="sleep_timer_label">Minuteur de mise en veille</string>
<string name="time_left_label">Durée restante :\u0020</string>
<string name="time_dialog_invalid_input">Entrée invalide, la durée doit être un nombre entier</string>
<string name="timer_about_to_expire_label"><b>Quand le minuteur est sur le point de se terminer:</b></string>
@@ -416,7 +416,7 @@
<string name="username_label">Identifiant</string>
<string name="password_label">Mot de passe</string>
<string name="gpodnetauth_device_title">Choix de l\'appareil</string>
- <string name="gpodnetauth_device_descr">Créez un nouvel appareil à utiliser pour votre compte gpodder.net ou choisissez un appareil existant :</string>
+ <string name="gpodnetauth_device_descr">Créer un nouvel appareil pour votre compte gpodder.net ou choisir un appareil existant :</string>
<string name="gpodnetauth_device_deviceID">ID de l\'appareil :\u0020</string>
<string name="gpodnetauth_device_caption">Légende</string>
<string name="gpodnetauth_device_butCreateNewDevice">Créer un nouvel appareil</string>
@@ -445,7 +445,7 @@
<string name="folder_not_empty_dialog_msg">Le répertoire que vous avez choisi n\'est pas vide. Les fichiers téléchargés seront ajoutés à ce répertoire. Continuer malgré tout ?</string>
<string name="set_to_default_folder">Choisir le répertoire par défaut</string>
<string name="pref_pausePlaybackForFocusLoss_sum">Mettre la lecture en pause au lieu de baisser le volume quand une autre application veut jouer un son</string>
- <string name="pref_pausePlaybackForFocusLoss_title">Mettre en pause lors des interruptions</string>
+ <string name="pref_pausePlaybackForFocusLoss_title">Mettre en pause lors d\'interruptions</string>
<string name="pref_resumeAfterCall_sum">Reprendre la lecture après un appel téléphonique</string>
<string name="pref_resumeAfterCall_title">Reprendre après appel</string>
<string name="pref_restart_required">AntennaPod doit être redémarré afin que ce changement prenne effet</string>
@@ -482,17 +482,17 @@
<string name="search_itunes_label">Chercher sur iTunes</string>
<string name="select_label"><b>Sélectionner ...</b></string>
<string name="all_label">Tout</string>
- <string name="selected_all_label">Sélectionné tous les épisodes</string>
+ <string name="selected_all_label">Tous les épisodes ont été sélectionné</string>
<string name="none_label">Aucun</string>
- <string name="deselected_all_label">Désélectionné tous les épisodes</string>
+ <string name="deselected_all_label">Tous les épisodes ont été désélectionné</string>
<string name="played_label">Joués</string>
- <string name="selected_played_label">Sélectionné tous les épisodes joués</string>
+ <string name="selected_played_label">Episodes joués sélectionnés</string>
<string name="unplayed_label">Non joués</string>
- <string name="selected_unplayed_label">Sélectionné tous les épisodes non joués</string>
+ <string name="selected_unplayed_label">Episodes non joués sélectionnés</string>
<string name="downloaded_label">Téléchargés</string>
- <string name="selected_downloaded_label">Sélectionné tous les épisodes téléchargés</string>
+ <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">Sélectionné tous les épisodes 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_a_z">Titre (A \u2192 Z)</string>
<string name="sort_title_z_a">Titre (Z \u2192 A)</string>
diff --git a/core/src/main/res/values-ja/strings.xml b/core/src/main/res/values-ja/strings.xml
index a83b16ab9..f8e01c154 100644
--- a/core/src/main/res/values-ja/strings.xml
+++ b/core/src/main/res/values-ja/strings.xml
@@ -263,8 +263,8 @@
<string name="pref_auto_delete_title">自動削除</string>
<string name="pref_smart_mark_as_played_sum">一定の秒数未満の再生時間がまだ残っている場合でも、エピソードを再生済としてマークします</string>
<string name="pref_smart_mark_as_played_title">再生済としてスマートマーク</string>
- <string name="pref_skip_removes_from_queue_sum">エピソードをスキップしたときに、エピソードをキューから削除します</string>
- <string name="pref_skip_removes_from_queue_title">スキップでエピソードを削除</string>
+ <string name="pref_skip_keeps_episodes_sum">エピソードをスキップした時に残しておきます</string>
+ <string name="pref_skip_keeps_episodes_title">エピソードのスキップ時に残す</string>
<string name="playback_pref">再生</string>
<string name="network_pref">ネットワーク</string>
<string name="pref_autoUpdateIntervallOrTime_title">間隔または時間を更新</string>
diff --git a/core/src/main/res/values-nl/strings.xml b/core/src/main/res/values-nl/strings.xml
index 07c786ad9..86c1399cf 100644
--- a/core/src/main/res/values-nl/strings.xml
+++ b/core/src/main/res/values-nl/strings.xml
@@ -98,7 +98,7 @@
<string name="mark_all_read_msg">Alle afleveringen als afgespeeld markeren</string>
<string name="mark_all_read_confirmation_msg">Bevestig aub dat u alle afleveringen als afgespeeld wilt markeren.</string>
<string name="mark_all_read_feed_confirmation_msg">Bevestig aub dat u alle afleveringen van deze feed als afgespeeld wilt markeren.</string>
- <string name="mark_all_seen_label">Alles als gelezen markeren</string>
+ <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>
@@ -243,6 +243,7 @@
<!--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="set_playback_speed_label">Afspeelsnelheden</string>
<string name="enable_sonic">Sonic instellen</string>
<!--Empty list labels-->
@@ -263,8 +264,8 @@
<string name="pref_auto_delete_title">Automatisch verwijderen</string>
<string name="pref_smart_mark_as_played_sum">Als afgespeeld markeren wanneer minder dan een bepaald aantal seconden van de afspeeltijd over is</string>
<string name="pref_smart_mark_as_played_title">Slimme afgespeeld markering</string>
- <string name="pref_skip_removes_from_queue_sum">Afleveringen uit de wachtrij verwijderen als u op \'overslaan\' klikt</string>
- <string name="pref_skip_removes_from_queue_title">Verwijderen na overslaan</string>
+ <string name="pref_skip_keeps_episodes_sum">Afleveringen bewaren en in de wachtrij houden als u op \'overslaan\' klikt</string>
+ <string name="pref_skip_keeps_episodes_title">Overgeslagen afleveringen bewaren</string>
<string name="playback_pref">Afspelen</string>
<string name="network_pref">Netwerk</string>
<string name="pref_autoUpdateIntervallOrTime_title">Feed update interval of tijdstip</string>
diff --git a/core/src/main/res/values-pt/strings.xml b/core/src/main/res/values-pt/strings.xml
index b9752dd49..30fb28918 100644
--- a/core/src/main/res/values-pt/strings.xml
+++ b/core/src/main/res/values-pt/strings.xml
@@ -57,7 +57,7 @@
<string name="error_label">Erro</string>
<string name="error_msg_prefix">Ocorreu um erro:</string>
<string name="refresh_label">Atualizar</string>
- <string name="external_storage_error_msg">Não existe um cartão SD. Certifique-se que inseriu o cartão corretamente.</string>
+ <string name="external_storage_error_msg">Cartão SD não disponível. Certifique-se de que inseriu o cartão corretamente para que a aplicação funcione corretamente.</string>
<string name="chapters_label">Capítulos</string>
<string name="shownotes_label">Notas</string>
<string name="description_label">Descrição</string>
@@ -88,7 +88,7 @@
</plurals>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">URL da fonte</string>
- <string name="etxtFeedurlHint">URL da fonte ou sítio web</string>
+ <string name="etxtFeedurlHint">URL da fonte ou do sítio web</string>
<string name="txtvfeedurl_label">Adicionar podcast via URL</string>
<string name="podcastdirectories_label">Localizar podcasts no diretório</string>
<string name="podcastdirectories_descr">Pode procurar por novos podcasts no gPodder.net e também na loja iTunes. Pode procurar por nome, categoria e popularidade.</string>
@@ -264,8 +264,8 @@
<string name="pref_auto_delete_title">Eliminação automática</string>
<string name="pref_smart_mark_as_played_sum">Marcar episódios como reproduzidos mesmo que restem alguns segundos de reprodução</string>
<string name="pref_smart_mark_as_played_title">Marcar como reproduzido (inteligente)</string>
- <string name="pref_skip_removes_from_queue_sum">Remover episódios da fila quando forem ignorados</string>
- <string name="pref_skip_removes_from_queue_title">Remover episódios ao ignorar</string>
+ <string name="pref_skip_keeps_episodes_sum">Manter episódio mesmo se forem ignorados</string>
+ <string name="pref_skip_keeps_episodes_title">Manter episódios ignorados</string>
<string name="playback_pref">Reprodução</string>
<string name="network_pref">Rede</string>
<string name="pref_autoUpdateIntervallOrTime_title">Intervalo de atualização ou hora do dia</string>
diff --git a/core/src/main/res/values-sv-rSE/strings.xml b/core/src/main/res/values-sv-rSE/strings.xml
index 9eabbf0c3..eafe998e0 100644
--- a/core/src/main/res/values-sv-rSE/strings.xml
+++ b/core/src/main/res/values-sv-rSE/strings.xml
@@ -5,8 +5,11 @@
<string name="feeds_label">Flöden</string>
<string name="add_feed_label">Lägg till Podcast</string>
<string name="podcasts_label">PODCASTS</string>
+ <string name="episodes_label">Episoder</string>
<string name="new_episodes_label">Nya Episoder</string>
<string name="all_episodes_label">Alla Episoder</string>
+ <string name="all_episodes_short_label">Alla</string>
+ <string name="favorite_episodes_label">Favoriter</string>
<string name="new_label">Ny</string>
<string name="waiting_list_label">Väntelista</string>
<string name="settings_label">Inställningar</string>
@@ -28,6 +31,7 @@
<string name="drawer_preferences">Lådinställningar</string>
<string name="drawer_feed_order_unplayed_episodes">Sortera efter räknare</string>
<string name="drawer_feed_order_alphabetical">Sortera alfabetiskt</string>
+ <string name="drawer_feed_order_last_update">Sortera efter publiceringsdatum</string>
<string name="drawer_feed_counter_new_unplayed">Antal nya och ospelade episoder</string>
<string name="drawer_feed_counter_new">Antal nya episoder</string>
<string name="drawer_feed_counter_unplayed">Antal ospelade episoder</string>
@@ -68,11 +72,20 @@
<string name="retry_label">Försök igen</string>
<string name="auto_download_label">Inkludera i automatiska nedladdningar</string>
<string name="auto_download_apply_to_items_title">Applicera på Föregående Episoder</string>
+ <string name="auto_download_apply_to_items_message">Den nya inställningen <i>Automatisk Nedladdning</i> kommer automatiskt att appliceras på nya episoder.\nVill du även applicera det på tidigare publicerade episoder?</string>
<string name="auto_delete_label">Ta automatiskt bort episod\n(åsidosätter global standardinställning)</string>
<string name="parallel_downloads_suffix">\u0020parallella nedladdningar</string>
<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="episode_cleanup_never">Aldrig</string>
+ <string name="episode_cleanup_queue_removal">Om inte köad</string>
+ <string name="episode_cleanup_after_listening">Efter avslutad</string>
+ <plurals name="episode_cleanup_days_after_listening">
+ <item quantity="one">1 dag efter färdigspelad</item>
+ <item quantity="other">%d dagar efter färdigspelad</item>
+ </plurals>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">Flödets URL</string>
<string name="etxtFeedurlHint">URL till flöde eller webbsida</string>
@@ -122,6 +135,8 @@
<string name="add_to_queue_label">Lägg till i kön</string>
<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="remove_from_favorite_label">Ta bort från 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>
@@ -130,6 +145,7 @@
<string name="activate_auto_download">Aktivera Automatisk Nedladdning</string>
<string name="deactivate_auto_download">Avaktivera Automatisk Nedladdning</string>
<string name="reset_position">Nollställ Uppspelningspositionen</string>
+ <string name="removed_item">Borttagen</string>
<!--Download messages and labels-->
<string name="download_successful">lyckades</string>
<string name="download_failed">misslyckades</string>
@@ -227,7 +243,9 @@
<!--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="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>
@@ -237,6 +255,8 @@
<string name="queue_label">Kö</string>
<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 bör kunna tas bort om det behövs utrymme</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Pausa uppspelningen när hörlurarna bortkopplas</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Fortsätt uppspelningen när hörlurarna återansluts</string>
<string name="pref_followQueue_sum">Hoppa till nästa i kön när uppspelningen är klar</string>
@@ -244,6 +264,8 @@
<string name="pref_auto_delete_title">Automatisk borttagning</string>
<string name="pref_smart_mark_as_played_sum">Markera episoder som spelade även om mindre än ett visst antal sekunder är kvar</string>
<string name="pref_smart_mark_as_played_title">Smart markering av uppspelat innehåll</string>
+ <string name="pref_skip_keeps_episodes_sum">Ta inte bort episoder när de hoppas över</string>
+ <string name="pref_skip_keeps_episodes_title">Behåll Överhoppade Episoder</string>
<string name="playback_pref">Uppspelning</string>
<string name="network_pref">Nätverk </string>
<string name="pref_autoUpdateIntervallOrTime_title">Uppdateringsintervall eller Tid på Dagen</string>
@@ -310,6 +332,8 @@
<string name="pref_expandNotify_sum">Expandera alltid notifieringen för att visa uppspelningskontrollerna.</string>
<string name="pref_persistNotify_title">Bestående Uppspelningskontroller</string>
<string name="pref_persistNotify_sum">Behåll notifiering och kontroller på låsskärmen när uppspelningen pausas.</string>
+ <string name="pref_lockscreen_background_title">Sätt Låsskärmens Bakgrund</string>
+ <string name="pref_lockscreen_background_sum">Sätt låsskärmens bakgrund till den spelade episodens bild. En bieffekt är att även tredjepartsappar kan visa bilden.</string>
<string name="pref_showDownloadReport_title">Visa Nedladdningsrapport</string>
<string name="pref_showDownloadReport_sum">Visa en rapport med detaljer om felet när nedladdningar misslyckas.</string>
<string name="pref_expand_notify_unsupport_toast">Androidversioner före 4.1 har inte stöd för expanderade notifieringar.</string>
@@ -318,6 +342,9 @@
<string name="pref_smart_mark_as_played_disabled">Avaktiverad</string>
<string name="pref_image_cache_size_title">Bildcachestorlek</string>
<string name="pref_image_cache_size_sum">Storleken på bildcachen på disken.</string>
+ <string name="experimental_pref">Experimentell</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>
<!--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>
@@ -332,6 +359,7 @@
<string name="found_in_title_label">Hittad i titeln</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">OPML-filer låter dig flytta dina podcasts från en podcatcher till en annan.</string>
+ <string name="opml_import_option">Val %1$d</string>
<string name="opml_import_explanation_1">Välj en specifik sökväg från det lokala filsystemet.</string>
<string name="opml_import_explanation_2">Använd en extern applikation som Dropbox, Google Drive eller ditt favoritval av filhanterare för att öppna en OPML fil.</string>
<string name="opml_import_explanation_3">Flera applikationer som Google Mail, Dropbox, Google Drive och de flesta filhanterare kan <i>öppna</i> OPML filer <i>med</i> AntennaPod.</string>
@@ -358,6 +386,9 @@
<string name="sleep_timer_label">Sömntimer</string>
<string name="time_left_label">Återstående tid:\u0020</string>
<string name="time_dialog_invalid_input">Ogiltigt tal, tiden måste vara ett heltal</string>
+ <string name="timer_about_to_expire_label"><b>När timern är nära noll:</b></string>
+ <string name="shake_to_reset_label">Skaka för att återställa</string>
+ <string name="timer_vibration_label">Vibrera</string>
<string name="time_seconds">sekunder</string>
<string name="time_minutes">minuter</string>
<string name="time_hours">timmar</string>
diff --git a/core/src/main/res/values-uk-rUA/strings.xml b/core/src/main/res/values-uk-rUA/strings.xml
index bb577baa4..85069cd22 100644
--- a/core/src/main/res/values-uk-rUA/strings.xml
+++ b/core/src/main/res/values-uk-rUA/strings.xml
@@ -265,8 +265,6 @@
<string name="pref_auto_delete_title">Автовидалення</string>
<string name="pref_smart_mark_as_played_sum">Позначити епізоди як грані навіть якщо залишилось менш ніж зазначене число секунд до кінця відтворення</string>
<string name="pref_smart_mark_as_played_title">Розумне позначення граних епізодів</string>
- <string name="pref_skip_removes_from_queue_sum">Видаляти епізод з черги у разі його пропуска при прослуховуванні</string>
- <string name="pref_skip_removes_from_queue_title">Видалення епізода пропуском</string>
<string name="playback_pref">Відтворення</string>
<string name="network_pref">Мережа</string>
<string name="pref_autoUpdateIntervallOrTime_title">Частота оновлень або оновлення в зазначений час</string>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index f50f271ed..0c56e1d3e 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -276,8 +276,9 @@
<string name="flattr_label">Flattr</string>
<string name="pref_episode_cleanup_title">Episode Cleanup</string>
<string name="pref_episode_cleanup_summary">Episodes that aren\'t in the queue and aren\'t favorites should be eligible for removal if space is needed</string>
- <string name="pref_pauseOnHeadsetDisconnect_sum">Pause playback when the headphones are disconnected</string>
+ <string name="pref_pauseOnDisconnect_sum">Pause playback when headphones or bluetooth are disconnected</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">Resume playback when the headphones are reconnected</string>
+ <string name="pref_unpauseOnBluetoothReconnect_sum">Resume playback when bluetooth reconnects</string>
<string name="pref_followQueue_sum">Jump to next queue item when playback completes</string>
<string name="pref_auto_delete_sum">Delete episode when playback completes</string>
<string name="pref_auto_delete_title">Auto Delete</string>
@@ -298,6 +299,7 @@
<string name="pref_downloadMediaOnWifiOnly_title">WiFi media download</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Headphones Disconnect</string>
<string name="pref_unpauseOnHeadsetReconnect_title">Headphones Reconnect</string>
+ <string name="pref_unpauseOnBluetoothReconnect_title">Bluetooth Reconnect</string>
<string name="pref_mobileUpdate_title">Mobile Updates</string>
<string name="pref_mobileUpdate_sum">Allow updates over the mobile data connection</string>
<string name="refreshing_label">Refreshing</string>
diff --git a/description/en.txt b/description/en.txt
index 3f3ffea02..c217b5944 100755
--- a/description/en.txt
+++ b/description/en.txt
@@ -1,22 +1,42 @@
-An open-source podcast manager for Android.
-
-AntennaPod is an open-source podcast manager for Android 2.3.3 and above. It offers all the basic features you expect from a podcatcher, like streaming and downloading episodes, refreshing all feeds automatically or adding them to a queue to listen to them later. Moreover, AntennaPod lets you flattr podcasts and episodes from within the app.
-
-So far the following features are implemented:
-
-* Downloading and Streaming of episodes
-* Variable speed playback (requires Presto Sound Library or Prestissimo)
-* Support for Atom and RSS feeds
-* Support for password-protected feeds and episodes
-* Support for searching iTunes listings
-* OPML import and export
-* Flattr integration including automatic flattring
-* Player homescreen widget
-* Search
-* Automatic feed updates
-* Automatic download of new episodes
-* Sleep timer
-* Access to the gpodder.net podcast directory
-* Subscription syncing with the gpodder.net service
-* Supports MP3 chapters, VorbisComment chapters and Podlove Simple Chapters
-* Supports paged feeds (http://podlove.org/paged-feeds/)
+Easy-to-use, flexible and open-source podcast manager and player
+
+AntennaPod is a podcast manager and player that gives you instant access to millions of free and paid podcasts, from independent podcasters to large publishing houses such as the BBC, NPR and CNN. Add, import and export their feeds hassle-free using the iTunes podcast database, OPML files or simple RSS URLs. Save effort, battery power and mobile data usage with powerful automation controls for downloading episodes (specify times, intervals and WiFi networks) and deleting episodes (based your favourites and delay settings).<br>
+But most importantly: Download, stream or queue episodes and enjoy them the way you like with adjustable playback speeds, chapter support and a sleep timer. You can even show your love to the content creators with our Flattr integration.
+
+Made by podcast-enthousiast, AntennaPod is free in all senses of the word: open source, no costs, no ads.
+
+<b>All features:</b><br>
+IMPORT, ORGANIZE AND PLAY<br>
+&#8226; Add and import feeds via the iTunes and gPodder.net directories, OPML files and RSS or Atom links<br>
+&#8226; Manage playback from anywhere: homescreen widget, system notification and earplug and bluetooth controls<br>
+&#8226; Enjoy listening your way with adjustable playback speed, chapter support (MP3, VorbisComment and Podlove), remembered playback position and an advanced sleep timer (shake to reset, lower volume and slow down playback)<br>
+&#8226; Access password-protected feeds and episodes<br>
+&#8226; Take advantage of paged feeds (www.podlove.org/paged-feeds)
+
+KEEP TRACK, SHARE & APPRECIATE<br>
+&#8226; Keep track of the best of the best by marking episodes as favourites<br>
+&#8226; Find that one episode through the playback history or by searching (titles and shownotes)<br>
+&#8226; Share episodes and feeds through advanced social media and email options, the gPodder.net services and via OPML export<br>
+&#8226; Support content creators with Flattr integration including automatic flattring
+
+CONTROL THE SYSTEM<br>
+&#8226; Take control over automated downloading: choose feeds, exclude mobile networks, select specific WiFi networks, require the phone to be charging and set times or intervals<br>
+&#8226; Manage storage by setting the amount of cached episodes, smart deletion (based on your favourites and play status) and selecting your preferred location<br>
+&#8226; Use AntennaPod in your language (EN, DE, CS, NL, NB, JA, PT, ES, SV, CA, UK, FR, KO, TR, ZH)<br>
+&#8226; Adapt to your environment using the light and dark theme<br>
+&#8226; Back-up your subscriptions with the gPodder.net integration and OPML export
+
+<b>Join the AntennaPod community!</b><br>
+AntennaPod is under active development by volunteers. You can contribute too, with code or with comment!
+
+GitHub is the place to go for feature requests, bug reports and code contributions:<br>
+www.github.com/AntennaPod/AntennaPod
+
+Our Google Group is the place to share your ideas, favourite podcasting moments and gratitude to all the volunteers:<br>
+https://groups.google.com/forum/#!forum/antennapod
+
+Transifex is the place to help with translations:<br>
+www.transifex.com/antennapod/antennapod
+
+Check out our Beta Testing programme to get the latest features first:<br>
+www.github.com/AntennaPod/AntennaPod/wiki/Help-test-AntennaPod