summaryrefslogtreecommitdiff
path: root/core/src/main/java/de/danoeh/antennapod
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2021-03-28 22:46:37 +0200
committerGitHub <noreply@github.com>2021-03-28 22:46:37 +0200
commit7465b747f3630a82ee6375c766dcba015aa78cfc (patch)
tree9744412b09ee9e12f3a3fb002cd343fdbf659376 /core/src/main/java/de/danoeh/antennapod
parentdcbe5e6905e8fb2c37bb73f9c692d07ae21111a8 (diff)
parent998535515bae8ec5bcd2bd95bc0cf4f34416dff7 (diff)
downloadAntennaPod-7465b747f3630a82ee6375c766dcba015aa78cfc.zip
Merge pull request #5055 from ByteHamster/spotbugs
Add SpotBugs CI check
Diffstat (limited to 'core/src/main/java/de/danoeh/antennapod')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/backup/OpmlBackupAgent.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/Chapter.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/glide/ChapterImageModelLoader.java13
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/glide/FastBlurTransformation.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java7
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DatabaseExporter.java5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/sync/gpoddernet/GpodnetService.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/syndication/HtmlToPlainText.java9
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();
}
/**