diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2023-05-05 23:09:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-05 23:09:03 +0200 |
commit | 6d7bfef8a5fe8180f13904739996bb2b8de8a0d4 (patch) | |
tree | 84f246b74fe7254678788e9f206d81d1a30ffa5e /app/src/main/java/de/danoeh/antennapod/activity | |
parent | 4c286931cd2dbd9038022f808f9d8a73ccbb6759 (diff) | |
download | AntennaPod-6d7bfef8a5fe8180f13904739996bb2b8de8a0d4.zip |
Download Service Rewrite (#6420)
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/activity')
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()) { |