summaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
authorMartin Fietz <Martin.Fietz@gmail.com>2015-09-19 20:39:14 +0200
committerMartin Fietz <Martin.Fietz@gmail.com>2015-09-19 20:39:14 +0200
commit5f77c4de50a7ec9ad36fc4c57407b1d9ccd39aef (patch)
tree72a1a21fb13f14f44a70b595148b94226f71983a /app/src/main
parenta475bf112fb436e4a700e4499d491b1adabb9d83 (diff)
downloadAntennaPod-5f77c4de50a7ec9ad36fc4c57407b1d9ccd39aef.zip
Replace some of the most annoying AsyncTasks with RxJava
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java109
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java92
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java72
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java90
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java84
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java95
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java92
8 files changed, 283 insertions, 357 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 5d0edb638..5aed66013 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -4,10 +4,10 @@ import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
+import android.support.v4.util.Pair;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.util.Log;
@@ -38,7 +38,6 @@ import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.QueueEvent;
import de.danoeh.antennapod.core.service.download.DownloadService;
import de.danoeh.antennapod.core.service.download.Downloader;
import de.danoeh.antennapod.core.storage.DBReader;
@@ -49,6 +48,10 @@ import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Shows unread or recently published episodes
@@ -90,6 +93,8 @@ public class AllEpisodesFragment extends Fragment {
private boolean isUpdatingFeeds;
+ protected Subscription subscription;
+
public AllEpisodesFragment() {
// by default we show all the episodes
this(false, DEFAULT_PREF_NAME);
@@ -113,7 +118,7 @@ public class AllEpisodesFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
- startItemLoader();
+ loadItems();
}
@Override
@@ -140,7 +145,9 @@ public class AllEpisodesFragment extends Fragment {
public void onStop() {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
@@ -436,7 +443,7 @@ public class AllEpisodesFragment extends Fragment {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & EVENTS) != 0) {
- startItemLoader();
+ loadItems();
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
getActivity().supportInvalidateOptionsMenu();
}
@@ -453,69 +460,43 @@ public class AllEpisodesFragment extends Fragment {
}
}
- private ItemLoader itemLoader;
-
- protected void startItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ protected void loadItems() {
+ if(subscription != null) {
+ subscription.unsubscribe();
}
- itemLoader = new ItemLoader();
- itemLoader.execute();
- }
-
- protected void stopItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ if (viewsCreated && !itemsLoaded) {
+ listView.setVisibility(View.GONE);
+ txtvEmpty.setVisibility(View.GONE);
+ progLoading.setVisibility(View.VISIBLE);
}
+ subscription = Observable.defer(() -> Observable.just(loadData()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(data -> {
+ listView.setVisibility(View.VISIBLE);
+ progLoading.setVisibility(View.GONE);
+ if (data != null) {
+ episodes = data.first;
+ queuedItemsIds = data.second;
+ itemsLoaded = true;
+ if (viewsCreated && activity.get() != null) {
+ onFragmentLoaded();
+ }
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
}
- private class ItemLoader extends AsyncTask<Void, Void, Object[]> {
-
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- if (viewsCreated && !itemsLoaded) {
- listView.setVisibility(View.GONE);
- txtvEmpty.setVisibility(View.GONE);
- progLoading.setVisibility(View.VISIBLE);
- }
- }
-
- @Override
- protected Object[] doInBackground(Void... params) {
- Context context = activity.get();
- if (context != null) {
- if(showOnlyNewEpisodes) {
- return new Object[] {
- DBReader.getNewItemsList(),
- DBReader.getQueueIDList(),
- null // see ItemAccess.isNew
- };
- } else {
- return new Object[]{
- DBReader.getRecentlyPublishedEpisodes(RECENT_EPISODES_LIMIT),
- DBReader.getQueueIDList()
- };
- }
- } else {
- return null;
- }
- }
-
- @Override
- protected void onPostExecute(Object[] lists) {
- super.onPostExecute(lists);
- listView.setVisibility(View.VISIBLE);
- progLoading.setVisibility(View.GONE);
-
- if (lists != null) {
- episodes = (List<FeedItem>) lists[0];
- queuedItemsIds = (LongList) lists[1];
- itemsLoaded = true;
- if (viewsCreated && activity.get() != null) {
- onFragmentLoaded();
- }
- }
+ private Pair<List<FeedItem>,LongList> loadData() {
+ List<FeedItem> items;
+ if(showOnlyNewEpisodes) {
+ items = DBReader.getNewItemsList();
+ } else {
+ items = DBReader.getRecentlyPublishedEpisodes(RECENT_EPISODES_LIMIT);
}
+ LongList queuedIds = DBReader.getQueueIDList();
+ return Pair.create(items, queuedIds);
}
+
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
index 278928f3d..c5b582d3a 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
@@ -1,14 +1,12 @@
package de.danoeh.antennapod.fragment;
import android.app.Activity;
-import android.content.Context;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
+import android.util.Log;
import android.view.View;
import android.widget.ListView;
-import java.util.Collections;
import java.util.List;
import de.danoeh.antennapod.R;
@@ -18,11 +16,18 @@ import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Displays all running downloads and provides a button to delete them
*/
public class CompletedDownloadsFragment extends ListFragment {
+
+ private static final String TAG = CompletedDownloadsFragment.class.getSimpleName();
+
private static final int EVENTS =
EventDistributor.DOWNLOAD_HANDLED |
EventDistributor.DOWNLOADLOG_UPDATE |
@@ -34,11 +39,12 @@ public class CompletedDownloadsFragment extends ListFragment {
private boolean viewCreated = false;
private boolean itemsLoaded = false;
+ private Subscription subscription;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- startItemLoader();
+ loadItems();
}
@Override
@@ -51,13 +57,17 @@ public class CompletedDownloadsFragment extends ListFragment {
public void onStop() {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
public void onDetach() {
super.onDetach();
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
@@ -65,7 +75,9 @@ public class CompletedDownloadsFragment extends ListFragment {
super.onDestroyView();
listAdapter = null;
viewCreated = false;
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
@@ -132,56 +144,32 @@ public class CompletedDownloadsFragment extends ListFragment {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & EVENTS) != 0) {
- startItemLoader();
+ loadItems();
}
}
};
- private ItemLoader itemLoader;
-
- private void startItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ private void loadItems() {
+ if(subscription != null) {
+ subscription.unsubscribe();
}
- itemLoader = new ItemLoader();
- itemLoader.execute();
- }
-
- private void stopItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ if (!itemsLoaded && viewCreated) {
+ setListShown(false);
}
+ subscription = Observable.defer(() -> Observable.just(DBReader.getDownloadedItems()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ if (result != null) {
+ items = result;
+ itemsLoaded = true;
+ if (viewCreated && getActivity() != null) {
+ onFragmentLoaded();
+ }
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
}
- private class ItemLoader extends AsyncTask<Void, Void, List<FeedItem>> {
-
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- if (!itemsLoaded && viewCreated) {
- setListShown(false);
- }
- }
-
- @Override
- protected void onPostExecute(List<FeedItem> results) {
- super.onPostExecute(results);
- if (results != null) {
- items = results;
- itemsLoaded = true;
- if (viewCreated && getActivity() != null) {
- onFragmentLoaded();
- }
- }
- }
-
- @Override
- protected List<FeedItem> doInBackground(Void... params) {
- Context context = getActivity();
- if (context != null) {
- return DBReader.getDownloadedItems();
- }
- return Collections.emptyList();
- }
- }
}
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 da2c05a69..669c6ac49 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
@@ -1,11 +1,10 @@
package de.danoeh.antennapod.fragment;
-import android.content.Context;
import android.content.res.TypedArray;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.view.MenuItemCompat;
+import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -20,6 +19,10 @@ import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.service.download.DownloadStatus;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Shows the download log
@@ -34,19 +37,23 @@ public class DownloadLogFragment extends ListFragment {
private boolean viewsCreated = false;
private boolean itemsLoaded = false;
+ private Subscription subscription;
+
@Override
public void onStart() {
super.onStart();
setHasOptionsMenu(true);
EventDistributor.getInstance().register(contentUpdate);
- startItemLoader();
+ loadItems();
}
@Override
public void onStop() {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
@@ -93,27 +100,11 @@ public class DownloadLogFragment extends ListFragment {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & EventDistributor.DOWNLOADLOG_UPDATE) != 0) {
- startItemLoader();
+ loadItems();
}
}
};
- private ItemLoader itemLoader;
-
- private void startItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
- }
- itemLoader = new ItemLoader();
- itemLoader.execute();
- }
-
- private void stopItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
- }
- }
-
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
@@ -152,27 +143,24 @@ public class DownloadLogFragment extends ListFragment {
}
}
- private class ItemLoader extends AsyncTask<Void, Void, List<DownloadStatus>> {
-
- @Override
- protected void onPostExecute(List<DownloadStatus> downloadStatuses) {
- super.onPostExecute(downloadStatuses);
- if (downloadStatuses != null) {
- downloadLog = downloadStatuses;
- itemsLoaded = true;
- if (viewsCreated) {
- onFragmentLoaded();
- }
- }
- }
-
- @Override
- protected List<DownloadStatus> doInBackground(Void... params) {
- Context context = getActivity();
- if (context != null) {
- return DBReader.getDownloadLog();
- }
- return null;
+ private void loadItems() {
+ if(subscription != null) {
+ subscription.unsubscribe();
}
+ subscription = Observable.defer(() -> Observable.just(DBReader.getDownloadLog()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ if (result != null) {
+ downloadLog = result;
+ itemsLoaded = true;
+ if (viewsCreated) {
+ onFragmentLoaded();
+ }
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
}
+
}
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 38c9b645a..3d0ff66f7 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
@@ -7,12 +7,12 @@ import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.LightingColorFilter;
-import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
+import android.support.v4.util.Pair;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
@@ -73,6 +73,10 @@ import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.greenrobot.event.EventBus;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Displays a list of FeedItems.
@@ -111,6 +115,8 @@ public class ItemlistFragment extends ListFragment {
private TextView txtvInformation;
+ private Subscription subscription;
+
/**
* Creates new ItemlistFragment which shows the Feeditems of a specific
* feed. Sets 'showFeedtitle' to false
@@ -156,7 +162,9 @@ public class ItemlistFragment extends ListFragment {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
EventBus.getDefault().unregister(this);
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
@@ -164,13 +172,15 @@ public class ItemlistFragment extends ListFragment {
super.onResume();
Log.d(TAG, "onResume()");
updateProgressBarVisibility();
- startItemLoader();
+ loadItems();
}
@Override
public void onDetach() {
super.onDetach();
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
@@ -385,13 +395,13 @@ public class ItemlistFragment extends ListFragment {
public void onEvent(QueueEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
- startItemLoader();
+ loadItems();
}
public void onEvent(FeedEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
if(event.feedId == feedID) {
- startItemLoader();
+ loadItems();
}
}
@@ -404,7 +414,7 @@ public class ItemlistFragment extends ListFragment {
if ((EventDistributor.DOWNLOAD_QUEUED & arg) != 0) {
updateProgressBarVisibility();
} else {
- startItemLoader();
+ loadItems();
updateProgressBarVisibility();
}
}
@@ -608,51 +618,37 @@ public class ItemlistFragment extends ListFragment {
}
};
- private ItemLoader itemLoader;
- private void startItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ private void loadItems() {
+ if(subscription != null) {
+ subscription.unsubscribe();
}
- itemLoader = new ItemLoader();
- itemLoader.execute(feedID);
- }
- private void stopItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
- }
+ subscription = Observable.defer(() -> Observable.just(loadData()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ if (result != null) {
+ feed = result.first;
+ queuedItemsIds = result.second;
+ itemsLoaded = true;
+ if (viewsCreated) {
+ onFragmentLoaded();
+ }
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
}
- private class ItemLoader extends AsyncTask<Long, Void, Object[]> {
- @Override
- protected Object[] doInBackground(Long... params) {
- long feedID = params[0];
- Context context = getActivity();
- if (context != null) {
- Feed feed = DBReader.getFeed(feedID);
- if(feed != null && feed.getItemFilter() != null) {
- FeedItemFilter filter = feed.getItemFilter();
- feed.setItems(filter.filter(context, feed.getItems()));
- }
- LongList queuedItemsIds = DBReader.getQueueIDList();
- return new Object[] { feed, queuedItemsIds };
- } else {
- return null;
- }
- }
-
- @Override
- protected void onPostExecute(Object[] res) {
- super.onPostExecute(res);
- if (res != null) {
- feed = (Feed) res[0];
- queuedItemsIds = (LongList) res[1];
- itemsLoaded = true;
- if (viewsCreated) {
- onFragmentLoaded();
- }
- }
+ private Pair<Feed, LongList> loadData() {
+ Feed feed = DBReader.getFeed(feedID);
+ if(feed != null && feed.getItemFilter() != null) {
+ FeedItemFilter filter = feed.getItemFilter();
+ feed.setItems(filter.filter(feed.getItems()));
}
+ LongList queuedItemsIds = DBReader.getQueueIDList();
+ return Pair.create(feed, queuedItemsIds);
}
+
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
index 6177f2a50..d454208c1 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
@@ -39,7 +39,7 @@ public class NewEpisodesFragment extends AllEpisodesFragment {
public void onEvent(QueueEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
- startItemLoader();
+ loadItems();
}
@Override
@@ -69,7 +69,9 @@ public class NewEpisodesFragment extends AllEpisodesFragment {
@Override
public void remove(int which) {
Log.d(TAG, "remove(" + which + ")");
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
FeedItem item = (FeedItem) listView.getAdapter().getItem(which);
// we're marking it as unplayed since the user didn't actually play it
// but they don't want it considered 'NEW' anymore
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 530883667..e6460309b 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
@@ -1,9 +1,7 @@
package de.danoeh.antennapod.fragment;
import android.app.Activity;
-import android.content.Context;
import android.content.res.TypedArray;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.ListFragment;
@@ -33,6 +31,10 @@ import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.util.LongList;
import de.greenrobot.event.EventBus;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
public class PlaybackHistoryFragment extends ListFragment {
@@ -53,6 +55,8 @@ public class PlaybackHistoryFragment extends ListFragment {
private DownloadObserver downloadObserver;
private List<Downloader> downloaderList;
+ private Subscription subscription;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -63,7 +67,7 @@ public class PlaybackHistoryFragment extends ListFragment {
@Override
public void onResume() {
super.onResume();
- startItemLoader();
+ loadItems();
}
@Override
@@ -78,13 +82,17 @@ public class PlaybackHistoryFragment extends ListFragment {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
EventBus.getDefault().unregister(this);
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
public void onDetach() {
super.onDetach();
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
activity.set(null);
}
@@ -176,7 +184,7 @@ public class PlaybackHistoryFragment extends ListFragment {
public void onEvent(QueueEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
- startItemLoader();
+ loadItems();
}
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@@ -184,7 +192,7 @@ public class PlaybackHistoryFragment extends ListFragment {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & EVENTS) != 0) {
- startItemLoader();
+ loadItems();
getActivity().supportInvalidateOptionsMenu();
}
}
@@ -245,48 +253,32 @@ public class PlaybackHistoryFragment extends ListFragment {
}
};
- private ItemLoader itemLoader;
-
- private void startItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ private void loadItems() {
+ if(subscription != null) {
+ subscription.unsubscribe();
}
- itemLoader = new ItemLoader();
- itemLoader.execute();
+ subscription = Observable.defer(() -> Observable.just(loadData()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ if (result != null) {
+ playbackHistory = result.first;
+ queue = result.second;
+ itemsLoaded = true;
+ if (viewsCreated) {
+ onFragmentLoaded();
+ }
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
}
- private void stopItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
- }
+ private Pair<List<FeedItem>, LongList> loadData() {
+ List<FeedItem> history = DBReader.getPlaybackHistory();
+ LongList queue = DBReader.getQueueIDList();
+ DBReader.loadFeedDataOfFeedItemlist(history);
+ return Pair.create(history, queue);
}
- private class ItemLoader extends AsyncTask<Void, Void, Pair<List<FeedItem>,LongList>> {
-
- @Override
- protected Pair<List<FeedItem>,LongList> doInBackground(Void... params) {
- Context context = activity.get();
- if (context != null) {
- List<FeedItem> history = DBReader.getPlaybackHistory();
- LongList queue = DBReader.getQueueIDList();
- DBReader.loadFeedDataOfFeedItemlist(history);
- return Pair.create(history, queue);
- } else {
- return null;
- }
- }
-
- @Override
- protected void onPostExecute(Pair<List<FeedItem>,LongList> res) {
- super.onPostExecute(res);
- if (res != null) {
- playbackHistory = res.first;
- queue = res.second;
- itemsLoaded = true;
- if (viewsCreated) {
- onFragmentLoaded();
- }
- }
- }
- }
}
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 63c319e03..7bcd98dc8 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.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
@@ -55,6 +54,10 @@ import de.danoeh.antennapod.core.util.gui.UndoBarController;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
import de.greenrobot.event.EventBus;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Shows all items in the queue
@@ -98,6 +101,8 @@ public class QueueFragment extends Fragment {
*/
private boolean blockDownloadObserverUpdate = false;
+ private Subscription subscription;
+
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -109,7 +114,7 @@ public class QueueFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
- startItemLoader();
+ loadItems();
}
@Override
@@ -138,7 +143,9 @@ public class QueueFragment extends Fragment {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
EventBus.getDefault().unregister(this);
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
if(undoBarController.isShowing()) {
undoBarController.close();
}
@@ -156,7 +163,7 @@ public class QueueFragment extends Fragment {
undoBarController.showUndoBar(false, getString(R.string.removed_from_queue),
new FeedItemUndoToken(event.item, event.position));
}
- startItemLoader();
+ loadItems();
}
private void saveScrollPosition() {
@@ -398,7 +405,9 @@ public class QueueFragment extends Fragment {
public void drop(int from, int to) {
Log.d(TAG, "drop");
blockDownloadObserverUpdate = false;
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
final FeedItem item = queue.remove(from);
queue.add(to, item);
listAdapter.notifyDataSetChanged();
@@ -408,7 +417,9 @@ public class QueueFragment extends Fragment {
@Override
public void remove(int which) {
Log.d(TAG, "remove(" + which + ")");
- stopItemLoader();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
FeedItem item = (FeedItem) listView.getAdapter().getItem(which);
DBWriter.removeQueueItem(getActivity(), item, true);
}
@@ -556,7 +567,7 @@ public class QueueFragment extends Fragment {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & EVENTS) != 0) {
- startItemLoader();
+ loadItems();
if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) {
getActivity().supportInvalidateOptionsMenu();
}
@@ -564,55 +575,31 @@ public class QueueFragment extends Fragment {
}
};
- private ItemLoader itemLoader;
-
- private void startItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ private void loadItems() {
+ if(subscription != null) {
+ subscription.unsubscribe();
}
- itemLoader = new ItemLoader();
- itemLoader.execute();
- }
-
- private void stopItemLoader() {
- if (itemLoader != null) {
- itemLoader.cancel(true);
+ if (viewsCreated && !itemsLoaded) {
+ listView.setVisibility(View.GONE);
+ txtvEmpty.setVisibility(View.GONE);
+ progLoading.setVisibility(View.VISIBLE);
}
+ subscription = Observable.defer(() -> Observable.just(DBReader.getQueue()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ listView.setVisibility(View.VISIBLE);
+ progLoading.setVisibility(View.GONE);
+ if(result != null) {
+ queue = result;
+ itemsLoaded = true;
+ if (viewsCreated && activity.get() != null) {
+ onFragmentLoaded();
+ }
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
}
- private class ItemLoader extends AsyncTask<Void, Void, List<FeedItem>> {
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- if (viewsCreated && !itemsLoaded) {
- listView.setVisibility(View.GONE);
- txtvEmpty.setVisibility(View.GONE);
- progLoading.setVisibility(View.VISIBLE);
- }
- }
-
- @Override
- protected void onPostExecute(List<FeedItem> feedItems) {
- super.onPostExecute(feedItems);
- listView.setVisibility(View.VISIBLE);
- progLoading.setVisibility(View.GONE);
-
- if (feedItems != null) {
- queue = feedItems;
- itemsLoaded = true;
- if (viewsCreated && activity.get() != null) {
- onFragmentLoaded();
- }
- }
- }
-
- @Override
- protected List<FeedItem> doInBackground(Void... params) {
- Context context = activity.get();
- if (context != null) {
- return DBReader.getQueue();
- }
- return null;
- }
- }
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
index 975493ce9..edd8cdd1a 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
@@ -1,19 +1,18 @@
package de.danoeh.antennapod.fragment;
import android.content.Context;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
+import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
-import java.util.Collections;
import java.util.List;
import de.danoeh.antennapod.R;
@@ -25,6 +24,10 @@ import de.danoeh.antennapod.core.feed.FeedComponent;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.SearchResult;
import de.danoeh.antennapod.core.storage.FeedSearcher;
+import rx.Observable;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Performs a search operation on all feeds or one specific feed and displays the search result.
@@ -41,6 +44,8 @@ public class SearchFragment extends ListFragment {
private boolean viewCreated = false;
private boolean itemsLoaded = false;
+ private Subscription subscription;
+
/**
* Create a new SearchFragment that searches all feeds.
*/
@@ -68,7 +73,7 @@ public class SearchFragment extends ListFragment {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
- startSearchTask();
+ search();
}
@Override
@@ -80,14 +85,18 @@ public class SearchFragment extends ListFragment {
@Override
public void onStop() {
super.onStop();
- stopSearchTask();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
EventDistributor.getInstance().unregister(contentUpdate);
}
@Override
public void onDetach() {
super.onDetach();
- stopSearchTask();
+ if(subscription != null) {
+ subscription.unsubscribe();
+ }
}
@Override
@@ -143,7 +152,7 @@ public class SearchFragment extends ListFragment {
public boolean onQueryTextSubmit(String s) {
getArguments().putString(ARG_QUERY, s);
itemsLoaded = false;
- startSearchTask();
+ search();
return true;
}
@@ -161,7 +170,7 @@ public class SearchFragment extends ListFragment {
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & (EventDistributor.UNREAD_ITEMS_UPDATE
| EventDistributor.DOWNLOAD_HANDLED)) != 0) {
- startSearchTask();
+ search();
}
}
};
@@ -187,53 +196,36 @@ public class SearchFragment extends ListFragment {
}
};
- private SearchTask searchTask;
- private void startSearchTask() {
- if (searchTask != null) {
- searchTask.cancel(true);
+ private void search() {
+ if(subscription != null) {
+ subscription.unsubscribe();
}
- searchTask = new SearchTask();
- searchTask.execute(getArguments());
- }
-
- private void stopSearchTask() {
- if (searchTask != null) {
- searchTask.cancel(true);
+ if (viewCreated && !itemsLoaded) {
+ setListShown(false);
}
+ subscription = Observable.defer(() -> Observable.just(performSearch()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(result -> {
+ if (result != null) {
+ itemsLoaded = true;
+ searchResults = result;
+ if (viewCreated) {
+ onFragmentLoaded();
+ }
+ }
+ }, error -> {
+ Log.e(TAG, Log.getStackTraceString(error));
+ });
}
- private class SearchTask extends AsyncTask<Bundle, Void, List<SearchResult>> {
- @Override
- protected List<SearchResult> doInBackground(Bundle... params) {
- String query = params[0].getString(ARG_QUERY);
- long feed = params[0].getLong(ARG_FEED);
- Context context = getActivity();
- if (context != null) {
- return FeedSearcher.performSearch(context, query, feed);
- } else {
- return Collections.emptyList();
- }
- }
-
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- if (viewCreated && !itemsLoaded) {
- setListShown(false);
- }
- }
-
- @Override
- protected void onPostExecute(List<SearchResult> results) {
- super.onPostExecute(results);
- if (results != null) {
- itemsLoaded = true;
- searchResults = results;
- if (viewCreated) {
- onFragmentLoaded();
- }
- }
- }
+ private List<SearchResult> performSearch() {
+ Bundle args = getArguments();
+ String query = args.getString(ARG_QUERY);
+ long feed = args.getLong(ARG_FEED);
+ Context context = getActivity();
+ return FeedSearcher.performSearch(context, query, feed);
}
+
}