From 473444291f68c7f8a205712c1b51fad74b0b1420 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sat, 27 Jun 2015 14:55:48 -0400 Subject: Folks weren't always getting the updated copy of the download list, now they are. fixes AntennaPod/AntennaPod#968 --- .../danoeh/antennapod/fragment/AllEpisodesFragment.java | 9 +-------- .../java/de/danoeh/antennapod/fragment/ItemFragment.java | 9 +-------- .../de/danoeh/antennapod/fragment/ItemlistFragment.java | 9 +-------- .../antennapod/fragment/PlaybackHistoryFragment.java | 9 +-------- .../java/de/danoeh/antennapod/fragment/QueueFragment.java | 9 +-------- .../antennapod/fragment/RunningDownloadsFragment.java | 11 ++++------- .../antennapod/core/asynctask/DownloadObserver.java | 15 +++++++++------ .../antennapod/core/service/download/DownloadService.java | 7 +++++++ 8 files changed, 25 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index f40bcf999..e48b175e8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -385,14 +385,7 @@ public class AllEpisodesFragment extends Fragment { private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @Override - public void onContentChanged() { - if (listAdapter != null) { - listAdapter.notifyDataSetChanged(); - } - } - - @Override - public void onDownloadDataAvailable(List downloaderList) { + public void onContentChanged(List downloaderList) { AllEpisodesFragment.this.downloaderList = downloaderList; if (listAdapter != null) { listAdapter.notifyDataSetChanged(); 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 b8352bd34..65b1c8f80 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -531,14 +531,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba private final DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @Override - public void onContentChanged() { - if (itemsLoaded && getActivity() != null) { - updateAppearance(); - } - } - - @Override - public void onDownloadDataAvailable(List downloaderList) { + public void onContentChanged(List downloaderList) { ItemFragment.this.downloaderList = downloaderList; if (itemsLoaded && getActivity() != null) { updateAppearance(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index 5a788b10c..726e99621 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -458,14 +458,7 @@ public class ItemlistFragment extends ListFragment { private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @Override - public void onContentChanged() { - if (adapter != null) { - adapter.notifyDataSetChanged(); - } - } - - @Override - public void onDownloadDataAvailable(List downloaderList) { + public void onContentChanged(List downloaderList) { ItemlistFragment.this.downloaderList = downloaderList; if (adapter != null) { adapter.notifyDataSetChanged(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 9099829d8..fc8bf2fbb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -204,14 +204,7 @@ public class PlaybackHistoryFragment extends ListFragment { private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @Override - public void onContentChanged() { - if (adapter != null) { - adapter.notifyDataSetChanged(); - } - } - - @Override - public void onDownloadDataAvailable(List downloaderList) { + public void onContentChanged(List downloaderList) { PlaybackHistoryFragment.this.downloaderList = downloaderList; if (adapter != null) { adapter.notifyDataSetChanged(); 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 77b2d590f..282688210 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -473,14 +473,7 @@ public class QueueFragment extends Fragment { private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @Override - public void onContentChanged() { - if (listAdapter != null && !blockDownloadObserverUpdate) { - listAdapter.notifyDataSetChanged(); - } - } - - @Override - public void onDownloadDataAvailable(List downloaderList) { + public void onContentChanged(List downloaderList) { QueueFragment.this.downloaderList = downloaderList; if (listAdapter != null && !blockDownloadObserverUpdate) { listAdapter.notifyDataSetChanged(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java index b1b61f74b..eb4d18328 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.fragment; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ListFragment; +import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.Toast; @@ -24,7 +25,7 @@ import de.danoeh.antennapod.core.storage.DownloadRequester; * Displays all running downloads and provides actions to cancel them */ public class RunningDownloadsFragment extends ListFragment { - private static final String TAG = "RunningDownloadsFragment"; + private static final String TAG = "RunningDownloadsFrag"; private DownloadObserver downloadObserver; private List downloaderList; @@ -53,12 +54,8 @@ public class RunningDownloadsFragment extends ListFragment { downloadObserver = new DownloadObserver(getActivity(), new Handler(), new DownloadObserver.Callback() { @Override - public void onContentChanged() { - downloadlistAdapter.notifyDataSetChanged(); - } - - @Override - public void onDownloadDataAvailable(List downloaderList) { + public void onContentChanged(List downloaderList) { + Log.d(TAG, "onContentChanged: downloaderList.size() == " + downloaderList.size()); RunningDownloadsFragment.this.downloaderList = downloaderList; downloadlistAdapter.notifyDataSetChanged(); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java index a13130082..85b1f699f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java @@ -12,6 +12,7 @@ import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -85,15 +86,15 @@ public class DownloadObserver { if (downloadService == null) { connectToDownloadService(); } - callback.onContentChanged(); + if (downloadService != null) { + callback.onContentChanged(downloadService.getDownloads()); + } startRefresher(); } }; public interface Callback { - void onContentChanged(); - - void onDownloadDataAvailable(List downloaderList); + void onContentChanged(List downloaderList); } private void connectToDownloadService() { @@ -116,7 +117,7 @@ public class DownloadObserver { Log.d(TAG, "Connection to service established"); List downloaderList = downloadService.getDownloads(); if (downloaderList != null && !downloaderList.isEmpty()) { - callback.onDownloadDataAvailable(downloaderList); + callback.onContentChanged(downloaderList); startRefresher(); } } @@ -156,12 +157,14 @@ public class DownloadObserver { handler.post(new Runnable() { @Override public void run() { - callback.onContentChanged(); if (downloadService != null) { List downloaderList = downloadService.getDownloads(); + callback.onContentChanged(downloaderList); if (downloaderList == null || downloaderList.isEmpty()) { Thread.currentThread().interrupt(); } + } else { + callback.onContentChanged(new ArrayList()); } } }); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 1ad4a9d0d..238cad763 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -435,6 +435,7 @@ public class DownloadService extends Service { } else { Log.e(TAG, "Could not cancel download with url " + url); } + sendBroadcast(new Intent(ACTION_DOWNLOADS_CONTENT_CHANGED)); } else if (StringUtils.equals(intent.getAction(), ACTION_CANCEL_ALL_DOWNLOADS)) { for (Downloader d : downloads) { @@ -1246,6 +1247,12 @@ public class DownloadService extends Service { } public List getDownloads() { + if (downloads == null) { + // this is unusual, but it should be OK, we'll return + // an empty list to make it easy for people + return new ArrayList(); + } + // return a copy of downloads, but the copy doesn't need to be synchronized. synchronized (downloads) { return new ArrayList(downloads); -- cgit v1.2.3 From 23e1594165f8d3d67f00d7076db237becd1b7c33 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sat, 27 Jun 2015 17:05:19 -0400 Subject: need to handle cases where the download service is gone --- .../java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java index 85b1f699f..732fa2d27 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/DownloadObserver.java @@ -88,6 +88,9 @@ public class DownloadObserver { } if (downloadService != null) { callback.onContentChanged(downloadService.getDownloads()); + } else { + // the service is gone, there are no more downloads. + callback.onContentChanged(new ArrayList()); } startRefresher(); } -- cgit v1.2.3