summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java42
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java34
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java9
-rw-r--r--app/src/main/res/xml/preferences.xml2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java13
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java47
-rw-r--r--core/src/main/res/values/strings.xml3
9 files changed, 100 insertions, 57 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java
index 47eab7d05..e5bb04391 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java
@@ -41,7 +41,9 @@ public abstract class ItemActionButton {
}
final boolean isDownloadingMedia = DownloadRequester.getInstance().isDownloadingFile(media);
- if (media.isDownloaded()) {
+ if (media.isCurrentlyPlaying()) {
+ return new PauseActionButton(item);
+ } else if (media.isDownloaded()) {
return new PlayActionButton(item);
} else if (isDownloadingMedia) {
return new CancelDownloadActionButton(item);
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java
new file mode 100644
index 000000000..b839f7788
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PauseActionButton.java
@@ -0,0 +1,42 @@
+package de.danoeh.antennapod.adapter.actionbutton;
+
+import android.content.Context;
+import androidx.annotation.AttrRes;
+import androidx.annotation.StringRes;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.util.IntentUtils;
+
+import static de.danoeh.antennapod.core.service.playback.PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE;
+
+class PauseActionButton extends ItemActionButton {
+
+ PauseActionButton(FeedItem item) {
+ super(item);
+ }
+
+ @Override
+ @StringRes
+ public int getLabel() {
+ return R.string.pause_label;
+ }
+
+ @Override
+ @AttrRes
+ public int getDrawable() {
+ return R.attr.av_pause;
+ }
+
+ @Override
+ public void onClick(Context context) {
+ FeedMedia media = item.getMedia();
+ if (media == null) {
+ return;
+ }
+
+ if (media.isCurrentlyPlaying()) {
+ IntentUtils.sendLocalBroadcast(context, ACTION_PAUSE_PLAY_CURRENT_EPISODE);
+ }
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java
index 0d314b5eb..3432f1deb 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/PlayActionButton.java
@@ -3,16 +3,11 @@ package de.danoeh.antennapod.adapter.actionbutton;
import android.content.Context;
import androidx.annotation.AttrRes;
import androidx.annotation.StringRes;
-
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.storage.DBTasks;
-import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
-import static de.danoeh.antennapod.core.service.playback.PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE;
-
class PlayActionButton extends ItemActionButton {
PlayActionButton(FeedItem item) {
@@ -28,12 +23,7 @@ class PlayActionButton extends ItemActionButton {
@Override
@AttrRes
public int getDrawable() {
- FeedMedia media = item.getMedia();
- if (media != null && media.isCurrentlyPlaying()) {
- return R.attr.av_pause;
- } else {
- return R.attr.av_play;
- }
+ return R.attr.av_play;
}
@Override
@@ -43,22 +33,10 @@ class PlayActionButton extends ItemActionButton {
return;
}
- if (media.isPlaying()) {
- togglePlayPause(context, media);
- } else {
- DBTasks.playMedia(context, media, false, true, false);
- }
- }
-
- private void togglePlayPause(Context context, FeedMedia media) {
- if (media.isCurrentlyPlaying()) {
- IntentUtils.sendLocalBroadcast(context, ACTION_PAUSE_PLAY_CURRENT_EPISODE);
- } else {
- new PlaybackServiceStarter(context, media)
- .callEvenIfRunning(true)
- .startWhenPrepared(true)
- .shouldStream(false)
- .start();
- }
+ new PlaybackServiceStarter(context, media)
+ .callEvenIfRunning(true)
+ .startWhenPrepared(true)
+ .shouldStream(false)
+ .start();
}
}
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 369574190..f9c02524e 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
@@ -119,6 +119,10 @@ public class EpisodeItemViewHolder extends FeedComponentViewHolder
bind(item.getMedia());
} else {
secondaryActionProgress.setPercentage(0, item);
+ isVideo.setVisibility(View.GONE);
+ progressBar.setVisibility(View.GONE);
+ duration.setVisibility(View.GONE);
+ position.setVisibility(View.GONE);
}
if (coverHolder.getVisibility() == View.VISIBLE) {
@@ -133,6 +137,7 @@ public class EpisodeItemViewHolder extends FeedComponentViewHolder
private void bind(FeedMedia media) {
isVideo.setVisibility(media.getMediaType() == MediaType.VIDEO ? View.VISIBLE : View.GONE);
+ duration.setVisibility(media.getDuration() > 0 ? View.VISIBLE : View.GONE);
duration.setText(Converter.getDurationStringLong(media.getDuration()));
if (media.isCurrentlyPlaying()) {
@@ -151,12 +156,10 @@ public class EpisodeItemViewHolder extends FeedComponentViewHolder
secondaryActionProgress.setPercentage(0, item); // Animate X% -> 0%
}
- if (media.getDuration() > 0
- && (item.getState() == FeedItem.State.PLAYING || item.getState() == FeedItem.State.IN_PROGRESS)) {
+ if (item.getState() == FeedItem.State.PLAYING || item.getState() == FeedItem.State.IN_PROGRESS) {
int progress = (int) (100.0 * media.getPosition() / media.getDuration());
progressBar.setProgress(progress);
position.setText(Converter.getDurationStringLong(media.getPosition()));
- duration.setText(Converter.getDurationStringLong(media.getDuration()));
progressBar.setVisibility(View.VISIBLE);
position.setVisibility(View.VISIBLE);
} else {
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 1ca3a8088..ef7b9357f 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -51,7 +51,7 @@
android:icon="?attr/ic_questionmark" />
<Preference
android:key="prefViewMailingList"
- android:title="@string/view_mailing_list"
+ android:title="@string/visit_user_forum"
android:icon="?attr/ic_chat" />
<Preference
android:key="prefSendBugReport"
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java
index 8f7e84561..19ef3d36f 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ExoPlayerWrapper.java
@@ -39,6 +39,7 @@ import java.util.concurrent.TimeUnit;
public class ExoPlayerWrapper implements IPlayer {
private static final String TAG = "ExoPlayerWrapper";
+ public static final int ERROR_CODE_OFFSET = 1000;
private final Context mContext;
private final Disposable bufferingUpdateDisposable;
private SimpleExoPlayer mExoPlayer;
@@ -109,7 +110,7 @@ public class ExoPlayerWrapper implements IPlayer {
@Override
public void onPlayerError(ExoPlaybackException error) {
if (audioErrorListener != null) {
- audioErrorListener.onError(null, 0, 0);
+ audioErrorListener.onError(null, error.type + ERROR_CODE_OFFSET, 0);
}
}
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 bf59b0ffd..0ec325e85 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
@@ -643,7 +643,18 @@ public class PlaybackService extends MediaBrowserServiceCompat {
private void startPlayingFromPreferences() {
Playable playable = Playable.PlayableUtils.createInstanceFromPreferences(getApplicationContext());
if (playable != null) {
- mediaPlayer.playMediaObject(playable, false, true, true);
+ if (PlaybackPreferences.getCurrentEpisodeIsStream() && !NetworkUtils.isStreamingAllowed()) {
+ displayStreamingNotAllowedNotification(
+ new PlaybackServiceStarter(this, playable)
+ .prepareImmediately(true)
+ .startWhenPrepared(true)
+ .shouldStream(true)
+ .getIntent());
+ PlaybackPreferences.writeNoMediaPlaying();
+ stateManager.stopService();
+ return;
+ }
+ mediaPlayer.playMediaObject(playable, PlaybackPreferences.getCurrentEpisodeIsStream(), true, true);
stateManager.validStartCommandWasReceived();
PlaybackService.this.updateMediaSessionMetadata(playable);
} else {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java
index 32d37a67e..8ca8bbf6c 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/MediaPlayerError.java
@@ -2,30 +2,35 @@ package de.danoeh.antennapod.core.util.playback;
import android.content.Context;
import android.media.MediaPlayer;
-
+import com.google.android.exoplayer2.ExoPlaybackException;
import de.danoeh.antennapod.core.R;
+import de.danoeh.antennapod.core.service.playback.ExoPlayerWrapper;
/** Utility class for MediaPlayer errors. */
public class MediaPlayerError {
- private MediaPlayerError(){}
+ private MediaPlayerError(){}
- /** Get a human-readable string for a specific error code. */
- public static String getErrorString(Context context, int code) {
- int resId;
- switch(code) {
- case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
- resId = R.string.playback_error_server_died;
- break;
- case MediaPlayer.MEDIA_ERROR_UNSUPPORTED:
- resId = R.string.playback_error_unsupported;
- break;
- case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
- resId = R.string.playback_error_timeout;
- break;
- default:
- resId = R.string.playback_error_unknown;
- break;
- }
- return context.getString(resId) + " (" + code + ")";
- }
+ /** Get a human-readable string for a specific error code. */
+ public static String getErrorString(Context context, int code) {
+ int resId;
+ switch (code) {
+ case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
+ resId = R.string.playback_error_server_died;
+ break;
+ case MediaPlayer.MEDIA_ERROR_UNSUPPORTED: // fall-through
+ case ExoPlayerWrapper.ERROR_CODE_OFFSET + ExoPlaybackException.TYPE_RENDERER:
+ resId = R.string.playback_error_unsupported;
+ break;
+ case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
+ resId = R.string.playback_error_timeout;
+ break;
+ case ExoPlayerWrapper.ERROR_CODE_OFFSET + ExoPlaybackException.TYPE_SOURCE:
+ resId = R.string.playback_error_source;
+ break;
+ default:
+ resId = R.string.playback_error_unknown;
+ break;
+ }
+ return context.getString(resId) + " (" + code + ")";
+ }
}
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index a97ce1339..1be8029d7 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -283,6 +283,7 @@
<string name="playback_error_server_died">Server died</string>
<string name="playback_error_unsupported">Unsupported media type</string>
<string name="playback_error_timeout">Operation timed out</string>
+ <string name="playback_error_source">Unable to access media file</string>
<string name="playback_error_unknown">Unknown Error</string>
<string name="no_media_playing_label">No media playing</string>
<string name="position_default_label" translate="false">00:00:00</string>
@@ -486,7 +487,7 @@
<string name="pref_smart_mark_as_played_disabled">Disabled</string>
<string name="pref_image_cache_size_title">Image Cache Size</string>
<string name="pref_image_cache_size_sum">Size of the disk cache for images.</string>
- <string name="view_mailing_list">View mailing list</string>
+ <string name="visit_user_forum">Visit user forum</string>
<string name="bug_report_title">Report bug</string>
<string name="open_bug_tracker">Open bug tracker</string>
<string name="export_logs">Export logs</string>