summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java164
1 files changed, 84 insertions, 80 deletions
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 2e11ea4ec..1f6067125 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
@@ -5,36 +5,36 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.ListFragment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-
+import android.widget.Toast;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.ListFragment;
import com.google.android.material.snackbar.Snackbar;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DownloadLogAdapter;
import de.danoeh.antennapod.core.event.DownloadEvent;
import de.danoeh.antennapod.core.event.DownloadLogEvent;
-import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.event.DownloaderUpdate;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.download.DownloadRequest;
import de.danoeh.antennapod.core.service.download.DownloadService;
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.menuhandler.MenuItemUtils;
+import de.danoeh.antennapod.model.feed.Feed;
+import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.view.EmptyViewHandler;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -44,6 +44,9 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Shows the download log
*/
@@ -52,6 +55,7 @@ public class DownloadLogFragment extends ListFragment {
private static final String TAG = "DownloadLogFragment";
private List<DownloadStatus> downloadLog = new ArrayList<>();
+ private List<Downloader> runningDownloads = new ArrayList<>();
private DownloadLogAdapter adapter;
private Disposable disposable;
@@ -60,7 +64,7 @@ public class DownloadLogFragment extends ListFragment {
@Override
public void onStart() {
super.onStart();
- loadItems();
+ loadDownloadLog();
}
@Override
@@ -79,14 +83,15 @@ public class DownloadLogFragment extends ListFragment {
lv.setClipToPadding(false);
final int vertPadding = getResources().getDimensionPixelSize(R.dimen.list_vertical_padding);
lv.setPadding(0, vertPadding, 0, vertPadding);
+ setListShown(true);
EmptyViewHandler emptyView = new EmptyViewHandler(getActivity());
- emptyView.setIcon(R.attr.av_download);
+ emptyView.setIcon(R.drawable.ic_download);
emptyView.setTitle(R.string.no_log_downloads_head_label);
emptyView.setMessage(R.string.no_log_downloads_label);
emptyView.attachToListView(getListView());
- adapter = new DownloadLogAdapter(getActivity(), itemAccess);
+ adapter = new DownloadLogAdapter(getActivity(), this);
setListAdapter(adapter);
EventBus.getDefault().register(this);
}
@@ -97,70 +102,64 @@ public class DownloadLogFragment extends ListFragment {
super.onDestroyView();
}
- private void onFragmentLoaded() {
- setListShown(true);
- adapter.notifyDataSetChanged();
- ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
- }
-
@Override
public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
super.onListItemClick(l, v, position, id);
- DownloadStatus status = adapter.getItem(position);
- String url = "unknown";
- String message = getString(R.string.download_successful);
- if (status.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
- FeedMedia media = DBReader.getFeedMedia(status.getFeedfileId());
- if (media != null) {
- url = media.getDownload_url();
- }
- } else if (status.getFeedfileType() == Feed.FEEDFILETYPE_FEED) {
- Feed feed = DBReader.getFeed(status.getFeedfileId());
- if (feed != null) {
- url = feed.getDownload_url();
- }
- }
-
- if (!status.isSuccessful()) {
- message = status.getReasonDetailed();
- }
-
- String messageFull = getString(R.string.download_error_details_message, message, url);
- AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
- builder.setTitle(R.string.download_error_details);
- builder.setMessage(messageFull);
- builder.setPositiveButton(android.R.string.ok, null);
- builder.setNeutralButton(R.string.copy_to_clipboard, (dialog, which) -> {
- ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
- ClipData clip = ClipData.newPlainText(getString(R.string.download_error_details), messageFull);
- clipboard.setPrimaryClip(clip);
- ((MainActivity) getActivity()).showSnackbarAbovePlayer(R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT);
- });
- Dialog dialog = builder.show();
- ((TextView) dialog.findViewById(android.R.id.message)).setTextIsSelectable(true);
- }
+ Object item = adapter.getItem(position);
+ if (item instanceof Downloader) {
+ DownloadRequest downloadRequest = ((Downloader) item).getDownloadRequest();
+ DownloadRequester.getInstance().cancelDownload(getActivity(), downloadRequest.getSource());
- private final DownloadLogAdapter.ItemAccess itemAccess = new DownloadLogAdapter.ItemAccess() {
+ if (downloadRequest.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA
+ && UserPreferences.isEnableAutodownload()) {
+ FeedMedia media = DBReader.getFeedMedia(downloadRequest.getFeedfileId());
+ DBWriter.setFeedItemAutoDownload(media.getItem(), false);
- @Override
- public int getCount() {
- return downloadLog.size();
- }
+ ((MainActivity) getActivity()).showSnackbarAbovePlayer(
+ R.string.download_canceled_autodownload_enabled_msg, Toast.LENGTH_SHORT);
+ }
+ } else if (item instanceof DownloadStatus) {
+ DownloadStatus status = (DownloadStatus) item;
+ String url = "unknown";
+ String message = getString(R.string.download_successful);
+ if (status.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
+ FeedMedia media = DBReader.getFeedMedia(status.getFeedfileId());
+ if (media != null) {
+ url = media.getDownload_url();
+ }
+ } else if (status.getFeedfileType() == Feed.FEEDFILETYPE_FEED) {
+ Feed feed = DBReader.getFeed(status.getFeedfileId());
+ if (feed != null) {
+ url = feed.getDownload_url();
+ }
+ }
- @Override
- public DownloadStatus getItem(int position) {
- if (0 <= position && position < downloadLog.size()) {
- return downloadLog.get(position);
- } else {
- return null;
+ if (!status.isSuccessful()) {
+ message = status.getReasonDetailed();
}
+
+ String messageFull = getString(R.string.download_error_details_message, message, url);
+ AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+ builder.setTitle(R.string.download_error_details);
+ builder.setMessage(messageFull);
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.setNeutralButton(R.string.copy_to_clipboard, (dialog, which) -> {
+ ClipboardManager clipboard = (ClipboardManager) getContext()
+ .getSystemService(Context.CLIPBOARD_SERVICE);
+ ClipData clip = ClipData.newPlainText(getString(R.string.download_error_details), messageFull);
+ clipboard.setPrimaryClip(clip);
+ ((MainActivity) getActivity()).showSnackbarAbovePlayer(
+ R.string.copied_to_clipboard, Snackbar.LENGTH_SHORT);
+ });
+ Dialog dialog = builder.show();
+ ((TextView) dialog.findViewById(android.R.id.message)).setTextIsSelectable(true);
}
- };
+ }
@Subscribe
public void onDownloadLogChanged(DownloadLogEvent event) {
- loadItems();
+ loadDownloadLog();
}
@Override
@@ -172,20 +171,16 @@ public class DownloadLogFragment extends ListFragment {
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
- if (!super.onOptionsItemSelected(item)) {
- switch (item.getItemId()) {
- case R.id.clear_logs_item:
- DBWriter.clearDownloadLog();
- return true;
- case R.id.refresh_item:
- AutoUpdateManager.runImmediate(requireContext());
- return true;
- default:
- return false;
- }
- } else {
+ if (super.onOptionsItemSelected(item)) {
+ return true;
+ } else if (item.getItemId() == R.id.clear_logs_item) {
+ DBWriter.clearDownloadLog();
+ return true;
+ } else if (item.getItemId() == R.id.refresh_item) {
+ AutoUpdateManager.runImmediate(requireContext());
return true;
}
+ return false;
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
@@ -196,10 +191,18 @@ public class DownloadLogFragment extends ListFragment {
}
}
+ @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
+ public void onEvent(DownloadEvent event) {
+ Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]");
+ DownloaderUpdate update = event.update;
+ runningDownloads = update.downloaders;
+ adapter.setRunningDownloads(runningDownloads);
+ }
+
private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker =
() -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds();
- private void loadItems() {
+ private void loadDownloadLog() {
if (disposable != null) {
disposable.dispose();
}
@@ -209,7 +212,8 @@ public class DownloadLogFragment extends ListFragment {
.subscribe(result -> {
if (result != null) {
downloadLog = result;
- onFragmentLoaded();
+ adapter.setDownloadLog(downloadLog);
+ ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this);
}
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
}