From c24761806e87a3c1a9fe6dc5b6342034d2678408 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 10 Apr 2020 21:56:44 +0200 Subject: Allow to stop previewed episode --- .../adapter/FeedItemlistDescriptionAdapter.java | 25 ++++++++++++- .../de/danoeh/antennapod/core/feed/FeedMedia.java | 2 +- .../core/preferences/PlaybackPreferences.java | 43 ++++++++++++---------- .../antennapod/core/util/playback/Playable.java | 2 +- .../antennapod/core/util/playback/RemoteMedia.java | 2 +- 5 files changed, 49 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java index 849bb3b64..9158d587b 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java @@ -8,6 +8,9 @@ import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.TextView; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.NetworkUtils; import de.danoeh.antennapod.core.util.playback.RemoteMedia; import de.danoeh.antennapod.core.feed.FeedItem; @@ -67,16 +70,28 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter { return; } Playable playable = new RemoteMedia(item); + if (PlaybackPreferences.getCurrentlyPlayingMediaType() == RemoteMedia.PLAYABLE_TYPE_REMOTE_MEDIA) { + PlaybackPreferences.writeNoMediaPlaying(); + IntentUtils.sendLocalBroadcast(getContext(), PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE); + holder.preview.setText(R.string.preview_episode); + return; + } + if (!NetworkUtils.isStreamingAllowed()) { new StreamingConfirmationDialog(getContext(), playable).show(); return; } + new PlaybackServiceStarter(getContext(), playable) .shouldStream(true) .startWhenPrepared(true) .callEvenIfRunning(true) .start(); - getContext().startActivity(PlaybackService.getPlayerActivityIntent(getContext(), playable)); + holder.preview.setText(R.string.stop_playback); + + if (playable.getMediaType() == MediaType.VIDEO) { + getContext().startActivity(PlaybackService.getPlayerActivityIntent(getContext(), playable)); + } }); convertView.setOnClickListener(v -> { if (holder.description.getTag() == Boolean.TRUE) { @@ -85,8 +100,14 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter { holder.description.setTag(Boolean.FALSE); } else { holder.description.setMaxLines(2000); - holder.preview.setVisibility(View.VISIBLE); holder.description.setTag(Boolean.TRUE); + + holder.preview.setVisibility(item.getMedia() != null ? View.VISIBLE : View.GONE); + if (PlaybackPreferences.getCurrentlyPlayingMediaType() == RemoteMedia.PLAYABLE_TYPE_REMOTE_MEDIA) { + holder.preview.setText(R.string.stop_playback); + } else { + holder.preview.setText(R.string.preview_episode); + } } }); return convertView; diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java index 175f8e77b..a41b04b53 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java @@ -209,7 +209,7 @@ public class FeedMedia extends FeedFile implements Playable { * currently being played. */ public boolean isPlaying() { - return PlaybackPreferences.getCurrentlyPlayingMedia() == FeedMedia.PLAYABLE_TYPE_FEEDMEDIA + return PlaybackPreferences.getCurrentlyPlayingMediaType() == FeedMedia.PLAYABLE_TYPE_FEEDMEDIA && PlaybackPreferences.getCurrentlyPlayingFeedMediaId() == id; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java index 4e2233407..a4612d857 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/PlaybackPreferences.java @@ -33,14 +33,16 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference * Contains the id of the currently playing FeedMedia object or * NO_MEDIA_PLAYING if the currently playing media is no FeedMedia object. */ - private static final String PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID = "de.danoeh.antennapod.preferences.lastPlayedFeedMediaId"; + private static final String PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID + = "de.danoeh.antennapod.preferences.lastPlayedFeedMediaId"; /** * Type of the media object that is currently being played. This preference * is set to NO_MEDIA_PLAYING after playback has been completed and is set * as soon as the 'play' button is pressed. */ - private static final String PREF_CURRENTLY_PLAYING_MEDIA = "de.danoeh.antennapod.preferences.currentlyPlayingMedia"; + private static final String PREF_CURRENTLY_PLAYING_MEDIA_TYPE + = "de.danoeh.antennapod.preferences.currentlyPlayingMedia"; /** * True if last played media was streamed. @@ -61,7 +63,8 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference * A temporary playback speed which overrides the per-feed playback speed for the currently playing * media. Considered unset if set to SPEED_USE_GLOBAL; */ - private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED = "de.danoeh.antennapod.preferences.temporaryPlaybackSpeed"; + private static final String PREF_CURRENTLY_PLAYING_TEMPORARY_PLAYBACK_SPEED + = "de.danoeh.antennapod.preferences.temporaryPlaybackSpeed"; /** @@ -102,21 +105,21 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference } } - public static long getCurrentlyPlayingMedia() { - return prefs.getLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING); - } + public static long getCurrentlyPlayingMediaType() { + return prefs.getLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, NO_MEDIA_PLAYING); + } - public static long getCurrentlyPlayingFeedMediaId() { - return prefs.getLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); - } + public static long getCurrentlyPlayingFeedMediaId() { + return prefs.getLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); + } - public static boolean getCurrentEpisodeIsStream() { - return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_STREAM, true); - } + public static boolean getCurrentEpisodeIsStream() { + return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_STREAM, true); + } - public static boolean getCurrentEpisodeIsVideo() { - return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, false); - } + public static boolean getCurrentEpisodeIsVideo() { + return prefs.getBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, false); + } public static int getCurrentPlayerStatus() { return prefs.getInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER); @@ -128,7 +131,7 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference public static void writeNoMediaPlaying() { SharedPreferences.Editor editor = prefs.edit(); - editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, NO_MEDIA_PLAYING); + editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, NO_MEDIA_PLAYING); editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, NO_MEDIA_PLAYING); editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); editor.putInt(PREF_CURRENT_PLAYER_STATUS, PLAYER_STATUS_OTHER); @@ -142,13 +145,13 @@ public class PlaybackPreferences implements SharedPreferences.OnSharedPreference if (playable == null) { writeNoMediaPlaying(); } else { - editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA, playable.getPlayableType()); + editor.putLong(PREF_CURRENTLY_PLAYING_MEDIA_TYPE, playable.getPlayableType()); editor.putBoolean(PREF_CURRENT_EPISODE_IS_STREAM, stream); editor.putBoolean(PREF_CURRENT_EPISODE_IS_VIDEO, playable.getMediaType() == MediaType.VIDEO); if (playable instanceof FeedMedia) { - FeedMedia fMedia = (FeedMedia) playable; - editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, fMedia.getItem().getFeed().getId()); - editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, fMedia.getId()); + FeedMedia feedMedia = (FeedMedia) playable; + editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, feedMedia.getItem().getFeed().getId()); + editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, feedMedia.getId()); } else { editor.putLong(PREF_CURRENTLY_PLAYING_FEED_ID, NO_MEDIA_PLAYING); editor.putLong(PREF_CURRENTLY_PLAYING_FEEDMEDIA_ID, NO_MEDIA_PLAYING); diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java index 378c47faf..24aabf212 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Playable.java @@ -188,7 +188,7 @@ public interface Playable extends Parcelable, */ @Nullable public static Playable createInstanceFromPreferences(Context context) { - long currentlyPlayingMedia = PlaybackPreferences.getCurrentlyPlayingMedia(); + long currentlyPlayingMedia = PlaybackPreferences.getCurrentlyPlayingMediaType(); if (currentlyPlayingMedia != PlaybackPreferences.NO_MEDIA_PLAYING) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); return PlayableUtils.createInstanceFromPreferences(context, diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java index c39121564..ca09cda4b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/RemoteMedia.java @@ -282,7 +282,7 @@ public class RemoteMedia implements Playable { dest.writeString(imageUrl); dest.writeString(feedLink); dest.writeString(mimeType); - dest.writeLong(pubDate.getTime()); + dest.writeLong((pubDate != null) ? pubDate.getTime() : 0); dest.writeString(notes); dest.writeInt(duration); dest.writeInt(position); -- cgit v1.2.3