From 77840bea99c206a593b14f2683e0d520d2274c91 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sun, 11 Jan 2015 18:45:53 -0500 Subject: Updated QueueFragment to have a refresh button. Issue #595 Also resolved an issue that may have been latent when 'All Episodes' was default. Namely, that the search and other option menus didn't show up until you navigated away and then back to the fragment. This was happening because the items weren't loaded yet, which prevented the options menu from being created. If we switch back to 'All Episodes' as being default, this problem may appear again. --- .../danoeh/antennapod/fragment/QueueFragment.java | 50 ++++++++++++++++++++++ app/src/main/res/menu/queue.xml | 13 ++++++ 2 files changed, 63 insertions(+) create mode 100644 app/src/main/res/menu/queue.xml (limited to 'app') 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 ce77229d9..0c794fc44 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.fragment; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; @@ -30,11 +31,15 @@ import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; import de.danoeh.antennapod.adapter.QueueListAdapter; import de.danoeh.antennapod.core.asynctask.DownloadObserver; 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.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; @@ -57,6 +62,7 @@ public class QueueFragment extends Fragment { private boolean itemsLoaded = false; private boolean viewsCreated = false; + private boolean isUpdatingFeeds = false; private AtomicReference activity = new AtomicReference(); @@ -125,10 +131,19 @@ public class QueueFragment extends Fragment { resetViewState(); } + private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = new MenuItemUtils.UpdateRefreshMenuItemChecker() { + @Override + public boolean isRefreshing() { + return DownloadService.isRunning && DownloadRequester.getInstance().isDownloadingFeeds(); + } + }; + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + inflater.inflate(R.menu.queue, menu); + final SearchView sv = new SearchView(getActivity()); MenuItemUtils.addSearchItem(menu, sv); sv.setQueryHint(getString(R.string.search_hint)); @@ -145,7 +160,27 @@ public class QueueFragment extends Fragment { return false; } }); + isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (!super.onOptionsItemSelected(item)) { + switch (item.getItemId()) { + case R.id.refresh_item: + List feeds = ((MainActivity) getActivity()).getFeeds(); + if (feeds != null) { + DBTasks.refreshAllFeeds(getActivity(), feeds); + } + return true; + default: + return false; + } + } else { + return true; } + } @Override @@ -258,6 +293,18 @@ public class QueueFragment extends Fragment { downloadObserver.onResume(); } listAdapter.notifyDataSetChanged(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + // we need to refresh the options menu because it sometimes + // needs data that may have just been loaded. + // Things will still work on APIs lower than honeycomb + // but they may have to change away from this view + // and then back to get the options menu. + Activity theActivity = activity.get(); + if (theActivity != null) { + theActivity.invalidateOptionsMenu(); + } + } } private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @@ -307,6 +354,9 @@ public class QueueFragment extends Fragment { public void update(EventDistributor eventDistributor, Integer arg) { if ((arg & EVENTS) != 0) { startItemLoader(); + if (isUpdatingFeeds != updateRefreshMenuItemChecker.isRefreshing()) { + getActivity().supportInvalidateOptionsMenu(); + } } } }; diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml new file mode 100644 index 000000000..0f06ea952 --- /dev/null +++ b/app/src/main/res/menu/queue.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file -- cgit v1.2.3 From 86e5e9ea1373980576f76ad1abf676a4c9911fac Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sun, 11 Jan 2015 18:53:11 -0500 Subject: Simlified invalidation of options menu. #595 --- .../java/de/danoeh/antennapod/fragment/QueueFragment.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) (limited to 'app') 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 0c794fc44..302739b6a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -294,17 +294,9 @@ public class QueueFragment extends Fragment { } listAdapter.notifyDataSetChanged(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - // we need to refresh the options menu because it sometimes - // needs data that may have just been loaded. - // Things will still work on APIs lower than honeycomb - // but they may have to change away from this view - // and then back to get the options menu. - Activity theActivity = activity.get(); - if (theActivity != null) { - theActivity.invalidateOptionsMenu(); - } - } + // we need to refresh the options menu because it sometimes + // needs data that may have just been loaded. + getActivity().supportInvalidateOptionsMenu(); } private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { -- cgit v1.2.3