summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/activity
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2023-05-05 23:09:03 +0200
committerGitHub <noreply@github.com>2023-05-05 23:09:03 +0200
commit6d7bfef8a5fe8180f13904739996bb2b8de8a0d4 (patch)
tree84f246b74fe7254678788e9f206d81d1a30ffa5e /app/src/main/java/de/danoeh/antennapod/activity
parent4c286931cd2dbd9038022f808f9d8a73ccbb6759 (diff)
downloadAntennaPod-6d7bfef8a5fe8180f13904739996bb2b8de8a0d4.zip
Download Service Rewrite (#6420)
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/activity')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java71
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java47
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java18
3 files changed, 52 insertions, 84 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java
deleted file mode 100644
index 176c3c990..000000000
--- a/app/src/main/java/de/danoeh/antennapod/activity/DownloadAuthenticationActivity.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package de.danoeh.antennapod.activity;
-
-import android.os.Bundle;
-import android.text.TextUtils;
-import androidx.appcompat.app.AppCompatActivity;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.preferences.ThemeSwitcher;
-import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
-import de.danoeh.antennapod.model.feed.FeedMedia;
-import de.danoeh.antennapod.model.feed.FeedPreferences;
-import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest;
-import de.danoeh.antennapod.core.storage.DBReader;
-import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.dialog.AuthenticationDialog;
-import de.danoeh.antennapod.ui.appstartintent.DownloadAuthenticationActivityStarter;
-import io.reactivex.Completable;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.schedulers.Schedulers;
-
-
-/**
- * Shows a username and a password text field.
- * The activity MUST be started with the ARG_DOWNlOAD_REQUEST argument set to a non-null value.
- */
-public class DownloadAuthenticationActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- setTheme(ThemeSwitcher.getTranslucentTheme(this));
- super.onCreate(savedInstanceState);
-
- DownloadRequest request = getIntent().getParcelableExtra(
- DownloadAuthenticationActivityStarter.EXTRA_DOWNLOAD_REQUEST);
-
- new AuthenticationDialog(this, R.string.authentication_label, true, "", "") {
- @Override
- protected void onConfirmed(String username, String password) {
- Completable.fromAction(
- () -> {
- request.setUsername(username);
- request.setPassword(password);
-
- if (request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
- long mediaId = request.getFeedfileId();
- FeedMedia media = DBReader.getFeedMedia(mediaId);
- if (media != null) {
- FeedPreferences preferences = media.getItem().getFeed().getPreferences();
- if (TextUtils.isEmpty(preferences.getPassword())
- || TextUtils.isEmpty(preferences.getUsername())) {
- preferences.setUsername(username);
- preferences.setPassword(password);
- DBWriter.setFeedPreferences(preferences);
- }
- }
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(() -> {
- DownloadServiceInterface.get()
- .download(DownloadAuthenticationActivity.this, false, request);
- finish();
- });
- }
-
- @Override
- protected void onCancelled() {
- finish();
- }
- }.show();
- }
-}
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 bd467076a..a55bfade3 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -39,12 +39,14 @@ import de.danoeh.antennapod.core.preferences.ThemeSwitcher;
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
import de.danoeh.antennapod.core.util.download.FeedUpdateManager;
import de.danoeh.antennapod.dialog.RatingDialog;
+import de.danoeh.antennapod.event.EpisodeDownloadEvent;
import de.danoeh.antennapod.event.FeedUpdateRunningEvent;
import de.danoeh.antennapod.event.MessageEvent;
import de.danoeh.antennapod.fragment.AddFeedFragment;
import de.danoeh.antennapod.fragment.AllEpisodesFragment;
import de.danoeh.antennapod.fragment.AudioPlayerFragment;
import de.danoeh.antennapod.fragment.CompletedDownloadsFragment;
+import de.danoeh.antennapod.fragment.DownloadLogFragment;
import de.danoeh.antennapod.fragment.FeedItemlistFragment;
import de.danoeh.antennapod.fragment.InboxFragment;
import de.danoeh.antennapod.fragment.NavDrawerFragment;
@@ -53,6 +55,8 @@ import de.danoeh.antennapod.fragment.QueueFragment;
import de.danoeh.antennapod.fragment.SearchFragment;
import de.danoeh.antennapod.fragment.SubscriptionFragment;
import de.danoeh.antennapod.fragment.TransitionEffect;
+import de.danoeh.antennapod.model.download.DownloadStatus;
+import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
import de.danoeh.antennapod.playback.cast.CastEnabledActivity;
import de.danoeh.antennapod.preferences.PreferenceUpgrader;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
@@ -66,6 +70,9 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* The activity that is shown when the user launches the app.
*/
@@ -173,6 +180,39 @@ public class MainActivity extends CastEnabledActivity {
}
EventBus.getDefault().postSticky(new FeedUpdateRunningEvent(isRefreshingFeeds));
});
+ WorkManager.getInstance(this)
+ .getWorkInfosByTagLiveData(DownloadServiceInterface.WORK_TAG)
+ .observe(this, workInfos -> {
+ Map<String, DownloadStatus> updatedEpisodes = new HashMap<>();
+ for (WorkInfo workInfo : workInfos) {
+ String downloadUrl = null;
+ for (String tag : workInfo.getTags()) {
+ if (tag.startsWith(DownloadServiceInterface.WORK_TAG_EPISODE_URL)) {
+ downloadUrl = tag.substring(DownloadServiceInterface.WORK_TAG_EPISODE_URL.length());
+ }
+ }
+ if (downloadUrl == null) {
+ continue;
+ }
+ int status;
+ if (workInfo.getState() == WorkInfo.State.RUNNING) {
+ status = DownloadStatus.STATE_RUNNING;
+ } else if (workInfo.getState() == WorkInfo.State.ENQUEUED
+ || workInfo.getState() == WorkInfo.State.BLOCKED) {
+ status = DownloadStatus.STATE_QUEUED;
+ } else {
+ status = DownloadStatus.STATE_COMPLETED;
+ }
+ int progress = workInfo.getProgress().getInt(DownloadServiceInterface.WORK_DATA_PROGRESS, -1);
+ if (progress == -1 && status != DownloadStatus.STATE_COMPLETED) {
+ status = DownloadStatus.STATE_QUEUED;
+ progress = 0;
+ }
+ updatedEpisodes.put(downloadUrl, new DownloadStatus(status, progress));
+ }
+ DownloadServiceInterface.get().setCurrentDownloads(updatedEpisodes);
+ EventBus.getDefault().postSticky(new EpisodeDownloadEvent(updatedEpisodes));
+ });
}
@Override
@@ -531,9 +571,9 @@ public class MainActivity extends CastEnabledActivity {
public void onEventMainThread(MessageEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
- Snackbar snackbar = showSnackbarAbovePlayer(event.message, Snackbar.LENGTH_SHORT);
+ Snackbar snackbar = showSnackbarAbovePlayer(event.message, Snackbar.LENGTH_LONG);
if (event.action != null) {
- snackbar.setAction(getString(R.string.undo), v -> event.action.run());
+ snackbar.setAction(event.actionText, v -> event.action.accept(this));
}
}
@@ -570,6 +610,9 @@ public class MainActivity extends CastEnabledActivity {
if (intent.getBooleanExtra(MainActivityStarter.EXTRA_OPEN_DRAWER, false) && drawerLayout != null) {
drawerLayout.open();
}
+ if (intent.getBooleanExtra(MainActivityStarter.EXTRA_OPEN_DOWNLOAD_LOGS, false)) {
+ new DownloadLogFragment().show(getSupportFragmentManager(), null);
+ }
if (intent.getBooleanExtra(EXTRA_REFRESH_ON_START, false)) {
FeedUpdateManager.runOnceOrAsk(this);
}
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 f5f3d28f6..3812339bd 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
@@ -31,20 +31,20 @@ import com.google.android.material.snackbar.Snackbar;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.FeedItemlistDescriptionAdapter;
-import de.danoeh.antennapod.core.event.DownloadEvent;
import de.danoeh.antennapod.core.preferences.ThemeSwitcher;
-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.core.storage.DBTasks;
import de.danoeh.antennapod.core.service.playback.PlaybackServiceInterface;
import de.danoeh.antennapod.core.util.DownloadErrorLabel;
+import de.danoeh.antennapod.event.EpisodeDownloadEvent;
import de.danoeh.antennapod.event.FeedListUpdateEvent;
import de.danoeh.antennapod.event.PlayerStatusEvent;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
+import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest;
-import de.danoeh.antennapod.model.download.DownloadStatus;
+import de.danoeh.antennapod.model.download.DownloadResult;
import de.danoeh.antennapod.core.service.download.Downloader;
import de.danoeh.antennapod.core.service.download.HttpDownloader;
import de.danoeh.antennapod.core.storage.DBReader;
@@ -307,10 +307,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
error -> Log.e(TAG, Log.getStackTraceString(error)));
}
- private void checkDownloadResult(@NonNull DownloadStatus status, String destination) {
- if (status.isCancelled()) {
- return;
- }
+ private void checkDownloadResult(@NonNull DownloadResult status, String destination) {
if (status.isSuccessful()) {
parseFeed(destination);
} else if (status.getReason() == DownloadError.ERROR_UNAUTHORIZED) {
@@ -341,9 +338,8 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
);
}
- @Subscribe(threadMode = ThreadMode.MAIN)
- public void onEventMainThread(DownloadEvent event) {
- Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
+ @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
+ public void onEventMainThread(EpisodeDownloadEvent event) {
handleUpdatedFeedStatus();
}
@@ -535,7 +531,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
}
private void handleUpdatedFeedStatus() {
- if (DownloadService.isDownloadingFile(selectedDownloadUrl)) {
+ if (DownloadServiceInterface.get().isDownloadingEpisode(selectedDownloadUrl)) {
viewBinding.subscribeButton.setEnabled(false);
viewBinding.subscribeButton.setText(R.string.subscribing_label);
} else if (feedInFeedlist()) {