diff options
12 files changed, 85 insertions, 26 deletions
diff --git a/app/build.gradle b/app/build.gradle index 516179a6e..34a2421b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -165,7 +165,7 @@ dependencies { implementation "com.github.shts:TriangleLabelView:$triangleLabelViewVersion" implementation 'com.leinardi.android:speed-dial:3.0.0' implementation "com.github.AntennaPod:AntennaPod-AudioPlayer:$audioPlayerVersion" - implementation 'com.github.mfietz:fyydlin:v0.4.2' + implementation 'com.github.mfietz:fyydlin:v0.5.0' implementation 'com.github.ByteHamster:SearchPreference:v2.0.0' androidTestImplementation "org.awaitility:awaitility:$awaitilityVersion" diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java index 4e849b9d9..124394b64 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java @@ -573,6 +573,13 @@ public class OnlineFeedViewActivity extends AppCompatActivity { titles.add(urlsMap.get(url)); } + if (urls.size() == 1) { + // Skip dialog and display the item directly + resetIntent(urls.get(0), titles.get(0)); + startFeedDownload(urls.get(0), null, null); + return true; + } + final ArrayAdapter<String> adapter = new ArrayAdapter<>(OnlineFeedViewActivity.this, R.layout.ellipsize_start_listitem, R.id.txtvTitle, titles); DialogInterface.OnClickListener onClickListener = (dialog, which) -> { String selectedUrl = urls.get(which); 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 f49892b63..849bb3b64 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistDescriptionAdapter.java @@ -63,6 +63,9 @@ public class FeedItemlistDescriptionAdapter extends ArrayAdapter<FeedItem> { holder.description.setTag(Boolean.FALSE); // not expanded holder.preview.setVisibility(View.GONE); holder.preview.setOnClickListener(v -> { + if (item.getMedia() == null) { + return; + } Playable playable = new RemoteMedia(item); if (!NetworkUtils.isStreamingAllowed()) { new StreamingConfirmationDialog(getContext(), playable).show(); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java index 06c80e173..62b22879a 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java @@ -44,7 +44,7 @@ public class PodcastListAdapter extends ArrayAdapter<GpodnetPodcast> { holder.image = convertView.findViewById(R.id.imgvCover); holder.title = convertView.findViewById(R.id.txtvTitle); holder.subscribers = convertView.findViewById(R.id.txtvSubscribers); - holder.url = convertView.findViewById(R.id.txtvUrl); + holder.author = convertView.findViewById(R.id.txtvAuthor); convertView.setTag(holder); } else { holder = (Holder) convertView.getTag(); @@ -64,7 +64,7 @@ public class PodcastListAdapter extends ArrayAdapter<GpodnetPodcast> { holder.title.setText(podcast.getTitle()); holder.subscribers.setText(String.valueOf(podcast.getSubscribers())); - holder.url.setText(podcast.getUrl()); + holder.author.setText(podcast.getAuthor()); return convertView; } @@ -73,6 +73,6 @@ public class PodcastListAdapter extends ArrayAdapter<GpodnetPodcast> { ImageView image; TextView title; TextView subscribers; - TextView url; + TextView author; } } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/itunes/ItunesAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/itunes/ItunesAdapter.java index cc3b6fba0..7917c264f 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/itunes/ItunesAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/itunes/ItunesAdapter.java @@ -65,13 +65,16 @@ public class ItunesAdapter extends ArrayAdapter<PodcastSearchResult> { viewHolder = (PodcastViewHolder) view.getTag(); } - //Set the title + // Set the title viewHolder.titleView.setText(podcast.title); - if(podcast.feedUrl != null && !podcast.feedUrl.contains("itunes.apple.com")) { - viewHolder.urlView.setText(podcast.feedUrl); - viewHolder.urlView.setVisibility(View.VISIBLE); + if (podcast.author != null && ! podcast.author.trim().isEmpty()) { + viewHolder.authorView.setText(podcast.author); + viewHolder.authorView.setVisibility(View.VISIBLE); + } else if (podcast.feedUrl != null && !podcast.feedUrl.contains("itunes.apple.com")) { + viewHolder.authorView.setText(podcast.feedUrl); + viewHolder.authorView.setVisibility(View.VISIBLE); } else { - viewHolder.urlView.setVisibility(View.GONE); + viewHolder.authorView.setVisibility(View.GONE); } //Update the empty imageView with the image from the feed @@ -103,7 +106,7 @@ public class ItunesAdapter extends ArrayAdapter<PodcastSearchResult> { */ final TextView titleView; - final TextView urlView; + final TextView authorView; /** @@ -113,7 +116,7 @@ public class ItunesAdapter extends ArrayAdapter<PodcastSearchResult> { PodcastViewHolder(View view){ coverView = view.findViewById(R.id.imgvCover); titleView = view.findViewById(R.id.txtvTitle); - urlView = view.findViewById(R.id.txtvUrl); + authorView = view.findViewById(R.id.txtvAuthor); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearchResult.java b/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearchResult.java index 6535df5ef..481c232c8 100644 --- a/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearchResult.java +++ b/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearchResult.java @@ -25,15 +25,26 @@ public class PodcastSearchResult { @Nullable public final String feedUrl; + /** + * artistName of the podcast feed + */ + @Nullable + public final String author; - private PodcastSearchResult(String title, @Nullable String imageUrl, @Nullable String feedUrl) { + + private PodcastSearchResult(String title, @Nullable String imageUrl, @Nullable String feedUrl, @Nullable String author) { this.title = title; this.imageUrl = imageUrl; this.feedUrl = feedUrl; + this.author = author; + } + + private PodcastSearchResult(String title, @Nullable String imageUrl, @Nullable String feedUrl) { + this(title, imageUrl, feedUrl, ""); } public static PodcastSearchResult dummy() { - return new PodcastSearchResult("", "", ""); + return new PodcastSearchResult("", "", "", ""); } /** @@ -46,7 +57,8 @@ public class PodcastSearchResult { String title = json.optString("collectionName", ""); String imageUrl = json.optString("artworkUrl100", null); String feedUrl = json.optString("feedUrl", null); - return new PodcastSearchResult(title, imageUrl, feedUrl); + String author = json.optString("artistName", null); + return new PodcastSearchResult(title, imageUrl, feedUrl, author); } /** @@ -68,14 +80,27 @@ public class PodcastSearchResult { } String feedUrl = "https://itunes.apple.com/lookup?id=" + json.getJSONObject("id").getJSONObject("attributes").getString("im:id"); - return new PodcastSearchResult(title, imageUrl, feedUrl); + + String author = null; + try { + author = json.getJSONObject("im:artist").getString("label"); + } catch (Exception e) { + // Some feeds have empty artist + } + return new PodcastSearchResult(title, imageUrl, feedUrl, author); } public static PodcastSearchResult fromFyyd(SearchHit searchHit) { - return new PodcastSearchResult(searchHit.getTitle(), searchHit.getThumbImageURL(), searchHit.getXmlUrl()); + return new PodcastSearchResult(searchHit.getTitle(), + searchHit.getThumbImageURL(), + searchHit.getXmlUrl(), + searchHit.getAuthor()); } public static PodcastSearchResult fromGpodder(GpodnetPodcast searchHit) { - return new PodcastSearchResult(searchHit.getTitle(), searchHit.getLogoUrl(), searchHit.getUrl()); + return new PodcastSearchResult(searchHit.getTitle(), + searchHit.getLogoUrl(), + searchHit.getUrl(), + searchHit.getAuthor()); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java index 3ba6be3d9..8f6f4d964 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java @@ -76,7 +76,10 @@ public class AddFeedFragment extends Fragment { EditText editText = content.findViewById(R.id.text); editText.setHint(R.string.add_podcast_by_url_hint); ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); - editText.setText(clipboard.getText()); + String clipboardContent = clipboard.getText().toString(); + if (clipboardContent.startsWith("http")) { + editText.setText(clipboardContent); + } builder.setView(content); builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> addUrl(editText.getText().toString())); builder.setNegativeButton(R.string.cancel_label, null); diff --git a/app/src/main/res/layout/gpodnet_podcast_listitem.xml b/app/src/main/res/layout/gpodnet_podcast_listitem.xml index 6e02fa090..e5f44220f 100644 --- a/app/src/main/res/layout/gpodnet_podcast_listitem.xml +++ b/app/src/main/res/layout/gpodnet_podcast_listitem.xml @@ -70,7 +70,7 @@ tools:background="@android:color/holo_green_dark" /> <TextView - android:id="@+id/txtvUrl" + android:id="@+id/txtvAuthor" style="android:style/TextAppearance.Small" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -81,7 +81,7 @@ android:textColor="?android:attr/textColorSecondary" android:ellipsize="middle" android:maxLines="2" - tools:text="http://www.example.com/feed" + tools:text="author" tools:background="@android:color/holo_green_dark"/> </RelativeLayout> diff --git a/app/src/main/res/layout/itunes_podcast_listitem.xml b/app/src/main/res/layout/itunes_podcast_listitem.xml index b2411c5df..d2472b0de 100644 --- a/app/src/main/res/layout/itunes_podcast_listitem.xml +++ b/app/src/main/res/layout/itunes_podcast_listitem.xml @@ -45,7 +45,7 @@ tools:text="Podcast title" /> <TextView - android:id="@+id/txtvUrl" + android:id="@+id/txtvAuthor" style="android:style/TextAppearance.Small" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -53,7 +53,7 @@ android:textColor="?android:attr/textColorSecondary" android:ellipsize="middle" android:maxLines="2" - tools:text="http://www.example.com/feed" + tools:text="author" tools:background="@android:color/holo_green_dark"/> </LinearLayout> diff --git a/app/src/main/res/layout/searchlist_item.xml b/app/src/main/res/layout/searchlist_item.xml index 4a055fea9..e8ff18c5f 100644 --- a/app/src/main/res/layout/searchlist_item.xml +++ b/app/src/main/res/layout/searchlist_item.xml @@ -52,4 +52,4 @@ tools:background="@android:color/holo_blue_light"/> </LinearLayout> -</RelativeLayout>
\ No newline at end of file +</RelativeLayout> diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java index 97931237a..7cef4268f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/GpodnetService.java @@ -688,8 +688,20 @@ public class GpodnetService { website = (String) websiteObj; } String mygpoLink = object.getString("mygpo_link"); - return new GpodnetPodcast(url, title, description, subscribers, - logoUrl, website, mygpoLink); + + String author = null; + Object authorObj = object.opt("author"); + if (authorObj != null && authorObj instanceof String) { + author = (String) authorObj; + } + return new GpodnetPodcast(url, + title, + description, + subscribers, + logoUrl, + website, + mygpoLink, + author); } private List<GpodnetDevice> readDeviceListFromJSONArray(@NonNull JSONArray array) diff --git a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java index 2c2d759c9..5433e3ee0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java +++ b/core/src/main/java/de/danoeh/antennapod/core/gpoddernet/model/GpodnetPodcast.java @@ -10,6 +10,7 @@ public class GpodnetPodcast { private final String logoUrl; private final String website; private final String mygpoLink; + private final String author; public GpodnetPodcast(@NonNull String url, @NonNull String title, @@ -17,7 +18,9 @@ public class GpodnetPodcast { int subscribers, String logoUrl, String website, - String mygpoLink) { + String mygpoLink, + String author + ) { this.url = url; this.title = title; this.description = description; @@ -25,6 +28,7 @@ public class GpodnetPodcast { this.logoUrl = logoUrl; this.website = website; this.mygpoLink = mygpoLink; + this.author = author; } @Override @@ -59,6 +63,8 @@ public class GpodnetPodcast { return website; } + public String getAuthor() { return author; } + public String getMygpoLink() { return mygpoLink; } |