diff options
8 files changed, 73 insertions, 38 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java index 577a3ecbe..202d33408 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java @@ -225,6 +225,9 @@ public class EpisodesApplyActionFragment extends Fragment { checkQueued(false); resId = R.string.selected_not_queued_label; break; + case R.id.check_has_media: + checkWithMedia(); + resId = R.string.selected_has_media_label; case R.id.sort_title_a_z: sortByTitle(false); return true; @@ -357,6 +360,17 @@ public class EpisodesApplyActionFragment extends Fragment { refreshCheckboxes(); } + private void checkWithMedia() { + for (FeedItem episode : episodes) { + if(episode.hasMedia()) { + checkedIds.add(episode.getId()); + } else { + checkedIds.remove(episode.getId()); + } + } + refreshCheckboxes(); + } + private void refreshTitles() { titles.clear(); for(FeedItem episode : episodes) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 29df6617d..ab8808093 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -227,22 +227,32 @@ public class AllEpisodesFragment extends Fragment { } return true; case R.id.mark_all_read_item: - ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(), + ConfirmationDialog markAllReadConfirmationDialog = new ConfirmationDialog(getActivity(), R.string.mark_all_read_label, R.string.mark_all_read_confirmation_msg) { @Override - public void onConfirmButtonPressed( - DialogInterface dialog) { + public void onConfirmButtonPressed(DialogInterface dialog) { dialog.dismiss(); DBWriter.markAllItemsRead(); Toast.makeText(getActivity(), R.string.mark_all_read_msg, Toast.LENGTH_SHORT).show(); } }; - conDialog.createNewDialog().show(); + markAllReadConfirmationDialog.createNewDialog().show(); return true; case R.id.mark_all_seen_item: - DBWriter.markNewItemsSeen(); + ConfirmationDialog markAllSeenConfirmationDialog = new ConfirmationDialog(getActivity(), + R.string.mark_all_seen_label, + R.string.mark_all_seen_confirmation_msg) { + + @Override + public void onConfirmButtonPressed(DialogInterface dialog) { + dialog.dismiss(); + DBWriter.markNewItemsSeen(); + Toast.makeText(getActivity(), R.string.mark_all_seen_msg, Toast.LENGTH_SHORT).show(); + } + }; + markAllSeenConfirmationDialog.createNewDialog().show(); return true; default: return false; diff --git a/app/src/main/res/menu/episodes_apply_action_options.xml b/app/src/main/res/menu/episodes_apply_action_options.xml index 3df88046d..c3f117386 100644 --- a/app/src/main/res/menu/episodes_apply_action_options.xml +++ b/app/src/main/res/menu/episodes_apply_action_options.xml @@ -46,6 +46,8 @@ android:title="@string/queued_label"/> <item android:id="@+id/check_not_queued" android:title="@string/not_queued_label"/> + <item android:id="@+id/check_has_media" + android:title="@string/has_media"/> </menu> </item> diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilter.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilter.java index 9d8f4adf8..200153876 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilter.java @@ -18,6 +18,7 @@ public class FeedItemFilter { private boolean showNotQueued = false; private boolean showDownloaded = false; private boolean showNotDownloaded = false; + private boolean showHasMedia = false; public FeedItemFilter(String properties) { this(TextUtils.split(properties, ",")); @@ -49,6 +50,9 @@ public class FeedItemFilter { case "not_downloaded": showNotDownloaded = true; break; + case "has_media": + showHasMedia = true; + break; } } } @@ -82,6 +86,8 @@ public class FeedItemFilter { if (showDownloaded && !downloaded) continue; if (showNotDownloaded && downloaded) continue; + if (showHasMedia && !item.hasMedia()) continue; + // If the item reaches here, it meets all criteria result.add(item); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java index 47503dee4..ae91c0743 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/SyndHandler.java @@ -6,7 +6,6 @@ import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; -import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.syndication.namespace.NSContent; import de.danoeh.antennapod.core.syndication.namespace.NSDublinCore; @@ -86,34 +85,28 @@ public class SyndHandler extends DefaultHandler { state.defaultNamespaces.push(new NSAtom()); } else if (prefix.equals(NSAtom.NSTAG)) { state.namespaces.put(uri, new NSAtom()); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized Atom namespace"); + Log.d(TAG, "Recognized Atom namespace"); } } else if (uri.equals(NSContent.NSURI) && prefix.equals(NSContent.NSTAG)) { state.namespaces.put(uri, new NSContent()); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized Content namespace"); + Log.d(TAG, "Recognized Content namespace"); } else if (uri.equals(NSITunes.NSURI) && prefix.equals(NSITunes.NSTAG)) { state.namespaces.put(uri, new NSITunes()); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized ITunes namespace"); + Log.d(TAG, "Recognized ITunes namespace"); } else if (uri.equals(NSSimpleChapters.NSURI) && prefix.matches(NSSimpleChapters.NSTAG)) { state.namespaces.put(uri, new NSSimpleChapters()); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized SimpleChapters namespace"); + Log.d(TAG, "Recognized SimpleChapters namespace"); } else if (uri.equals(NSMedia.NSURI) && prefix.equals(NSMedia.NSTAG)) { state.namespaces.put(uri, new NSMedia()); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized media namespace"); + Log.d(TAG, "Recognized media namespace"); } else if (uri.equals(NSDublinCore.NSURI) && prefix.equals(NSDublinCore.NSTAG)) { state.namespaces.put(uri, new NSDublinCore()); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized DublinCore namespace"); + Log.d(TAG, "Recognized DublinCore namespace"); } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java index a5ca9d6f4..c91444552 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSRSS20.java @@ -20,25 +20,27 @@ import de.danoeh.antennapod.core.util.DateUtils; * */ public class NSRSS20 extends Namespace { - private static final String TAG = "NSRSS20"; - public static final String NSTAG = "rss"; - public static final String NSURI = ""; - public static final String CHANNEL = "channel"; + private static final String TAG = "NSRSS20"; + + private static final String NSTAG = "rss"; + private static final String NSURI = ""; + + public static final String CHANNEL = "channel"; public static final String ITEM = "item"; - public static final String GUID = "guid"; - public static final String TITLE = "title"; - public static final String LINK = "link"; - public static final String DESCR = "description"; - public static final String PUBDATE = "pubDate"; - public static final String ENCLOSURE = "enclosure"; - public static final String IMAGE = "image"; - public static final String URL = "url"; - public static final String LANGUAGE = "language"; + private static final String GUID = "guid"; + private static final String TITLE = "title"; + private static final String LINK = "link"; + private static final String DESCR = "description"; + private static final String PUBDATE = "pubDate"; + private static final String ENCLOSURE = "enclosure"; + private static final String IMAGE = "image"; + private static final String URL = "url"; + private static final String LANGUAGE = "language"; - public static final String ENC_URL = "url"; - public static final String ENC_LEN = "length"; - public static final String ENC_TYPE = "type"; + private static final String ENC_URL = "url"; + private static final String ENC_LEN = "length"; + private static final String ENC_TYPE = "type"; @Override public SyndElement handleElementStart(String localName, HandlerState state, @@ -55,11 +57,12 @@ public class NSRSS20 extends Namespace { if(SyndTypeUtils.enclosureTypeValid(type)) { validType = true; } else { - type = type = SyndTypeUtils.getValidMimeTypeFromUrl(url); + type = SyndTypeUtils.getValidMimeTypeFromUrl(url); validType = type != null; } + boolean validUrl = !TextUtils.isEmpty(url); if (state.getCurrentItem() != null && state.getCurrentItem().getMedia() == null && - validType) { + validType && validUrl) { long size = 0; try { size = Long.parseLong(attributes.getValue(ENC_LEN)); @@ -70,8 +73,8 @@ public class NSRSS20 extends Namespace { } catch (NumberFormatException e) { Log.d(TAG, "Length attribute could not be parsed."); } - state.getCurrentItem().setMedia( - new FeedMedia(state.getCurrentItem(), url, size, type)); + FeedMedia media = new FeedMedia(state.getCurrentItem(), url, size, type); + state.getCurrentItem().setMedia(media); } } else if (IMAGE.equals(localName)) { diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index fba22b985..c8c5162ef 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -185,6 +185,7 @@ <item>@string/hide_not_queued_episodes_label</item> <item>@string/hide_downloaded_episodes_label</item> <item>@string/hide_not_downloaded_episodes_label</item> + <item>@string/hide_has_media_label</item> </string-array> <string-array name="episode_filter_values"> @@ -195,6 +196,7 @@ <item>not_queued</item> <item>downloaded</item> <item>not_downloaded</item> + <item>has_media</item> </string-array> <string-array name="image_cache_size_options"> diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 892cd1a59..c7042708d 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -111,6 +111,8 @@ <string name="mark_all_read_confirmation_msg">Please confirm that you want to mark all episodes as being played.</string> <string name="mark_all_read_feed_confirmation_msg">Please confirm that you want to mark all episodes in this feed as being played.</string> <string name="mark_all_seen_label">Mark all as seen</string> + <string name="mark_all_seen_msg">Marked all Episodes as seen</string> + <string name="mark_all_seen_confirmation_msg">Please confirm that you want to mark all episodes as seen.</string> <string name="show_info_label">Show information</string> <string name="remove_feed_label">Remove Podcast</string> <string name="share_label">Share…</string> @@ -131,6 +133,7 @@ <string name="hide_not_queued_episodes_label">Not queued</string> <string name="hide_downloaded_episodes_label">Downloaded</string> <string name="hide_not_downloaded_episodes_label">Not downloaded</string> + <string name="hide_has_media_label">Has media</string> <string name="filtered_label">Filtered</string> <string name="refresh_failed_msg">{fa-exclamation-circle} Last Refresh failed</string> <string name="open_podcast">Open Podcast</string> @@ -590,6 +593,8 @@ <string name="selected_queued_label">Selected queued Episodes</string> <string name="not_queued_label">Not queued</string> <string name="selected_not_queued_label">Selected not queued Episodes</string> + <string name="has_media">Has media</string> + <string name="selected_has_media_label">Selected episodes with media</string> <!-- Sort --> <string name="sort_title_a_z">Title (A \u2192 Z)</string> |