diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2021-03-28 22:46:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-28 22:46:37 +0200 |
commit | 7465b747f3630a82ee6375c766dcba015aa78cfc (patch) | |
tree | 9744412b09ee9e12f3a3fb002cd343fdbf659376 /core/src/main/java/de/danoeh/antennapod | |
parent | dcbe5e6905e8fb2c37bb73f9c692d07ae21111a8 (diff) | |
parent | 998535515bae8ec5bcd2bd95bc0cf4f34416dff7 (diff) | |
download | AntennaPod-7465b747f3630a82ee6375c766dcba015aa78cfc.zip |
Merge pull request #5055 from ByteHamster/spotbugs
Add SpotBugs CI check
Diffstat (limited to 'core/src/main/java/de/danoeh/antennapod')
12 files changed, 31 insertions, 24 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java b/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java index c05e2e9f1..6ca84ff87 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java @@ -94,7 +94,7 @@ public class OpmlBackupAgent extends BackupAgentHelper { if (len != -1) { byte[] oldChecksum = new byte[len]; - inState.read(oldChecksum); + IOUtils.read(inState, oldChecksum, 0, len); Log.d(TAG, "Old checksum: " + new BigInteger(1, oldChecksum).toString(16)); if (Arrays.equals(oldChecksum, newChecksum)) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java b/core/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java index 08a531d17..1c13471a5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java @@ -43,7 +43,7 @@ public abstract class Chapter extends FeedComponent { String imageUrl = cursor.getString(indexImage); int chapterType = cursor.getInt(indexChapterType); - Chapter chapter = null; + Chapter chapter; switch (chapterType) { case SimpleChapter.CHAPTERTYPE_SIMPLECHAPTER: chapter = new SimpleChapter(start, title, link, imageUrl); @@ -54,6 +54,8 @@ public abstract class Chapter extends FeedComponent { case VorbisCommentChapter.CHAPTERTYPE_VORBISCOMMENT_CHAPTER: chapter = new VorbisCommentChapter(start, title, link, imageUrl); break; + default: + throw new IllegalArgumentException("Unknown chapter type"); } chapter.setId(id); return chapter; 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 d6926385e..25857dad2 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 @@ -43,7 +43,7 @@ public class FeedItem extends FeedComponent implements Serializable { private Date pubDate; private FeedMedia media; - private Feed feed; + private transient Feed feed; private long feedId; private int state; @@ -65,7 +65,7 @@ public class FeedItem extends FeedComponent implements Serializable { * The list of chapters of this item. This might be null even if there are chapters of this item * in the database. The 'hasChapters' attribute should be used to check if this item has any chapters. * */ - private List<Chapter> chapters; + private transient List<Chapter> chapters; private String imageUrl; /* 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 519d625e2..d6d63fed0 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 @@ -1,7 +1,6 @@ package de.danoeh.antennapod.core.glide; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import com.bumptech.glide.Priority; import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.Options; @@ -36,7 +35,6 @@ public final class ChapterImageModelLoader implements ModelLoader<EmbeddedChapte } } - @Nullable @Override public LoadData<ByteBuffer> buildLoadData(@NonNull EmbeddedChapterImage model, int width, @@ -65,9 +63,9 @@ public final class ChapterImageModelLoader implements ModelLoader<EmbeddedChapte if (image.getMedia().localFileAvailable()) { File localFile = new File(image.getMedia().getLocalMediaUrl()); stream = new BufferedInputStream(new FileInputStream(localFile)); - stream.skip(image.getPosition()); + IOUtils.skip(stream, image.getPosition()); byte[] imageContent = new byte[image.getLength()]; - stream.read(imageContent, 0, image.getLength()); + IOUtils.read(stream, imageContent, 0, image.getLength()); callback.onDataReady(ByteBuffer.wrap(imageContent)); } else { Request.Builder httpReq = new Request.Builder(); @@ -88,10 +86,13 @@ public final class ChapterImageModelLoader implements ModelLoader<EmbeddedChapte } } - @Override public void cleanup() { + @Override + public void cleanup() { // nothing to clean up } - @Override public void cancel() { + + @Override + public void cancel() { // cannot cancel } 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 1f8ae5ad9..4de6a7315 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 @@ -8,6 +8,7 @@ import android.util.Log; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; +import java.nio.charset.Charset; import java.security.MessageDigest; public class FastBlurTransformation extends BitmapTransformation { @@ -43,7 +44,7 @@ public class FastBlurTransformation extends BitmapTransformation { @Override public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { - messageDigest.update(TAG.getBytes()); + messageDigest.update(TAG.getBytes(Charset.defaultCharset())); } private static Bitmap fastBlur(Bitmap bitmap, int radius) { 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 c4029d57f..4d1d44908 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 @@ -120,7 +120,7 @@ public class AntennapodHttpClient { SocketAddress address = InetSocketAddress.createUnresolved(config.host, port); Proxy proxy = new Proxy(config.type, address); builder.proxy(proxy); - if (!TextUtils.isEmpty(config.username)) { + if (!TextUtils.isEmpty(config.username) && config.password != null) { String credentials = Credentials.basic(config.username, config.password); builder.interceptors().add(chain -> { Request request = chain.request().newBuilder() 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 2d955859f..5050225f7 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 @@ -188,8 +188,11 @@ public class HttpDownloader extends Downloader { out = new RandomAccessFile(destination, "rw"); out.seek(request.getSoFar()); } else { - destination.delete(); - destination.createNewFile(); + boolean success = destination.delete(); + success |= destination.createNewFile(); + if (!success) { + throw new IOException("Unable to recreate partially downloaded file"); + } out = new RandomAccessFile(destination, "rw"); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java index 1f047ceee..785784497 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java @@ -217,7 +217,7 @@ public abstract class PlaybackServiceMediaPlayer { * could result in nonsensical results (like a status of PLAYING, but a null playable) * @return the current player status */ - public PlayerStatus getPlayerStatus() { + public synchronized PlayerStatus getPlayerStatus() { return playerStatus; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java index 271babc6e..a0fac0c74 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java @@ -91,7 +91,10 @@ public class DatabaseExporter { db.close(); File currentDB = context.getDatabasePath(PodDBAdapter.DATABASE_NAME); - currentDB.delete(); + boolean success = currentDB.delete(); + if (!success) { + throw new IOException("Unable to delete old database"); + } FileUtils.moveFile(tempDB, currentDB); } catch (IOException | SQLiteException e) { Log.e(TAG, Log.getStackTraceString(e)); 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 98d5e6310..7ab776856 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 @@ -331,7 +331,7 @@ public class PodDBAdapter { PodDBAdapter.context = context.getApplicationContext(); } - public static PodDBAdapter getInstance() { + public static synchronized PodDBAdapter getInstance() { if (instance == null) { instance = new PodDBAdapter(); } 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 cecfc0d2c..cd0fc93ea 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 @@ -667,11 +667,11 @@ public class GpodnetService implements ISyncService { while ((count = in.read(buffer)) > 0) { outputStream.write(buffer, 0, count); } + return outputStream.toString("UTF-8"); } catch (IOException e) { e.printStackTrace(); throw new GpodnetServiceException(e); } - return outputStream.toString(); } private void checkStatusCode(@NonNull Response response) throws GpodnetServiceException { diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java b/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java index baa467acf..37dee0486 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java @@ -34,8 +34,7 @@ import java.util.regex.Pattern; public class HtmlToPlainText { /** - * Use this method to strip off HTML encoding from given text - * <p> + * Use this method to strip off HTML encoding from given text. * Replaces bullet points with *, ignores colors/bold/... * * @param str String with any encoding @@ -60,10 +59,8 @@ public class HtmlToPlainText { * @return <b>True</b> if text contains any HTML tags<br /><b>False</b> is no HTML tag is found */ private static boolean isHtml(String str) { - final String HTML_TAG_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>"; - Pattern htmlValidator = TextUtils.isEmpty(HTML_TAG_PATTERN) ? null : Pattern.compile(HTML_TAG_PATTERN); - - return htmlValidator.matcher(str).find(); + final String htmlTagPattern = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>"; + return Pattern.compile(htmlTagPattern).matcher(str).find(); } /** |