diff --git a/.circleci/config.yml b/.circleci/config.yml index 910f476b8..1a97e73c5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -90,7 +90,14 @@ workflows: - run: name: Lint app command: ./gradlew app:lintPlayRelease + - run: + name: Lint core + command: ./gradlew core:lintPlayRelease - store_artifacts: - name: Uploading lint reports + name: Uploading app lint reports path: app/build/reports/lint-results-playRelease.html - destination: lint-results.html + destination: lint-results-app.html + - store_artifacts: + name: Uploading core lint reports + path: core/build/reports/lint-results-playRelease.html + destination: lint-results-core.html diff --git a/core/build.gradle b/core/build.gradle index bfaffd14f..b3c614059 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -52,6 +52,16 @@ android { dimension "market" } } + + lintOptions { + disable "InvalidPeriodicWorkRequestInterval", "ObsoleteLintCustomCheck", "DefaultLocale", "UnusedAttribute", + "GradleDependency", "ParcelClassLoader", "Typos", "ExtraTranslation", "ImpliedQuantity", + "PluralsCandidate", "UnusedQuantity", "StringFormatCount", "TrustAllX509TrustManager", + "StaticFieldLeak", "TypographyEllipsis", "IconDensities", "IconDuplicates", "CheckResult" + + warningsAsErrors true + abortOnError true + } } dependencies { diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 1f6c36c40..ae5e56e55 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + xmlns:tools="http://schemas.android.com/tools" package="de.danoeh.antennapod.core"> @@ -12,15 +12,19 @@ + android:icon="@mipmap/ic_launcher" + android:supportsRtl="true"> + + android:exported="true" + tools:ignore="ExportedService"> + @@ -39,8 +43,8 @@ - + android:exported="true" + tools:ignore="ExportedReceiver" /> 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 bcbc041a6..5700bb9a0 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 @@ -249,7 +249,7 @@ public class UserPreferences { public static void setFeedOrder(String selected) { prefs.edit() .putString(PREF_DRAWER_FEED_ORDER, selected) - .commit(); + .apply(); } public static int getFeedCounterSetting() { @@ -1054,7 +1054,7 @@ public class UserPreferences { public static void setFeedFilter(String value) { prefs.edit() .putString(PREF_FILTER_FEED, value) - .commit(); + .apply(); } } 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 883ba6023..9ef34cdac 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 @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import android.util.Log; import de.danoeh.antennapod.core.preferences.SleepTimerPreferences; +import io.reactivex.disposables.Disposable; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -57,7 +58,7 @@ public class PlaybackServiceTaskManager { private ScheduledFuture widgetUpdaterFuture; private ScheduledFuture sleepTimerFuture; private volatile Future> queueFuture; - private volatile Future chapterLoaderFuture; + private volatile Disposable chapterLoaderFuture; private SleepTimer sleepTimer; @@ -102,7 +103,7 @@ public class PlaybackServiceTaskManager { private synchronized void loadQueue() { if (!isQueueLoaderActive()) { - queueFuture = schedExecutor.submit(DBReader::getQueue); + queueFuture = schedExecutor.submit(() -> DBReader.getQueue()); } } @@ -289,28 +290,19 @@ public class PlaybackServiceTaskManager { } } - private synchronized void cancelChapterLoader() { - if (isChapterLoaderActive()) { - chapterLoaderFuture.cancel(true); - } - } - - private synchronized boolean isChapterLoaderActive() { - return chapterLoaderFuture != null && !chapterLoaderFuture.isDone(); - } - /** * Starts a new thread that loads the chapter marks from a playable object. If another chapter loader is already active, * it will be cancelled first. * On completion, the callback's onChapterLoaded method will be called. */ public synchronized void startChapterLoader(@NonNull final Playable media) { - if (isChapterLoaderActive()) { - cancelChapterLoader(); + if (chapterLoaderFuture != null) { + chapterLoaderFuture.dispose(); + chapterLoaderFuture = null; } if (media.getChapters() == null) { - Completable.create(emitter -> { + chapterLoaderFuture = Completable.create(emitter -> { media.loadChapterMarks(); emitter.onComplete(); }) @@ -330,7 +322,11 @@ public class PlaybackServiceTaskManager { cancelWidgetUpdater(); disableSleepTimer(); cancelQueueLoader(); - cancelChapterLoader(); + + if (chapterLoaderFuture != null) { + chapterLoaderFuture.dispose(); + chapterLoaderFuture = null; + } } /** diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index 16e2825b4..4f2417b7d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -257,7 +257,6 @@ public final class DBTasks { EventBus.getDefault().post(new MessageEvent(context.getString(R.string.error_file_not_found))); } - @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public static List enqueueFeedItemsToDownload(final Context context, List items) throws InterruptedException, ExecutionException { List itemsToEnqueue = new ArrayList<>(); diff --git a/core/src/main/res/layout/player_widget.xml b/core/src/main/res/layout/player_widget.xml index 6e463e9cd..8e38d7f6e 100644 --- a/core/src/main/res/layout/player_widget.xml +++ b/core/src/main/res/layout/player_widget.xml @@ -1,5 +1,6 @@ @@ -8,8 +9,8 @@ android:id="@+id/widgetLayout" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#262C31" > - + android:background="#262C31" + tools:ignore="UselessParent">