diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2022-01-06 14:36:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-06 14:36:11 +0100 |
commit | 849bf4ad854973d39698613c3a356c09c87e687c (patch) | |
tree | fbd07d17fe5f26b8c91f9ce4ff8020046070431f /app | |
parent | 8252eb2183c6a478fdfd9317586c8800a24054ca (diff) | |
download | AntennaPod-849bf4ad854973d39698613c3a356c09c87e687c.zip |
Rewrite download request creation (#5530)
Android has a limit on the size of Intent parameters. When enqueuing
a huge number of items, it just ignored the argument and did not call
onNewIntent. We now load the list over in DownloadService.
Diffstat (limited to 'app')
24 files changed, 70 insertions, 164 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java index 7645facc2..edd80b0d0 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java @@ -8,6 +8,7 @@ import androidx.core.util.Consumer; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; import de.test.antennapod.EspressoTestUtils; import org.awaitility.Awaitility; import org.awaitility.core.ConditionTimeoutException; @@ -33,7 +34,6 @@ import de.danoeh.antennapod.core.service.download.DownloaderFactory; import de.danoeh.antennapod.core.service.download.StubDownloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequester; import static de.test.antennapod.util.event.DownloadEventListener.withDownloadEventListener; import static de.test.antennapod.util.event.FeedItemEventListener.withFeedItemEventListener; @@ -80,7 +80,7 @@ public class DownloadServiceTest { public void tearDown() throws Exception { DownloadService.setDownloaderFactory(origFactory); Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); - DownloadRequester.getInstance().cancelAllDownloads(context); + DownloadService.cancelAll(context); context.stopService(new Intent(context, DownloadService.class)); EspressoTestUtils.tryKillDownloadService(); } @@ -113,8 +113,8 @@ public class DownloadServiceTest { assertFalse("The media in test should not yet been downloaded", DBReader.getFeedMedia(testMedia11.getId()).isDownloaded()); - DownloadRequester.getInstance().downloadMedia(false, InstrumentationRegistry - .getInstrumentation().getTargetContext(), true, testMedia11.getItem()); + DownloadService.download(InstrumentationRegistry.getInstrumentation().getTargetContext(), false, + DownloadRequestCreator.create(testMedia11).build()); Awaitility.await() .atMost(5000, TimeUnit.MILLISECONDS) .until(() -> feedItemEventListener.getEvents().size() >= numEventsExpected); @@ -158,7 +158,8 @@ public class DownloadServiceTest { } withFeedItemEventListener(feedItemEventListener -> { - DownloadRequester.getInstance().downloadMedia(false, context, true, testMedia11.getItem()); + DownloadService.download(InstrumentationRegistry.getInstrumentation().getTargetContext(), false, + DownloadRequestCreator.create(testMedia11).build()); withDownloadEventListener(downloadEventListener -> Awaitility.await("download is actually running") .atMost(5000, TimeUnit.MILLISECONDS) @@ -174,7 +175,7 @@ public class DownloadServiceTest { .atMost(2000, TimeUnit.MILLISECONDS) .until(() -> feedItemEventListener.getEvents().size() >= 1); } - DownloadRequester.getInstance().cancelDownload(context, testMedia11); + DownloadService.cancel(context, testMedia11.getDownload_url()); final int totalNumEventsExpected = itemAlreadyInQueue ? 1 : 3; Awaitility.await("item dequeue event + download termination event") .atMost(2000, TimeUnit.MILLISECONDS) diff --git a/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java index 92a0909d6..fb4c7c2d2 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java @@ -4,13 +4,13 @@ import android.os.Bundle; import android.text.TextUtils; import androidx.appcompat.app.AppCompatActivity; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.model.feed.FeedPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadRequest; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.dialog.AuthenticationDialog; import io.reactivex.Completable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -62,7 +62,7 @@ public class DownloadAuthenticationActivity extends AppCompatActivity { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(() -> { - DownloadRequester.getInstance().download(DownloadAuthenticationActivity.this, request); + DownloadService.download(DownloadAuthenticationActivity.this, false, request); finish(); }); } diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java index 9108940ea..277cdf6aa 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java @@ -31,8 +31,9 @@ import com.google.android.material.snackbar.Snackbar; import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.FeedItemlistDescriptionAdapter; -import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.event.DownloadEvent; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; import de.danoeh.antennapod.core.feed.FeedUrlNotFoundException; import de.danoeh.antennapod.discovery.CombinedSearcher; import de.danoeh.antennapod.discovery.PodcastSearchResult; @@ -49,8 +50,6 @@ import de.danoeh.antennapod.core.service.download.HttpDownloader; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.FileNameGenerator; import de.danoeh.antennapod.parser.feed.FeedHandler; import de.danoeh.antennapod.parser.feed.FeedHandlerResult; @@ -467,12 +466,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity { Feed f = new Feed(selectedDownloadUrl, null, feed.getTitle()); f.setPreferences(feed.getPreferences()); this.feed = f; - try { - DownloadRequester.getInstance().downloadFeed(this, f); - } catch (DownloadRequestException e) { - Log.e(TAG, Log.getStackTraceString(e)); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(this, e.getMessage()); - } + DownloadService.download(this, false, DownloadRequestCreator.create(f).build()); didPressSubscribe = true; handleUpdatedFeedStatus(feed); } @@ -553,7 +547,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity { private void handleUpdatedFeedStatus(Feed feed) { if (feed != null) { - if (DownloadRequester.getInstance().isDownloadingFile(feed.getDownload_url())) { + if (DownloadService.isDownloadingFile(feed.getDownload_url())) { viewBinding.subscribeButton.setEnabled(false); viewBinding.subscribeButton.setText(R.string.subscribing_label); } else if (feedInFeedlist(feed)) { diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java index 3d0c9d113..b7a35a368 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java @@ -28,8 +28,8 @@ import de.danoeh.antennapod.core.export.opml.OpmlElement; import de.danoeh.antennapod.core.export.opml.OpmlReader; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; import de.danoeh.antennapod.databinding.OpmlSelectionBinding; import de.danoeh.antennapod.model.feed.Feed; import io.reactivex.Completable; @@ -89,7 +89,6 @@ public class OpmlImportActivity extends AppCompatActivity { viewBinding.butConfirm.setOnClickListener(v -> { viewBinding.progressBar.setVisibility(View.VISIBLE); Completable.fromAction(() -> { - DownloadRequester requester = DownloadRequester.getInstance(); SparseBooleanArray checked = viewBinding.feedlist.getCheckedItemPositions(); for (int i = 0; i < checked.size(); i++) { if (!checked.valueAt(i)) { @@ -97,11 +96,7 @@ public class OpmlImportActivity extends AppCompatActivity { } OpmlElement element = readElements.get(checked.keyAt(i)); Feed feed = new Feed(element.getXmlUrl(), null, element.getText()); - try { - requester.downloadFeed(getApplicationContext(), feed); - } catch (DownloadRequestException e) { - e.printStackTrace(); - } + DownloadService.download(this, false, DownloadRequestCreator.create(feed).build()); } }) .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java index 1e7ce4426..072ca8acf 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java @@ -13,14 +13,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.ListFragment; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.service.download.DownloadRequest; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.service.download.DownloadStatus; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.DownloadError; import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.model.feed.FeedMedia; @@ -131,11 +130,7 @@ public class DownloadLogAdapter extends BaseAdapter { Log.e(TAG, "Could not find feed for feed id: " + status.getFeedfileId()); return; } - try { - DBTasks.forceRefreshFeed(context, feed, true); - } catch (DownloadRequestException e) { - e.printStackTrace(); - } + DBTasks.forceRefreshFeed(context, feed, true); }); } else if (status.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { holder.secondaryActionButton.setOnClickListener(v -> { @@ -145,14 +140,9 @@ public class DownloadLogAdapter extends BaseAdapter { Log.e(TAG, "Could not find feed media for feed id: " + status.getFeedfileId()); return; } - try { - DownloadRequester.getInstance().downloadMedia(context, true, media.getItem()); - ((MainActivity) context).showSnackbarAbovePlayer( - R.string.status_downloading_label, Toast.LENGTH_SHORT); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); - } + DownloadService.download(context, true, DownloadRequestCreator.create(media).build()); + ((MainActivity) context).showSnackbarAbovePlayer( + R.string.status_downloading_label, Toast.LENGTH_SHORT); }); } } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java index a2b0e98c3..636c974d9 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/CancelDownloadActionButton.java @@ -5,11 +5,11 @@ import androidx.annotation.DrawableRes; import androidx.annotation.StringRes; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequester; public class CancelDownloadActionButton extends ItemActionButton { @@ -32,7 +32,7 @@ public class CancelDownloadActionButton extends ItemActionButton { @Override public void onClick(Context context) { FeedMedia media = item.getMedia(); - DownloadRequester.getInstance().cancelDownload(context, media); + DownloadService.cancel(context, media.getDownload_url()); if (UserPreferences.isEnableAutodownload()) { item.disableAutoDownload(); DBWriter.setFeedItem(item); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java index 7b922154e..553512882 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DownloadActionButton.java @@ -9,21 +9,18 @@ import androidx.annotation.NonNull; import androidx.annotation.StringRes; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.core.preferences.UsageStatistics; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.NetworkUtils; public class DownloadActionButton extends ItemActionButton { - private boolean isInQueue; public DownloadActionButton(FeedItem item) { super(item); - this.isInQueue = item.isTagged(FeedItem.TAG_QUEUE);; } @Override @@ -53,30 +50,17 @@ public class DownloadActionButton extends ItemActionButton { UsageStatistics.logAction(UsageStatistics.ACTION_DOWNLOAD); if (NetworkUtils.isEpisodeDownloadAllowed() || MobileDownloadHelper.userAllowedMobileDownloads()) { - downloadEpisode(context); - } else if (MobileDownloadHelper.userChoseAddToQueue() && !isInQueue) { - addEpisodeToQueue(context); + DownloadService.download(context, false, DownloadRequestCreator.create(item.getMedia()).build()); + } else if (MobileDownloadHelper.userChoseAddToQueue() && !item.isTagged(FeedItem.TAG_QUEUE)) { + DBWriter.addQueueItem(context, item); + Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); } else { MobileDownloadHelper.confirmMobileDownload(context, item); } } private boolean shouldNotDownload(@NonNull FeedMedia media) { - boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media); + boolean isDownloading = DownloadService.isDownloadingFile(media.getDownload_url()); return isDownloading || media.isDownloaded(); } - - private void addEpisodeToQueue(Context context) { - DBWriter.addQueueItem(context, item); - Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); - } - - private void downloadEpisode(Context context) { - try { - DownloadRequester.getInstance().downloadMedia(context, true, item); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); - } - } } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java index ad4f35786..5581ca0c6 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/ItemActionButton.java @@ -7,10 +7,10 @@ import androidx.annotation.NonNull; import androidx.annotation.StringRes; import android.view.View; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.FeedItemUtil; public abstract class ItemActionButton { @@ -39,7 +39,7 @@ public abstract class ItemActionButton { return new MarkAsPlayedActionButton(item); } - final boolean isDownloadingMedia = DownloadRequester.getInstance().isDownloadingFile(media); + final boolean isDownloadingMedia = DownloadService.isDownloadingFile(media.getDownload_url()); if (FeedItemUtil.isCurrentlyPlaying(media)) { return new PauseActionButton(item); } else if (item.getFeed().isLocalFeed()) { diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MobileDownloadHelper.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MobileDownloadHelper.java index 66ce973e2..6d8af23c0 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MobileDownloadHelper.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/MobileDownloadHelper.java @@ -4,12 +4,11 @@ import android.content.Context; import androidx.appcompat.app.AlertDialog; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; class MobileDownloadHelper { private static long addToQueueTimestamp; @@ -45,11 +44,6 @@ class MobileDownloadHelper { private static void downloadFeedItems(Context context, FeedItem item) { allowMobileDownloadTimestamp = System.currentTimeMillis(); - try { - DownloadRequester.getInstance().downloadMedia(context, true, item); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); - } + DownloadService.download(context, true, DownloadRequestCreator.create(item.getMedia()).build()); } }
\ No newline at end of file diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java index 8c01a4563..120d1def8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java @@ -31,7 +31,6 @@ import de.danoeh.antennapod.activity.OnlineFeedViewActivity; import de.danoeh.antennapod.activity.OpmlImportActivity; import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.core.storage.DBTasks; -import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.model.feed.SortOrder; import de.danoeh.antennapod.databinding.AddfeedBinding; import de.danoeh.antennapod.databinding.EditTextDialogBinding; @@ -204,7 +203,7 @@ public class AddFeedFragment extends Fragment { }); } - private Feed addLocalFolder(Uri uri) throws DownloadRequestException { + private Feed addLocalFolder(Uri uri) { if (Build.VERSION.SDK_INT < 21) { return null; } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java index 933147378..603a00955 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -32,7 +32,6 @@ import de.danoeh.antennapod.fragment.actions.EpisodeMultiSelectActionHandler; import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBReader; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; @@ -162,7 +161,7 @@ public class CompletedDownloadsFragment extends Fragment implements } private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); + () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); @Override public boolean onContextItemSelected(@NonNull MenuItem item) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java index 5602dcb78..f43828000 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java @@ -29,7 +29,6 @@ import de.danoeh.antennapod.core.service.download.DownloadStatus; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.model.feed.FeedItem; @@ -108,7 +107,7 @@ public class DownloadLogFragment extends ListFragment { Object item = adapter.getItem(position); if (item instanceof Downloader) { DownloadRequest downloadRequest = ((Downloader) item).getDownloadRequest(); - DownloadRequester.getInstance().cancelDownload(getActivity(), downloadRequest.getSource()); + DownloadService.cancel(getContext(), downloadRequest.getSource()); if (downloadRequest.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { FeedMedia media = DBReader.getFeedMedia(downloadRequest.getFeedfileId()); @@ -196,7 +195,7 @@ public class DownloadLogFragment extends ListFragment { } private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); + () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); private void loadDownloadLog() { if (disposable != null) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java index 7eb0847eb..e72e53c30 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -45,7 +45,6 @@ import de.danoeh.antennapod.event.FeedItemEvent; import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; @@ -113,7 +112,7 @@ public abstract class EpisodesListFragment extends Fragment { } private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); + () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java index 947b8aa6e..ccc4e2e5f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java @@ -36,12 +36,10 @@ import com.google.android.material.snackbar.Snackbar; import com.joanzapata.iconify.Iconify; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.glide.FastBlurTransformation; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; -import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.syndication.HtmlToPlainText; import de.danoeh.antennapod.fragment.preferences.StatisticsFragment; @@ -280,13 +278,7 @@ public class FeedInfoFragment extends Fragment implements Toolbar.OnMenuItemClic R.string.please_wait_for_data, Toast.LENGTH_LONG); return false; } - boolean handled = false; - try { - handled = FeedMenuHandler.onOptionsItemClicked(getContext(), item, feed); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(getContext(), e.getMessage()); - } + boolean handled = FeedMenuHandler.onOptionsItemClicked(getContext(), item, feed); if (item.getItemId() == R.id.reconnect_local_folder && Build.VERSION.SDK_INT >= 21) { AlertDialog.Builder alert = new AlertDialog.Builder(getContext()); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java index 5df8e2ccf..18bc75fbd 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -48,7 +48,6 @@ import java.util.Set; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.EpisodeItemListAdapter; -import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.event.DownloadEvent; import de.danoeh.antennapod.core.event.DownloaderUpdate; import de.danoeh.antennapod.event.FavoritesEvent; @@ -65,8 +64,6 @@ import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.FeedItemPermutors; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil; @@ -203,12 +200,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem nextPageLoader = new MoreContentListFooterUtil(root.findViewById(R.id.more_content_list_footer)); nextPageLoader.setClickListener(() -> { if (feed != null) { - try { - DBTasks.loadNextPageOfFeed(getActivity(), feed, false); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage()); - } + DBTasks.loadNextPageOfFeed(getActivity(), feed, false); } }); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @@ -226,11 +218,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem SwipeRefreshLayout swipeRefreshLayout = root.findViewById(R.id.swipeRefresh); swipeRefreshLayout.setDistanceToTriggerSync(getResources().getInteger(R.integer.swipe_refresh_distance)); swipeRefreshLayout.setOnRefreshListener(() -> { - try { - DBTasks.forceRefreshFeed(requireContext(), feed, true); - } catch (DownloadRequestException e) { - e.printStackTrace(); - } + DBTasks.forceRefreshFeed(requireContext(), feed, true); new Handler(Looper.getMainLooper()).postDelayed(() -> swipeRefreshLayout.setRefreshing(false), getResources().getInteger(R.integer.swipe_to_refresh_duration_in_ms)); }); @@ -285,12 +273,8 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem super.onSaveInstanceState(outState); } - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = new MenuItemUtils.UpdateRefreshMenuItemChecker() { - @Override - public boolean isRefreshing() { - return feed != null && DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFile(feed); - } - }; + private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = + () -> DownloadService.isRunning && DownloadService.isDownloadingFile(feed.getDownload_url()); private void refreshToolbarState() { if (feed == null) { @@ -318,14 +302,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem R.string.please_wait_for_data, Toast.LENGTH_LONG); return true; } - boolean feedMenuHandled; - try { - feedMenuHandled = FeedMenuHandler.onOptionsItemClicked(getActivity(), item, feed); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(getActivity(), e.getMessage()); - return true; - } + boolean feedMenuHandled = FeedMenuHandler.onOptionsItemClicked(getActivity(), item, feed); if (feedMenuHandled) { return true; } @@ -479,10 +456,10 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem if (isUpdatingFeed != updateRefreshMenuItemChecker.isRefreshing()) { refreshToolbarState(); } - if (!DownloadRequester.getInstance().isDownloadingFeeds()) { + if (!DownloadService.isDownloadingFeeds()) { nextPageLoader.getRoot().setVisibility(View.GONE); } - nextPageLoader.setLoadingState(DownloadRequester.getInstance().isDownloadingFeeds()); + nextPageLoader.setLoadingState(DownloadService.isDownloadingFeeds()); } private void displayList() { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java index 726eafa14..715786921 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -39,6 +39,7 @@ import de.danoeh.antennapod.adapter.actionbutton.StreamActionButton; import de.danoeh.antennapod.adapter.actionbutton.VisitWebsiteActionButton; import de.danoeh.antennapod.core.event.DownloadEvent; import de.danoeh.antennapod.core.event.DownloaderUpdate; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.event.FeedItemEvent; import de.danoeh.antennapod.event.PlayerStatusEvent; import de.danoeh.antennapod.event.UnreadItemsUpdateEvent; @@ -50,7 +51,6 @@ import de.danoeh.antennapod.core.preferences.UsageStatistics; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.DateFormatter; import de.danoeh.antennapod.core.util.FeedItemUtil; @@ -336,7 +336,7 @@ public class ItemFragment extends Fragment { } else { actionButton1 = new StreamActionButton(item); } - if (DownloadRequester.getInstance().isDownloadingFile(media)) { + if (DownloadService.isDownloadingFile(media.getDownload_url())) { actionButton2 = new CancelDownloadActionButton(item); } else if (!media.isDownloaded()) { actionButton2 = new DownloadActionButton(item); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index c145642b9..a79e066e1 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -48,7 +48,6 @@ import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.model.feed.FeedItemFilter; @@ -262,7 +261,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi } private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); + () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); private void refreshToolbarState() { boolean keepSorted = UserPreferences.isQueueKeepSorted(); 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 200f4dcd6..a29fd0425 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -50,7 +50,6 @@ import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.storage.NavDrawerData; import de.danoeh.antennapod.core.util.download.AutoUpdateManager; import de.danoeh.antennapod.dialog.FeedSortDialog; @@ -403,7 +402,7 @@ public class SubscriptionFragment extends Fragment } private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); + () -> DownloadService.isRunning && DownloadService.isDownloadingFeeds(); @Override public void onEndSelectMode() { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java b/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java index 710ec6ce0..17642874e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java @@ -11,10 +11,10 @@ import java.util.List; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; +import de.danoeh.antennapod.core.service.download.DownloadRequest; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.model.feed.FeedItem; @@ -78,19 +78,14 @@ public class EpisodeMultiSelectActionHandler { private void downloadChecked() { // download the check episodes in the same order as they are currently displayed - List<FeedItem> toDownload = new ArrayList<>(selectedItems.size()); + List<DownloadRequest> requests = new ArrayList<>(); for (FeedItem episode : selectedItems) { if (episode.hasMedia() && !episode.getFeed().isLocalFeed()) { - toDownload.add(episode); + requests.add(DownloadRequestCreator.create(episode.getMedia()).build()); } } - try { - DownloadRequester.getInstance().downloadMedia(activity, true, toDownload.toArray(new FeedItem[0])); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(activity, e.getMessage()); - } - showMessage(R.plurals.downloading_batch_label, toDownload.size()); + DownloadService.download(activity, true, requests.toArray(new DownloadRequest[0])); + showMessage(R.plurals.downloading_batch_label, requests.size()); } private void deleteChecked() { diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index d4c7a838c..f59be601c 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -17,7 +17,6 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.ShareUtils; import de.danoeh.antennapod.model.feed.SortOrder; @@ -55,11 +54,8 @@ public class FeedMenuHandler { /** * NOTE: This method does not handle clicks on the 'remove feed' - item. - * - * @throws DownloadRequestException */ - public static boolean onOptionsItemClicked(final Context context, final MenuItem item, - final Feed selectedFeed) throws DownloadRequestException { + public static boolean onOptionsItemClicked(final Context context, final MenuItem item, final Feed selectedFeed) { final int itemId = item.getItemId(); if (itemId == R.id.refresh_item) { DBTasks.forceRefreshFeed(context, selectedFeed, true); diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java index 020f4374b..8cb5a7cdf 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/receiver/ConnectivityActionReceiver.java @@ -7,7 +7,6 @@ import android.net.ConnectivityManager; import android.text.TextUtils; import android.util.Log; - import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.util.NetworkUtils; diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/PowerConnectionReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/PowerConnectionReceiver.java index 339a4f0f7..34ce83489 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/PowerConnectionReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/receiver/PowerConnectionReceiver.java @@ -7,8 +7,8 @@ import android.util.Log; import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.storage.DBTasks; -import de.danoeh.antennapod.core.storage.DownloadRequester; // modified from http://developer.android.com/training/monitoring-device-state/battery-monitoring.html // and ConnectivityActionReceiver.java @@ -37,7 +37,7 @@ public class PowerConnectionReceiver extends BroadcastReceiver { // if we're not supposed to be auto-downloading when we're not charging, stop it if (!UserPreferences.isEnableAutodownloadOnBattery()) { Log.d(TAG, "not charging anymore, canceling auto-download"); - DownloadRequester.getInstance().cancelAllDownloads(context); + DownloadService.cancelAll(context); } else { Log.d(TAG, "not charging anymore, but the user allows auto-download " + "when on battery so we'll keep going"); diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java b/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java index 5981d3d67..d1636dcff 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java +++ b/app/src/main/java/de/danoeh/antennapod/receiver/SPAReceiver.java @@ -11,9 +11,9 @@ import java.util.Arrays; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.ClientConfig; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.service.download.DownloadRequestCreator; import de.danoeh.antennapod.model.feed.Feed; -import de.danoeh.antennapod.core.storage.DownloadRequestException; -import de.danoeh.antennapod.core.storage.DownloadRequester; /** * Receives intents from AntennaPod Single Purpose apps @@ -44,12 +44,7 @@ public class SPAReceiver extends BroadcastReceiver{ ClientConfig.initialize(context); for (String url : feedUrls) { Feed f = new Feed(url, null); - try { - DownloadRequester.getInstance().downloadFeed(context, f); - } catch (DownloadRequestException e) { - Log.e(TAG, "Error while trying to add feed " + url); - e.printStackTrace(); - } + DownloadService.download(context, false, DownloadRequestCreator.create(f).build()); } Toast.makeText(context, R.string.sp_apps_importing_feeds_msg, Toast.LENGTH_LONG).show(); } diff --git a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java index 8d1810ecb..d231e522f 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java +++ b/app/src/main/java/de/danoeh/antennapod/view/viewholder/EpisodeItemViewHolder.java @@ -21,6 +21,8 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.CoverLoader; import de.danoeh.antennapod.adapter.actionbutton.ItemActionButton; +import de.danoeh.antennapod.core.service.download.DownloadRequest; +import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.event.playback.PlaybackPositionEvent; import de.danoeh.antennapod.core.util.DateFormatter; import de.danoeh.antennapod.model.feed.FeedItem; @@ -28,9 +30,7 @@ import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.model.playback.MediaType; import de.danoeh.antennapod.core.feed.util.ImageResourceUtils; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.service.download.DownloadRequest; import de.danoeh.antennapod.core.service.playback.PlaybackService; -import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.FeedItemUtil; import de.danoeh.antennapod.core.util.NetworkUtils; @@ -145,8 +145,8 @@ public class EpisodeItemViewHolder extends RecyclerView.ViewHolder { itemView.setBackgroundResource(ThemeUtils.getDrawableFromAttr(activity, R.attr.selectableItemBackground)); } - if (DownloadRequester.getInstance().isDownloadingFile(media)) { - final DownloadRequest downloadRequest = DownloadRequester.getInstance().getRequestFor(media); + if (DownloadService.isDownloadingFile(media.getDownload_url())) { + final DownloadRequest downloadRequest = DownloadService.findRequest(media.getDownload_url()); float percent = 0.01f * downloadRequest.getProgressPercent(); secondaryActionProgress.setPercentage(Math.max(percent, 0.01f), item); } else if (media.isDownloaded()) { |