summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java9
-rw-r--r--app/src/main/play/release-notes/en-US/default.txt2
-rw-r--r--app/src/main/res/layout/feeditemlist_item.xml407
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java38
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java1
-rw-r--r--core/src/main/res/values-ca/strings.xml108
-rw-r--r--core/src/main/res/values-es/strings.xml2
-rw-r--r--core/src/main/res/values-fr/strings.xml2
-rw-r--r--core/src/main/res/values-gl/strings.xml2
-rw-r--r--core/src/main/res/values-pt-rBR/strings.xml72
-rw-r--r--core/src/main/res/values-zh-rTW/strings.xml41
15 files changed, 458 insertions, 244 deletions
diff --git a/app/build.gradle b/app/build.gradle
index bfcbf4147..2880f980f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -22,8 +22,8 @@ android {
// "1.2.3-SNAPSHOT" -> 1020300
// "1.2.3-RC4" -> 1020304
// "1.2.3" -> 1020395
- versionCode 2000295
- versionName "2.0.2"
+ versionCode 2000395
+ versionName "2.0.3"
multiDexEnabled false
vectorDrawables.useSupportLibrary true
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 6f237e1aa..a398a5e94 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -184,6 +184,9 @@ public class MainActivity extends CastEnabledActivity {
public void onSlide(@NonNull View view, float slideOffset) {
AudioPlayerFragment audioPlayer = (AudioPlayerFragment) getSupportFragmentManager()
.findFragmentByTag(AudioPlayerFragment.TAG);
+ if (audioPlayer == null) {
+ return;
+ }
float condensedSlideOffset = Math.max(0.0f, Math.min(0.2f, slideOffset - 0.2f)) / 0.2f;
audioPlayer.getExternalPlayerHolder().setAlpha(1 - condensedSlideOffset);
audioPlayer.getExternalPlayerHolder().setVisibility(
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
index 8efc89c9a..4762622d1 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
@@ -92,11 +92,11 @@ public class EpisodeItemListAdapter extends RecyclerView.Adapter<EpisodeItemView
// Set all listeners to null. This is required to prevent leaking fragments that have set a listener.
// Activity -> recycledViewPool -> EpisodeItemViewHolder -> Listener -> Fragment (can not be garbage collected)
holder.itemView.setOnClickListener(null);
+ holder.itemView.setOnCreateContextMenuListener(null);
+ holder.itemView.setOnLongClickListener(null);
holder.secondaryActionButton.setOnClickListener(null);
holder.dragHandle.setOnTouchListener(null);
holder.coverHolder.setOnTouchListener(null);
- holder.container.setOnCreateContextMenuListener(null);
- holder.container.setOnLongClickListener(null);
}
/**
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
index 3129aa43c..5a65f956c 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
@@ -133,7 +133,12 @@ public class AudioPlayerFragment extends Fragment implements
pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
- pager.post(() -> ((MainActivity) getActivity()).getBottomSheet().updateScrollingChild());
+ pager.post(() -> {
+ if (getActivity() != null) {
+ // By the time this is posted, the activity might be closed again.
+ ((MainActivity) getActivity()).getBottomSheet().updateScrollingChild();
+ }
+ });
}
});
pageIndicator = root.findViewById(R.id.page_indicator);
diff --git a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java
index 902e5094b..35744227f 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java
@@ -39,7 +39,7 @@ import de.danoeh.antennapod.view.CircularProgressBar;
public class EpisodeItemViewHolder extends RecyclerView.ViewHolder {
private static final String TAG = "EpisodeItemViewHolder";
- public final View container;
+ private final View container;
public final ImageView dragHandle;
private final TextView placeholder;
private final ImageView cover;
@@ -102,7 +102,7 @@ public class EpisodeItemViewHolder extends RecyclerView.ViewHolder {
isNew.setVisibility(item.isNew() ? View.VISIBLE : View.GONE);
isFavorite.setVisibility(item.isTagged(FeedItem.TAG_FAVORITE) ? View.VISIBLE : View.GONE);
isInQueue.setVisibility(item.isTagged(FeedItem.TAG_QUEUE) ? View.VISIBLE : View.GONE);
- itemView.setAlpha(item.isPlayed() ? 0.5f : 1.0f);
+ container.setAlpha(item.isPlayed() ? 0.5f : 1.0f);
ItemActionButton actionButton = ItemActionButton.forItem(item, true, true);
actionButton.configure(secondaryActionButton, secondaryActionIcon, activity);
@@ -116,6 +116,7 @@ public class EpisodeItemViewHolder extends RecyclerView.ViewHolder {
progressBar.setVisibility(View.GONE);
duration.setVisibility(View.GONE);
position.setVisibility(View.GONE);
+ itemView.setBackgroundResource(ThemeUtils.getDrawableFromAttr(activity, R.attr.selectableItemBackground));
}
if (coverHolder.getVisibility() == View.VISIBLE) {
@@ -136,9 +137,9 @@ public class EpisodeItemViewHolder extends RecyclerView.ViewHolder {
Converter.getDurationStringLocalized(activity, media.getDuration())));
if (media.isCurrentlyPlaying()) {
- container.setBackgroundColor(ThemeUtils.getColorFromAttr(activity, R.attr.currently_playing_background));
+ itemView.setBackgroundColor(ThemeUtils.getColorFromAttr(activity, R.attr.currently_playing_background));
} else {
- container.setBackgroundResource(ThemeUtils.getDrawableFromAttr(activity, R.attr.selectableItemBackground));
+ itemView.setBackgroundResource(ThemeUtils.getDrawableFromAttr(activity, R.attr.selectableItemBackground));
}
if (DownloadRequester.getInstance().isDownloadingFile(media)) {
diff --git a/app/src/main/play/release-notes/en-US/default.txt b/app/src/main/play/release-notes/en-US/default.txt
index b44fd22bd..a27f2d0c0 100644
--- a/app/src/main/play/release-notes/en-US/default.txt
+++ b/app/src/main/play/release-notes/en-US/default.txt
@@ -1,4 +1,4 @@
-We are proud to release version 2.0.0 with a new logo and refreshed user interface.
+We are proud to release version 2.0 with a new logo and refreshed user interface.
Thank you to 6420 users who participated in the vote for the new logo!
- Support for chapter images (only new episodes, by @ByteHamster)
diff --git a/app/src/main/res/layout/feeditemlist_item.xml b/app/src/main/res/layout/feeditemlist_item.xml
index 7083365e7..a8ae5743e 100644
--- a/app/src/main/res/layout/feeditemlist_item.xml
+++ b/app/src/main/res/layout/feeditemlist_item.xml
@@ -1,225 +1,236 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
+<FrameLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/container"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- android:baselineAligned="false"
- android:paddingStart="12dp"
- android:paddingLeft="12dp"
- android:paddingEnd="0dp"
- android:paddingRight="0dp">
+ android:layout_height="wrap_content">
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:id="@+id/left_padding"
- android:minWidth="4dp">
- <ImageView
- android:id="@+id/drag_handle"
- android:layout_width="16dp"
- android:layout_height="match_parent"
- android:importantForAccessibility="no"
- android:scaleType="fitCenter"
- android:src="?attr/dragview_background"
- android:paddingStart="0dp"
- android:paddingLeft="0dp"
- android:paddingEnd="4dp"
- android:paddingRight="4dp"
- tools:src="@drawable/ic_drag_darktheme"
- tools:background="@android:color/holo_green_dark"/>
-
- </LinearLayout>
-
- <androidx.cardview.widget.CardView
- android:layout_width="@dimen/thumbnail_length_queue_item"
- android:layout_height="@dimen/thumbnail_length_queue_item"
- android:layout_marginBottom="@dimen/listitem_threeline_verticalpadding"
- android:layout_marginTop="@dimen/listitem_threeline_verticalpadding"
- android:layout_marginRight="@dimen/listitem_threeline_textleftpadding"
- android:layout_marginEnd="@dimen/listitem_threeline_textleftpadding"
- android:id="@+id/coverHolder"
- app:cardBackgroundColor="@color/non_square_icon_background"
- app:cardCornerRadius="4dp"
- app:cardPreventCornerOverlap="false"
- app:cardElevation="0dp">
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <TextView
- android:id="@+id/txtvPlaceholder"
- android:layout_width="@dimen/thumbnail_length_queue_item"
- android:layout_height="@dimen/thumbnail_length_queue_item"
- android:layout_centerVertical="true"
- android:gravity="center"
- android:background="@color/light_gray"
- android:maxLines="3"
- android:padding="2dp"
- android:ellipsize="end"/>
- <ImageView
- android:id="@+id/imgvCover"
- android:layout_width="@dimen/thumbnail_length_queue_item"
- android:layout_height="@dimen/thumbnail_length_queue_item"
- android:layout_centerVertical="true"
- android:importantForAccessibility="no"
- tools:src="@tools:sample/avatars"/>
-
- </RelativeLayout>
- </androidx.cardview.widget.CardView>
+ <!--
+ This parent FrameLayout is necessary because RecyclerView's ItemAnimator changes alpha values,
+ which conflicts with our played state indicator.
+ -->
<LinearLayout
- android:layout_width="0dp"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/listitem_threeline_verticalpadding"
- android:layout_marginRight="@dimen/listitem_threeline_textrightpadding"
- android:layout_marginEnd="@dimen/listitem_threeline_textrightpadding"
- android:layout_marginTop="@dimen/listitem_threeline_verticalpadding"
- android:layout_weight="1"
- tools:background="@android:color/holo_red_dark"
- android:orientation="vertical">
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:baselineAligned="false"
+ android:paddingStart="12dp"
+ android:paddingLeft="12dp"
+ android:paddingEnd="0dp"
+ android:paddingRight="0dp"
+ tools:ignore="UselessParent">
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/status"
- android:orientation="horizontal"
- android:gravity="center_vertical">
-
- <TextView
- android:text="@string/new_label"
- style="@style/AntennaPod.TextView.UnreadIndicator"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/statusUnread"
- android:layout_marginRight="4dp"
- android:layout_marginEnd="4dp"
- tools:text="@sample/episodes.json/data/status_label"/>
-
- <ImageView
- android:layout_width="14sp"
- android:layout_height="14sp"
- app:srcCompat="?attr/type_video"
- tools:srcCompat="@drawable/ic_videocam_black_24dp"
- android:contentDescription="@string/media_type_video_label"
- android:id="@+id/ivIsVideo"/>
-
- <ImageView
- android:layout_width="14sp"
- android:layout_height="14sp"
- app:srcCompat="?attr/ic_unfav"
- tools:srcCompat="@drawable/ic_star_black"
- android:contentDescription="@string/is_favorite_label"
- android:id="@+id/isFavorite"/>
-
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:id="@+id/left_padding"
+ android:minWidth="4dp">
<ImageView
- android:layout_width="14sp"
- android:layout_height="14sp"
- app:srcCompat="?attr/stat_playlist"
- tools:srcCompat="@drawable/ic_playlist_black"
- android:contentDescription="@string/in_queue_label"
- android:id="@+id/ivInPlaylist"/>
-
- <TextView
- android:id="@+id/separatorIcons"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="4dp"
- android:layout_marginStart="4dp"
- android:layout_marginRight="4dp"
- android:layout_marginEnd="4dp"
- android:text="·"
- tools:background="@android:color/holo_blue_light"/>
-
- <TextView
- android:id="@+id/txtvPubDate"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="4dp"
- android:layout_marginEnd="4dp"
- tools:text="@sample/episodes.json/data/published_at"/>
-
- <TextView
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="4dp"
- android:layout_marginEnd="4dp"
- android:text="·"
- tools:background="@android:color/holo_blue_light"/>
-
- <TextView
- android:id="@+id/size"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_marginRight="4dp"
- android:layout_marginEnd="4dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- tools:text="10 MB"/>
+ android:id="@+id/drag_handle"
+ android:layout_width="16dp"
+ android:layout_height="match_parent"
+ android:importantForAccessibility="no"
+ android:scaleType="fitCenter"
+ android:src="?attr/dragview_background"
+ android:paddingStart="0dp"
+ android:paddingLeft="0dp"
+ android:paddingEnd="4dp"
+ android:paddingRight="4dp"
+ tools:src="@drawable/ic_drag_darktheme"
+ tools:background="@android:color/holo_green_dark"/>
</LinearLayout>
- <!--
- Warning: android:contentDescription is set to an empty string.
- The title is read as contentDescription of left_padding to have it read first.
- Keep this in mind when changing the order of this layout!
- -->
- <TextView
- android:id="@+id/txtvTitle"
- style="@style/AntennaPod.TextView.ListItemPrimaryTitle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- tools:text="@sample/episodes.json/data/title"
- android:importantForAccessibility="no"
- android:ellipsize="end"
- tools:background="@android:color/holo_blue_light"/>
+ <androidx.cardview.widget.CardView
+ android:layout_width="@dimen/thumbnail_length_queue_item"
+ android:layout_height="@dimen/thumbnail_length_queue_item"
+ android:layout_marginBottom="@dimen/listitem_threeline_verticalpadding"
+ android:layout_marginTop="@dimen/listitem_threeline_verticalpadding"
+ android:layout_marginRight="@dimen/listitem_threeline_textleftpadding"
+ android:layout_marginEnd="@dimen/listitem_threeline_textleftpadding"
+ android:id="@+id/coverHolder"
+ app:cardBackgroundColor="@color/non_square_icon_background"
+ app:cardCornerRadius="4dp"
+ app:cardPreventCornerOverlap="false"
+ app:cardElevation="0dp">
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:id="@+id/txtvPlaceholder"
+ android:layout_width="@dimen/thumbnail_length_queue_item"
+ android:layout_height="@dimen/thumbnail_length_queue_item"
+ android:layout_centerVertical="true"
+ android:gravity="center"
+ android:background="@color/light_gray"
+ android:maxLines="3"
+ android:padding="2dp"
+ android:ellipsize="end"/>
+ <ImageView
+ android:id="@+id/imgvCover"
+ android:layout_width="@dimen/thumbnail_length_queue_item"
+ android:layout_height="@dimen/thumbnail_length_queue_item"
+ android:layout_centerVertical="true"
+ android:importantForAccessibility="no"
+ tools:src="@tools:sample/avatars"/>
+
+ </RelativeLayout>
+ </androidx.cardview.widget.CardView>
<LinearLayout
- android:layout_width="match_parent"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
- android:id="@+id/progress"
- android:orientation="horizontal"
- android:gravity="center_vertical">
-
+ android:layout_marginBottom="@dimen/listitem_threeline_verticalpadding"
+ android:layout_marginRight="@dimen/listitem_threeline_textrightpadding"
+ android:layout_marginEnd="@dimen/listitem_threeline_textrightpadding"
+ android:layout_marginTop="@dimen/listitem_threeline_verticalpadding"
+ android:layout_weight="1"
+ tools:background="@android:color/holo_red_dark"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/status"
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+
+ <TextView
+ android:text="@string/new_label"
+ style="@style/AntennaPod.TextView.UnreadIndicator"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/statusUnread"
+ android:layout_marginRight="4dp"
+ android:layout_marginEnd="4dp"
+ tools:text="@sample/episodes.json/data/status_label"/>
+
+ <ImageView
+ android:layout_width="14sp"
+ android:layout_height="14sp"
+ app:srcCompat="?attr/type_video"
+ tools:srcCompat="@drawable/ic_videocam_black_24dp"
+ android:contentDescription="@string/media_type_video_label"
+ android:id="@+id/ivIsVideo"/>
+
+ <ImageView
+ android:layout_width="14sp"
+ android:layout_height="14sp"
+ app:srcCompat="?attr/ic_unfav"
+ tools:srcCompat="@drawable/ic_star_black"
+ android:contentDescription="@string/is_favorite_label"
+ android:id="@+id/isFavorite"/>
+
+ <ImageView
+ android:layout_width="14sp"
+ android:layout_height="14sp"
+ app:srcCompat="?attr/stat_playlist"
+ tools:srcCompat="@drawable/ic_playlist_black"
+ android:contentDescription="@string/in_queue_label"
+ android:id="@+id/ivInPlaylist"/>
+
+ <TextView
+ android:id="@+id/separatorIcons"
+ style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="4dp"
+ android:layout_marginStart="4dp"
+ android:layout_marginRight="4dp"
+ android:layout_marginEnd="4dp"
+ android:text="·"
+ tools:background="@android:color/holo_blue_light"/>
+
+ <TextView
+ android:id="@+id/txtvPubDate"
+ style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="4dp"
+ android:layout_marginEnd="4dp"
+ tools:text="@sample/episodes.json/data/published_at"/>
+
+ <TextView
+ style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="4dp"
+ android:layout_marginEnd="4dp"
+ android:text="·"
+ tools:background="@android:color/holo_blue_light"/>
+
+ <TextView
+ android:id="@+id/size"
+ style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
+ android:layout_marginRight="4dp"
+ android:layout_marginEnd="4dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ tools:text="10 MB"/>
+
+ </LinearLayout>
+
+ <!--
+ Warning: android:contentDescription is set to an empty string.
+ The title is read as contentDescription of left_padding to have it read first.
+ Keep this in mind when changing the order of this layout!
+ -->
<TextView
- android:id="@+id/txtvPosition"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_width="wrap_content"
+ android:id="@+id/txtvTitle"
+ style="@style/AntennaPod.TextView.ListItemPrimaryTitle"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="0dp"
- tools:text="00:42:23"
- tools:background="@android:color/holo_blue_light"/>
-
- <ProgressBar
- android:id="@+id/progressBar"
- style="?attr/progressBarTheme"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="4dp"
- android:max="100"
- android:layout_margin="4dp"
+ tools:text="@sample/episodes.json/data/title"
+ android:importantForAccessibility="no"
+ android:ellipsize="end"
tools:background="@android:color/holo_blue_light"/>
- <TextView
- android:id="@+id/txtvDuration"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_width="wrap_content"
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="0dp"
- tools:text="@sample/episodes.json/data/duration"
- tools:background="@android:color/holo_blue_light"/>
+ android:id="@+id/progress"
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+
+ <TextView
+ android:id="@+id/txtvPosition"
+ style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="0dp"
+ tools:text="00:42:23"
+ tools:background="@android:color/holo_blue_light"/>
+
+ <ProgressBar
+ android:id="@+id/progressBar"
+ style="?attr/progressBarTheme"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="4dp"
+ android:max="100"
+ android:layout_margin="4dp"
+ tools:background="@android:color/holo_blue_light"/>
+
+ <TextView
+ android:id="@+id/txtvDuration"
+ style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="0dp"
+ tools:text="@sample/episodes.json/data/duration"
+ tools:background="@android:color/holo_blue_light"/>
+
+ </LinearLayout>
</LinearLayout>
- </LinearLayout>
+ <include layout="@layout/secondary_action"/>
- <include layout="@layout/secondary_action"/>
-
-</LinearLayout>
+ </LinearLayout>
+</FrameLayout>
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 25c301ccc..60075dda6 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
@@ -216,7 +216,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
private Disposable positionEventTimer;
private PlaybackServiceNotificationBuilder notificationBuilder;
- private long autoSkippedFeedMediaId = -1;
+ private String autoSkippedFeedMediaId = null;
/**
* Used for Lollipop notifications, Android Wear, and Android Auto.
@@ -650,7 +650,9 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
return false;
case KeyEvent.KEYCODE_MEDIA_NEXT:
- if (notificationButton || UserPreferences.shouldHardwareButtonSkip()) {
+ if (getStatus() != PlayerStatus.PLAYING && getStatus() != PlayerStatus.PAUSED) {
+ return false;
+ } else if (notificationButton || UserPreferences.shouldHardwareButtonSkip()) {
// assume the skip command comes from a notification or the lockscreen
// a >| skip button should actually skip
mediaPlayer.skip();
@@ -661,10 +663,15 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
return true;
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
- mediaPlayer.seekDelta(UserPreferences.getFastForwardSecs() * 1000);
- return true;
+ if (getStatus() == PlayerStatus.PLAYING || getStatus() == PlayerStatus.PAUSED) {
+ mediaPlayer.seekDelta(UserPreferences.getFastForwardSecs() * 1000);
+ return true;
+ }
+ return false;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
- if (UserPreferences.shouldHardwarePreviousButtonRestart()) {
+ if (getStatus() != PlayerStatus.PLAYING && getStatus() != PlayerStatus.PAUSED) {
+ return false;
+ } else if (UserPreferences.shouldHardwarePreviousButtonRestart()) {
// user wants to restart current episode
mediaPlayer.seekTo(0);
} else {
@@ -673,7 +680,11 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
return true;
case KeyEvent.KEYCODE_MEDIA_REWIND:
- mediaPlayer.seekDelta(-UserPreferences.getRewindSecs() * 1000);
+ if (getStatus() == PlayerStatus.PLAYING || getStatus() == PlayerStatus.PAUSED) {
+ mediaPlayer.seekDelta(-UserPreferences.getRewindSecs() * 1000);
+ } else {
+ return false;
+ }
return true;
case KeyEvent.KEYCODE_MEDIA_STOP:
if (status == PlayerStatus.PLAYING) {
@@ -1072,18 +1083,21 @@ public class PlaybackService extends MediaBrowserServiceCompat {
Log.d(TAG, "smart mark as played");
}
+ boolean autoSkipped = false;
+ if (autoSkippedFeedMediaId != null && autoSkippedFeedMediaId.equals(item.getIdentifyingValue())) {
+ autoSkippedFeedMediaId = null;
+ autoSkipped = true;
+ }
+
if (ended || smartMarkAsPlayed) {
media.onPlaybackCompleted(getApplicationContext());
} else {
media.onPlaybackPause(getApplicationContext());
}
- if (autoSkippedFeedMediaId >= 0 && autoSkippedFeedMediaId == media.getId()) {
- ended = true;
- }
-
if (item != null) {
if (ended || smartMarkAsPlayed
+ || autoSkipped
|| (skipped && !UserPreferences.shouldSkipKeepEpisode())) {
// only mark the item as played if we're not keeping it anyways
DBWriter.markItemPlayed(item, FeedItem.PLAYED, ended);
@@ -1135,7 +1149,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
FeedPreferences preferences = feedMedia.getItem().getFeed().getPreferences();
int skipEnd = preferences.getFeedSkipEnding();
if (skipEnd > 0
- && skipEnd < getDuration()
+ && skipEnd * 1000 < getDuration()
&& (remainingTime - (skipEnd * 1000) > 0)
&& ((remainingTime - skipEnd * 1000) < (getCurrentPlaybackSpeed() * 1000))) {
Log.d(TAG, "skipEndingIfNecessary: Skipping the remaining " + remainingTime + " " + skipEnd * 1000 + " speed " + getCurrentPlaybackSpeed());
@@ -1144,7 +1158,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
Toast toast = Toast.makeText(context, skipMesg, Toast.LENGTH_LONG);
toast.show();
- this.autoSkippedFeedMediaId = feedMedia.getItem().getId();
+ this.autoSkippedFeedMediaId = feedMedia.getItem().getIdentifyingValue();
mediaPlayer.skip();
}
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
index d47d26af9..425a07f4a 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java
@@ -512,6 +512,7 @@ public class PlaybackController {
new PlaybackServiceStarter(activity, media)
.startWhenPrepared(true)
.streamIfLastWasStream()
+ .callEvenIfRunning(true)
.start();
Log.w(TAG, "Play/Pause button was pressed and PlaybackService state was unknown");
break;
diff --git a/core/src/main/res/values-ca/strings.xml b/core/src/main/res/values-ca/strings.xml
index 30a71465a..998d06213 100644
--- a/core/src/main/res/values-ca/strings.xml
+++ b/core/src/main/res/values-ca/strings.xml
@@ -420,18 +420,30 @@
<string name="pref_gpodnet_setlogin_information_sum">Canvia les dades d\'inici de sessió del vostre compte de gpodder.net</string>
<string name="pref_gpodnet_sync_changes_title">Sincronitza ara</string>
<string name="pref_gpodnet_sync_changes_sum">Sincronitza amb gpodder.net les subscripcions i els estats dels episodis.</string>
+ <string name="pref_gpodnet_full_sync_title">Força sincronització completa</string>
<string name="pref_gpodnet_full_sync_sum">Sincronitza amb gpodder.net totes les subscripcions i els estats dels episodis.</string>
<string name="pref_gpodnet_login_status"><![CDATA[Connectat com a <i>%1$s</i> amb el dispositiu <i>%2$s</i>]]></string>
<string name="pref_gpodnet_notifications_title">Notifica els errors de sincronització</string>
<string name="pref_gpodnet_notifications_sum">Aquest paràmetre no s\'aplica als errors d\'autenticació. </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_feed_playback_speed_sum">La velocitat a usar quan comence la reproducció per a episodis en aquest podcast</string>
+ <string name="pref_feed_skip">Auto Ometre</string>
+ <string name="pref_feed_skip_sum">Omet introduccions i crèdits finals</string>
+ <string name="pref_feed_skip_ending">Omet final (en segons):</string>
+ <string name="pref_feed_skip_intro">Omet introducció (en segons):</string>
+ <string name="pref_feed_skip_ending_toast">Omesos els últims %dsegons</string>
+ <string name="pref_feed_skip_intro_toast">Omesos els primers %d segons</string>
+ <string name="pref_playback_time_respects_speed_title">Ajusta la informació dels medis a la velocitat de reproducció</string>
+ <string name="pref_playback_time_respects_speed_sum">La posició i la duració son adaptades a la velocitat de reproducció</string>
<string name="pref_fast_forward">Temps de salt de l\'Avanç ràpid</string>
<string name="pref_fast_forward_sum">Personalitzar el nombre de segons del salt endavant quan es prem el botó d\'Avanç ràpid.</string>
<string name="pref_rewind">Temps de salt del Rebobinat</string>
<string name="pref_rewind_sum">Personalitza el nombre de segons del salt endarrere quan es prem el botó 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">Alta prioritat de notificacions</string>
+ <string name="pref_expandNotify_sum">Açò normalment expandeix la notificació per a mostrar botons de reproducció</string>
<string name="pref_persistNotify_title">Botons de reproducció persistents</string>
<string name="pref_persistNotify_sum">Manté els controls a l\'àrea de notificacions i pantalla de bloqueig quan la reproducció estigui aturada</string>
<string name="pref_compact_notification_buttons_title">Estableix els botons del bloqueig de pantalla</string>
@@ -442,15 +454,29 @@
<string name="pref_lockscreen_background_sum">Estableix el fons del bloqueig de pantalla a la imatge de l\'episodi actual. Com a 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 fallada.</string>
+ <string name="pref_showAutoDownloadReport_title">Mostra Informe de baixades automàtiques</string>
+ <string name="pref_showAutoDownloadReport_sum">Mostra una notificació per a episodis descarregats automàticament</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_enqueue_location_title">Posició d\'entrada en cola</string>
+ <string name="pref_enqueue_location_sum">Afegit episodis a: %1$s</string>
+ <string name="enqueue_location_back">Final</string>
+ <string name="enqueue_location_front">Principi</string>
+ <string name="enqueue_location_after_current">Després de l\'episodi actual</string>
<string name="pref_smart_mark_as_played_disabled">Desactivat</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="visit_user_forum">Fòrum d\'usuaris</string>
+ <string name="bug_report_title">Informa d\'un bug</string>
+ <string name="open_bug_tracker">Obri rastrejador de bugs</string>
+ <string name="export_logs">Exporta els logs</string>
+ <string name="copy_to_clipboard">Còpia al porta-retalls </string>
+ <string name="copied_to_clipboard">Copiat al porta-retalls</string>
<string name="experimental_pref">Experimental</string>
<string name="pref_media_player_message">Seleccioneu el reproductor multimèdia per a reproduir fitxers</string>
<string name="pref_current_value">Valor actual: %1$s</string>
<string name="pref_proxy_title">Servidor intermediari</string>
<string name="pref_proxy_sum">Estableix un servidor intermediari</string>
+ <string name="pref_faq">Preguntes Freqüents</string>
<string name="pref_no_browser_found">No s\'ha trobat cap navegador web.</string>
<string name="pref_cast_title">Suport per a Chromecast</string>
<string name="pref_cast_message_play_flavor">Habilita el suport per la reproducció remota en dispositius de difusió (com ara Chromecast, Audio Speakers o Android TV). </string>
@@ -458,18 +484,59 @@
<string name="pref_enqueue_downloaded_title">Afegeix les baixades a la cua</string>
<string name="pref_enqueue_downloaded_summary">Afegeix els episodis descarregats a la cua</string>
<string name="media_player_builtin">Reproductor Android estàndard</string>
+ <string name="media_player_switch_to_exoplayer">Canvia a ExoPlayer</string>
+ <string name="media_player_switched_to_exoplayer">Canviat a ExoPlayer</string>
+ <string name="pref_skip_silence_title">Omet Silenci en Audio</string>
<string name="pref_videoBehavior_title">En sortir d\'un vídeo</string>
<string name="pref_videoBehavior_sum">Comportament a l\'abandonar la reproducció d\'un vídeo</string>
<string name="stop_playback">Atura reproducció</string>
<string name="continue_playback">Continuar reproducció d\'audio</string>
+ <string name="behavior">Comportament</string>
+ <string name="pref_back_button_behavior_title">Comportament del botó \"endarrere\"</string>
+ <string name="pref_back_button_behavior_sum">Canvia el comportament del botó \"endarrere\"</string>
+ <string name="back_button_default">Per defecte</string>
+ <string name="back_button_open_drawer">Obri el calaix de navegació</string>
+ <string name="back_button_double_tap">Doble toc per a eixir</string>
+ <string name="back_button_show_prompt">Confema per a eixir</string>
+ <string name="close_prompt">Estàs segur que vols tancar AntennaPod?</string>
+ <string name="double_tap_toast">Toca el botó \"endarrere\" un altra vegada per a eixir</string>
+ <string name="back_button_go_to_page">Ves a la pàgina...</string>
+ <string name="back_button_go_to_page_title">Selecciona pàgina</string>
+ <string name="pref_delete_removes_from_queue_title">\"Esborrar\" remou de la cua</string>
+ <string name="pref_delete_removes_from_queue_sum">Remou automàticament un episodi de la cua quan siga esborrat</string>
<!--About screen-->
<string name="about_pref">Quant a</string>
+ <string name="antennapod_version">Versió d\'AntennaPod</string>
+ <string name="contributors">Contributors</string>
+ <string name="contributors_summary">Tothom pot ajudar a fer AntennaPod millor - amb codi, traduccions o ajudant als usuaris al nostre fòrum</string>
+ <string name="developers">Desenvolupadors</string>
+ <string name="translators">Traductors</string>
+ <string name="special_thanks">Agraïments especials</string>
+ <string name="privacy_policy">Política de privacitat</string>
+ <string name="licenses">Llicències</string>
+ <string name="licenses_summary">AntennaPod usa altre programati genial</string>
<!--Search-->
<string name="search_status_no_results">No s\'ha trobat cap resultat</string>
<string name="search_label">Cerca</string>
<string name="no_results_for_query">No s\'han trobat resultats per \"%1$s\"</string>
<!--Synchronization-->
+ <string name="sync_status_started">Sincronització començada</string>
+ <string name="sync_status_episodes_upload">Pujant canvis d\'episodi</string>
+ <string name="sync_status_episodes_download">Descarregant canvis d\'episodi...</string>
+ <string name="sync_status_upload_played">Pujant estat de reproducció...</string>
+ <string name="sync_status_subscriptions">Sincronitzant subscripcions...</string>
+ <string name="sync_status_success">Sincronització exitosa</string>
+ <string name="sync_status_error">Sincronització fallida</string>
<!--import and export-->
+ <string name="import_export_summary">Mou subscripcions i cola a un altre dispositiu</string>
+ <string name="database">Base de dades</string>
+ <string name="opml">OPML</string>
+ <string name="html">HTML</string>
+ <string name="html_export_summary">Mostra les teues subscripcions a un amic</string>
+ <string name="opml_export_summary">Transfereix les teues subscripcions a un altra aplicació de podcast</string>
+ <string name="opml_import_summary">Importa les teues subscripcions des d\'un altra aplicació de podcast</string>
+ <string name="database_export_summary">Transfereix subscripcions i cola a AntennaPod en un altre dispositiu</string>
+ <string name="database_import_summary">Importa base de dades d\'AntennaPod des d\'un altre dispositiu</string>
<string name="opml_import_label">Importació d\'OPML</string>
<string name="opml_reader_error">S\'ha produït un error en llegir el document OPML: </string>
<string name="opml_import_error_no_file">Cap fitxer seleccionat!</string>
@@ -477,17 +544,26 @@
<string name="deselect_all_label">Deselecciona-ho tot</string>
<string name="opml_export_label">Exportació OPML</string>
<string name="html_export_label">Exporta HTML</string>
+ <string name="database_export_label">Exporta base de dades</string>
+ <string name="database_import_label">Importa base de dades</string>
+ <string name="database_import_warning">Importar una base de dades reemplaçarà totes les teues subscripcions i històric de reproducció. Deuries exportar la teua base de dades com a còpia de seguretat. Vols reemplaçar?</string>
+ <string name="please_wait">Per favor, espera...</string>
<string name="export_error_label">Error d\'exportació</string>
<string name="export_success_title">Exportació correcta</string>
<string name="export_success_sum">S\'ha exportat el fitxer a:\n\n%1$s</string>
<string name="opml_import_ask_read_permission">Per llegir arxius OPML és necessari accés a la memòria externa</string>
<string name="import_select_file">Tria un fitxer per a importar</string>
<string name="import_ok">S\'ha importat amb èxit.\n\nPremeu D\'acord per a reiniciar l\'AntennaPod.</string>
+ <string name="import_no_downgrade">Aquesta base de dades va ser exportada amb una versió més nova d\'AntennaPod. La versió que tens ara mateixa no sap com processar-la.</string>
+ <string name="favorites_export_label">Exportar preferits</string>
+ <string name="favorites_export_summary">Exportar episodis favorits a un arxiu</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Defineix un temporitzador</string>
<string name="disable_sleeptimer_label">Desactiva el temporitzador</string>
<string name="sleep_timer_label">Temporitzador</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="shake_to_reset_label">Agita per a resetejar</string>
+ <string name="timer_vibration_label">Vibra un poc abans del final</string>
<string name="time_seconds">segons</string>
<string name="time_minutes">minuts</string>
<string name="time_hours">hores</string>
@@ -536,12 +612,14 @@
<string name="gpodnetsync_error_descr">S\'ha produït un error durant la sincronització:\u0020</string>
<string name="gpodnetsync_pref_report_successful">Correcte</string>
<string name="gpodnetsync_pref_report_failed">Ha fallat</string>
+ <string name="gpodnetsync_username_characters_error">Noms d\'usuari sols poden contindre lletres, dígits, guions i guions baixos. </string>
<!--Directory chooser-->
<string name="selected_folder_label">Carpeta seleccionada:</string>
<string name="create_folder_label">Crea una carpeta</string>
<string name="choose_data_directory">Selecció de la carpeta de dades</string>
<string name="choose_data_directory_message">Selecciona l\'arrel del teu directori d\'informació. AntennaPod crearà els subdirectoris pertinents</string>
<string name="choose_data_directory_permission_rationale">Es requereix accés a l\'emmagatzematge extern per canviar el directori d\'informació</string>
+ <string name="choose_data_directory_available_space">%1$s de %2$s lliures</string>
<string name="create_folder_msg">Voleu crear una nova carpeta amb el nom \"%1$s\"?</string>
<string name="create_folder_success">S\'ha creat la nova carpeta</string>
<string name="create_folder_error_no_write_access">No es pot escriure dins d\'aquesta carpeta</string>
@@ -560,16 +638,25 @@
<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="subscribing_label">Subscrivint...</string>
+ <string name="preview_episode">Vista prelimiar</string>
+ <string name="stop_preview">Atura vista preliminar</string>
<!--Content descriptions for image buttons-->
<string name="rewind_label">Rebobina</string>
<string name="fast_forward_label">Avança ràpidament</string>
+ <string name="increase_speed">Augmenta la velocitat</string>
+ <string name="decrease_speed">Disminueix la velocitat</string>
<string name="media_type_audio_label">Àudio</string>
<string name="media_type_video_label">Vídeo</string>
<string name="navigate_upwards_label">Navega cap amunt</string>
<string name="status_downloading_label">S\'està baixant l\'episodi</string>
<string name="in_queue_label">S\'ha afegit l\'episodi a la cua</string>
+ <string name="is_favorite_label">L\'episodi està marcat com a favorit</string>
<string name="drag_handle_content_description">Arrossegueu l\'element per canviar-ne la posició</string>
<string name="load_next_page_label">Carrega la següent pàgina</string>
+ <string name="switch_pages">Canvia pàgines</string>
+ <string name="position">Posició: %1$s</string>
+ <string name="apply_action">Aplica acció</string>
<!--Feed information screen-->
<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>
@@ -580,6 +667,8 @@
<string name="episode_filters_exclude">Exclou</string>
<string name="episode_filters_hint">Una paraula \n\"Diverses paraules\"</string>
<string name="keep_updated">Manté actualitzat</string>
+ <string name="keep_updated_summary">Incloure aquest podcast quan (auto-)actualitzen tots els podcasts</string>
+ <string name="auto_download_disabled_globally">La baixada automàtica està deshabilitada als ajustos generals d\'AntennaPod</string>
<!--Progress information-->
<string name="progress_upgrading_database">Actualitzant la base de dades</string>
<!--AntennaPodSP-->
@@ -588,9 +677,12 @@
<string name="search_podcast_hint">Cerca podcast…</string>
<string name="search_itunes_label">Cerca a iTunes</string>
<string name="search_fyyd_label">Cerca a fyyd</string>
+ <string name="advanced">Avançat</string>
+ <string name="add_podcast_by_url">Afegir podcast per URL</string>
<string name="browse_gpoddernet_label">Navega gpodder.net</string>
<string name="discover">Descobreix</string>
<string name="discover_more">més »</string>
+ <string name="search_powered_by">Cerca feta per %1$s</string>
<string name="filter">Filtra</string>
<!--Episodes apply actions-->
<string name="all_label">Tot</string>
@@ -618,6 +710,12 @@
<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>
+ <string name="sort_a_z">A \u2192 Z</string>
+ <string name="sort_z_a">Z \u2192 A</string>
+ <string name="sort_new_old">Nou \u2192 Antic</string>
+ <string name="sort_old_new">Antic \u2192 Nou</string>
+ <string name="sort_short_long">Curt \u2192 Llarg</string>
+ <string name="sort_long_short">Llarg \u2192 Curt</string>
<!--Rating dialog-->
<string name="rating_title">T\'agrada AntennaPod?</string>
<string name="rating_message">Apreciaríem que et prenguessis un temps per valorar AntennaPod</string>
@@ -633,6 +731,7 @@
<string name="audio_effects">Efectes de so</string>
<string name="stereo_to_mono">Downmix: D\'estereo a mono</string>
<string name="sonic_only">Només Sonic</string>
+ <string name="exoplayer_only">ExoPlayer solament</string>
<!--proxy settings-->
<string name="proxy_type_label">Tipus</string>
<string name="host_label">Host</string>
@@ -646,6 +745,7 @@
<string name="proxy_host_invalid_error">El host no és una adreça IP o domini vàlid</string>
<string name="proxy_port_invalid_error">El port no és vàlid</string>
<!--Subscriptions fragment-->
+ <string name="subscription_num_columns">Número de columnes</string>
<!--Casting-->
<string name="cast_media_route_menu_title">Reproduir a...</string>
<string name="cast_disconnect_label">Desconnectar la sessió de difusió </string>
@@ -669,6 +769,14 @@
<string name="notification_channel_playing_description">Permet controlar la reproducció. Aquesta és la notificació principal que veureu durant la reproducció d\'un podcast.</string>
<string name="notification_channel_error">Errors</string>
<string name="notification_channel_error_description">Mostrar si quelcom va malament, per exemple si una baixada o sincronització fallen.</string>
+ <string name="notification_channel_auto_download">Baixades automàtiques</string>
+ <string name="notification_channel_episode_auto_download">Mostrat quan els episodis han sigut descarregats automàticament</string>
<!--Widget settings-->
+ <string name="widget_settings">Settings del widget</string>
+ <string name="widget_create_button">Crear widget</string>
+ <string name="widget_opacity">Opacitat</string>
<!--On-Demand configuration-->
+ <string name="on_demand_config_setting_changed">Ajust actualitzar exitosament</string>
+ <string name="on_demand_config_stream_text">Pareix que escoltes en línia molt a sovint. Vols que les llistes d\'episodis mostren botons per a escoltar en línia?</string>
+ <string name="on_demand_config_download_text">Pareix que baixes molt a sovint. Vols que les llistes d\'episodis mostren botons per a baixar episodis?</string>
</resources>
diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml
index 5f956d839..e3a443991 100644
--- a/core/src/main/res/values-es/strings.xml
+++ b/core/src/main/res/values-es/strings.xml
@@ -509,6 +509,7 @@
<string name="antennapod_version">Versión de AntennaPod</string>
<string name="developers">Desarrolladores</string>
<string name="translators">Traductores</string>
+ <string name="special_thanks">Gracias especiales</string>
<string name="privacy_policy">Política de privacidad</string>
<string name="licenses">Licencias</string>
<string name="licenses_summary">AntennaPod usa otros software estupendos</string>
@@ -552,6 +553,7 @@
<string name="import_select_file">Seleccionar archivo a importar</string>
<string name="import_ok">Importación exitosa.\n\nPulse OK para reiniciar AntennaPod</string>
<string name="import_no_downgrade">Esta base de datos fue exportada con una versión más moderna de AntennaPod. La versión instalada no puede manejarla.</string>
+ <string name="favorites_export_label">Exportar favoritos</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Establecer un temporizador</string>
<string name="disable_sleeptimer_label">Desactivar el temporizador</string>
diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml
index c602960c3..04e4eb695 100644
--- a/core/src/main/res/values-fr/strings.xml
+++ b/core/src/main/res/values-fr/strings.xml
@@ -17,7 +17,7 @@
<string name="downloads_log_label">Journal</string>
<string name="subscriptions_label">Abonnements</string>
<string name="subscriptions_list_label">Liste des abonnements</string>
- <string name="cancel_download_label">Annuler les téléchargements</string>
+ <string name="cancel_download_label">Annuler le téléchargement</string>
<string name="playback_history_label">Journal de lecture</string>
<string name="gpodnet_main_label">gpodder.net</string>
<string name="gpodnet_auth_label">Identifiants gpodder.net</string>
diff --git a/core/src/main/res/values-gl/strings.xml b/core/src/main/res/values-gl/strings.xml
index 5b8278bbe..a2756cf07 100644
--- a/core/src/main/res/values-gl/strings.xml
+++ b/core/src/main/res/values-gl/strings.xml
@@ -465,7 +465,7 @@
<string name="pref_smart_mark_as_played_disabled">Desactivado</string>
<string name="pref_image_cache_size_title">Tamaño da caché de imaxes</string>
<string name="pref_image_cache_size_sum">Tamaño da caché en disco para as imaxes.</string>
- <string name="visit_user_forum">Foro de usuarios</string>
+ <string name="visit_user_forum">Foro de usuarias</string>
<string name="bug_report_title">Informar de fallo</string>
<string name="open_bug_tracker">Abrir seguimento de fallos</string>
<string name="export_logs">Exportar rexistro</string>
diff --git a/core/src/main/res/values-pt-rBR/strings.xml b/core/src/main/res/values-pt-rBR/strings.xml
index 59e3af044..d285f81fb 100644
--- a/core/src/main/res/values-pt-rBR/strings.xml
+++ b/core/src/main/res/values-pt-rBR/strings.xml
@@ -29,13 +29,13 @@
<string name="total_time_listened_to_podcasts">Tempo total de podcasts reproduzidos:</string>
<string name="statistics_details_dialog">%1$d de %2$d episódios iniciados.\n\nReproduzidos %3$s de %4$s.</string>
<string name="statistics_mode">Modo Estatística</string>
- <string name="statistics_mode_normal">Calcular a duração que já foi tocada. Tocar das vezes é contado o dobro, enquanto marcar como tocada não é contado</string>
+ <string name="statistics_mode_normal">Calcular a duração que foi realmente tocada. Tocar duas vezes é contado em dobro, enquanto marcar como tocada não é contado</string>
<string name="statistics_mode_count_all">Somar todos os podcasts marcados como tocados</string>
<string name="statistics_speed_not_counted">Nota: A velocidade de reprodução nunca é levada em conta.</string>
<string name="statistics_reset_data">Limpar dados de estatísticas</string>
<string name="statistics_reset_data_msg">Isso ira apagar o histórico de reprodução de todos os episódios. Tem certeza que deseja continuar?</string>
<!--Download Statistics fragment-->
- <string name="total_size_downloaded_podcasts">Tamanho total dos episódios baixados.</string>
+ <string name="total_size_downloaded_podcasts">Tamanho total dos episódios baixados:</string>
<!--Main activity-->
<string name="drawer_open">Abrir menu</string>
<string name="drawer_close">Fechar menu</string>
@@ -502,14 +502,41 @@
<string name="double_tap_toast">Clique novamente no botão voltar para sair</string>
<string name="back_button_go_to_page">Vá para a página...</string>
<string name="back_button_go_to_page_title">Selecione a página</string>
+ <string name="pref_delete_removes_from_queue_title">Apagar remove da fila</string>
+ <string name="pref_delete_removes_from_queue_sum">Remove automaticamente um episódio da fila quando ele é apagado.</string>
<!--About screen-->
<string name="about_pref">Sobre</string>
+ <string name="antennapod_version">Versão do AntennaPod</string>
+ <string name="contributors">Contribuidores</string>
+ <string name="contributors_summary">Todos podem ajudar a tornar o AntennaPod melhor - com código, traduções ou ajudando os usuários em nosso fórum</string>
+ <string name="developers">Desenvolvedores</string>
+ <string name="translators">Tradutores</string>
+ <string name="special_thanks">Agradecimentos especiais</string>
+ <string name="privacy_policy">Política de privacidade</string>
+ <string name="licenses">Licenças</string>
+ <string name="licenses_summary">O AntennaPod usa outros ótimos softwares</string>
<!--Search-->
<string name="search_status_no_results">Nenhum resultado encontrado</string>
<string name="search_label">Pesquisar</string>
<string name="no_results_for_query">Nenhum resultado para \"%1$s\"</string>
<!--Synchronization-->
+ <string name="sync_status_started">Sincronização iniciada</string>
+ <string name="sync_status_episodes_upload">Enviando mudanças de episódio ...</string>
+ <string name="sync_status_episodes_download">Baixando mudanças de episódio…</string>
+ <string name="sync_status_upload_played">Fazendo upload do status de reprodução...</string>
+ <string name="sync_status_subscriptions">Sincronizando assinaturas...</string>
+ <string name="sync_status_success">Sincronização bem sucedida</string>
+ <string name="sync_status_error">Sincronização falhou</string>
<!--import and export-->
+ <string name="import_export_summary">Mover assinaturas e fila para outro dispositivo</string>
+ <string name="database">Banco de dados</string>
+ <string name="opml">OPML</string>
+ <string name="html">HTML</string>
+ <string name="html_export_summary">Mostre suas assinaturas para um amigo</string>
+ <string name="opml_export_summary">Transfira suas assinaturas para outro aplicativo de podcast</string>
+ <string name="opml_import_summary">Importe suas assinaturas de outro aplicativo de podcast</string>
+ <string name="database_export_summary">Transfira assinaturas, episódios ouvidos e fila para o AntennaPod em outro dispositivo</string>
+ <string name="database_import_summary">Importar banco de dados AntennaPod de outro dispositivo</string>
<string name="opml_import_label">Importação de OPML</string>
<string name="opml_reader_error">Um erro ocorreu ao ler o documento OPML:</string>
<string name="opml_import_error_no_file">Nenhum arquivo selecionado!</string>
@@ -517,17 +544,26 @@
<string name="deselect_all_label">Remover seleção</string>
<string name="opml_export_label">Exportar OPML</string>
<string name="html_export_label">Exportar HTML</string>
+ <string name="database_export_label">Exportação do banco de dados</string>
+ <string name="database_import_label">Importação do banco de dados</string>
+ <string name="database_import_warning">A importação de um banco de dados substituirá todas as suas assinaturas atuais e histórico de reprodução. Você deve exportar seu banco de dados atual como um backup. Você quer substituir?</string>
+ <string name="please_wait">Por favor aguarde...</string>
<string name="export_error_label">Erro na exportação</string>
<string name="export_success_title">Exportado com sucesso</string>
<string name="export_success_sum">O arquivo foi exportado para:\n\n%1$s</string>
<string name="opml_import_ask_read_permission">Acesso ao armazenamento externo é necessária para ler o arquivo OPML</string>
<string name="import_select_file">Selecione arquivo para importar</string>
<string name="import_ok">Importado com sucesso.\n\nFavor pressionar OK para reiniciar o AntennaPod</string>
+ <string name="import_no_downgrade">Este banco de dados foi exportado com uma versão mais recente do AntennaPod. Sua instalação atual ainda não sabe como lidar com este arquivo.</string>
+ <string name="favorites_export_label">Exportar favoritos</string>
+ <string name="favorites_export_summary">Exportar favoritos salvos para arquivo</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Configura desligamento automático</string>
<string name="disable_sleeptimer_label">Desabilita desligamento automático</string>
<string name="sleep_timer_label">Desligamento automático</string>
<string name="time_dialog_invalid_input">Entrada inválida, a duração precisa ser um número inteiro</string>
+ <string name="shake_to_reset_label">Agite para reiniciar</string>
+ <string name="timer_vibration_label">Vibrar um pouco antes do fim</string>
<string name="time_seconds">segundos</string>
<string name="time_minutes">minutos</string>
<string name="time_hours">horas</string>
@@ -576,12 +612,14 @@
<string name="gpodnetsync_error_descr">Ocorreu um erro durante a sincronização:\u0020</string>
<string name="gpodnetsync_pref_report_successful">Sucesso</string>
<string name="gpodnetsync_pref_report_failed">Falhou</string>
+ <string name="gpodnetsync_username_characters_error">Os nomes de usuário podem conter apenas letras, dígitos, hifens e sublinhados.</string>
<!--Directory chooser-->
<string name="selected_folder_label">Selecionar pasta:</string>
<string name="create_folder_label">Criar pasta</string>
<string name="choose_data_directory">Escolher pasta de dados</string>
<string name="choose_data_directory_message">Por favor escolha a raiz da sua pasta de dados. O AntennaPod irá criar os sub-diretórios apropriados.</string>
<string name="choose_data_directory_permission_rationale">Acesso ao armazenamento externo é necessário para mudar o repositório de dados</string>
+ <string name="choose_data_directory_available_space">%1$s de %2$s grátis</string>
<string name="create_folder_msg">Criar nova pasta com o nome \"%1$s\"?</string>
<string name="create_folder_success">Nova pasta criada</string>
<string name="create_folder_error_no_write_access">Não é possível escrever nesta pasta</string>
@@ -600,16 +638,25 @@
<string name="pref_restart_required">AntennaPod deve ser reiniciado para que esta mudanças tenha efeito.</string>
<!--Online feed view-->
<string name="subscribe_label">Assinar</string>
+ <string name="subscribing_label">Assinando...</string>
+ <string name="preview_episode">Pré-visualizar</string>
+ <string name="stop_preview">Parar pré-visualização</string>
<!--Content descriptions for image buttons-->
<string name="rewind_label">Voltar</string>
<string name="fast_forward_label">Avançar</string>
+ <string name="increase_speed">Aumentar velocidade</string>
+ <string name="decrease_speed">Diminuir velocidade</string>
<string name="media_type_audio_label">Áudio</string>
<string name="media_type_video_label">Vídeo</string>
<string name="navigate_upwards_label">Navegar para cima</string>
<string name="status_downloading_label">O epísódio está sendo baixado</string>
<string name="in_queue_label">Episódio está na fila</string>
+ <string name="is_favorite_label">Episódio está marcado como favorito</string>
<string name="drag_handle_content_description">Arraste para mudar a posição deste item</string>
<string name="load_next_page_label">Carregar a próxima página</string>
+ <string name="switch_pages">Trocar páginas</string>
+ <string name="position">Posição: %1$s</string>
+ <string name="apply_action">Aplicar ação</string>
<!--Feed information screen-->
<string name="authentication_label">Autenticação</string>
<string name="authentication_descr">Mudar o seu usuário e senha para este podcast e seus episódios.</string>
@@ -620,14 +667,22 @@
<string name="episode_filters_exclude">Excluir</string>
<string name="episode_filters_hint">Única palavra \n\"Múltiplas palavras\"</string>
<string name="keep_updated">Manter Atualizado</string>
+ <string name="keep_updated_summary">Incluir este podcast ao atualizar todos os podcasts</string>
+ <string name="auto_download_disabled_globally">O download automático está desativado nas configurações principais do AntennaPod</string>
<!--Progress information-->
<string name="progress_upgrading_database">Atualizando o banco de dados</string>
<!--AntennaPodSP-->
<string name="sp_apps_importing_feeds_msg">Importando assinaturas de aplicativos de finalidade única...</string>
<!--Add podcast fragment-->
+ <string name="search_podcast_hint">Procurar podcast...</string>
<string name="search_itunes_label">Procurar no iTunes</string>
<string name="search_fyyd_label">Pesquisar em fyyd</string>
+ <string name="advanced">Avançado</string>
+ <string name="add_podcast_by_url">Adicionar podcast usando uma URL</string>
<string name="browse_gpoddernet_label">Pesquisar no gpodder.net</string>
+ <string name="discover">Descobrir</string>
+ <string name="discover_more">mais »</string>
+ <string name="search_powered_by">Pesquisa usando %1$s</string>
<string name="filter">Filtrar</string>
<!--Episodes apply actions-->
<string name="all_label">Todos</string>
@@ -655,6 +710,12 @@
<string name="sort_date_old_new">Data (Velho \u2192 Novo)</string>
<string name="sort_duration_short_long">Duração (Curta \u2192 Longa)</string>
<string name="sort_duration_long_short">Duração (Longa \u2192 Curta)</string>
+ <string name="sort_a_z">A \u2192 Z</string>
+ <string name="sort_z_a">Z \u2192 A</string>
+ <string name="sort_new_old">Novo \u2192 Antigo</string>
+ <string name="sort_old_new">Antigo \u2192 Novo</string>
+ <string name="sort_short_long">Curto \u2192 Longo</string>
+ <string name="sort_long_short">Longo \u2192 Curto</string>
<!--Rating dialog-->
<string name="rating_title">Gostou do AntennaPod?</string>
<string name="rating_message">Nós gostaríamos que você dedicasse um tempo para avaliar o AntennaPod.</string>
@@ -708,7 +769,14 @@
<string name="notification_channel_playing_description">Permite controlar a reprodução. Essa é a principal notificação vista ao reproduzir um podcast.</string>
<string name="notification_channel_error">Erros</string>
<string name="notification_channel_error_description">Exibido caso algo dê errado, por exemplo se houver falha no download ou na sincronização com o gpodder.</string>
+ <string name="notification_channel_auto_download">Downloads automáticos</string>
+ <string name="notification_channel_episode_auto_download">Exibido quando os episódios foram baixados automaticamente.</string>
<!--Widget settings-->
+ <string name="widget_settings">Configurações de widgets</string>
+ <string name="widget_create_button">Criar widget</string>
<string name="widget_opacity">Opacidade</string>
<!--On-Demand configuration-->
+ <string name="on_demand_config_setting_changed">Configuração atualizada com sucesso</string>
+ <string name="on_demand_config_stream_text">Parece que você faz muito stream. Quer que as listas de episódios mostrem botões de stream?</string>
+ <string name="on_demand_config_download_text">Parece que você faz muitos downloads. Quer que as listas de episódios mostrem botões de download?</string>
</resources>
diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/core/src/main/res/values-zh-rTW/strings.xml
index 0b3f88797..c432cab3e 100644
--- a/core/src/main/res/values-zh-rTW/strings.xml
+++ b/core/src/main/res/values-zh-rTW/strings.xml
@@ -29,7 +29,7 @@
<string name="total_time_listened_to_podcasts">Podcast 總播放時長:</string>
<string name="statistics_details_dialog">聽過 %1$d/%2$d集。\n\n播過%3$s/%4$s集。</string>
<string name="statistics_mode">統計模式</string>
- <string name="statistics_mode_normal">計算真實的播放時長。如果播放同一劇集兩遍,則會記錄兩遍的市場。如果只是標記為已播放,則不會被計入播放時長。</string>
+ <string name="statistics_mode_normal">計算真實的播放時長。如果播放同一劇集兩遍,則會記錄兩遍的時間;如果只是標記為已播放,則不會被計入播放時長</string>
<string name="statistics_mode_count_all">累加所有標記為已播放的 Podcast</string>
<string name="statistics_speed_not_counted">注意:播放速度不被計入。</string>
<string name="statistics_reset_data">重設統計數據</string>
@@ -89,7 +89,7 @@
<string name="feed_volume_reduction_off">關閉</string>
<string name="feed_volume_reduction_light">輕</string>
<string name="feed_volume_reduction_heavy">重</string>
- <string name="parallel_downloads_suffix">\u0020同時下載</string>
+ <string name="parallel_downloads_suffix">目前設定可同步下載 \u0020 集</string>
<string name="feed_auto_download_global">預設值</string>
<string name="feed_auto_download_always">總是</string>
<string name="feed_auto_download_never">不予下載</string>
@@ -155,7 +155,7 @@
</plurals>
<string name="play_label">播放</string>
<string name="pause_label">暫停</string>
- <string name="stream_label">流</string>
+ <string name="stream_label">串流播放</string>
<string name="delete_label">刪除</string>
<string name="delete_failed">刪除文件失敗。重啟設備試試看。</string>
<string name="delete_episode_label">刪除這一集</string>
@@ -314,7 +314,7 @@
<!--Preferences-->
<string name="storage_pref">儲存空間</string>
<string name="storage_sum">自動刪除、匯入、匯出</string>
- <string name="project_pref">項目</string>
+ <string name="project_pref">專案</string>
<string name="queue_label">待播清單</string>
<string name="synchronization_pref">同步</string>
<string name="synchronization_sum">利用 gpodder.net 與其他裝置同步</string>
@@ -335,17 +335,17 @@
<string name="pref_pauseOnDisconnect_sum">耳機或藍牙斷開連接時暫停播放</string>
<string name="pref_unpauseOnHeadsetReconnect_sum">當耳機再次連接時繼續播放</string>
<string name="pref_unpauseOnBluetoothReconnect_sum">當藍牙再次連接時繼續播放</string>
- <string name="pref_hardwareForwardButtonSkips_title">快進按鈕跳過</string>
+ <string name="pref_hardwareForwardButtonSkips_title">快轉鈕視為跳過單集</string>
<string name="pref_hardwareForwardButtonSkips_sum">當按下藍牙連接裝置上的快轉鈕時,不要快轉,而是播放下一集</string>
- <string name="pref_hardwarePreviousButtonRestarts_title">後退鍵重新播放</string>
- <string name="pref_hardwarePreviousButtonRestarts_sum">當按下實體的倒轉鈕時,不要倒轉,而是重新播放本集。</string>
+ <string name="pref_hardwarePreviousButtonRestarts_title">倒轉鈕視為重新播放</string>
+ <string name="pref_hardwarePreviousButtonRestarts_sum">當按下實體的倒轉鈕時,不要倒轉,而是重新播放本集</string>
<string name="pref_followQueue_sum">當播放完畢時自動跳至待播清單中的下一集</string>
<string name="pref_auto_delete_sum">播放完畢後刪除該集</string>
<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_keeps_episodes_sum">當跳過時,保留該集</string>
- <string name="pref_skip_keeps_episodes_title">保留跳過</string>
+ <string name="pref_smart_mark_as_played_sum">若離開時還剩下特定秒數以內,也將該集標記為已播放</string>
+ <string name="pref_smart_mark_as_played_title">提前視為已播放</string>
+ <string name="pref_skip_keeps_episodes_sum">當跳過某集不播放時,仍於清單中保留該集</string>
+ <string name="pref_skip_keeps_episodes_title">保留跳過的單集</string>
<string name="pref_favorite_keeps_episodes_sum">保留標記為最愛的各單集</string>
<string name="pref_favorite_keeps_episodes_title">保留最愛單集</string>
<string name="playback_pref">播放</string>
@@ -381,7 +381,7 @@
<string name="pref_nav_drawer_feed_order_title">設定訂閱排序方式</string>
<string name="pref_nav_drawer_feed_order_sum">更改您訂閱頻道的排序方式</string>
<string name="pref_nav_drawer_feed_counter_title">設定訂閱計數器</string>
- <string name="pref_nav_drawer_feed_counter_sum">調整訂閱計數器中要顯示的東西,同時也會在排序方式設定為「計數」時影響排序。</string>
+ <string name="pref_nav_drawer_feed_counter_sum">調整訂閱計數器中要顯示的東西,同時也會在排序方式設定為「計數」時影響排序</string>
<string name="pref_set_theme_sum">更改 AntennaPod 的外觀</string>
<string name="pref_automatic_download_title">自動下載</string>
<string name="pref_automatic_download_sum">設定單集自動下載機制</string>
@@ -389,11 +389,11 @@
<string name="pref_autodl_wifi_filter_sum">限定於特定 Wi-Fi 連線時自動下載</string>
<string name="pref_automatic_download_on_battery_title">未充電時下載</string>
<string name="pref_automatic_download_on_battery_sum">允許未充電時也自動下載</string>
- <string name="pref_parallel_downloads_title">平行下載</string>
+ <string name="pref_parallel_downloads_title">同步下載</string>
<string name="pref_episode_cache_title">暫存集數</string>
<string name="pref_episode_cache_summary">在本機中可以暫存的集數,若達上限則將停止自動下載。</string>
<string name="pref_episode_cover_title">使用單集的封面圖</string>
- <string name="pref_episode_cover_summary">在單集有專屬封面的情況下使用該封面圖。如果取消,則一律使用 Podcast 的封面圖。</string>
+ <string name="pref_episode_cover_summary">在單集有專屬封面的情況下使用該封面圖。如果取消,則一律使用 Podcast 的封面圖</string>
<string name="pref_theme_title_use_system">依據系統設定</string>
<string name="pref_theme_title_light">淡色</string>
<string name="pref_theme_title_dark">深色</string>
@@ -435,17 +435,17 @@
<string name="pref_expandNotify_title">優先通知</string>
<string name="pref_expandNotify_sum">此功能通常會加大通知訊息以便顯示控制鈕</string>
<string name="pref_persistNotify_title">保留播放控制鈕</string>
- <string name="pref_persistNotify_sum">暫停播放時,在通知列及鎖定畫面上保留播放控制鈕。</string>
+ <string name="pref_persistNotify_sum">暫停播放時,在通知列及鎖定畫面上保留播放控制鈕</string>
<string name="pref_compact_notification_buttons_title">設定鎖定畫面按鈕</string>
- <string name="pref_compact_notification_buttons_sum">設定鎖定畫面上的播放控制鈕。「暫停/播放」鈕一定會出現。</string>
+ <string name="pref_compact_notification_buttons_sum">設定鎖定畫面上的播放控制鈕。「暫停/播放」鈕一定會出現</string>
<string name="pref_compact_notification_buttons_dialog_title">最多可選擇 %1$d 項</string>
<string name="pref_compact_notification_buttons_dialog_error">您最多只能選擇 %1$d 項。</string>
<string name="pref_lockscreen_background_title">設定鎖定畫面背景</string>
- <string name="pref_lockscreen_background_sum">在鎖定畫面背景採用本單集的圖片,同時也會在第三方 App 裡顯示圖片。</string>
+ <string name="pref_lockscreen_background_sum">在鎖定畫面背景採用本單集的圖片,同時也會在第三方 App 裡顯示圖片</string>
<string name="pref_showDownloadReport_title">顯示下載報告</string>
- <string name="pref_showDownloadReport_sum">如果下載失敗,產生錯誤相關細節的報告。</string>
+ <string name="pref_showDownloadReport_sum">如果下載失敗,產生錯誤相關細節的報告</string>
<string name="pref_showAutoDownloadReport_title">顯示自動下載報告</string>
- <string name="pref_showAutoDownloadReport_sum">顯示自動下載通知。</string>
+ <string name="pref_showAutoDownloadReport_sum">顯示自動下載通知</string>
<string name="pref_expand_notify_unsupport_toast">Android 4.1 以前尚未支援延伸通知工具。</string>
<string name="pref_enqueue_location_title">待播清單新增位置</string>
<string name="pref_enqueue_location_sum">將這幾集加到:%1$s</string>
@@ -574,7 +574,7 @@
<string name="gpodnet_suggestions_header">建議</string>
<string name="gpodnet_search_hint">搜尋 gpodder.net</string>
<string name="gpodnetauth_login_title">登入</string>
- <string name="gpodnetauth_login_descr">歡迎登入 gpodder.net,請先輸入您的登入資訊:</string>
+ <string name="gpodnetauth_login_descr">歡迎登入 gpodder.net,請輸入登入資訊:</string>
<string name="gpodnetauth_login_butLabel">登入</string>
<string name="gpodnetauth_login_register">如果您還沒有帳號,可以先註冊一個:\nhttps://gpodder.net/register/</string>
<string name="username_label">帳號</string>
@@ -635,6 +635,7 @@
<string name="decrease_speed">放慢</string>
<string name="media_type_audio_label">聲音</string>
<string name="media_type_video_label">影片</string>
+ <string name="navigate_upwards_label">Navigate upwards</string>
<string name="status_downloading_label">正在下載這集</string>
<string name="in_queue_label">單集已在待播清單中</string>
<string name="is_favorite_label">已將此單集標為最愛</string>