diff options
author | Martin Fietz <Martin.Fietz@gmail.com> | 2015-11-26 15:57:03 +0100 |
---|---|---|
committer | Martin Fietz <Martin.Fietz@gmail.com> | 2015-11-26 19:45:24 +0100 |
commit | d91e9f4d6fb267c65fd228e8e857e550ae5178db (patch) | |
tree | e400e9ba3a3f8f5362afc42938367760427c0c7e /app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java | |
parent | c45797631de05d0631d5fb42cda3ba74280effc9 (diff) | |
download | AntennaPod-d91e9f4d6fb267c65fd228e8e857e550ae5178db.zip |
DownloadObserver must die
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java | 72 |
1 files changed, 32 insertions, 40 deletions
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 694b837d7..e13fd76b3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; -import android.os.Handler; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.support.v4.view.MenuItemCompat; @@ -31,8 +30,9 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; import de.danoeh.antennapod.adapter.QueueRecyclerAdapter; -import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.core.dialog.ConfirmationDialog; +import de.danoeh.antennapod.core.event.DownloadEvent; +import de.danoeh.antennapod.core.event.DownloaderUpdate; import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.feed.EventDistributor; @@ -67,7 +67,6 @@ public class QueueFragment extends Fragment { public static final String TAG = "QueueFragment"; private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | - EventDistributor.DOWNLOAD_QUEUED | EventDistributor.PLAYER_STATUS_UPDATE; private TextView infoBar; @@ -85,13 +84,6 @@ public class QueueFragment extends Fragment { private static final String PREF_SCROLL_POSITION = "scroll_position"; private static final String PREF_SCROLL_OFFSET = "scroll_offset"; - private DownloadObserver downloadObserver = null; - - /** - * Download observer updates won't result in an upate of the list adapter if this is true. - */ - private boolean blockDownloadObserverUpdate = false; - private Subscription subscription; private LinearLayoutManager layoutManager; private ItemTouchHelper itemTouchHelper; @@ -107,10 +99,6 @@ public class QueueFragment extends Fragment { @Override public void onStart() { super.onStart(); - if (downloadObserver != null) { - downloadObserver.setActivity(getActivity()); - downloadObserver.onResume(); - } if (queue != null) { onFragmentLoaded(); } @@ -122,7 +110,7 @@ public class QueueFragment extends Fragment { recyclerView.setAdapter(recyclerAdapter); loadItems(); EventDistributor.getInstance().register(contentUpdate); - EventBus.getDefault().register(this); + EventBus.getDefault().registerSticky(this); } @Override @@ -137,7 +125,10 @@ public class QueueFragment extends Fragment { } public void onEventMainThread(QueueEvent event) { - Log.d(TAG, "onEvent(" + event + ")"); + Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); + if(queue == null || recyclerAdapter == null) { + return; + } switch(event.action) { case ADDED: queue.add(event.position, event.item); @@ -169,7 +160,10 @@ public class QueueFragment extends Fragment { } public void onEventMainThread(FeedItemEvent event) { - Log.d(TAG, "onEvent(" + event + ")"); + Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); + if(queue == null || recyclerAdapter == null) { + return; + } for(int i=0, size = event.items.size(); i < size; i++) { FeedItem item = event.items.get(i); int pos = FeedItemUtil.indexOfItemWithId(queue, item.getId()); @@ -181,6 +175,21 @@ public class QueueFragment extends Fragment { } } + public void onEventMainThread(DownloadEvent event) { + Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); + DownloaderUpdate update = event.update; + downloaderList = update.downloaders; + if (update.feedIds.length > 0) { + if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { + getActivity().supportInvalidateOptionsMenu(); + } + } else if (update.mediaIds.length > 0) { + if (recyclerAdapter != null) { + recyclerAdapter.notifyDataSetChanged(); + } + } + } + private void saveScrollPosition() { int firstItem = layoutManager.findFirstVisibleItemPosition(); View firstItemView = layoutManager.findViewByPosition(firstItem); @@ -209,10 +218,6 @@ public class QueueFragment extends Fragment { private void resetViewState() { recyclerAdapter = null; - blockDownloadObserverUpdate = false; - if (downloadObserver != null) { - downloadObserver.onPause(); - } } @Override @@ -451,8 +456,6 @@ public class QueueFragment extends Fragment { recyclerAdapter = new QueueRecyclerAdapter(activity, itemAccess, new DefaultActionButtonCallback(activity), itemTouchHelper); recyclerView.setAdapter(recyclerAdapter); - downloadObserver = new DownloadObserver(activity, new Handler(), downloadObserverCallback); - downloadObserver.onResume(); } if(queue == null || queue.size() == 0) { recyclerView.setVisibility(View.GONE); @@ -486,16 +489,6 @@ public class QueueFragment extends Fragment { infoBar.setText(info); } - private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { - @Override - public void onContentChanged(List<Downloader> downloaderList) { - QueueFragment.this.downloaderList = downloaderList; - if (recyclerAdapter != null && !blockDownloadObserverUpdate) { - recyclerAdapter.notifyDataSetChanged(); - } - } - }; - private QueueRecyclerAdapter.ItemAccess itemAccess = new QueueRecyclerAdapter.ItemAccess() { @Override public int getCount() { @@ -504,7 +497,10 @@ public class QueueFragment extends Fragment { @Override public FeedItem getItem(int position) { - return queue != null ? queue.get(position) : null; + if(queue != null && position < queue.size()) { + return queue.get(position); + } + return null; } @Override @@ -558,11 +554,7 @@ public class QueueFragment extends Fragment { public void update(EventDistributor eventDistributor, Integer arg) { if ((arg & EVENTS) != 0) { Log.d(TAG, "arg: " + arg); - if((arg & EventDistributor.DOWNLOAD_QUEUED) != 0) { - recyclerAdapter.notifyDataSetChanged(); - } else { - loadItems(); - } + loadItems(); if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { getActivity().supportInvalidateOptionsMenu(); } @@ -580,7 +572,7 @@ public class QueueFragment extends Fragment { txtvEmpty.setVisibility(View.GONE); progLoading.setVisibility(View.VISIBLE); } - subscription = Observable.defer(() -> Observable.just(DBReader.getQueue())) + subscription = Observable.fromCallable(() -> DBReader.getQueue()) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(items -> { |