diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment')
3 files changed, 86 insertions, 242 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 0fa2ac639..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.model.feed.Feed; -import de.danoeh.antennapod.model.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,6 +83,7 @@ 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.drawable.ic_download); @@ -86,7 +91,7 @@ public class DownloadLogFragment extends ListFragment { 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(); - } - } + Object item = adapter.getItem(position); + if (item instanceof Downloader) { + DownloadRequest downloadRequest = ((Downloader) item).getDownloadRequest(); + DownloadRequester.getInstance().cancelDownload(getActivity(), downloadRequest.getSource()); - 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); - } + if (downloadRequest.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA + && UserPreferences.isEnableAutodownload()) { + FeedMedia media = DBReader.getFeedMedia(downloadRequest.getFeedfileId()); + DBWriter.setFeedItemAutoDownload(media.getItem(), false); - private final DownloadLogAdapter.ItemAccess itemAccess = new DownloadLogAdapter.ItemAccess() { - - @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))); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java index 5c83cee57..bc3884b37 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java @@ -31,10 +31,9 @@ public class DownloadsFragment extends PagedToolbarFragment { private static final String PREF_LAST_TAB_POSITION = "tab_position"; private static final String KEY_UP_ARROW = "up_arrow"; - public static final int POS_RUNNING = 0; - private static final int POS_COMPLETED = 1; - public static final int POS_LOG = 2; - private static final int TOTAL_COUNT = 3; + private static final int POS_COMPLETED = 0; + public static final int POS_LOG = 1; + private static final int TOTAL_COUNT = 2; private ViewPager2 viewPager; private TabLayout tabLayout; @@ -64,9 +63,6 @@ public class DownloadsFragment extends PagedToolbarFragment { tabLayout = root.findViewById(R.id.sliding_tabs); new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> { switch (position) { - case POS_RUNNING: - tab.setText(R.string.downloads_running_label); - break; case POS_COMPLETED: tab.setText(R.string.downloads_completed_label); break; @@ -121,8 +117,6 @@ public class DownloadsFragment extends PagedToolbarFragment { @Override public Fragment createFragment(int position) { switch (position) { - case POS_RUNNING: - return new RunningDownloadsFragment(); case POS_COMPLETED: return new CompletedDownloadsFragment(); default: diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java deleted file mode 100644 index f43c67419..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java +++ /dev/null @@ -1,154 +0,0 @@ -package de.danoeh.antennapod.fragment; - -import android.os.Bundle; - -import androidx.annotation.NonNull; -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.Toast; - -import de.danoeh.antennapod.activity.MainActivity; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; - -import java.util.ArrayList; -import java.util.List; - -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.adapter.DownloadlistAdapter; -import de.danoeh.antennapod.core.event.DownloadEvent; -import de.danoeh.antennapod.core.event.DownloaderUpdate; -import de.danoeh.antennapod.model.feed.FeedMedia; -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.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.view.EmptyViewHandler; -import org.greenrobot.eventbus.ThreadMode; - -/** - * Displays all running downloads and provides actions to cancel them - */ -public class RunningDownloadsFragment extends ListFragment { - - private static final String TAG = "RunningDownloadsFrag"; - - private DownloadlistAdapter adapter; - private List<Downloader> downloaderList = new ArrayList<>(); - - private boolean isUpdatingFeeds = false; - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - // add padding - final ListView lv = getListView(); - lv.setClipToPadding(false); - final int vertPadding = getResources().getDimensionPixelSize(R.dimen.list_vertical_padding); - lv.setPadding(0, vertPadding, 0, vertPadding); - - adapter = new DownloadlistAdapter(getActivity(), itemAccess); - setListAdapter(adapter); - - EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); - emptyView.setIcon(R.drawable.ic_download); - emptyView.setTitle(R.string.no_run_downloads_head_label); - emptyView.setMessage(R.string.no_run_downloads_label); - emptyView.attachToListView(getListView()); - - } - - @Override - public void onStart() { - super.onStart(); - EventBus.getDefault().register(this); - } - - @Override - public void onStop() { - super.onStop(); - EventBus.getDefault().unregister(this); - } - - @Override - public void onDestroy() { - super.onDestroy(); - setListAdapter(null); - } - - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - menu.findItem(R.id.clear_logs_item).setVisible(false); - menu.findItem(R.id.episode_actions).setVisible(false); - isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.refresh_item) { - AutoUpdateManager.runImmediate(requireContext()); - return true; - } - return false; - } - - @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) - public void onEventMainThread(DownloadEvent event) { - Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); - if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { - ((PagedToolbarFragment) getParentFragment()).invalidateOptionsMenuIfActive(this); - } - } - - private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = - () -> DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); - - @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) - public void onEvent(DownloadEvent event) { - Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]"); - DownloaderUpdate update = event.update; - downloaderList = update.downloaders; - adapter.notifyDataSetChanged(); - } - - private final DownloadlistAdapter.ItemAccess itemAccess = new DownloadlistAdapter.ItemAccess() { - @Override - public int getCount() { - return downloaderList.size(); - } - - @Override - public Downloader getItem(int position) { - if (0 <= position && position < downloaderList.size()) { - return downloaderList.get(position); - } else { - return null; - } - } - - @Override - public void onSecondaryActionClick(Downloader downloader) { - DownloadRequest downloadRequest = downloader.getDownloadRequest(); - DownloadRequester.getInstance().cancelDownload(getActivity(), downloadRequest.getSource()); - - if (downloadRequest.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA - && UserPreferences.isEnableAutodownload()) { - FeedMedia media = DBReader.getFeedMedia(downloadRequest.getFeedfileId()); - DBWriter.setFeedItemAutoDownload(media.getItem(), false); - - ((MainActivity) getActivity()).showSnackbarAbovePlayer( - R.string.download_canceled_autodownload_enabled_msg, Toast.LENGTH_SHORT); - } - } - }; -} |