From 71184ee5d4bc3a5b9e83625b9ee40297a6e3dd21 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 27 Mar 2021 19:40:53 +0100 Subject: Fixed SpotBugs violations, so that at least the most severe checks pass --- .../main/java/de/danoeh/antennapod/activity/MainActivity.java | 4 +++- .../main/java/de/danoeh/antennapod/adapter/NavListAdapter.java | 8 ++++---- app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java | 2 +- .../de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java | 2 +- .../main/java/de/danoeh/antennapod/error/CrashReportWriter.java | 3 +-- .../java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java | 2 +- .../java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java | 9 +++++---- .../fragment/preferences/about/DevelopersFragment.java | 2 +- .../antennapod/fragment/preferences/about/LicensesFragment.java | 2 +- .../fragment/preferences/about/SpecialThanksFragment.java | 2 +- .../fragment/preferences/about/TranslatorsFragment.java | 2 +- 11 files changed, 20 insertions(+), 18 deletions(-) (limited to 'app/src/main/java/de') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index b5edcc878..aa1d746a5 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -188,7 +188,9 @@ public class MainActivity extends CastEnabledActivity { public void setupToolbarToggle(@NonNull Toolbar toolbar, boolean displayUpArrow) { if (drawerLayout != null) { // Tablet layout does not have a drawer - drawerLayout.removeDrawerListener(drawerToggle); + if (drawerToggle != null) { + drawerLayout.removeDrawerListener(drawerToggle); + } drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close); drawerLayout.addDrawerListener(drawerToggle); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index de3242b1a..05099777c 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -58,9 +58,8 @@ public class NavListAdapter extends RecyclerView.Adapter */ public static final String SUBSCRIPTION_LIST_TAG = "SubscriptionList"; - private static List fragmentTags; - private static String[] titles; - + private final List fragmentTags = new ArrayList<>(); + private final String[] titles; private final ItemAccess itemAccess; private final WeakReference activity; public boolean showSubscriptionList = true; @@ -98,7 +97,8 @@ public class NavListAdapter extends RecyclerView.Adapter showSubscriptionList = false; } - fragmentTags = newTags; + fragmentTags.clear(); + fragmentTags.addAll(newTags); notifyDataSetChanged(); } diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java index d0fb91692..375f676c8 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/ProxyDialog.java @@ -206,7 +206,7 @@ public class ProxyDialog { private boolean checkPort() { int port = getPort(); - if(port < 0 && port > 65535) { + if (port < 0 || port > 65535) { etPort.setError(context.getString(R.string.proxy_port_invalid_error)); return false; } diff --git a/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java b/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java index 16c5548be..dfea627df 100644 --- a/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java +++ b/app/src/main/java/de/danoeh/antennapod/discovery/PodcastSearcherRegistry.java @@ -12,7 +12,7 @@ public class PodcastSearcherRegistry { private PodcastSearcherRegistry() { } - public static List getSearchProviders() { + public static synchronized List getSearchProviders() { if (searchProviders == null) { searchProviders = new ArrayList<>(); searchProviders.add(new SearcherInfo(new CombinedSearcher(), 1.0f)); diff --git a/app/src/main/java/de/danoeh/antennapod/error/CrashReportWriter.java b/app/src/main/java/de/danoeh/antennapod/error/CrashReportWriter.java index dc62863f9..23c8ffdd5 100644 --- a/app/src/main/java/de/danoeh/antennapod/error/CrashReportWriter.java +++ b/app/src/main/java/de/danoeh/antennapod/error/CrashReportWriter.java @@ -7,7 +7,6 @@ import de.danoeh.antennapod.BuildConfig; import org.apache.commons.io.IOUtils; import java.io.File; -import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; @@ -40,7 +39,7 @@ public class CrashReportWriter implements Thread.UncaughtExceptionHandler { File path = getFile(); PrintWriter out = null; try { - out = new PrintWriter(new FileWriter(path)); + out = new PrintWriter(path, "UTF-8"); out.println("## Crash info"); out.println("Time: " + new SimpleDateFormat("dd-MM-yyyy HH:mm:ss", Locale.getDefault()).format(new Date())); out.println("AntennaPod version: " + BuildConfig.VERSION_NAME); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 612959c04..18b011a08 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -27,7 +27,7 @@ public class AllEpisodesFragment extends EpisodesListFragment { private static final String PREF_NAME = "PrefAllEpisodesFragment"; private static final String PREF_FILTER = "filter"; - private static FeedItemFilter feedItemFilter = new FeedItemFilter(""); + private FeedItemFilter feedItemFilter = new FeedItemFilter(""); @Override public void onCreate(@Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java index 0ce38656a..0d9181d84 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java @@ -1,13 +1,13 @@ package de.danoeh.antennapod.fragment.gpodnet; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import de.danoeh.antennapod.core.sync.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.sync.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.sync.gpoddernet.model.GpodnetPodcast; import de.danoeh.antennapod.core.sync.gpoddernet.model.GpodnetTag; -import org.apache.commons.lang3.Validate; import de.danoeh.antennapod.activity.MainActivity; @@ -24,8 +24,7 @@ public class TagFragment extends PodcastListFragment { private GpodnetTag tag; - public static TagFragment newInstance(GpodnetTag tag) { - Validate.notNull(tag); + public static TagFragment newInstance(@NonNull GpodnetTag tag) { TagFragment fragment = new TagFragment(); Bundle args = new Bundle(); args.putParcelable("tag", tag); @@ -38,7 +37,9 @@ public class TagFragment extends PodcastListFragment { super.onCreate(savedInstanceState); Bundle args = getArguments(); - Validate.isTrue(args != null && args.getParcelable("tag") != null, "args invalid"); + if (args == null || args.getParcelable("tag") == null) { + throw new IllegalArgumentException("Arguments not given"); + } tag = args.getParcelable("tag"); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java index b844234b7..dcd720dc2 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/DevelopersFragment.java @@ -29,7 +29,7 @@ public class DevelopersFragment extends ListFragment { developersLoader = Single.create((SingleOnSubscribe>) emitter -> { ArrayList developers = new ArrayList<>(); BufferedReader reader = new BufferedReader(new InputStreamReader( - getContext().getAssets().open("developers.csv"))); + getContext().getAssets().open("developers.csv"), "UTF-8")); String line; while ((line = reader.readLine()) != null) { String[] info = line.split(";"); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java index 97565a613..38e532aed 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/LicensesFragment.java @@ -95,7 +95,7 @@ public class LicensesFragment extends ListFragment { private void showLicenseText(String licenseTextFile) { try { BufferedReader reader = new BufferedReader(new InputStreamReader( - getContext().getAssets().open(licenseTextFile))); + getContext().getAssets().open(licenseTextFile), "UTF-8")); StringBuilder licenseText = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java index d759a5ff2..1b4beeea0 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/SpecialThanksFragment.java @@ -29,7 +29,7 @@ public class SpecialThanksFragment extends ListFragment { translatorsLoader = Single.create((SingleOnSubscribe>) emitter -> { ArrayList translators = new ArrayList<>(); BufferedReader reader = new BufferedReader(new InputStreamReader( - getContext().getAssets().open("special_thanks.csv"))); + getContext().getAssets().open("special_thanks.csv"), "UTF-8")); String line; while ((line = reader.readLine()) != null) { String[] info = line.split(";"); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java index b77c74de6..ed0d53145 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/about/TranslatorsFragment.java @@ -29,7 +29,7 @@ public class TranslatorsFragment extends ListFragment { translatorsLoader = Single.create((SingleOnSubscribe>) emitter -> { ArrayList translators = new ArrayList<>(); BufferedReader reader = new BufferedReader(new InputStreamReader( - getContext().getAssets().open("translators.csv"))); + getContext().getAssets().open("translators.csv"), "UTF-8")); String line; while ((line = reader.readLine()) != null) { String[] info = line.split(";"); -- cgit v1.2.3 From 998535515bae8ec5bcd2bd95bc0cf4f34416dff7 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 27 Mar 2021 22:31:10 +0100 Subject: Make AntennaPod pass the medium SpotBugs findings --- .../java/de/danoeh/antennapod/activity/BugReportActivity.java | 5 ++++- .../de/danoeh/antennapod/activity/MediaplayerActivity.java | 2 -- .../danoeh/antennapod/asynctask/DocumentFileExportWorker.java | 4 ---- .../main/java/de/danoeh/antennapod/asynctask/ExportWorker.java | 4 ++-- .../de/danoeh/antennapod/discovery/ItunesTopListLoader.java | 10 ---------- .../de/danoeh/antennapod/fragment/PagedToolbarFragment.java | 9 +++++---- .../de/danoeh/antennapod/fragment/SubscriptionFragment.java | 3 +++ 7 files changed, 14 insertions(+), 23 deletions(-) (limited to 'app/src/main/java/de') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java index 721291597..50794ba5b 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/BugReportActivity.java @@ -99,7 +99,10 @@ public class BugReportActivity extends AppCompatActivity { private void exportLog() { try { File filename = new File(UserPreferences.getDataFolder(null), "full-logs.txt"); - filename.createNewFile(); + boolean success = filename.createNewFile(); + if (!success) { + throw new IOException("Unable to create output file"); + } String cmd = "logcat -d -f " + filename.getAbsolutePath(); Runtime.getRuntime().exec(cmd); //share file diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index 56a66ba93..1fcc3512d 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -2,7 +2,6 @@ package de.danoeh.antennapod.activity; import android.annotation.TargetApi; import android.content.Intent; -import android.content.SharedPreferences; import android.graphics.PixelFormat; import android.os.Build; import android.os.Bundle; @@ -479,7 +478,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements cardViewSeek = findViewById(R.id.cardViewSeek); txtvSeek = findViewById(R.id.txtvSeek); - SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE); showTimeLeft = UserPreferences.shouldShowRemainingTime(); Log.d("timeleft", showTimeLeft ? "true" : "false"); txtvLength = findViewById(R.id.txtvLength); diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/DocumentFileExportWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/DocumentFileExportWorker.java index 906d50c61..73e19c746 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/DocumentFileExportWorker.java +++ b/app/src/main/java/de/danoeh/antennapod/asynctask/DocumentFileExportWorker.java @@ -5,7 +5,6 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.documentfile.provider.DocumentFile; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -37,9 +36,6 @@ public class DocumentFileExportWorker { OutputStreamWriter writer = null; try { Uri uri = output.getUri(); - if (uri == null) { - throw new FileNotFoundException("Export file not found."); - } outputStream = context.getContentResolver().openOutputStream(uri); if (outputStream == null) { throw new IOException(); diff --git a/app/src/main/java/de/danoeh/antennapod/asynctask/ExportWorker.java b/app/src/main/java/de/danoeh/antennapod/asynctask/ExportWorker.java index 0930b59eb..af9f041af 100644 --- a/app/src/main/java/de/danoeh/antennapod/asynctask/ExportWorker.java +++ b/app/src/main/java/de/danoeh/antennapod/asynctask/ExportWorker.java @@ -41,8 +41,8 @@ public class ExportWorker { public Observable exportObservable() { if (output.exists()) { - Log.w(TAG, "Overwriting previously exported file."); - output.delete(); + boolean success = output.delete(); + Log.w(TAG, "Overwriting previously exported file: " + success); } return Observable.create(subscriber -> { OutputStreamWriter writer = null; diff --git a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java index e1034f89b..e4135fcaa 100644 --- a/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java +++ b/app/src/main/java/de/danoeh/antennapod/discovery/ItunesTopListLoader.java @@ -1,7 +1,6 @@ package de.danoeh.antennapod.discovery; import android.content.Context; -import android.content.SharedPreferences; import android.util.Log; import de.danoeh.antennapod.R; @@ -24,8 +23,6 @@ import java.util.List; import java.util.Locale; import java.util.concurrent.TimeUnit; -import static android.content.Context.MODE_PRIVATE; - public class ItunesTopListLoader { private static final String TAG = "ITunesTopListLoader"; private final Context context; @@ -38,13 +35,6 @@ public class ItunesTopListLoader { this.context = context; } - public Single> loadToplist() { - String defaultCountry = Locale.getDefault().getCountry(); - SharedPreferences prefs = context.getSharedPreferences(PREFS, MODE_PRIVATE); - String countryCode = prefs.getString(PREF_KEY_COUNTRY_CODE, COUNTRY_CODE_UNSET); - return this.loadToplist(countryCode, 25); - } - public Single> loadToplist(String country, int limit) { return Single.create((SingleOnSubscribe>) emitter -> { OkHttpClient client = AntennapodHttpClient.getHttpClient(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java index 2ed26b1c0..f79bffabc 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java @@ -1,5 +1,6 @@ package de.danoeh.antennapod.fragment; +import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.viewpager2.widget.ViewPager2; @@ -14,12 +15,12 @@ public abstract class PagedToolbarFragment extends Fragment { /** * Invalidate the toolbar menu if the current child fragment is visible. - * @param child The fragment, or null to force-refresh whatever the active fragment is. + * @param child The fragment to invalidate */ - void invalidateOptionsMenuIfActive(Fragment child) { + void invalidateOptionsMenuIfActive(@NonNull Fragment child) { Fragment visibleChild = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem()); - if (visibleChild == child || child == null) { - child.onPrepareOptionsMenu(toolbar.getMenu()); + if (visibleChild == child) { + visibleChild.onPrepareOptionsMenu(toolbar.getMenu()); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java index 58cfece14..f6b7e74bb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -291,6 +291,9 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); + if (menuInfo == null) { + return; + } AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; int position = adapterInfo.position; -- cgit v1.2.3