From f634198794ee3e15fc02f677da1642c7df0f5271 Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 14:12:40 +0300 Subject: Initial favorites export commit --- .../core/export/favorites/FavoritesWriter.java | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java new file mode 100644 index 000000000..a6686a8a4 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -0,0 +1,131 @@ +package de.danoeh.antennapod.core.export.favorites; + +import android.content.Context; +import android.util.Log; + +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Writer; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import de.danoeh.antennapod.core.export.ExportWriter; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.storage.DBReader; + +/** Writes saved favorites to file */ +public class FavoritesWriter implements ExportWriter { + private static final String TAG = "FavoritesWriter"; + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + + private static final int PAGE_LIMIT = 100; + + @Override + public void writeDocument(List feeds, Writer writer, Context context) throws IllegalArgumentException, IllegalStateException, IOException { + Log.d(TAG, "Starting to write document"); + + InputStream templateStream = context.getAssets().open("favorites-export-template.html"); + String template = IOUtils.toString(templateStream, "UTF-8"); + String[] templateParts = template.split("\\{FAVORITES\\}"); + + Map> favoriteByFeed = getFeedMap(getFavorites(feeds)); + + writer.append(templateParts[0]); + writer.append("
    "); + + for (Long feedId : favoriteByFeed.keySet()) { + List favorites = favoriteByFeed.get(feedId); + + writer.append("
  • "); + writeFeed(writer, favorites.get(0).getFeed()); + + writer.append("
      "); + for (FeedItem item : favorites) { + writeFavoriteItem(writer, item); + } + writer.append("
  • \n"); + } + + writer.append("
"); + + writer.append(templateParts[1]); + + Log.d(TAG, "Finished writing document"); + } + + private List getFavorites(List feeds) { + int page = 0; + + List favoritesPage = DBReader.getFavoriteItemsList(page, PAGE_LIMIT); + List favoritesList = new ArrayList<>(); + + while (!favoritesPage.isEmpty()) { + favoritesList.addAll(favoritesPage); + + // save a DB call if there are no more items to fetch + if (favoritesPage.size() < PAGE_LIMIT) { + break; + } + + ++page; + + favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT); + } + + Collections.sort(favoritesList, (lhs, rhs) -> lhs.getPubDate().compareTo(rhs.getPubDate())); + + return favoritesList; + } + + private Map> getFeedMap(List favoritesList) { + Map> feedMap = new TreeMap<>(); + + for (FeedItem item : favoritesList) { + List feedEpisodes = feedMap.get(item.getFeedId()); + + if (feedEpisodes == null) { + feedEpisodes = new ArrayList<>(); + feedMap.put(item.getFeedId(), feedEpisodes); + } + + feedEpisodes.add(item); + } + + return feedMap; + } + + private void writeFeed(Writer writer, Feed feed) throws IOException { + writer.append("

"); + writer.append(feed.getTitle()); + writer.append(" WebsiteFeed

"); + } + + private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { + writer.append("
  • ["); + writer.append(DATE_FORMAT.format(item.getPubDate())); + writer.append("] "); + writer.append(item.getTitle().trim()); + writer.append(""); + writer.append("
  • \n"); + } + + @Override + public String fileExtension() { + return "html"; + } +} -- cgit v1.2.3 From 4f8979ecacbb7f7c8c2a854bc6f2c98f5f89f5cf Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 18:17:42 +0300 Subject: Reformatted output, added Hebrew translation Reformatted output to be sorted by date in descending order. Added links to episode page, as well as direct media download. Added Hebrew transaltion for Favorites export. Removed unused code. --- .../core/export/favorites/FavoritesWriter.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java index a6686a8a4..39e968ce9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -35,7 +35,7 @@ public class FavoritesWriter implements ExportWriter { String template = IOUtils.toString(templateStream, "UTF-8"); String[] templateParts = template.split("\\{FAVORITES\\}"); - Map> favoriteByFeed = getFeedMap(getFavorites(feeds)); + Map> favoriteByFeed = getFeedMap(getFavorites()); writer.append(templateParts[0]); writer.append("
      "); @@ -60,7 +60,7 @@ public class FavoritesWriter implements ExportWriter { Log.d(TAG, "Finished writing document"); } - private List getFavorites(List feeds) { + private List getFavorites() { int page = 0; List favoritesPage = DBReader.getFavoriteItemsList(page, PAGE_LIMIT); @@ -79,7 +79,8 @@ public class FavoritesWriter implements ExportWriter { favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT); } - Collections.sort(favoritesList, (lhs, rhs) -> lhs.getPubDate().compareTo(rhs.getPubDate())); + // sort in descending order + Collections.sort(favoritesList, (lhs, rhs) -> rhs.getPubDate().compareTo(lhs.getPubDate())); return favoritesList; } @@ -114,14 +115,13 @@ public class FavoritesWriter implements ExportWriter { } private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { - writer.append("
    • ["); - writer.append(DATE_FORMAT.format(item.getPubDate())); - writer.append("] "); + writer.append("
    • "); writer.append(item.getTitle().trim()); - writer.append(""); - writer.append("
    • \n"); + writer.append("
      \n[Website] • [Media]\n"); } @Override -- cgit v1.2.3 From 104704ee5006da027af98c16f06288ca7488f914 Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 18:32:11 +0300 Subject: Fix static analysis issues --- .../antennapod/core/export/favorites/FavoritesWriter.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java index 39e968ce9..7b4b38265 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -8,7 +8,6 @@ import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.InputStream; import java.io.Writer; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -20,15 +19,15 @@ import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.storage.DBReader; -/** Writes saved favorites to file */ +/** Writes saved favorites to file. */ public class FavoritesWriter implements ExportWriter { private static final String TAG = "FavoritesWriter"; - private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); private static final int PAGE_LIMIT = 100; @Override - public void writeDocument(List feeds, Writer writer, Context context) throws IllegalArgumentException, IllegalStateException, IOException { + public void writeDocument(List feeds, Writer writer, Context context) + throws IllegalArgumentException, IllegalStateException, IOException { Log.d(TAG, "Starting to write document"); InputStream templateStream = context.getAssets().open("favorites-export-template.html"); @@ -85,6 +84,12 @@ public class FavoritesWriter implements ExportWriter { return favoritesList; } + /** + * Group favorite episodes by feed, sorting them by publishing date in descending order. + * + * @param favoritesList {@code List} of all favorite episodes. + * @return A {@code Map} favorite episodes, keyed by feed ID. + */ private Map> getFeedMap(List favoritesList) { Map> feedMap = new TreeMap<>(); -- cgit v1.2.3 From 1cdfd80ca1561ca0f33313424488354ef6349749 Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 3 May 2020 22:56:31 +0300 Subject: Updated PR according to comments Removed unnecessary checks in while loop, and converted it to a do...while loop. Moved favorites export under HTML section. Corrected indentation in resources files. Moved to using a unified template for all HTML exports. Removed unnecessary strings, corrected capitalization. --- .../core/export/favorites/FavoritesWriter.java | 23 ++++++++-------------- .../antennapod/core/export/html/HtmlWriter.java | 1 + 2 files changed, 9 insertions(+), 15 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java index 7b4b38265..4d4ad60bb 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -30,9 +30,10 @@ public class FavoritesWriter implements ExportWriter { throws IllegalArgumentException, IllegalStateException, IOException { Log.d(TAG, "Starting to write document"); - InputStream templateStream = context.getAssets().open("favorites-export-template.html"); + InputStream templateStream = context.getAssets().open("html-export-template.html"); String template = IOUtils.toString(templateStream, "UTF-8"); - String[] templateParts = template.split("\\{FAVORITES\\}"); + template = template.replaceAll("\\{TITLE\\}", "Favorites"); + String[] templateParts = template.split("\\{FEEDS\\}"); Map> favoriteByFeed = getFeedMap(getFavorites()); @@ -45,7 +46,7 @@ public class FavoritesWriter implements ExportWriter { writer.append("
    • "); writeFeed(writer, favorites.get(0).getFeed()); - writer.append("
        "); + writer.append("
          "); for (FeedItem item : favorites) { writeFavoriteItem(writer, item); } @@ -62,21 +63,13 @@ public class FavoritesWriter implements ExportWriter { private List getFavorites() { int page = 0; - List favoritesPage = DBReader.getFavoriteItemsList(page, PAGE_LIMIT); List favoritesList = new ArrayList<>(); - - while (!favoritesPage.isEmpty()) { + List favoritesPage; + do { + favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT); favoritesList.addAll(favoritesPage); - - // save a DB call if there are no more items to fetch - if (favoritesPage.size() < PAGE_LIMIT) { - break; - } - ++page; - - favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT); - } + } while (!favoritesPage.isEmpty() && favoritesPage.size() == PAGE_LIMIT); // sort in descending order Collections.sort(favoritesList, (lhs, rhs) -> rhs.getPubDate().compareTo(lhs.getPubDate())); diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java index 93b66daed..3f34343ee 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/html/HtmlWriter.java @@ -25,6 +25,7 @@ public class HtmlWriter implements ExportWriter { InputStream templateStream = context.getAssets().open("html-export-template.html"); String template = IOUtils.toString(templateStream, "UTF-8"); + template = template.replaceAll("\\{TITLE\\}", "Subscriptions"); String[] templateParts = template.split("\\{FEEDS\\}"); writer.append(templateParts[0]); -- cgit v1.2.3 From 4d74233151a07bde76ae77285e5346b376d23961 Mon Sep 17 00:00:00 2001 From: malockin Date: Sat, 16 May 2020 23:34:23 +0300 Subject: cleaner presentation Removed square brackets from around links, and added grey lines to separate the listed episodes. --- .../antennapod/core/export/favorites/FavoritesWriter.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java index 4d4ad60bb..cc66eebd0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -38,23 +38,19 @@ public class FavoritesWriter implements ExportWriter { Map> favoriteByFeed = getFeedMap(getFavorites()); writer.append(templateParts[0]); - writer.append("
            "); for (Long feedId : favoriteByFeed.keySet()) { List favorites = favoriteByFeed.get(feedId); - writer.append("
          • "); writeFeed(writer, favorites.get(0).getFeed()); - writer.append("
              "); + writer.append("
                "); for (FeedItem item : favorites) { writeFavoriteItem(writer, item); } writer.append("
          • \n"); } - writer.append("
          "); - writer.append(templateParts[1]); Log.d(TAG, "Finished writing document"); @@ -113,13 +109,13 @@ public class FavoritesWriter implements ExportWriter { } private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { - writer.append("
        • "); + writer.append("
        • "); writer.append(item.getTitle().trim()); - writer.append("
          \n[\nWebsite] • [WebsiteMedia]
        • \n"); + writer.append("\">Media
          \n"); } @Override -- cgit v1.2.3 From 35dde1fadbd2bfa70ab96c09e8bd332aa9768cd9 Mon Sep 17 00:00:00 2001 From: malockin Date: Sat, 23 May 2020 22:16:19 +0300 Subject: Cleaner CSS, item templates Moved favorite item CSS to main template file. Added template files for feed information and favorite episode information, reducing in-line HTML usage in Java code. --- .../core/export/favorites/FavoritesWriter.java | 53 ++++++++++++---------- 1 file changed, 30 insertions(+), 23 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java index cc66eebd0..914faca05 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -25,28 +25,38 @@ public class FavoritesWriter implements ExportWriter { private static final int PAGE_LIMIT = 100; + private static final String FAVORITE_TEMPLATE = "html-export-fatorites-item-template.html"; + private static final String FEED_TEMPLATE = "html-export-feed-template.html"; + private static final String UTF_8 = "UTF-8"; + @Override public void writeDocument(List feeds, Writer writer, Context context) throws IllegalArgumentException, IllegalStateException, IOException { Log.d(TAG, "Starting to write document"); InputStream templateStream = context.getAssets().open("html-export-template.html"); - String template = IOUtils.toString(templateStream, "UTF-8"); + String template = IOUtils.toString(templateStream, UTF_8); template = template.replaceAll("\\{TITLE\\}", "Favorites"); String[] templateParts = template.split("\\{FEEDS\\}"); + InputStream favTemplateStream = context.getAssets().open(FAVORITE_TEMPLATE); + String favTemplate = IOUtils.toString(favTemplateStream, UTF_8); + + InputStream feedTemplateStream = context.getAssets().open(FEED_TEMPLATE); + String feedTemplate = IOUtils.toString(feedTemplateStream, UTF_8); + Map> favoriteByFeed = getFeedMap(getFavorites()); writer.append(templateParts[0]); for (Long feedId : favoriteByFeed.keySet()) { List favorites = favoriteByFeed.get(feedId); - writer.append("
        • "); - writeFeed(writer, favorites.get(0).getFeed()); + writer.append("
        • \n"); + writeFeed(writer, favorites.get(0).getFeed(), feedTemplate); - writer.append("
            "); + writer.append("
              \n"); for (FeedItem item : favorites) { - writeFavoriteItem(writer, item); + writeFavoriteItem(writer, item, favTemplate); } writer.append("
        • \n"); } @@ -96,26 +106,23 @@ public class FavoritesWriter implements ExportWriter { return feedMap; } - private void writeFeed(Writer writer, Feed feed) throws IOException { - writer.append("

          "); - writer.append(feed.getTitle()); - writer.append(" WebsiteFeed

          "); + private void writeFeed(Writer writer, Feed feed, String feedTemplate) throws IOException { + String feedInfo = feedTemplate + .replaceAll("\\{FEED_IMG\\}", feed.getImageUrl()) + .replaceAll("\\{FEED_TITLE\\}", feed.getTitle()) + .replaceAll("\\{FEED_LINK\\}", feed.getLink()) + .replaceAll("\\{FEED_WEBSITE\\}", feed.getDownload_url()); + + writer.append(feedInfo); } - private void writeFavoriteItem(Writer writer, FeedItem item) throws IOException { - writer.append("
        • "); - writer.append(item.getTitle().trim()); - writer.append("
          \nWebsiteMedia
        • \n"); + private void writeFavoriteItem(Writer writer, FeedItem item, String favoriteTemplate) throws IOException { + String favItem = favoriteTemplate + .replaceAll("\\{FAV_TITLE\\}", item.getTitle().trim()) + .replaceAll("\\{FAV_WEBSITE\\}", item.getLink()) + .replaceAll("\\{FAV_MEDIA\\}", item.getMedia().getDownload_url()); + + writer.append(favItem); } @Override -- cgit v1.2.3 From cc98447af95faf7f5d44130069edd0dbeeb2ae8c Mon Sep 17 00:00:00 2001 From: malockin Date: Sun, 24 May 2020 08:13:27 +0300 Subject: Use replace instread of replaceAll & fix typo --- .../core/export/favorites/FavoritesWriter.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java index 914faca05..60c38a391 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java @@ -25,7 +25,7 @@ public class FavoritesWriter implements ExportWriter { private static final int PAGE_LIMIT = 100; - private static final String FAVORITE_TEMPLATE = "html-export-fatorites-item-template.html"; + private static final String FAVORITE_TEMPLATE = "html-export-favorites-item-template.html"; private static final String FEED_TEMPLATE = "html-export-feed-template.html"; private static final String UTF_8 = "UTF-8"; @@ -108,19 +108,19 @@ public class FavoritesWriter implements ExportWriter { private void writeFeed(Writer writer, Feed feed, String feedTemplate) throws IOException { String feedInfo = feedTemplate - .replaceAll("\\{FEED_IMG\\}", feed.getImageUrl()) - .replaceAll("\\{FEED_TITLE\\}", feed.getTitle()) - .replaceAll("\\{FEED_LINK\\}", feed.getLink()) - .replaceAll("\\{FEED_WEBSITE\\}", feed.getDownload_url()); + .replace("{FEED_IMG}", feed.getImageUrl()) + .replace("{FEED_TITLE}", feed.getTitle()) + .replace("{FEED_LINK}", feed.getLink()) + .replace("{FEED_WEBSITE}", feed.getDownload_url()); writer.append(feedInfo); } private void writeFavoriteItem(Writer writer, FeedItem item, String favoriteTemplate) throws IOException { String favItem = favoriteTemplate - .replaceAll("\\{FAV_TITLE\\}", item.getTitle().trim()) - .replaceAll("\\{FAV_WEBSITE\\}", item.getLink()) - .replaceAll("\\{FAV_MEDIA\\}", item.getMedia().getDownload_url()); + .replace("{FAV_TITLE}", item.getTitle().trim()) + .replace("{FAV_WEBSITE}", item.getLink()) + .replace("{FAV_MEDIA}", item.getMedia().getDownload_url()); writer.append(favItem); } -- cgit v1.2.3 From 018a91d66ce42e31e493117467dfa8be76301f26 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 27 May 2020 11:02:41 +0200 Subject: Made PendingIntent request codes unique --- .../core/service/PlayerWidgetJobService.java | 14 +++++--------- .../core/service/playback/PlaybackService.java | 20 ++++++++++++-------- .../playback/PlaybackServiceNotificationBuilder.java | 4 ++-- .../de/danoeh/antennapod/core/sync/SyncService.java | 4 ++-- 4 files changed, 21 insertions(+), 21 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java index 4562f1393..f39ac0df8 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java @@ -103,12 +103,8 @@ public class PlayerWidgetJobService extends SafeJobIntentService { AppWidgetManager manager = AppWidgetManager.getInstance(this); int[] widgetIds = manager.getAppWidgetIds(playerWidget); RemoteViews views = new RemoteViews(getPackageName(), R.layout.player_widget); - PendingIntent startMediaplayer = PendingIntent.getActivity(this, 0, - PlaybackService.getPlayerActivityIntent(this), 0); - - final PendingIntent startAppPending = PendingIntent.getActivity(this, 0, - PlaybackService.getPlayerActivityIntent(this), - PendingIntent.FLAG_UPDATE_CURRENT); + final PendingIntent startMediaPlayer = PendingIntent.getActivity(this, R.id.pending_intent_player_activity, + PlaybackService.getPlayerActivityIntent(this), PendingIntent.FLAG_UPDATE_CURRENT); boolean nothingPlaying = false; Playable media; @@ -122,7 +118,7 @@ public class PlayerWidgetJobService extends SafeJobIntentService { } if (media != null) { - views.setOnClickPendingIntent(R.id.layout_left, startMediaplayer); + views.setOnClickPendingIntent(R.id.layout_left, startMediaPlayer); try { Bitmap icon = null; @@ -170,8 +166,8 @@ public class PlayerWidgetJobService extends SafeJobIntentService { if (nothingPlaying) { // start the app if they click anything - views.setOnClickPendingIntent(R.id.layout_left, startAppPending); - views.setOnClickPendingIntent(R.id.butPlay, startAppPending); + views.setOnClickPendingIntent(R.id.layout_left, startMediaPlayer); + views.setOnClickPendingIntent(R.id.butPlay, startMediaPlayer); views.setViewVisibility(R.id.txtvProgress, View.GONE); views.setViewVisibility(R.id.txtvTitle, View.GONE); views.setViewVisibility(R.id.txtNoPlaying, View.VISIBLE); 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 33a2a72ff..f25b0a5a8 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 @@ -542,9 +542,11 @@ public class PlaybackService extends MediaBrowserServiceCompat { intentAllowThisTime.putExtra(EXTRA_ALLOW_STREAM_THIS_TIME, true); PendingIntent pendingIntentAllowThisTime; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - pendingIntentAllowThisTime = PendingIntent.getForegroundService(this, 0, intentAllowThisTime, PendingIntent.FLAG_UPDATE_CURRENT); + pendingIntentAllowThisTime = PendingIntent.getForegroundService(this, + R.id.pending_intent_allow_stream_this_time, intentAllowThisTime, PendingIntent.FLAG_UPDATE_CURRENT); } else { - pendingIntentAllowThisTime = PendingIntent.getService(this, 0, intentAllowThisTime, PendingIntent.FLAG_UPDATE_CURRENT); + pendingIntentAllowThisTime = PendingIntent.getService(this, + R.id.pending_intent_allow_stream_this_time, intentAllowThisTime, PendingIntent.FLAG_UPDATE_CURRENT); } Intent intentAlwaysAllow = new Intent(intentAllowThisTime); @@ -552,12 +554,15 @@ public class PlaybackService extends MediaBrowserServiceCompat { intentAlwaysAllow.putExtra(EXTRA_ALLOW_STREAM_ALWAYS, true); PendingIntent pendingIntentAlwaysAllow; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - pendingIntentAlwaysAllow = PendingIntent.getForegroundService(this, 0, intentAlwaysAllow, PendingIntent.FLAG_UPDATE_CURRENT); + pendingIntentAlwaysAllow = PendingIntent.getForegroundService(this, + R.id.pending_intent_allow_stream_always, intentAlwaysAllow, PendingIntent.FLAG_UPDATE_CURRENT); } else { - pendingIntentAlwaysAllow = PendingIntent.getService(this, 0, intentAlwaysAllow, PendingIntent.FLAG_UPDATE_CURRENT); + pendingIntentAlwaysAllow = PendingIntent.getService(this, + R.id.pending_intent_allow_stream_always, intentAlwaysAllow, PendingIntent.FLAG_UPDATE_CURRENT); } - NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NotificationUtils.CHANNEL_ID_USER_ACTION) + NotificationCompat.Builder builder = new NotificationCompat.Builder(this, + NotificationUtils.CHANNEL_ID_USER_ACTION) .setSmallIcon(R.drawable.ic_stream_white) .setContentTitle(getString(R.string.confirm_mobile_streaming_notification_title)) .setContentText(getString(R.string.confirm_mobile_streaming_notification_message)) @@ -1238,9 +1243,8 @@ public class PlaybackService extends MediaBrowserServiceCompat { } } if (!Thread.currentThread().isInterrupted() && stateManager.hasReceivedValidStartCommand()) { - mediaSession.setSessionActivity(PendingIntent.getActivity(this, 0, - PlaybackService.getPlayerActivityIntent(this), - PendingIntent.FLAG_UPDATE_CURRENT)); + mediaSession.setSessionActivity(PendingIntent.getActivity(this, R.id.pending_intent_player_activity, + PlaybackService.getPlayerActivityIntent(this), PendingIntent.FLAG_UPDATE_CURRENT)); try { mediaSession.setMetadata(builder.build()); } catch (OutOfMemoryError e) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java index 174b43846..915e77f6c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java @@ -146,8 +146,8 @@ public class PlaybackServiceNotificationBuilder { } private PendingIntent getPlayerActivityPendingIntent() { - return PendingIntent.getActivity(context, 0, PlaybackService.getPlayerActivityIntent(context), - PendingIntent.FLAG_UPDATE_CURRENT); + return PendingIntent.getActivity(context, R.id.pending_intent_player_activity, + PlaybackService.getPlayerActivityIntent(context), PendingIntent.FLAG_UPDATE_CURRENT); } private void addActions(NotificationCompat.Builder notification, MediaSessionCompat.Token mediaSessionToken, diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java index 6985e4421..4c89ebc19 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java @@ -488,8 +488,8 @@ public class SyncService extends Worker { Intent intent = getApplicationContext().getPackageManager().getLaunchIntentForPackage( getApplicationContext().getPackageName()); - PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), + R.id.pending_intent_sync_error, intent, PendingIntent.FLAG_UPDATE_CURRENT); Notification notification = new NotificationCompat.Builder(getApplicationContext(), NotificationUtils.CHANNEL_ID_ERROR) .setContentTitle(getApplicationContext().getString(R.string.gpodnetsync_error_title)) -- cgit v1.2.3 From 31404f72cf972c303c4ea7e0c8ca5aa58dc87d49 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 27 May 2020 11:11:31 +0200 Subject: Made notification IDs unique --- .../core/service/download/DownloadService.java | 13 ++++++------ .../download/DownloadServiceNotification.java | 6 ++---- .../core/service/playback/PlaybackService.java | 23 ++++++++++------------ 3 files changed, 18 insertions(+), 24 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 28523ef0a..ba7019fd9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -17,6 +17,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.sync.SyncService; import org.apache.commons.io.FileUtils; import org.greenrobot.eventbus.EventBus; @@ -87,8 +88,6 @@ public class DownloadService extends Service { public static final String EXTRA_CLEANUP_MEDIA = "cleanupMedia"; - public static final int NOTIFICATION_ID = 2; - /** * Contains all completed downloads that have not been included in the report yet. */ @@ -165,7 +164,7 @@ public class DownloadService extends Service { if (intent != null && intent.getParcelableArrayListExtra(EXTRA_REQUESTS) != null) { Notification notification = notificationManager.updateNotifications( requester.getNumberOfDownloads(), downloads); - startForeground(NOTIFICATION_ID, notification); + startForeground(R.id.notification_downloading, notification); syncExecutor.execute(() -> onDownloadQueued(intent)); } else if (numberOfDownloads.get() == 0) { stopSelf(); @@ -191,7 +190,7 @@ public class DownloadService extends Service { Notification notification = notificationManager.updateNotifications( requester.getNumberOfDownloads(), downloads); - startForeground(NOTIFICATION_ID, notification); + startForeground(R.id.notification_downloading, notification); } @Override @@ -229,7 +228,7 @@ public class DownloadService extends Service { stopForeground(true); NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - nm.cancel(NOTIFICATION_ID); + nm.cancel(R.id.notification_downloading); // if this was the initial gpodder sync, i.e. we just synced the feeds successfully, // it is now time to sync the episode actions @@ -566,7 +565,7 @@ public class DownloadService extends Service { setupNotificationUpdater(); Notification notification = notificationManager.updateNotifications( requester.getNumberOfDownloads(), downloads); - startForeground(NOTIFICATION_ID, notification); + startForeground(R.id.notification_downloading, notification); } } @@ -642,7 +641,7 @@ public class DownloadService extends Service { Notification n = notificationManager.updateNotifications(requester.getNumberOfDownloads(), downloads); if (n != null) { NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify(NOTIFICATION_ID, n); + nm.notify(R.id.notification_downloading, n); } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java index f487193f3..64666d25d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceNotification.java @@ -17,8 +17,6 @@ import java.util.List; public class DownloadServiceNotification { private static final String TAG = "DownloadSvcNotification"; - private static final int REPORT_ID = 3; - private static final int AUTO_REPORT_ID = 4; private final Context context; private NotificationCompat.Builder notificationCompatBuilder; @@ -147,14 +145,14 @@ public class DownloadServiceNotification { titleId = R.string.auto_download_report_title; iconId = R.drawable.ic_notification_auto_download_complete; intent = ClientConfig.downloadServiceCallbacks.getAutoDownloadReportNotificationContentIntent(context); - id = AUTO_REPORT_ID; + id = R.id.notification_auto_download_report; content = createAutoDownloadNotificationContent(reportQueue); } else { channelId = NotificationUtils.CHANNEL_ID_ERROR; titleId = R.string.download_report_title; iconId = R.drawable.ic_notification_sync_error; intent = ClientConfig.downloadServiceCallbacks.getReportNotificationContentIntent(context); - id = REPORT_ID; + id = R.id.notification_download_report; content = String.format(context.getString(R.string.download_report_content), successfulDownloads, failedDownloads); } 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 f25b0a5a8..bd17ff383 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 @@ -204,9 +204,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { */ private static volatile boolean isCasting = false; - private static final int NOTIFICATION_ID = 1; - private static final int NOTIFICATION_ID_STREAMING = 2; - private PlaybackServiceMediaPlayer mediaPlayer; private PlaybackServiceTaskManager taskManager; private PlaybackServiceFlavorHelper flavorHelper; @@ -271,7 +268,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { stateManager = new PlaybackServiceStateManager(this); notificationBuilder = new PlaybackServiceNotificationBuilder(this); - stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); + stateManager.startForeground(R.id.notification_playing, notificationBuilder.build()); registerReceiver(autoStateUpdated, new IntentFilter("com.google.android.gms.car.media.STATUS")); registerReceiver(headsetDisconnected, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); @@ -334,7 +331,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { if (notificationBuilder.getPlayerStatus() == PlayerStatus.PLAYING) { notificationBuilder.setPlayerStatus(PlayerStatus.STOPPED); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + notificationManager.notify(R.id.notification_playing, notificationBuilder.build()); } stateManager.stopForeground(!UserPreferences.isPersistNotify()); isRunning = false; @@ -450,9 +447,9 @@ public class PlaybackService extends MediaBrowserServiceCompat { super.onStartCommand(intent, flags, startId); Log.d(TAG, "OnStartCommand called"); - stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); + stateManager.startForeground(R.id.notification_playing, notificationBuilder.build()); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - notificationManager.cancel(NOTIFICATION_ID_STREAMING); + notificationManager.cancel(R.id.notification_streaming_confirmation); final int keycode = intent.getIntExtra(MediaButtonReceiver.EXTRA_KEYCODE, -1); final boolean castDisconnect = intent.getBooleanExtra(EXTRA_CAST_DISCONNECT, false); @@ -578,7 +575,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { pendingIntentAlwaysAllow) .setAutoCancel(true); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - notificationManager.notify(NOTIFICATION_ID_STREAMING, builder.build()); + notificationManager.notify(R.id.notification_streaming_confirmation, builder.build()); } /** @@ -1293,7 +1290,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + notificationManager.notify(R.id.notification_playing, notificationBuilder.build()); startForegroundIfPlaying(playerStatus); if (!notificationBuilder.isIconCached()) { @@ -1301,7 +1298,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { Log.d(TAG, "Loading notification icon"); notificationBuilder.loadIcon(); if (!Thread.currentThread().isInterrupted()) { - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + notificationManager.notify(R.id.notification_playing, notificationBuilder.build()); } }); notificationSetupThread.start(); @@ -1313,12 +1310,12 @@ public class PlaybackService extends MediaBrowserServiceCompat { if (stateManager.hasReceivedValidStartCommand()) { if (isCasting || status == PlayerStatus.PLAYING || status == PlayerStatus.PREPARING || status == PlayerStatus.SEEKING) { - stateManager.startForeground(NOTIFICATION_ID, notificationBuilder.build()); + stateManager.startForeground(R.id.notification_playing, notificationBuilder.build()); Log.d(TAG, "foreground"); } else { stateManager.stopForeground(false); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + notificationManager.notify(R.id.notification_playing, notificationBuilder.build()); } } } @@ -1721,7 +1718,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { notificationBuilder.updatePosition(getCurrentPosition(), getCurrentPlaybackSpeed()); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); + notificationManager.notify(R.id.notification_playing, notificationBuilder.build()); } skipEndingIfNecessary(); }); -- cgit v1.2.3 From 1fc7352702e4df1a67c1362d23f34b139e254936 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 27 May 2020 11:47:42 +0200 Subject: Load queue in background --- .../antennapod/core/service/playback/PlaybackService.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'core/src/main/java/de') 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 bd17ff383..3257e2eea 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 @@ -79,6 +79,7 @@ import de.danoeh.antennapod.core.util.playback.ExternalMedia; import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter; import io.reactivex.Observable; +import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import org.greenrobot.eventbus.EventBus; @@ -304,18 +305,16 @@ public class PlaybackService extends MediaBrowserServiceCompat { npe.printStackTrace(); } - List queueItems = new ArrayList<>(); - try { + Single.>create(emitter -> { + List queueItems = new ArrayList<>(); for (FeedItem feedItem : taskManager.getQueue()) { if (feedItem.getMedia() != null) { MediaDescriptionCompat mediaDescription = feedItem.getMedia().getMediaItem().getDescription(); queueItems.add(new MediaSessionCompat.QueueItem(mediaDescription, feedItem.getId())); } } - mediaSession.setQueue(queueItems); - } catch (InterruptedException e) { - e.printStackTrace(); - } + emitter.onSuccess(queueItems); + }).subscribe(queueItems -> mediaSession.setQueue(queueItems), Throwable::printStackTrace); flavorHelper.initializeMediaPlayer(PlaybackService.this); mediaSession.setActive(true); -- cgit v1.2.3 From 0b60a8acee6439d290f7d2cda5cc72f4ee7b11d4 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 27 May 2020 11:48:19 +0200 Subject: Do not show service running notification on onCreate Sometimes (Bluetooth/Android Auto), the service is created and then just bound to. That means that onStartCommand is never called. This causes a persistent notification. Just in case the notification is somehow still shown to users, modified the message to tell them how to hide it. --- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 1 - .../core/service/playback/PlaybackServiceNotificationBuilder.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'core/src/main/java/de') 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 3257e2eea..585510ef8 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 @@ -269,7 +269,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { stateManager = new PlaybackServiceStateManager(this); notificationBuilder = new PlaybackServiceNotificationBuilder(this); - stateManager.startForeground(R.id.notification_playing, notificationBuilder.build()); registerReceiver(autoStateUpdated, new IntentFilter("com.google.android.gms.car.media.STATUS")); registerReceiver(headsetDisconnected, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java index 915e77f6c..4bb88200a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java @@ -131,7 +131,7 @@ public class PlaybackServiceNotificationBuilder { } } else { notification.setContentTitle(context.getString(R.string.app_name)); - notification.setContentText("Service is running"); + notification.setContentText("Loading. If this does not go away, play any episode and contact us."); } notification.setContentIntent(getPlayerActivityPendingIntent()); -- cgit v1.2.3 From d2526dd4399289a839b792a27c1456b2ebcb2f8d Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 9 Jun 2020 22:19:03 +0200 Subject: Fixed crash when loading chapters fails --- .../core/service/playback/PlaybackServiceTaskManager.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index 17cd1b24a..afa7fcebf 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -311,12 +311,13 @@ public class PlaybackServiceTaskManager { if (media.getChapters() == null) { Completable.create(emitter -> { - media.loadChapterMarks(); - emitter.onComplete(); - }) + media.loadChapterMarks(); + emitter.onComplete(); + }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(() -> callback.onChapterLoaded(media)); + .subscribe(() -> callback.onChapterLoaded(media), + throwable -> Log.d(TAG, "Error loading chapters: " + Log.getStackTraceString(throwable))); } } -- cgit v1.2.3 From 58f931b575b8667e5bc9d9ed4b4b6c8ce8042f95 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 11 Jun 2020 23:17:06 +0200 Subject: Send play intent if service state is unknown --- .../danoeh/antennapod/core/util/playback/PlaybackController.java | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'core/src/main/java/de') 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 0b849aa1f..44f5f9b11 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 @@ -508,6 +508,13 @@ public class PlaybackController { playbackService.setStartWhenPrepared(true); playbackService.prepare(); break; + default: + new PlaybackServiceStarter(activity, media) + .startWhenPrepared(true) + .streamIfLastWasStream() + .start(); + Log.w(TAG, "Play/Pause button was pressed and PlaybackService state was unknown"); + break; } } -- cgit v1.2.3 From 4a43f5209077d306546b6935253238ada153d4d3 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 16 Jun 2020 12:44:11 +0200 Subject: Better parser errors --- .../service/download/handler/FeedParserTask.java | 22 ++++++---------------- .../antennapod/core/util/InvalidFeedException.java | 3 ++- 2 files changed, 8 insertions(+), 17 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java index 05e602db8..c50162788 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/handler/FeedParserTask.java @@ -49,10 +49,7 @@ public class FeedParserTask implements Callable { try { result = feedHandler.parseFeed(feed); Log.d(TAG, feed.getTitle() + " parsed"); - if (!checkFeedData(feed)) { - throw new InvalidFeedException(); - } - + checkFeedData(feed); } catch (SAXException | IOException | ParserConfigurationException e) { successful = false; e.printStackTrace(); @@ -95,23 +92,17 @@ public class FeedParserTask implements Callable { /** * Checks if the feed was parsed correctly. */ - private boolean checkFeedData(Feed feed) { + private void checkFeedData(Feed feed) throws InvalidFeedException { if (feed.getTitle() == null) { - Log.e(TAG, "Feed has no title."); - return false; - } - if (!hasValidFeedItems(feed)) { - Log.e(TAG, "Feed has invalid items"); - return false; + throw new InvalidFeedException("Feed has no title"); } - return true; + checkFeedItems(feed); } - private boolean hasValidFeedItems(Feed feed) { + private void checkFeedItems(Feed feed) throws InvalidFeedException { for (FeedItem item : feed.getItems()) { if (item.getTitle() == null) { - Log.e(TAG, "Item has no title"); - return false; + throw new InvalidFeedException("Item has no title: " + item); } if (item.getPubDate() == null) { Log.e(TAG, "Item has no pubDate. Using current time as pubDate"); @@ -121,7 +112,6 @@ public class FeedParserTask implements Callable { item.setPubDate(new Date()); } } - return true; } public DownloadStatus getDownloadStatus() { diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java b/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java index ebde1e412..a45136432 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/InvalidFeedException.java @@ -6,6 +6,7 @@ package de.danoeh.antennapod.core.util; public class InvalidFeedException extends Exception { private static final long serialVersionUID = 1L; - public InvalidFeedException() { + public InvalidFeedException(String message) { + super(message); } } -- cgit v1.2.3 From f243bcd4cce1f3af9449c74fa38f6c90f2ea9d22 Mon Sep 17 00:00:00 2001 From: bws9000 Date: Sun, 21 Jun 2020 12:52:15 +0200 Subject: Redesign filter dialog --- .../antennapod/core/feed/FeedItemFilterGroup.java | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java new file mode 100644 index 000000000..18c1c186d --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java @@ -0,0 +1,84 @@ +package de.danoeh.antennapod.core.feed; + +import de.danoeh.antennapod.core.R; + +public class FeedItemFilterGroup { + + private static boolean DEFAULT_SELECTED_STATE = false; + + private static final String NO_FILTERID = ""; + private static final int HASMEDIA_LABEL = R.string.has_media; + private static final int NOTPAUSED_LABEL = R.string.not_paused; + private static final int NOTFAVORITE_LABEL = R.string.not_favorite; + + private static final int UNPLAYED_LABEL = R.string.not_played; + private static final String UNPLAYED_FILTERID = "unplayed"; + + private static final int PLAYED_LABEL = R.string.hide_played_episodes_label; + private static final String PLAYED_FILTERID = "played"; + + private static final int PAUSED_LABEL = R.string.hide_paused_episodes_label; + private static final String PAUSED_FILTERID = "paused"; + + private static final int ISFAVORITE_LABEL = R.string.hide_is_favorite_label; + private static final String ISFAVORITE_FILTERID = "is_favorite"; + + private static final int NOMEDIA_LABEL = R.string.no_media; + private static final String NOMEDIA_FILTERID = "no_media"; + + private static final int QUEUED_LABEL = R.string.queue_label; + private static final String QUEUED_FILTERID = "queued"; + + private static final int NOTQUEUED_LABEL = R.string.not_queued_label; + private static final String NOTQUEUED_FILTERID = "not_queued"; + + private static final int NOTDOWNLOADED_LABEL = R.string.hide_downloaded_episodes_label; + private static final String NOTDOWNLOADED_FILTERID = "not_downloaded"; + + private static final int DOWNLOADED_LABEL = R.string.hide_downloaded_episodes_label; + private static final String DOWNLOADED_FILTERID = "downloaded"; + + public enum FeedItemEnum { + + PLAYED(new ItemProperties(DEFAULT_SELECTED_STATE, UNPLAYED_LABEL, UNPLAYED_FILTERID), + new ItemProperties(DEFAULT_SELECTED_STATE, PLAYED_LABEL, PLAYED_FILTERID)), + PAUSED(new ItemProperties(DEFAULT_SELECTED_STATE, NOTPAUSED_LABEL, NO_FILTERID), + new ItemProperties(DEFAULT_SELECTED_STATE, PAUSED_LABEL, PAUSED_FILTERID)), + FAVORITE(new ItemProperties(DEFAULT_SELECTED_STATE, NOTFAVORITE_LABEL, NO_FILTERID), + new ItemProperties(DEFAULT_SELECTED_STATE, ISFAVORITE_LABEL, ISFAVORITE_FILTERID)), + MEDIA(new ItemProperties(DEFAULT_SELECTED_STATE, NOMEDIA_LABEL, NOMEDIA_FILTERID), + new ItemProperties(DEFAULT_SELECTED_STATE, HASMEDIA_LABEL, NO_FILTERID)), + QUEUED(new ItemProperties(DEFAULT_SELECTED_STATE, NOTQUEUED_LABEL, NOTQUEUED_FILTERID), + new ItemProperties(DEFAULT_SELECTED_STATE, QUEUED_LABEL, QUEUED_FILTERID)), + DOWNLOADED(new ItemProperties(DEFAULT_SELECTED_STATE, NOTDOWNLOADED_LABEL, NOTDOWNLOADED_FILTERID), + new ItemProperties(DEFAULT_SELECTED_STATE, DOWNLOADED_LABEL, DOWNLOADED_FILTERID)); + + public final ItemProperties[] values; + + FeedItemEnum(ItemProperties... values) { + this.values = values; + } + + public static class ItemProperties { + + public final int displayName; + public boolean selected; + public final String filterId; + + public void setSelected(boolean value) { + this.selected = value; + } + + public boolean getSelected() { + return this.selected; + } + + public ItemProperties(boolean selected, int displayName, String filterId) { + this.selected = selected; + this.displayName = displayName; + this.filterId = filterId; + } + + } + } +} -- cgit v1.2.3 From 7de9e0d4c1807bff054c1aef999fc600088ab521 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 21 Jun 2020 12:49:02 +0200 Subject: Using state lists for colors --- .../antennapod/core/feed/FeedItemFilterGroup.java | 98 ++++++---------------- 1 file changed, 25 insertions(+), 73 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java index 18c1c186d..7a0eac2e3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java @@ -2,83 +2,35 @@ package de.danoeh.antennapod.core.feed; import de.danoeh.antennapod.core.R; -public class FeedItemFilterGroup { - - private static boolean DEFAULT_SELECTED_STATE = false; - - private static final String NO_FILTERID = ""; - private static final int HASMEDIA_LABEL = R.string.has_media; - private static final int NOTPAUSED_LABEL = R.string.not_paused; - private static final int NOTFAVORITE_LABEL = R.string.not_favorite; - - private static final int UNPLAYED_LABEL = R.string.not_played; - private static final String UNPLAYED_FILTERID = "unplayed"; - - private static final int PLAYED_LABEL = R.string.hide_played_episodes_label; - private static final String PLAYED_FILTERID = "played"; - - private static final int PAUSED_LABEL = R.string.hide_paused_episodes_label; - private static final String PAUSED_FILTERID = "paused"; - - private static final int ISFAVORITE_LABEL = R.string.hide_is_favorite_label; - private static final String ISFAVORITE_FILTERID = "is_favorite"; - - private static final int NOMEDIA_LABEL = R.string.no_media; - private static final String NOMEDIA_FILTERID = "no_media"; - - private static final int QUEUED_LABEL = R.string.queue_label; - private static final String QUEUED_FILTERID = "queued"; - - private static final int NOTQUEUED_LABEL = R.string.not_queued_label; - private static final String NOTQUEUED_FILTERID = "not_queued"; - - private static final int NOTDOWNLOADED_LABEL = R.string.hide_downloaded_episodes_label; - private static final String NOTDOWNLOADED_FILTERID = "not_downloaded"; - - private static final int DOWNLOADED_LABEL = R.string.hide_downloaded_episodes_label; - private static final String DOWNLOADED_FILTERID = "downloaded"; - - public enum FeedItemEnum { +public enum FeedItemFilterGroup { + PLAYED(new ItemProperties(R.string.hide_played_episodes_label, "played"), + new ItemProperties(R.string.not_played, "unplayed")), + PAUSED(new ItemProperties(R.string.hide_paused_episodes_label, "paused"), + new ItemProperties(R.string.not_paused, "")), + FAVORITE(new ItemProperties(R.string.hide_is_favorite_label, "is_favorite"), + new ItemProperties(R.string.not_favorite, "")), + MEDIA(new ItemProperties(R.string.has_media, ""), + new ItemProperties(R.string.no_media, "no_media")), + QUEUED(new ItemProperties(R.string.queued_label, "queued"), + new ItemProperties(R.string.not_queued_label, "not_queued")), + DOWNLOADED(new ItemProperties(R.string.hide_downloaded_episodes_label, "downloaded"), + new ItemProperties(R.string.hide_not_downloaded_episodes_label, "not_downloaded")); + + public final ItemProperties[] values; + + FeedItemFilterGroup(ItemProperties... values) { + this.values = values; + } - PLAYED(new ItemProperties(DEFAULT_SELECTED_STATE, UNPLAYED_LABEL, UNPLAYED_FILTERID), - new ItemProperties(DEFAULT_SELECTED_STATE, PLAYED_LABEL, PLAYED_FILTERID)), - PAUSED(new ItemProperties(DEFAULT_SELECTED_STATE, NOTPAUSED_LABEL, NO_FILTERID), - new ItemProperties(DEFAULT_SELECTED_STATE, PAUSED_LABEL, PAUSED_FILTERID)), - FAVORITE(new ItemProperties(DEFAULT_SELECTED_STATE, NOTFAVORITE_LABEL, NO_FILTERID), - new ItemProperties(DEFAULT_SELECTED_STATE, ISFAVORITE_LABEL, ISFAVORITE_FILTERID)), - MEDIA(new ItemProperties(DEFAULT_SELECTED_STATE, NOMEDIA_LABEL, NOMEDIA_FILTERID), - new ItemProperties(DEFAULT_SELECTED_STATE, HASMEDIA_LABEL, NO_FILTERID)), - QUEUED(new ItemProperties(DEFAULT_SELECTED_STATE, NOTQUEUED_LABEL, NOTQUEUED_FILTERID), - new ItemProperties(DEFAULT_SELECTED_STATE, QUEUED_LABEL, QUEUED_FILTERID)), - DOWNLOADED(new ItemProperties(DEFAULT_SELECTED_STATE, NOTDOWNLOADED_LABEL, NOTDOWNLOADED_FILTERID), - new ItemProperties(DEFAULT_SELECTED_STATE, DOWNLOADED_LABEL, DOWNLOADED_FILTERID)); + public static class ItemProperties { - public final ItemProperties[] values; + public final int displayName; + public final String filterId; - FeedItemEnum(ItemProperties... values) { - this.values = values; + public ItemProperties(int displayName, String filterId) { + this.displayName = displayName; + this.filterId = filterId; } - public static class ItemProperties { - - public final int displayName; - public boolean selected; - public final String filterId; - - public void setSelected(boolean value) { - this.selected = value; - } - - public boolean getSelected() { - return this.selected; - } - - public ItemProperties(boolean selected, int displayName, String filterId) { - this.selected = selected; - this.displayName = displayName; - this.filterId = filterId; - } - - } } } -- cgit v1.2.3 From 64b9fcd18a0146048b92d2c93f4ed6174a96db36 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 24 Jun 2020 22:37:41 +0200 Subject: Trimming Atom content (except GUID) --- .../antennapod/core/syndication/namespace/atom/NSAtom.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java index 7aa5a90e7..7e4350fd4 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/NSAtom.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.core.syndication.namespace.atom; import android.text.TextUtils; import android.util.Log; +import de.danoeh.antennapod.core.syndication.util.SyndStringUtils; import org.xml.sax.Attributes; import de.danoeh.antennapod.core.feed.FeedItem; @@ -163,12 +164,13 @@ public class NSAtom extends Namespace { if (state.getTagstack().size() >= 2) { AtomText textElement = null; - String content; + String contentRaw; if (state.getContentBuf() != null) { - content = state.getContentBuf().toString(); + contentRaw = state.getContentBuf().toString(); } else { - content = ""; + contentRaw = ""; } + String content = SyndStringUtils.trimAllWhitespace(contentRaw); SyndElement topElement = state.getTagstack().peek(); String top = topElement.getName(); SyndElement secondElement = state.getSecondTag(); @@ -181,9 +183,9 @@ public class NSAtom extends Namespace { if (ID.equals(top)) { if (FEED.equals(second) && state.getFeed() != null) { - state.getFeed().setFeedIdentifier(content); + state.getFeed().setFeedIdentifier(contentRaw); } else if (ENTRY.equals(second) && state.getCurrentItem() != null) { - state.getCurrentItem().setItemIdentifier(content); + state.getCurrentItem().setItemIdentifier(contentRaw); } } else if (TITLE.equals(top) && textElement != null) { if (FEED.equals(second) && state.getFeed() != null) { -- cgit v1.2.3 From b36078b8f198d166c31863558198510cf574e656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20V=C3=A1zquez?= Date: Fri, 26 Jun 2020 16:38:08 -0500 Subject: adding shared preferences to ShareEpisodeDialog --- .../java/de/danoeh/antennapod/core/preferences/UserPreferences.java | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 876251563..8c80ff61d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -112,6 +112,11 @@ public class UserPreferences { public static final String PREF_IMAGE_CACHE_SIZE = "prefImageCacheSize"; public static final String PREF_DELETE_REMOVES_FROM_QUEUE = "prefDeleteRemovesFromQueue"; + // Dialogs + public static final String PREF_SHARE_EPISODE_WEBSITE = "prefShareEpisodeWebsite"; + public static final String PREF_SHARE_EPISODE_MEDIA = "prefShareEpisodeMedia"; + public static final String PREF_SHARE_EPISODE_START_AT = "prefShareEpisodeStartAt"; + // Mediaplayer public static final String PREF_MEDIA_PLAYER = "prefMediaPlayer"; public static final String PREF_MEDIA_PLAYER_EXOPLAYER = "exoplayer"; -- cgit v1.2.3 From a4ce162491cb93535ee1a03d526c8d1228d58fd2 Mon Sep 17 00:00:00 2001 From: bws9000 Date: Sat, 27 Jun 2020 10:24:26 -0400 Subject: Redesign filter dialog --- .../java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java index 7a0eac2e3..45f22ef00 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java @@ -6,10 +6,10 @@ public enum FeedItemFilterGroup { PLAYED(new ItemProperties(R.string.hide_played_episodes_label, "played"), new ItemProperties(R.string.not_played, "unplayed")), PAUSED(new ItemProperties(R.string.hide_paused_episodes_label, "paused"), - new ItemProperties(R.string.not_paused, "")), + new ItemProperties(R.string.not_paused, "_no_id_not_paused")), FAVORITE(new ItemProperties(R.string.hide_is_favorite_label, "is_favorite"), - new ItemProperties(R.string.not_favorite, "")), - MEDIA(new ItemProperties(R.string.has_media, ""), + new ItemProperties(R.string.not_favorite, "_no_id_not_favorite")), + MEDIA(new ItemProperties(R.string.has_media, "_no_id_no_media"), new ItemProperties(R.string.no_media, "no_media")), QUEUED(new ItemProperties(R.string.queued_label, "queued"), new ItemProperties(R.string.not_queued_label, "not_queued")), -- cgit v1.2.3 From 61df26aacdd053fb849fdfea4f8a00a035adf90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20V=C3=A1zquez?= Date: Sun, 28 Jun 2020 16:49:49 -0500 Subject: updating ShareDialog according to code review --- .../java/de/danoeh/antennapod/core/preferences/UserPreferences.java | 5 ----- 1 file changed, 5 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 8c80ff61d..876251563 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -112,11 +112,6 @@ public class UserPreferences { public static final String PREF_IMAGE_CACHE_SIZE = "prefImageCacheSize"; public static final String PREF_DELETE_REMOVES_FROM_QUEUE = "prefDeleteRemovesFromQueue"; - // Dialogs - public static final String PREF_SHARE_EPISODE_WEBSITE = "prefShareEpisodeWebsite"; - public static final String PREF_SHARE_EPISODE_MEDIA = "prefShareEpisodeMedia"; - public static final String PREF_SHARE_EPISODE_START_AT = "prefShareEpisodeStartAt"; - // Mediaplayer public static final String PREF_MEDIA_PLAYER = "prefMediaPlayer"; public static final String PREF_MEDIA_PLAYER_EXOPLAYER = "exoplayer"; -- cgit v1.2.3 From fecc65c80387b174c655d783e60e8deddd848286 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 1 Jul 2020 09:51:34 +0200 Subject: Fixed file not found exception after database import --- .../main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index 6f9e6b056..f10dde65f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -274,7 +274,7 @@ public class DownloadRequester implements DownloadStateProvider { } File dest; - if (feedmedia.getFile_url() != null) { + if (feedmedia.getFile_url() != null && new File(feedmedia.getFile_url()).exists()) { dest = new File(feedmedia.getFile_url()); } else { dest = new File(getMediafilePath(feedmedia), getMediafilename(feedmedia)); -- cgit v1.2.3 From e52517722d59bf1f306cfaa3ca4dc838dd5e4d99 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 1 Jul 2020 10:17:04 +0200 Subject: Do not cache feeds This speeds up feed refresh but it is confusing to users if new episodes do not appear instantly. --- .../de/danoeh/antennapod/core/service/download/HttpDownloader.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java index 54b8d321a..e65e6fe26 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java @@ -65,11 +65,12 @@ public class HttpDownloader extends Downloader { final URI uri = URIUtil.getURIFromRequestUrl(request.getSource()); Request.Builder httpReq = new Request.Builder().url(uri.toURL()); httpReq.tag(request); + httpReq.cacheControl(new CacheControl.Builder().noStore().build()); + if (request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { // set header explicitly so that okhttp doesn't do transparent gzip Log.d(TAG, "addHeader(\"Accept-Encoding\", \"identity\")"); httpReq.addHeader("Accept-Encoding", "identity"); - httpReq.cacheControl(new CacheControl.Builder().noStore().build()); } if (!TextUtils.isEmpty(request.getLastModified())) { -- cgit v1.2.3 From dbbe614c33e583cef14bb109c3d2666e0eeb535a Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 1 Jul 2020 15:57:52 +0200 Subject: Set user-agent for file playback --- .../main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java index 4b3ffa389..aec53da4c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/AudioPlayer.java @@ -6,6 +6,7 @@ import android.preference.PreferenceManager; import android.util.Log; import android.view.SurfaceHolder; +import de.danoeh.antennapod.core.ClientConfig; import org.antennapod.audio.MediaPlayer; import de.danoeh.antennapod.core.preferences.UserPreferences; @@ -17,7 +18,7 @@ public class AudioPlayer extends MediaPlayer implements IPlayer { private static final String TAG = "AudioPlayer"; public AudioPlayer(Context context) { - super(context); + super(context, true, ClientConfig.USER_AGENT); PreferenceManager.getDefaultSharedPreferences(context) .registerOnSharedPreferenceChangeListener((sharedPreferences, key) -> { if (key.equals(UserPreferences.PREF_MEDIA_PLAYER)) { -- cgit v1.2.3 From b0d73c89857c19d519784ad3c274c92d9cd92417 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 1 Jul 2020 16:03:18 +0200 Subject: Set user-agent for chapter loading --- .../java/de/danoeh/antennapod/core/util/ChapterUtils.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java index b75887154..737f902b7 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/ChapterUtils.java @@ -4,7 +4,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.util.Log; +import java.net.URLConnection; import java.util.zip.CheckedOutputStream; + +import de.danoeh.antennapod.core.ClientConfig; import org.apache.commons.io.IOUtils; import java.io.BufferedInputStream; @@ -80,7 +83,9 @@ public class ChapterUtils { CountingInputStream in = null; try { URL url = new URL(p.getStreamUrl()); - in = new CountingInputStream(url.openStream()); + URLConnection urlConnection = url.openConnection(); + urlConnection.setRequestProperty("User-Agent", ClientConfig.USER_AGENT); + in = new CountingInputStream(urlConnection.getInputStream()); List chapters = readChaptersFrom(in); if (!chapters.isEmpty()) { p.setChapters(chapters); @@ -149,7 +154,9 @@ public class ChapterUtils { InputStream input = null; try { URL url = new URL(media.getStreamUrl()); - input = url.openStream(); + URLConnection urlConnection = url.openConnection(); + urlConnection.setRequestProperty("User-Agent", ClientConfig.USER_AGENT); + input = urlConnection.getInputStream(); if (input != null) { readOggChaptersFromInputStream(media, input); } -- cgit v1.2.3 From f4677c0d9a7812b7c6e0c3f473bd8f50e7c03901 Mon Sep 17 00:00:00 2001 From: bws9000 Date: Thu, 2 Jul 2020 20:34:11 -0400 Subject: Redesign filter dialog --- .../antennapod/core/feed/FeedItemFilter.java | 28 ++++++++++++++++++---- .../antennapod/core/feed/FeedItemFilterGroup.java | 6 ++--- 2 files changed, 26 insertions(+), 8 deletions(-) (limited to 'core/src/main/java/de') 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 719383d23..d9bfd846a 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 @@ -1,8 +1,10 @@ package de.danoeh.antennapod.core.feed; import android.text.TextUtils; +import android.util.Log; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import de.danoeh.antennapod.core.storage.DBReader; @@ -11,17 +13,21 @@ import de.danoeh.antennapod.core.util.LongList; import static de.danoeh.antennapod.core.feed.FeedItem.TAG_FAVORITE; public class FeedItemFilter { + private final String[] mProperties; private boolean showPlayed = false; private boolean showUnplayed = false; private boolean showPaused = false; + private boolean showNotPaused = false; private boolean showQueued = false; private boolean showNotQueued = false; private boolean showDownloaded = false; private boolean showNotDownloaded = false; private boolean showHasMedia = false; + private boolean showNoMedia = false; private boolean showIsFavorite = false; + private boolean showNotFavorite = false; public FeedItemFilter(String properties) { this(TextUtils.split(properties, ",")); @@ -29,14 +35,17 @@ public class FeedItemFilter { public FeedItemFilter(String[] properties) { this.mProperties = properties; - for(String property : properties) { + Log.d("***xxx***", Arrays.toString(properties)); + for (String property : properties) { // see R.arrays.feed_filter_values - switch(property) { + switch ("" + property) { case "unplayed": showUnplayed = true; break; case "paused": showPaused = true; + case "not_paused": + showNotPaused = true; break; case "played": showPlayed = true; @@ -55,10 +64,14 @@ public class FeedItemFilter { break; case "has_media": showHasMedia = true; + case "no_media": + showNoMedia = true; break; case "is_favorite": showIsFavorite = true; break; + case "not_favorite": + showNotFavorite = true; } } } @@ -67,7 +80,7 @@ public class FeedItemFilter { * Run a list of feed items through the filter. */ public List filter(List items) { - if(mProperties.length == 0) return items; + if (mProperties.length == 0) return items; List result = new ArrayList<>(); @@ -77,12 +90,15 @@ public class FeedItemFilter { if (showQueued && showNotQueued) return result; if (showDownloaded && showNotDownloaded) return result; - final LongList queuedIds = DBReader.getQueueIDList(); - for(FeedItem item : items) { + final LongList queuedIds = DBReader.getQueueIDList(); + for (FeedItem item : items) { // If the item does not meet a requirement, skip it. + if (showPlayed && !item.isPlayed()) continue; if (showUnplayed && item.isPlayed()) continue; + if (showPaused && item.getState() != FeedItem.State.IN_PROGRESS) continue; + if (showNotPaused && item.getState() == FeedItem.State.IN_PROGRESS) continue; boolean queued = queuedIds.contains(item.getId()); if (showQueued && !queued) continue; @@ -93,8 +109,10 @@ public class FeedItemFilter { if (showNotDownloaded && downloaded) continue; if (showHasMedia && !item.hasMedia()) continue; + if (showNoMedia && item.hasMedia()) continue; if (showIsFavorite && !item.isTagged(TAG_FAVORITE)) continue; + if (showNotFavorite && item.isTagged(TAG_FAVORITE)) continue; // If the item reaches here, it meets all criteria result.add(item); diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java index 45f22ef00..fcbe2e4ab 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilterGroup.java @@ -6,10 +6,10 @@ public enum FeedItemFilterGroup { PLAYED(new ItemProperties(R.string.hide_played_episodes_label, "played"), new ItemProperties(R.string.not_played, "unplayed")), PAUSED(new ItemProperties(R.string.hide_paused_episodes_label, "paused"), - new ItemProperties(R.string.not_paused, "_no_id_not_paused")), + new ItemProperties(R.string.not_paused, "not_paused")), FAVORITE(new ItemProperties(R.string.hide_is_favorite_label, "is_favorite"), - new ItemProperties(R.string.not_favorite, "_no_id_not_favorite")), - MEDIA(new ItemProperties(R.string.has_media, "_no_id_no_media"), + new ItemProperties(R.string.not_favorite, "not_favorite")), + MEDIA(new ItemProperties(R.string.has_media, "has_media"), new ItemProperties(R.string.no_media, "no_media")), QUEUED(new ItemProperties(R.string.queued_label, "queued"), new ItemProperties(R.string.not_queued_label, "not_queued")), -- cgit v1.2.3 From 70aa6b1f6d8a409fd68b81d71b7a5d32575f3e99 Mon Sep 17 00:00:00 2001 From: bws9000 Date: Thu, 2 Jul 2020 20:50:11 -0400 Subject: Redesign filter dialog --- core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilter.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'core/src/main/java/de') 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 d9bfd846a..e36764454 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 @@ -44,6 +44,7 @@ public class FeedItemFilter { break; case "paused": showPaused = true; + break; case "not_paused": showNotPaused = true; break; @@ -64,6 +65,7 @@ public class FeedItemFilter { break; case "has_media": showHasMedia = true; + break; case "no_media": showNoMedia = true; break; -- cgit v1.2.3 From e221602f8fbf4c135ac4cf1b50977559b06d470b Mon Sep 17 00:00:00 2001 From: bws9000 Date: Thu, 2 Jul 2020 21:02:04 -0400 Subject: Redesign filter dialog --- core/src/main/java/de/danoeh/antennapod/core/feed/FeedItemFilter.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'core/src/main/java/de') 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 e36764454..7c707da38 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 @@ -74,6 +74,9 @@ public class FeedItemFilter { break; case "not_favorite": showNotFavorite = true; + break; + default: + return; } } } -- cgit v1.2.3 From fb992ce6d1c4d6a2915043b9f97ff9b4307c058e Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 3 Jul 2020 18:16:59 +0200 Subject: Stripping accents before generating file name --- .../src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java index 220a783f3..2a387b7b0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java @@ -4,6 +4,7 @@ import android.text.TextUtils; import androidx.annotation.VisibleForTesting; import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; @@ -29,6 +30,7 @@ public class FileNameGenerator { * characters of the given string. */ public static String generateFileName(String string) { + string = StringUtils.stripAccents(string); StringBuilder buf = new StringBuilder(); for (int i = 0; i < string.length(); i++) { char c = string.charAt(i); -- cgit v1.2.3 From 2ce23f6868a1205996955f7cbbbb004246ebf9b1 Mon Sep 17 00:00:00 2001 From: bws9000 Date: Tue, 7 Jul 2020 10:55:56 -0400 Subject: Redesign filter dialog --- .../main/java/de/danoeh/antennapod/core/feed/FeedItemFilter.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'core/src/main/java/de') 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 7c707da38..d34e23506 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 @@ -35,10 +35,9 @@ public class FeedItemFilter { public FeedItemFilter(String[] properties) { this.mProperties = properties; - Log.d("***xxx***", Arrays.toString(properties)); for (String property : properties) { // see R.arrays.feed_filter_values - switch ("" + property) { + switch (property) { case "unplayed": showUnplayed = true; break; @@ -76,7 +75,7 @@ public class FeedItemFilter { showNotFavorite = true; break; default: - return; + break; } } } @@ -85,7 +84,7 @@ public class FeedItemFilter { * Run a list of feed items through the filter. */ public List filter(List items) { - if (mProperties.length == 0) return items; + if(mProperties.length == 0) return items; List result = new ArrayList<>(); -- cgit v1.2.3 From df19ca27410f35e65b51a7648ff64212499a2aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerardo=20V=C3=A1zquez?= Date: Fri, 10 Jul 2020 00:57:18 -0500 Subject: updates for share dialog and implementing new instance pattern --- core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 20ed402fc..60ebe6965 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -7,6 +7,7 @@ import android.text.TextUtils; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -24,7 +25,7 @@ import de.danoeh.antennapod.core.util.ShownotesProvider; * * @author daniel */ -public class FeedItem extends FeedComponent implements ShownotesProvider, ImageResource { +public class FeedItem extends FeedComponent implements ShownotesProvider, ImageResource, Serializable { /** tag that indicates this item is in the queue */ public static final String TAG_QUEUE = "Queue"; -- cgit v1.2.3 From 14b93bb8bf22d5b271c0fe2b57f04296ded174f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marlin=20S=C3=B6=C3=B6se?= <30473690+msoose@users.noreply.github.com> Date: Sat, 11 Jul 2020 08:41:08 -0600 Subject: Add seekbar to Android 10 notifications Adds a seekbar which is scrubbable for the media player notification in Android 10 --- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'core/src/main/java/de') 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 585510ef8..08480fddb 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 @@ -1158,7 +1158,8 @@ public class PlaybackService extends MediaBrowserServiceCompat { long capabilities = PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_REWIND | PlaybackStateCompat.ACTION_FAST_FORWARD - | PlaybackStateCompat.ACTION_SKIP_TO_NEXT; + | PlaybackStateCompat.ACTION_SKIP_TO_NEXT + | PlaybackStateCompat.ACTION_SEEK_TO; if (useSkipToPreviousForRewindInLockscreen()) { // Workaround to fool Android so that Lockscreen will expose a skip-to-previous button, -- cgit v1.2.3 From cbea32684652c8b1f4b3302056ce476f383d1de1 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Sat, 11 Jul 2020 19:11:18 -0400 Subject: Extract common parts --- .../core/service/playback/PlaybackServiceNotificationBuilder.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java index 4bb88200a..3239f3378 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceNotificationBuilder.java @@ -183,15 +183,14 @@ public class PlaybackServiceNotificationBuilder { notification.addAction(R.drawable.ic_notification_pause, //pause action context.getString(R.string.pause_label), pauseButtonPendingIntent); - compactActionList.add(numActions++); } else { PendingIntent playButtonPendingIntent = getPendingIntentForMediaAction( KeyEvent.KEYCODE_MEDIA_PLAY, numActions); notification.addAction(R.drawable.ic_notification_play, //play action context.getString(R.string.play_label), playButtonPendingIntent); - compactActionList.add(numActions++); } + compactActionList.add(numActions++); // ff follows play, then we have skip (if it's present) PendingIntent ffButtonPendingIntent = getPendingIntentForMediaAction( -- cgit v1.2.3 From 4857892b05e372073ceba1b51fe0fce62dab3c60 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:34:23 -0400 Subject: Convert wrapper types to primitives --- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'core/src/main/java/de') 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 08480fddb..fd894796b 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 @@ -419,7 +419,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { e.printStackTrace(); } } else if (parentId.startsWith("FeedId:")) { - Long feedId = Long.parseLong(parentId.split(":")[1]); + long feedId = Long.parseLong(parentId.split(":")[1]); List feedItems = DBReader.getFeedItemList(DBReader.getFeed(feedId)); for (FeedItem feedItem : feedItems) { if (feedItem.getMedia() != null && feedItem.getMedia().getMediaItem() != null) { -- cgit v1.2.3 From fa30bc5447498d928a2ec3508ef93f2bb7c4821e Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:38:53 -0400 Subject: Convert try finally into try with resources --- .../danoeh/antennapod/core/storage/DBReader.java | 133 +++------------------ 1 file changed, 18 insertions(+), 115 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index c30f46315..4ec9cce63 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -72,19 +72,13 @@ public final class DBReader { @NonNull private static List getFeedList(PodDBAdapter adapter) { - Cursor cursor = null; - try { - cursor = adapter.getAllFeedsCursor(); + try (Cursor cursor = adapter.getAllFeedsCursor()) { List feeds = new ArrayList<>(cursor.getCount()); while (cursor.moveToNext()) { Feed feed = extractFeedFromCursorRow(cursor); feeds.add(feed); } return feeds; - } finally { - if (cursor != null) { - cursor.close(); - } } } @@ -96,18 +90,13 @@ public final class DBReader { public static List getFeedListDownloadUrls() { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getFeedCursorDownloadUrls(); + try (Cursor cursor = adapter.getFeedCursorDownloadUrls()) { List result = new ArrayList<>(cursor.getCount()); while (cursor.moveToNext()) { result.add(cursor.getString(1)); } return result; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -172,9 +161,7 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getAllItemsOfFeedCursor(feed); + try (Cursor cursor = adapter.getAllItemsOfFeedCursor(feed)) { List items = extractItemlistFromCursor(adapter, cursor); Collections.sort(items, new FeedItemPubdateComparator()); for (FeedItem item : items) { @@ -182,9 +169,6 @@ public final class DBReader { } return items; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -226,16 +210,10 @@ public final class DBReader { @NonNull static List getQueue(PodDBAdapter adapter) { Log.d(TAG, "getQueue()"); - Cursor cursor = null; - try { - cursor = adapter.getQueueCursor(); + try (Cursor cursor = adapter.getQueueCursor()) { List items = extractItemlistFromCursor(adapter, cursor); loadAdditionalFeedItemListData(items); return items; - } finally { - if (cursor != null) { - cursor.close(); - } } } @@ -257,18 +235,12 @@ public final class DBReader { } private static LongList getQueueIDList(PodDBAdapter adapter) { - Cursor cursor = null; - try { - cursor = adapter.getQueueIDCursor(); + try (Cursor cursor = adapter.getQueueIDCursor()) { LongList queueIds = new LongList(cursor.getCount()); while (cursor.moveToNext()) { queueIds.add(cursor.getLong(0)); } return queueIds; - } finally { - if (cursor != null) { - cursor.close(); - } } } @@ -302,17 +274,12 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getDownloadedItemsCursor(); + try (Cursor cursor = adapter.getDownloadedItemsCursor()) { List items = extractItemlistFromCursor(adapter, cursor); loadAdditionalFeedItemListData(items); Collections.sort(items, new FeedItemPubdateComparator()); return items; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -328,16 +295,11 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getPlayedItemsCursor(); + try (Cursor cursor = adapter.getPlayedItemsCursor()) { List items = extractItemlistFromCursor(adapter, cursor); loadAdditionalFeedItemListData(items); return items; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -355,16 +317,11 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getNewItemsCursor(offset, limit); + try (Cursor cursor = adapter.getNewItemsCursor(offset, limit)) { List items = extractItemlistFromCursor(adapter, cursor); loadAdditionalFeedItemListData(items); return items; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -381,16 +338,11 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getFavoritesCursor(offset, limit); + try (Cursor cursor = adapter.getFavoritesCursor(offset, limit)) { List items = extractItemlistFromCursor(adapter, cursor); loadAdditionalFeedItemListData(items); return items; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -400,18 +352,13 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getFavoritesCursor(0, Integer.MAX_VALUE); + try (Cursor cursor = adapter.getFavoritesCursor(0, Integer.MAX_VALUE)) { LongList favoriteIDs = new LongList(cursor.getCount()); while (cursor.moveToNext()) { favoriteIDs.add(cursor.getLong(0)); } return favoriteIDs; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -428,16 +375,11 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getRecentlyPublishedItemsCursor(offset, limit); + try (Cursor cursor = adapter.getRecentlyPublishedItemsCursor(offset, limit)) { List items = extractItemlistFromCursor(adapter, cursor); loadAdditionalFeedItemListData(items); return items; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -492,9 +434,7 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getDownloadLogCursor(DOWNLOAD_LOG_SIZE); + try (Cursor cursor = adapter.getDownloadLogCursor(DOWNLOAD_LOG_SIZE)) { List downloadLog = new ArrayList<>(cursor.getCount()); while (cursor.moveToNext()) { downloadLog.add(DownloadStatus.fromCursor(cursor)); @@ -502,9 +442,6 @@ public final class DBReader { Collections.sort(downloadLog, new DownloadStatusComparator()); return downloadLog; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -521,9 +458,7 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getDownloadLog(Feed.FEEDFILETYPE_FEED, feedId); + try (Cursor cursor = adapter.getDownloadLog(Feed.FEEDFILETYPE_FEED, feedId)) { List downloadLog = new ArrayList<>(cursor.getCount()); while (cursor.moveToNext()) { downloadLog.add(DownloadStatus.fromCursor(cursor)); @@ -531,9 +466,6 @@ public final class DBReader { Collections.sort(downloadLog, new DownloadStatusComparator()); return downloadLog; } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } @@ -560,9 +492,7 @@ public final class DBReader { @Nullable static Feed getFeed(final long feedId, PodDBAdapter adapter) { Feed feed = null; - Cursor cursor = null; - try { - cursor = adapter.getFeedCursor(feedId); + try (Cursor cursor = adapter.getFeedCursor(feedId)) { if (cursor.moveToNext()) { feed = extractFeedFromCursorRow(cursor); feed.setItems(getFeedItemList(feed)); @@ -570,10 +500,6 @@ public final class DBReader { Log.e(TAG, "getFeed could not find feed with id " + feedId); } return feed; - } finally { - if (cursor != null) { - cursor.close(); - } } } @@ -582,9 +508,7 @@ public final class DBReader { Log.d(TAG, "Loading feeditem with id " + itemId); FeedItem item = null; - Cursor cursor = null; - try { - cursor = adapter.getFeedItemCursor(Long.toString(itemId)); + try (Cursor cursor = adapter.getFeedItemCursor(Long.toString(itemId))) { if (cursor.moveToNext()) { List list = extractItemlistFromCursor(adapter, cursor); if (!list.isEmpty()) { @@ -593,10 +517,6 @@ public final class DBReader { } } return item; - } finally { - if (cursor != null) { - cursor.close(); - } } } @@ -631,9 +551,7 @@ public final class DBReader { @Nullable private static FeedItem getFeedItemByUrl(final String podcastUrl, final String episodeUrl, PodDBAdapter adapter) { Log.d(TAG, "Loading feeditem with podcast url " + podcastUrl + " and episode url " + episodeUrl); - Cursor cursor = null; - try { - cursor = adapter.getFeedItemCursor(podcastUrl, episodeUrl); + try (Cursor cursor = adapter.getFeedItemCursor(podcastUrl, episodeUrl)) { if (!cursor.moveToNext()) { return null; } @@ -642,10 +560,6 @@ public final class DBReader { return list.get(0); } return null; - } finally { - if (cursor != null) { - cursor.close(); - } } } @@ -669,9 +583,7 @@ public final class DBReader { private static String getImageAuthentication(final String imageUrl, PodDBAdapter adapter) { String credentials = null; - Cursor cursor = null; - try { - cursor = adapter.getImageAuthenticationCursor(imageUrl); + try (Cursor cursor = adapter.getImageAuthenticationCursor(imageUrl)) { if (cursor.moveToFirst()) { String username = cursor.getString(0); String password = cursor.getString(1); @@ -683,10 +595,6 @@ public final class DBReader { } else { credentials = ""; } - } finally { - if (cursor != null) { - cursor.close(); - } } return credentials; } @@ -720,9 +628,7 @@ public final class DBReader { Log.d(TAG, "loadDescriptionOfFeedItem() called with: " + "item = [" + item + "]"); PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - Cursor cursor = null; - try { - cursor = adapter.getDescriptionOfItem(item); + try (Cursor cursor = adapter.getDescriptionOfItem(item)) { if (cursor.moveToFirst()) { int indexDescription = cursor.getColumnIndex(PodDBAdapter.KEY_DESCRIPTION); String description = cursor.getString(indexDescription); @@ -732,9 +638,6 @@ public final class DBReader { item.setContentEncoded(contentEncoded); } } finally { - if (cursor != null) { - cursor.close(); - } adapter.close(); } } -- cgit v1.2.3 From 002ba1753df3307861dfc1fa26abde314d6e39b8 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Sat, 11 Jul 2020 20:01:57 -0400 Subject: Fix lambdas --- .../de/danoeh/antennapod/core/util/download/AutoUpdateManager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java b/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java index 991089910..a8ca43ccb 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/download/AutoUpdateManager.java @@ -118,9 +118,8 @@ public class AutoUpdateManager { */ public static void runImmediate(@NonNull Context context) { Log.d(TAG, "Run auto update immediately in background."); - new Thread(() -> { - DBTasks.refreshAllFeeds(context.getApplicationContext(), true); - }, "ManualRefreshAllFeeds").start(); + new Thread(() -> DBTasks.refreshAllFeeds( + context.getApplicationContext(), true), "ManualRefreshAllFeeds").start(); } public static void disableAutoUpdate(Context context) { -- cgit v1.2.3 From 14064cbe6faac61ec2a79f6b9c888aeb70969a37 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:47:58 -0400 Subject: Use Long.compare in ChapterStartTimeComparator --- .../core/util/comparator/ChapterStartTimeComparator.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java index 8bd23c2ed..920a1ef8a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/comparator/ChapterStartTimeComparator.java @@ -8,13 +8,7 @@ public class ChapterStartTimeComparator implements Comparator { @Override public int compare(Chapter lhs, Chapter rhs) { - if (lhs.getStart() == rhs.getStart()) { - return 0; - } else if (lhs.getStart() < rhs.getStart()) { - return -1; - } else { - return 1; - } + return Long.compare(lhs.getStart(), rhs.getStart()); } } -- cgit v1.2.3 From 71373d055d8265bf15c48cf0d6b6130317e8eb0b Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:50:13 -0400 Subject: Replace addAlls with parametrized constructor calls --- .../danoeh/antennapod/core/service/download/AntennapodHttpClient.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index e0c23bdac..889018c45 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -154,8 +154,8 @@ public class AntennapodHttpClient { // workaround for Android 4.x for certain web sites. // see: https://github.com/square/okhttp/issues/4053#issuecomment-402579554 - List cipherSuites = new ArrayList<>(); - cipherSuites.addAll(ConnectionSpec.MODERN_TLS.cipherSuites()); + List cipherSuites = new ArrayList<>( + ConnectionSpec.MODERN_TLS.cipherSuites()); cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA); cipherSuites.add(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA); -- cgit v1.2.3 From 24f734f1b60e29d28c03f245e4db26867c2d1a64 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:53:01 -0400 Subject: Fix redundant initializers --- .../de/danoeh/antennapod/core/service/PlayerWidgetJobService.java | 2 +- .../de/danoeh/antennapod/core/service/download/HttpDownloader.java | 2 +- core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java | 2 +- .../src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java | 2 +- .../de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java | 4 ++-- .../antennapod/core/util/vorbiscommentreader/OggInputStream.java | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java index f39ac0df8..7585e9d33 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java @@ -121,7 +121,7 @@ public class PlayerWidgetJobService extends SafeJobIntentService { views.setOnClickPendingIntent(R.id.layout_left, startMediaPlayer); try { - Bitmap icon = null; + Bitmap icon; int iconSize = getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); icon = Glide.with(PlayerWidgetJobService.this) .asBitmap() diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java index 54b8d321a..96665bd51 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java @@ -189,7 +189,7 @@ public class HttpDownloader extends Downloader { } byte[] buffer = new byte[BUFFER_SIZE]; - int count = 0; + int count; request.setStatusMsg(R.string.download_running); Log.d(TAG, "Getting size of download"); request.setSize(responseBody.contentLength() + request.getSoFar()); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index 4ec9cce63..a13f03e9f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -582,7 +582,7 @@ public final class DBReader { } private static String getImageAuthentication(final String imageUrl, PodDBAdapter adapter) { - String credentials = null; + String credentials; try (Cursor cursor = adapter.getImageAuthenticationCursor(imageUrl)) { if (cursor.moveToFirst()) { String username = cursor.getString(0); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index e6d47b32a..8a3f44e18 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -1218,7 +1218,7 @@ public class PodDBAdapter { public Cursor searchItems(long feedID, String searchQuery) { String preparedQuery = prepareSearchQuery(searchQuery); - String queryFeedId = ""; + String queryFeedId; if (feedID != 0) { // search items in specific feed queryFeedId = KEY_FEED + " = " + feedID; diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java b/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java index eae7a08af..704113c57 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java @@ -519,8 +519,8 @@ public class GpodnetService implements ISyncService { private String executeRequest(@NonNull Request.Builder requestB) throws GpodnetServiceException { Request request = requestB.build(); - String responseString = null; - Response response = null; + String responseString; + Response response; ResponseBody body = null; try { diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java index cdf171299..9277af6e6 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/vorbiscommentreader/OggInputStream.java @@ -39,7 +39,7 @@ class OggInputStream extends InputStream { private void readOggPage() throws IOException { // find OggS int[] buffer = new int[4]; - int c = 0; + int c; boolean isInOggS = false; while ((c = input.read()) != -1) { switch (c) { -- cgit v1.2.3 From a17f24912f262c79d1822e3df389ab08d4cb0273 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:53:24 -0400 Subject: Remove unnecessary conditions --- core/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java | 2 +- .../de/danoeh/antennapod/core/service/download/DownloadRequest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java index 2610d253f..3edecd35c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedComponent.java @@ -50,7 +50,7 @@ public abstract class FeedComponent { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || !(o instanceof FeedComponent)) return false; + if (!(o instanceof FeedComponent)) return false; FeedComponent that = (FeedComponent) o; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java index 78c4d3f48..3f503c6b4 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadRequest.java @@ -115,7 +115,7 @@ public class DownloadRequest implements Parcelable { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || !(o instanceof DownloadRequest)) return false; + if (!(o instanceof DownloadRequest)) return false; DownloadRequest that = (DownloadRequest) o; -- cgit v1.2.3 From 37f9c08fd9d6a605bfcc393fe74a31a596671596 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:56:35 -0400 Subject: Fix duplicate branches --- .../java/de/danoeh/antennapod/core/preferences/UserPreferences.java | 4 ++-- .../de/danoeh/antennapod/core/service/playback/PlaybackService.java | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 876251563..597d88787 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -826,8 +826,8 @@ public class UserPreferences { public static VideoBackgroundBehavior getVideoBackgroundBehavior() { switch (prefs.getString(PREF_VIDEO_BEHAVIOR, "pip")) { case "stop": return VideoBackgroundBehavior.STOP; - case "pip": return VideoBackgroundBehavior.PICTURE_IN_PICTURE; case "continue": return VideoBackgroundBehavior.CONTINUE_PLAYING; + case "pip": //Deliberate fall-through default: return VideoBackgroundBehavior.PICTURE_IN_PICTURE; } } @@ -977,11 +977,11 @@ public class UserPreferences { public static BackButtonBehavior getBackButtonBehavior() { switch (prefs.getString(PREF_BACK_BUTTON_BEHAVIOR, "default")) { - case "default": return BackButtonBehavior.DEFAULT; case "drawer": return BackButtonBehavior.OPEN_DRAWER; case "doubletap": return BackButtonBehavior.DOUBLE_TAP; case "prompt": return BackButtonBehavior.SHOW_PROMPT; case "page": return BackButtonBehavior.GO_TO_PAGE; + case "default": // Deliberate fall-through default: return BackButtonBehavior.DEFAULT; } } 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 fd894796b..fbf061966 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 @@ -1140,13 +1140,11 @@ public class PlaybackService extends MediaBrowserServiceCompat { case INITIALIZING: state = PlaybackStateCompat.STATE_CONNECTING; break; - case INITIALIZED: - case INDETERMINATE: - state = PlaybackStateCompat.STATE_NONE; - break; case ERROR: state = PlaybackStateCompat.STATE_ERROR; break; + case INITIALIZED: // Deliberate fall-through + case INDETERMINATE: default: state = PlaybackStateCompat.STATE_NONE; break; -- cgit v1.2.3 From cfac6a3631bf1c25b779fa8214bc075f74b8f9eb Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:57:05 -0400 Subject: Fix manual math calculations --- core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java | 2 +- .../main/java/de/danoeh/antennapod/core/util/RewindAfterPauseUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'core/src/main/java/de') 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 7e1a5fd9b..d1c90cfa7 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 @@ -481,7 +481,7 @@ public class FeedMedia extends FeedFile implements Playable { @Override public void onPlaybackStart() { - startPosition = (position > 0) ? position : 0; + startPosition = Math.max(position, 0); playedDurationWhenStarted = played_duration; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/RewindAfterPauseUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/RewindAfterPauseUtils.java index 366f86707..813c6d0f7 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/RewindAfterPauseUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/RewindAfterPauseUtils.java @@ -39,7 +39,7 @@ public class RewindAfterPauseUtils { int newPosition = currentPosition - (int) rewindTime; - return newPosition > 0 ? newPosition : 0; + return Math.max(newPosition, 0); } else { return currentPosition; } -- cgit v1.2.3 From 03f3c10bf9adebe50848d3a9621819e77a38432a Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Fri, 29 May 2020 14:57:21 -0400 Subject: Remove unneeded return statement --- .../java/de/danoeh/antennapod/core/service/playback/ShakeListener.java | 1 - 1 file changed, 1 deletion(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java index b0b6e164d..b967577af 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/ShakeListener.java @@ -58,7 +58,6 @@ class ShakeListener implements SensorEventListener @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { - return; } } \ No newline at end of file -- cgit v1.2.3 From 663b08fc4478bceb1a80581a9c0875bde35f430b Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 12 Jul 2020 09:55:28 +0200 Subject: Install provider in any case --- .../core/service/ProviderInstallerInterceptor.java | 18 ++++++++++++++++++ .../antennapod/core/service/UserAgentInterceptor.java | 4 ---- .../core/service/download/AntennapodHttpClient.java | 2 ++ .../core/service/download/DownloadService.java | 5 +---- 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java b/core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java new file mode 100644 index 000000000..4fa1fc3d7 --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/service/ProviderInstallerInterceptor.java @@ -0,0 +1,18 @@ +package de.danoeh.antennapod.core.service; + +import androidx.annotation.NonNull; +import okhttp3.Interceptor; +import okhttp3.Response; + +import java.io.IOException; + +public class ProviderInstallerInterceptor implements Interceptor { + public static Runnable installer = () -> { }; + + @Override + @NonNull + public Response intercept(Chain chain) throws IOException { + installer.run(); + return chain.proceed(chain.request()); + } +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java b/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java index 5fcf8317d..3676347f7 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/UserAgentInterceptor.java @@ -7,10 +7,6 @@ import okhttp3.Response; import java.io.IOException; public class UserAgentInterceptor implements Interceptor { - - public UserAgentInterceptor() { - } - @Override public Response intercept(Chain chain) throws IOException { return chain.proceed(chain.request().newBuilder() diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index e0c23bdac..d0484f2a2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -32,6 +32,7 @@ import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.ProviderInstallerInterceptor; import de.danoeh.antennapod.core.service.UserAgentInterceptor; import de.danoeh.antennapod.core.storage.DBWriter; import okhttp3.Cache; @@ -116,6 +117,7 @@ public class AntennapodHttpClient { } return response; }); + builder.interceptors().add(new ProviderInstallerInterceptor()); builder.interceptors().add(new BasicAuthorizationInterceptor()); builder.networkInterceptors().add(new UserAgentInterceptor()); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index ba7019fd9..e44aa716a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -479,12 +479,9 @@ public class DownloadService extends Service { } handler.post(() -> { downloads.add(downloader); + downloadExecutor.submit(downloader); postDownloaders(); }); - // Needs to be done after postDownloaders() because otherwise, - // it might take long before the progress bar circle starts spinning - ClientConfig.installSslProvider(this); - handler.post(() -> downloadExecutor.submit(downloader)); } handler.post(this::queryDownloads); } -- cgit v1.2.3 From 24656936c70bc73443119b4e1bb492feeac6dd85 Mon Sep 17 00:00:00 2001 From: TacoTheDank Date: Mon, 13 Jul 2020 00:49:35 -0400 Subject: Fix a bunch of deprecations --- .../de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java b/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java index 704113c57..62c8ce5f3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java @@ -21,7 +21,6 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.ResponseBody; -import org.apache.commons.io.Charsets; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -34,6 +33,7 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; @@ -505,7 +505,7 @@ public class GpodnetService implements ISyncService { RequestBody requestBody = RequestBody.create(TEXT, ""); Request request = new Request.Builder().url(url).post(requestBody).build(); try { - String credential = Credentials.basic(username, password, Charsets.UTF_8); + String credential = Credentials.basic(username, password, Charset.forName("UTF-8")); Request authRequest = request.newBuilder().header("Authorization", credential).build(); Response response = httpClient.newCall(authRequest).execute(); checkStatusCode(response); -- cgit v1.2.3 From 17b9579dfea12b9b6289982e3fd4251ecf12b86d Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 20 May 2020 12:20:24 +0200 Subject: New playback speed dialog --- .../core/preferences/UserPreferences.java | 23 ++++++++++++++-------- .../core/util/playback/PlaybackController.java | 7 +++++++ 2 files changed, 22 insertions(+), 8 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 597d88787..5bfaa758b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -19,10 +19,14 @@ import org.json.JSONException; import java.io.File; import java.io.IOException; import java.net.Proxy; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -414,7 +418,7 @@ public class UserPreferences { return prefs.getBoolean(PREF_PLAYBACK_SKIP_SILENCE, false); } - public static float[] getPlaybackSpeedArray() { + public static List getPlaybackSpeedArray() { return readPlaybackSpeedArray(prefs.getString(PREF_PLAYBACK_SPEED_ARRAY, null)); } @@ -662,10 +666,13 @@ public class UserPreferences { .apply(); } - public static void setPlaybackSpeedArray(String[] speeds) { + public static void setPlaybackSpeedArray(List speeds) { + DecimalFormatSymbols format = new DecimalFormatSymbols(Locale.US); + format.setDecimalSeparator('.'); + DecimalFormat speedFormat = new DecimalFormat("0.00", format); JSONArray jsonArray = new JSONArray(); - for (String speed : speeds) { - jsonArray.put(speed); + for (float speed : speeds) { + jsonArray.put(speedFormat.format(speed)); } prefs.edit() .putString(PREF_PLAYBACK_SPEED_ARRAY, jsonArray.toString()) @@ -775,13 +782,13 @@ public class UserPreferences { } } - private static float[] readPlaybackSpeedArray(String valueFromPrefs) { + private static List readPlaybackSpeedArray(String valueFromPrefs) { if (valueFromPrefs != null) { try { JSONArray jsonArray = new JSONArray(valueFromPrefs); - float[] selectedSpeeds = new float[jsonArray.length()]; + List selectedSpeeds = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { - selectedSpeeds[i] = (float) jsonArray.getDouble(i); + selectedSpeeds.add((float) jsonArray.getDouble(i)); } return selectedSpeeds; } catch (JSONException e) { @@ -790,7 +797,7 @@ public class UserPreferences { } } // If this preference hasn't been set yet, return the default options - return new float[] { 0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f }; + return Arrays.asList(0.75f, 1.0f, 1.25f, 1.5f, 1.75f, 2.0f); } public static String getMediaPlayer() { 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 44f5f9b11..d47d26af9 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 @@ -599,6 +599,13 @@ public class PlaybackController { } public void setPlaybackSpeed(float speed) { + PlaybackPreferences.setCurrentlyPlayingTemporaryPlaybackSpeed(speed); + if (getMedia() != null && getMedia().getMediaType() == MediaType.VIDEO) { + UserPreferences.setVideoPlaybackSpeed(speed); + } else { + UserPreferences.setPlaybackSpeed(speed); + } + if (playbackService != null) { playbackService.setSpeed(speed); } else { -- cgit v1.2.3 From 9d23279f475cacc1da4a9eec183ddb8a68fbd8b6 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 20 Jul 2020 00:12:30 +0200 Subject: Accept more malformed subscribtion URIs --- core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java index e1dffef97..ac7f4848c 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/URLChecker.java @@ -41,7 +41,7 @@ public final class URLChecker { String lowerCaseUrl = url.toLowerCase(); // protocol names are case insensitive if (lowerCaseUrl.startsWith("feed://")) { if (BuildConfig.DEBUG) Log.d(TAG, "Replacing feed:// with http://"); - return url.replaceFirst("feed://", "http://"); + return prepareURL(url.substring("feed://".length())); } else if (lowerCaseUrl.startsWith("pcast://")) { if (BuildConfig.DEBUG) Log.d(TAG, "Removing pcast://"); return prepareURL(url.substring("pcast://".length())); @@ -50,7 +50,7 @@ public final class URLChecker { return prepareURL(url.substring("pcast:".length())); } else if (lowerCaseUrl.startsWith("itpc")) { if (BuildConfig.DEBUG) Log.d(TAG, "Replacing itpc:// with http://"); - return url.replaceFirst("itpc://", "http://"); + return prepareURL(url.substring("itpc://".length())); } else if (lowerCaseUrl.startsWith(AP_SUBSCRIBE)) { if (BuildConfig.DEBUG) Log.d(TAG, "Removing antennapod-subscribe://"); return prepareURL(url.substring(AP_SUBSCRIBE.length())); -- cgit v1.2.3 From ecbcafd209a4aff987dc39b5dd60121cf55b2403 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 21 Jul 2020 11:31:13 +0200 Subject: Reformatted NSMedia --- .../core/syndication/namespace/NSMedia.java | 217 ++++++++++----------- 1 file changed, 108 insertions(+), 109 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java index 638383223..825d2bc96 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java @@ -14,114 +14,113 @@ import de.danoeh.antennapod.core.syndication.util.SyndTypeUtils; /** Processes tags from the http://search.yahoo.com/mrss/ namespace. */ public class NSMedia extends Namespace { - private static final String TAG = "NSMedia"; - - public static final String NSTAG = "media"; - public static final String NSURI = "http://search.yahoo.com/mrss/"; - - private static final String CONTENT = "content"; - private static final String DOWNLOAD_URL = "url"; - private static final String SIZE = "fileSize"; - private static final String MIME_TYPE = "type"; - private static final String DURATION = "duration"; - private static final String DEFAULT = "isDefault"; - private static final String MEDIUM = "medium"; - - private static final String MEDIUM_IMAGE = "image"; - private static final String MEDIUM_AUDIO = "audio"; - private static final String MEDIUM_VIDEO = "video"; - - private static final String IMAGE = "thumbnail"; - private static final String IMAGE_URL = "url"; - - private static final String DESCRIPTION = "description"; - private static final String DESCRIPTION_TYPE = "type"; - - @Override - public SyndElement handleElementStart(String localName, HandlerState state, - Attributes attributes) { - if (CONTENT.equals(localName)) { - String url = attributes.getValue(DOWNLOAD_URL); - String type = attributes.getValue(MIME_TYPE); - String defaultStr = attributes.getValue(DEFAULT); - String medium = attributes.getValue(MEDIUM); - boolean validTypeMedia = false; - boolean validTypeImage = false; - - boolean isDefault = "true".equals(defaultStr); - - if (MEDIUM_AUDIO.equals(medium) || MEDIUM_VIDEO.equals(medium)) { - validTypeMedia = true; - } else if (MEDIUM_IMAGE.equals(medium)) { - validTypeImage = true; - } else { - if (type == null) { - type = SyndTypeUtils.getMimeTypeFromUrl(url); - } - - if (SyndTypeUtils.enclosureTypeValid(type)) { - validTypeMedia = true; - } else if (SyndTypeUtils.imageTypeValid(type)) { - validTypeImage = true; - } - } - - if (state.getCurrentItem() != null && - (state.getCurrentItem().getMedia() == null || isDefault) && - url != null && validTypeMedia) { - long size = 0; - String sizeStr = attributes.getValue(SIZE); - try { - size = Long.parseLong(sizeStr); - } catch (NumberFormatException e) { - Log.e(TAG, "Size \"" + sizeStr + "\" could not be parsed."); - } - - int durationMs = 0; - String durationStr = attributes.getValue(DURATION); - if (!TextUtils.isEmpty(durationStr)) { - try { - long duration = Long.parseLong(durationStr); - durationMs = (int) TimeUnit.MILLISECONDS.convert(duration, TimeUnit.SECONDS); - } catch (NumberFormatException e) { - Log.e(TAG, "Duration \"" + durationStr + "\" could not be parsed"); - } - } - FeedMedia media = new FeedMedia(state.getCurrentItem(), url, size, type); - if (durationMs > 0) { - media.setDuration(durationMs); - } - state.getCurrentItem().setMedia(media); - } else if (state.getCurrentItem() != null && url != null && validTypeImage) { - state.getCurrentItem().setImageUrl(url); - } - } else if (IMAGE.equals(localName)) { - String url = attributes.getValue(IMAGE_URL); - if (url != null) { - if (state.getCurrentItem() != null) { - state.getCurrentItem().setImageUrl(url); - } else { - if (state.getFeed().getImageUrl() == null) { - state.getFeed().setImageUrl(url); - } - } - } - } else if (DESCRIPTION.equals(localName)) { - String type = attributes.getValue(DESCRIPTION_TYPE); - return new AtomText(localName, this, type); - } - return new SyndElement(localName, this); - } - - @Override - public void handleElementEnd(String localName, HandlerState state) { - if (DESCRIPTION.equals(localName)) { - String content = state.getContentBuf().toString(); - if (state.getCurrentItem() != null && content != null && - state.getCurrentItem().getDescription() == null) { - state.getCurrentItem().setDescription(content); - } - } - } + private static final String TAG = "NSMedia"; + + public static final String NSTAG = "media"; + public static final String NSURI = "http://search.yahoo.com/mrss/"; + + private static final String CONTENT = "content"; + private static final String DOWNLOAD_URL = "url"; + private static final String SIZE = "fileSize"; + private static final String MIME_TYPE = "type"; + private static final String DURATION = "duration"; + private static final String DEFAULT = "isDefault"; + private static final String MEDIUM = "medium"; + + private static final String MEDIUM_IMAGE = "image"; + private static final String MEDIUM_AUDIO = "audio"; + private static final String MEDIUM_VIDEO = "video"; + + private static final String IMAGE = "thumbnail"; + private static final String IMAGE_URL = "url"; + + private static final String DESCRIPTION = "description"; + private static final String DESCRIPTION_TYPE = "type"; + + @Override + public SyndElement handleElementStart(String localName, HandlerState state, + Attributes attributes) { + if (CONTENT.equals(localName)) { + String url = attributes.getValue(DOWNLOAD_URL); + String type = attributes.getValue(MIME_TYPE); + String defaultStr = attributes.getValue(DEFAULT); + String medium = attributes.getValue(MEDIUM); + boolean validTypeMedia = false; + boolean validTypeImage = false; + + boolean isDefault = "true".equals(defaultStr); + + if (MEDIUM_AUDIO.equals(medium) || MEDIUM_VIDEO.equals(medium)) { + validTypeMedia = true; + } else if (MEDIUM_IMAGE.equals(medium)) { + validTypeImage = true; + } else { + if (type == null) { + type = SyndTypeUtils.getMimeTypeFromUrl(url); + } + + if (SyndTypeUtils.enclosureTypeValid(type)) { + validTypeMedia = true; + } else if (SyndTypeUtils.imageTypeValid(type)) { + validTypeImage = true; + } + } + + if (state.getCurrentItem() != null && (state.getCurrentItem().getMedia() == null || isDefault) + && url != null && validTypeMedia) { + long size = 0; + String sizeStr = attributes.getValue(SIZE); + try { + size = Long.parseLong(sizeStr); + } catch (NumberFormatException e) { + Log.e(TAG, "Size \"" + sizeStr + "\" could not be parsed."); + } + + int durationMs = 0; + String durationStr = attributes.getValue(DURATION); + if (!TextUtils.isEmpty(durationStr)) { + try { + long duration = Long.parseLong(durationStr); + durationMs = (int) TimeUnit.MILLISECONDS.convert(duration, TimeUnit.SECONDS); + } catch (NumberFormatException e) { + Log.e(TAG, "Duration \"" + durationStr + "\" could not be parsed"); + } + } + FeedMedia media = new FeedMedia(state.getCurrentItem(), url, size, type); + if (durationMs > 0) { + media.setDuration(durationMs); + } + state.getCurrentItem().setMedia(media); + } else if (state.getCurrentItem() != null && url != null && validTypeImage) { + state.getCurrentItem().setImageUrl(url); + } + } else if (IMAGE.equals(localName)) { + String url = attributes.getValue(IMAGE_URL); + if (url != null) { + if (state.getCurrentItem() != null) { + state.getCurrentItem().setImageUrl(url); + } else { + if (state.getFeed().getImageUrl() == null) { + state.getFeed().setImageUrl(url); + } + } + } + } else if (DESCRIPTION.equals(localName)) { + String type = attributes.getValue(DESCRIPTION_TYPE); + return new AtomText(localName, this, type); + } + return new SyndElement(localName, this); + } + + @Override + public void handleElementEnd(String localName, HandlerState state) { + if (DESCRIPTION.equals(localName)) { + String content = state.getContentBuf().toString(); + if (state.getCurrentItem() != null && content != null + && state.getCurrentItem().getDescription() == null) { + state.getCurrentItem().setDescription(content); + } + } + } } -- cgit v1.2.3 From 51bbf1a5f9275e1d1bb526c43b0703ae13b349b9 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Tue, 21 Jul 2020 11:55:44 +0200 Subject: Fixed mime type of media:content tags --- .../de/danoeh/antennapod/core/syndication/namespace/NSMedia.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java index 825d2bc96..30b01f0bc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/NSMedia.java @@ -50,10 +50,15 @@ public class NSMedia extends Namespace { boolean isDefault = "true".equals(defaultStr); - if (MEDIUM_AUDIO.equals(medium) || MEDIUM_VIDEO.equals(medium)) { + if (MEDIUM_AUDIO.equals(medium)) { validTypeMedia = true; + type = "audio/*"; + } else if (MEDIUM_VIDEO.equals(medium)) { + validTypeMedia = true; + type = "video/*"; } else if (MEDIUM_IMAGE.equals(medium)) { validTypeImage = true; + type = "image/*"; } else { if (type == null) { type = SyndTypeUtils.getMimeTypeFromUrl(url); -- cgit v1.2.3 From 8c0c5b972eeac56f7e6bc9bd1afdfc2a03e230fd Mon Sep 17 00:00:00 2001 From: olivoto Date: Wed, 22 Jul 2020 12:45:44 -0300 Subject: Enabling swiping actions on locked queue list --- .../java/de/danoeh/antennapod/core/preferences/UserPreferences.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 5bfaa758b..b962c1ba9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -632,8 +632,7 @@ public class UserPreferences { } public static boolean isQueueLocked() { - return prefs.getBoolean(PREF_QUEUE_LOCKED, false) - || isQueueKeepSorted(); + return prefs.getBoolean(PREF_QUEUE_LOCKED, false); } public static void setFastForwardSecs(int secs) { -- cgit v1.2.3 From 10db0f3d11e46f60e66748e3a1b1a27bbdbbf828 Mon Sep 17 00:00:00 2001 From: Tobias Preuss Date: Sat, 25 Jul 2020 13:46:27 +0200 Subject: Replace deprecated "Html#fromHtml" with "HtmlCompat#fromHtml". --- .../antennapod/core/syndication/namespace/atom/AtomText.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java index e85d5fae1..0c0561279 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/namespace/atom/AtomText.java @@ -1,7 +1,7 @@ package de.danoeh.antennapod.core.syndication.namespace.atom; -import android.os.Build; -import android.text.Html; +import androidx.core.text.HtmlCompat; + import de.danoeh.antennapod.core.syndication.namespace.Namespace; import de.danoeh.antennapod.core.syndication.namespace.SyndElement; @@ -24,11 +24,7 @@ public class AtomText extends SyndElement { if (type == null) { return content; } else if (type.equals(TYPE_HTML)) { - if (Build.VERSION.SDK_INT >= 24) { - return Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY).toString(); - } else { - return Html.fromHtml(content).toString(); - } + return HtmlCompat.fromHtml(content, HtmlCompat.FROM_HTML_MODE_LEGACY).toString(); } else if (type.equals(TYPE_XHTML)) { return content; } else { // Handle as text by default -- cgit v1.2.3 From 15248a6dab2e729e53242a28e5778ca14deff2b6 Mon Sep 17 00:00:00 2001 From: Tobias Preuss Date: Sun, 26 Jul 2020 19:13:38 +0200 Subject: Add missing @NonNull and @Nullable annotations. --- .../java/de/danoeh/antennapod/core/event/DownloadEvent.java | 3 +++ .../java/de/danoeh/antennapod/core/event/DownloadLogEvent.java | 3 +++ .../java/de/danoeh/antennapod/core/event/DownloaderUpdate.java | 1 + .../java/de/danoeh/antennapod/core/event/FavoritesEvent.java | 3 +++ .../java/de/danoeh/antennapod/core/event/FeedItemEvent.java | 3 ++- .../main/java/de/danoeh/antennapod/core/feed/FeedEvent.java | 3 +++ .../src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java | 3 +++ .../danoeh/antennapod/core/glide/ChapterImageModelLoader.java | 10 +++++++--- .../danoeh/antennapod/core/glide/FastBlurTransformation.java | 5 ++++- .../de/danoeh/antennapod/core/storage/DownloadRequester.java | 2 +- .../de/danoeh/antennapod/core/sync/model/EpisodeAction.java | 2 ++ .../antennapod/core/sync/model/EpisodeActionChanges.java | 1 + 12 files changed, 33 insertions(+), 6 deletions(-) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/DownloadEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/DownloadEvent.java index 24a71ec96..efd53ab9d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/DownloadEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/DownloadEvent.java @@ -1,5 +1,7 @@ package de.danoeh.antennapod.core.event; +import androidx.annotation.NonNull; + import java.util.ArrayList; import java.util.List; @@ -19,6 +21,7 @@ public class DownloadEvent { return new DownloadEvent(update); } + @NonNull @Override public String toString() { return "DownloadEvent{" + diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/DownloadLogEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/DownloadLogEvent.java index 7428c5b00..5ab5decf9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/DownloadLogEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/DownloadLogEvent.java @@ -1,5 +1,7 @@ package de.danoeh.antennapod.core.event; +import androidx.annotation.NonNull; + public class DownloadLogEvent { private DownloadLogEvent() { @@ -9,6 +11,7 @@ public class DownloadLogEvent { return new DownloadLogEvent(); } + @NonNull @Override public String toString() { return "DownloadLogEvent"; diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java b/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java index f549940b7..10992408d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java @@ -46,6 +46,7 @@ public class DownloaderUpdate { this.mediaIds = mediaIds1.toArray(); } + @NonNull @Override public String toString() { return "DownloaderUpdate{" + diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/FavoritesEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/FavoritesEvent.java index 578007561..d3be8fac0 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/FavoritesEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/FavoritesEvent.java @@ -1,5 +1,7 @@ package de.danoeh.antennapod.core.event; +import androidx.annotation.NonNull; + import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -27,6 +29,7 @@ public class FavoritesEvent { return new FavoritesEvent(Action.REMOVED, item); } + @NonNull @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java index 4b14a72d2..02559b2f5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/FeedItemEvent.java @@ -21,7 +21,7 @@ public class FeedItemEvent { private final Action action; @NonNull public final List items; - private FeedItemEvent(Action action, List items) { + private FeedItemEvent(@NonNull Action action, @NonNull List items) { this.action = action; this.items = items; } @@ -42,6 +42,7 @@ public class FeedItemEvent { return updated(Arrays.asList(items)); } + @NonNull @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedEvent.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedEvent.java index 15cdf92dc..044554451 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedEvent.java @@ -1,5 +1,7 @@ package de.danoeh.antennapod.core.feed; +import androidx.annotation.NonNull; + import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -18,6 +20,7 @@ public class FeedEvent { this.feedId = feedId; } + @NonNull @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 60ebe6965..b681c21d1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -1,6 +1,8 @@ package de.danoeh.antennapod.core.feed; import android.database.Cursor; + +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.text.TextUtils; @@ -482,6 +484,7 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, ImageR */ public void removeTag(String tag) { tags.remove(tag); } + @NonNull @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java b/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java index 36da11eca..35a9d987b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java @@ -28,8 +28,9 @@ import org.apache.commons.io.IOUtils; public final class ChapterImageModelLoader implements ModelLoader { public static class Factory implements ModelLoaderFactory { + @NonNull @Override - public ModelLoader build(MultiModelLoaderFactory unused) { + public ModelLoader build(@NonNull MultiModelLoaderFactory unused) { return new ChapterImageModelLoader(); } @@ -41,12 +42,15 @@ public final class ChapterImageModelLoader implements ModelLoader buildLoadData(EmbeddedChapterImage model, int width, int height, Options options) { + public LoadData buildLoadData(@NonNull EmbeddedChapterImage model, + int width, + int height, + @NonNull Options options) { return new LoadData<>(new ObjectKey(model), new EmbeddedImageFetcher(model)); } @Override - public boolean handles(EmbeddedChapterImage model) { + public boolean handles(@NonNull EmbeddedChapterImage model) { return true; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java b/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java index d0301db2f..1f8ae5ad9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java +++ b/core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java @@ -21,7 +21,10 @@ public class FastBlurTransformation extends BitmapTransformation { } @Override - protected Bitmap transform(BitmapPool pool, Bitmap source, int outWidth, int outHeight) { + protected Bitmap transform(@NonNull BitmapPool pool, + @NonNull Bitmap source, + int outWidth, + int outHeight) { int targetWidth = outWidth / 3; int targetHeight = (int) (1.0 * outHeight * targetWidth / outWidth); Bitmap resized = ThumbnailUtils.extractThumbnail(source, targetWidth, targetHeight); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index f10dde65f..e3121caa2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -340,7 +340,7 @@ public class DownloadRequester implements DownloadStateProvider { /** * Checks if feedfile is in the downloads list */ - public synchronized boolean isDownloadingFile(FeedFile item) { + public synchronized boolean isDownloadingFile(@NonNull FeedFile item) { return item.getDownload_url() != null && downloads.containsKey(item.getDownload_url()); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeAction.java b/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeAction.java index 6154ccc84..798be8d96 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeAction.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeAction.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.core.sync.model; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.NonNull; import androidx.core.util.ObjectsCompat; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.util.DateUtils; @@ -179,6 +180,7 @@ public class EpisodeAction { return obj; } + @NonNull @Override public String toString() { return "EpisodeAction{" diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeActionChanges.java b/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeActionChanges.java index 77942ffa0..90af585af 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeActionChanges.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/model/EpisodeActionChanges.java @@ -23,6 +23,7 @@ public class EpisodeActionChanges { return this.timestamp; } + @NonNull @Override public String toString() { return "EpisodeActionGetResponse{" -- cgit v1.2.3 From 9a178726a34780277abcd4e49a758acd36ff2d68 Mon Sep 17 00:00:00 2001 From: Lucas Olivoto Date: Fri, 31 Jul 2020 18:42:17 -0300 Subject: Smoothier sleep timer (#4314) --- .../antennapod/core/service/playback/PlaybackService.java | 9 ++++++--- .../core/service/playback/PlaybackServiceTaskManager.java | 15 ++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) (limited to 'core/src/main/java/de') 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 fbf061966..111e2d37c 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 @@ -711,9 +711,12 @@ public class PlaybackService extends MediaBrowserServiceCompat { } @Override - public void onSleepTimerAlmostExpired() { - float leftVolume = 0.1f * UserPreferences.getLeftVolume(); - float rightVolume = 0.1f * UserPreferences.getRightVolume(); + public void onSleepTimerAlmostExpired(long timeLeft) { + final float[] multiplicators = {0.1f, 0.2f, 0.3f, 0.3f, 0.3f, 0.4f, 0.4f, 0.4f, 0.6f, 0.8f}; + float multiplicator = multiplicators[Math.max(0, (int) timeLeft / 1000)]; + Log.d(TAG, "onSleepTimerAlmostExpired: " + multiplicator); + float leftVolume = multiplicator * UserPreferences.getLeftVolume(); + float rightVolume = multiplicator * UserPreferences.getRightVolume(); mediaPlayer.setVolume(leftVolume, rightVolume); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index afa7fcebf..883ba6023 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -360,7 +360,8 @@ public class PlaybackServiceTaskManager { class SleepTimer implements Runnable { private static final String TAG = "SleepTimer"; private static final long UPDATE_INTERVAL = 1000L; - private static final long NOTIFICATION_THRESHOLD = 10000; + public static final long NOTIFICATION_THRESHOLD = 10000; + private boolean hasVibrated = false; private final long waitingTime; private long timeLeft; private ShakeListener shakeListener; @@ -390,7 +391,6 @@ public class PlaybackServiceTaskManager { @Override public void run() { Log.d(TAG, "Starting"); - boolean notifiedAlmostExpired = false; long lastTick = System.currentTimeMillis(); while (timeLeft > 0) { try { @@ -405,19 +405,19 @@ public class PlaybackServiceTaskManager { timeLeft -= now - lastTick; lastTick = now; - if (timeLeft < NOTIFICATION_THRESHOLD && !notifiedAlmostExpired) { + if (timeLeft < NOTIFICATION_THRESHOLD) { Log.d(TAG, "Sleep timer is about to expire"); - if (SleepTimerPreferences.vibrate()) { + if (SleepTimerPreferences.vibrate() && !hasVibrated) { Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); if (v != null) { v.vibrate(500); + hasVibrated = true; } } if (shakeListener == null && SleepTimerPreferences.shakeToReset()) { shakeListener = new ShakeListener(context, this); } - postCallback(callback::onSleepTimerAlmostExpired); - notifiedAlmostExpired = true; + postCallback(() -> callback.onSleepTimerAlmostExpired(timeLeft)); } if (timeLeft <= 0) { Log.d(TAG, "Sleep timer expired"); @@ -425,6 +425,7 @@ public class PlaybackServiceTaskManager { shakeListener.pause(); shakeListener = null; } + hasVibrated = false; if (!Thread.currentThread().isInterrupted()) { postCallback(callback::onSleepTimerExpired); } else { @@ -461,7 +462,7 @@ public class PlaybackServiceTaskManager { public interface PSTMCallback { void positionSaverTick(); - void onSleepTimerAlmostExpired(); + void onSleepTimerAlmostExpired(long timeLeft); void onSleepTimerExpired(); -- cgit v1.2.3 From dd5b3cac0e9f70d54d5028cced42101c2f6499bd Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 3 Aug 2020 13:10:08 +0200 Subject: Be more verbose about invalid type errors --- .../core/syndication/handler/UnsupportedFeedtypeException.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java index c9f9f19c8..11588967a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/UnsupportedFeedtypeException.java @@ -36,6 +36,9 @@ public class UnsupportedFeedtypeException extends Exception { if (message != null) { return message; } else if (type == TypeGetter.Type.INVALID) { + if ("html".equals(rootElement)) { + return "The server returned a website, not a podcast feed"; + } return "Invalid type"; } else { return "Type " + type + " not supported"; -- cgit v1.2.3 From 23792f4067fe547cee32cb47d24108e7c2881321 Mon Sep 17 00:00:00 2001 From: asdoi <36813904+asdoi@users.noreply.github.com> Date: Sun, 9 Aug 2020 09:20:10 +0000 Subject: Add subscriptions filter --- .../antennapod/core/preferences/UserPreferences.java | 15 +++++++++++++++ .../java/de/danoeh/antennapod/core/storage/DBReader.java | 10 ++++++++++ 2 files changed, 25 insertions(+) (limited to 'core/src/main/java/de') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index b962c1ba9..3488d125e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -68,6 +68,7 @@ public class UserPreferences { private static final String PREF_SHOW_AUTO_DOWNLOAD_REPORT = "prefShowAutoDownloadReport"; public static final String PREF_BACK_BUTTON_BEHAVIOR = "prefBackButtonBehavior"; private static final String PREF_BACK_BUTTON_GO_TO_PAGE = "prefBackButtonGoToPage"; + public static final String PREF_FILTER_FEED = "prefFeedFilter"; public static final String PREF_QUEUE_KEEP_SORTED = "prefQueueKeepSorted"; public static final String PREF_QUEUE_KEEP_SORTED_ORDER = "prefQueueKeepSortedOrder"; @@ -150,6 +151,8 @@ public class UserPreferences { public static final int FEED_COUNTER_SHOW_UNPLAYED = 2; public static final int FEED_COUNTER_SHOW_NONE = 3; public static final int FEED_COUNTER_SHOW_DOWNLOADED = 4; + public static final int FEED_FILTER_NONE = 0; + public static final int FEED_FILTER_COUNTER_ZERO = 1; private static Context context; private static SharedPreferences prefs; @@ -1058,4 +1061,16 @@ public class UserPreferences { .putString(PREF_QUEUE_KEEP_SORTED_ORDER, sortOrder.name()) .apply(); } + + public static int getFeedFilter() { + String value = prefs.getString(PREF_FILTER_FEED, "" + FEED_FILTER_NONE); + return Integer.parseInt(value); + } + + public static void setFeedFilter(String value) { + prefs.edit() + .putString(PREF_FILTER_FEED, value) + .commit(); + } + } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index a13f03e9f..0de67b306 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -801,6 +801,16 @@ public final class DBReader { } final LongIntMap feedCounters = adapter.getFeedCounters(feedIds); + int feedFilter = UserPreferences.getFeedFilter(); + if (feedFilter == UserPreferences.FEED_FILTER_COUNTER_ZERO) { + for (int i = feeds.size() - 1; i >= 0; i--) { + if (feedCounters.get(feeds.get(i).getId()) <= 0) { + feedCounters.delete(feeds.get(i).getId()); + feeds.remove(i); + } + } + } + Comparator comparator; int feedOrder = UserPreferences.getFeedOrder(); if (feedOrder == UserPreferences.FEED_ORDER_COUNTER) { -- cgit v1.2.3