summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java133
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java18
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java11
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java23
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java33
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java161
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java55
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java48
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java146
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java22
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java28
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java58
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java40
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java42
18 files changed, 593 insertions, 243 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
index e4ae1683b..bbe6fab46 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
@@ -20,7 +20,8 @@ import de.danoeh.antennapod.fragment.gpodnet.GpodnetMainFragment;
* Provides actions for adding new podcast subscriptions
*/
public class AddFeedFragment extends Fragment {
- private static final String TAG = "AddFeedFragment";
+
+ public static final String TAG = "AddFeedFragment";
/**
* Preset value for url text field.
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 2eef7b635..ff5485251 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -8,7 +8,10 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
+import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
+import android.util.Log;
+import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -28,7 +31,7 @@ import java.util.concurrent.atomic.AtomicReference;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
-import de.danoeh.antennapod.adapter.NewEpisodesListAdapter;
+import de.danoeh.antennapod.adapter.AllEpisodesListAdapter;
import de.danoeh.antennapod.core.asynctask.DownloadObserver;
import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.feed.EventDistributor;
@@ -40,19 +43,21 @@ 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.DownloadRequestException;
import de.danoeh.antennapod.core.storage.DownloadRequester;
-import de.danoeh.antennapod.core.util.QueueAccess;
+import de.danoeh.antennapod.core.util.LongList;
+import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
/**
* Shows unread or recently published episodes
*/
public class AllEpisodesFragment extends Fragment {
- private static final String TAG = "AllEpisodesFragment";
+
+ public static final String TAG = "AllEpisodesFragment";
+
private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED |
EventDistributor.DOWNLOAD_QUEUED |
- EventDistributor.QUEUE_UPDATE |
EventDistributor.UNREAD_ITEMS_UPDATE |
EventDistributor.PLAYER_STATUS_UPDATE;
@@ -63,18 +68,19 @@ public class AllEpisodesFragment extends Fragment {
private String prefName;
protected DragSortListView listView;
- private NewEpisodesListAdapter listAdapter;
+ private AllEpisodesListAdapter listAdapter;
private TextView txtvEmpty;
private ProgressBar progLoading;
+ private ContextMenu contextMenu;
- private List<FeedItem> unreadItems;
- private List<FeedItem> recentItems;
- private QueueAccess queueAccess;
+ private List<FeedItem> episodes;
+ private LongList queuedItemsIds;
+ private LongList newItemsIds;
private List<Downloader> downloaderList;
private boolean itemsLoaded = false;
private boolean viewsCreated = false;
- private boolean showOnlyNewEpisodes = false;
+ private final boolean showOnlyNewEpisodes;
private AtomicReference<MainActivity> activity = new AtomicReference<MainActivity>();
@@ -192,11 +198,12 @@ public class AllEpisodesFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
inflater.inflate(R.menu.new_episodes, menu);
- final SearchView sv = new SearchView(getActivity());
- MenuItemUtils.addSearchItem(menu, sv);
+ MenuItem searchItem = menu.findItem(R.id.action_search);
+ final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem);
+ MenuItemUtils.adjustTextColor(getActivity(), sv);
sv.setQueryHint(getString(R.string.search_hint));
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
@@ -218,10 +225,10 @@ public class AllEpisodesFragment extends Fragment {
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
MenuItem menuItem = menu.findItem(R.id.mark_all_read_item);
if (menuItem != null) {
- menuItem.setVisible(unreadItems != null && !unreadItems.isEmpty());
+ menuItem.setVisible(episodes != null && !episodes.isEmpty());
}
}
}
@@ -291,6 +298,8 @@ public class AllEpisodesFragment extends Fragment {
}
});
+ registerForContextMenu(listView);
+
if (!itemsLoaded) {
progLoading.setVisibility(View.VISIBLE);
txtvEmpty.setVisibility(View.GONE);
@@ -305,9 +314,59 @@ public class AllEpisodesFragment extends Fragment {
return root;
}
+ private final FeedItemMenuHandler.MenuInterface contextMenuInterface = new FeedItemMenuHandler.MenuInterface() {
+ @Override
+ public void setItemVisibility(int id, boolean visible) {
+ if(contextMenu == null) {
+ return;
+ }
+ MenuItem item = contextMenu.findItem(id);
+ if (item != null) {
+ item.setVisible(visible);
+ }
+ }
+ };
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
+ FeedItem item = itemAccess.getItem(adapterInfo.position);
+
+ MenuInflater inflater = getActivity().getMenuInflater();
+ inflater.inflate(R.menu.allepisodes_context, menu);
+
+ if (item != null) {
+ menu.setHeaderTitle(item.getTitle());
+ }
+
+ contextMenu = menu;
+ FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queuedItemsIds);
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
+ FeedItem selectedItem = itemAccess.getItem(menuInfo.position);
+
+ if (selectedItem == null) {
+ Log.i(TAG, "Selected item at position " + menuInfo.position + " was null, ignoring selection");
+ return super.onContextItemSelected(item);
+ }
+
+ try {
+ return FeedItemMenuHandler.onMenuItemClicked(getActivity(), item.getItemId(), selectedItem);
+ } catch (DownloadRequestException e) {
+ e.printStackTrace();
+ Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
+ return true;
+ }
+ }
+
private void onFragmentLoaded() {
if (listAdapter == null) {
- listAdapter = new NewEpisodesListAdapter(activity.get(), itemAccess, new DefaultActionButtonCallback(activity.get()));
+ listAdapter = new AllEpisodesListAdapter(activity.get(), itemAccess,
+ new DefaultActionButtonCallback(activity.get()), showOnlyNewEpisodes);
listView.setAdapter(listAdapter);
listView.setEmptyView(txtvEmpty);
downloadObserver = new DownloadObserver(activity.get(), new Handler(), downloadObserverCallback);
@@ -336,12 +395,12 @@ public class AllEpisodesFragment extends Fragment {
}
};
- private NewEpisodesListAdapter.ItemAccess itemAccess = new NewEpisodesListAdapter.ItemAccess() {
+ private AllEpisodesListAdapter.ItemAccess itemAccess = new AllEpisodesListAdapter.ItemAccess() {
@Override
public int getCount() {
if (itemsLoaded) {
- return (showOnlyNewEpisodes) ? unreadItems.size() : recentItems.size();
+ return episodes.size();
}
return 0;
}
@@ -349,7 +408,7 @@ public class AllEpisodesFragment extends Fragment {
@Override
public FeedItem getItem(int position) {
if (itemsLoaded) {
- return (showOnlyNewEpisodes) ? unreadItems.get(position) : recentItems.get(position);
+ return episodes.get(position);
}
return null;
}
@@ -370,7 +429,17 @@ public class AllEpisodesFragment extends Fragment {
@Override
public boolean isInQueue(FeedItem item) {
if (itemsLoaded) {
- return queueAccess.contains(item.getId());
+ return queuedItemsIds.contains(item.getId());
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public boolean isNew(FeedItem item) {
+ if (itemsLoaded) {
+ // should actually never be called in NewEpisodesFragment, but better safe than sorry
+ return showOnlyNewEpisodes || newItemsIds.contains(item.getId());
} else {
return false;
}
@@ -402,7 +471,7 @@ public class AllEpisodesFragment extends Fragment {
private ItemLoader itemLoader;
- private void startItemLoader() {
+ protected void startItemLoader() {
if (itemLoader != null) {
itemLoader.cancel(true);
}
@@ -432,9 +501,19 @@ public class AllEpisodesFragment extends Fragment {
protected Object[] doInBackground(Void... params) {
Context context = activity.get();
if (context != null) {
- return new Object[]{DBReader.getUnreadItemsList(context),
- DBReader.getRecentlyPublishedEpisodes(context, RECENT_EPISODES_LIMIT),
- QueueAccess.IDListAccess(DBReader.getQueueIDList(context))};
+ if(showOnlyNewEpisodes) {
+ return new Object[] {
+ DBReader.getNewItemsList(context),
+ DBReader.getQueueIDList(context),
+ null // see ItemAccess.isNew
+ };
+ } else {
+ return new Object[]{
+ DBReader.getRecentlyPublishedEpisodes(context, RECENT_EPISODES_LIMIT),
+ DBReader.getQueueIDList(context),
+ DBReader.getNewItemIds(context)
+ };
+ }
} else {
return null;
}
@@ -447,9 +526,9 @@ public class AllEpisodesFragment extends Fragment {
progLoading.setVisibility(View.GONE);
if (lists != null) {
- unreadItems = (List<FeedItem>) lists[0];
- recentItems = (List<FeedItem>) lists[1];
- queueAccess = (QueueAccess) lists[2];
+ episodes = (List<FeedItem>) lists[0];
+ queuedItemsIds = (LongList) lists[1];
+ newItemsIds = (LongList) lists[2];
itemsLoaded = true;
if (viewsCreated && activity.get() != null) {
onFragmentLoaded();
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 d63d66966..3ca5b3c89 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
@@ -8,6 +8,7 @@ import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ListView;
+import java.util.Collections;
import java.util.List;
import de.danoeh.antennapod.R;
@@ -17,7 +18,6 @@ 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 de.danoeh.antennapod.core.util.QueueAccess;
/**
* Displays all running downloads and provides a button to delete them
@@ -26,11 +26,9 @@ public class CompletedDownloadsFragment extends ListFragment {
private static final int EVENTS =
EventDistributor.DOWNLOAD_HANDLED |
EventDistributor.DOWNLOADLOG_UPDATE |
- EventDistributor.QUEUE_UPDATE |
EventDistributor.UNREAD_ITEMS_UPDATE;
private List<FeedItem> items;
- private QueueAccess queue;
private DownloadedEpisodesListAdapter listAdapter;
private boolean viewCreated = false;
@@ -155,7 +153,7 @@ public class CompletedDownloadsFragment extends ListFragment {
}
}
- private class ItemLoader extends AsyncTask<Void, Void, Object[]> {
+ private class ItemLoader extends AsyncTask<Void, Void, List<FeedItem>> {
@Override
protected void onPreExecute() {
@@ -166,11 +164,10 @@ public class CompletedDownloadsFragment extends ListFragment {
}
@Override
- protected void onPostExecute(Object[] results) {
+ protected void onPostExecute(List<FeedItem> results) {
super.onPostExecute(results);
if (results != null) {
- items = (List<FeedItem>) results[0];
- queue = (QueueAccess) results[1];
+ items = results;
itemsLoaded = true;
if (viewCreated && getActivity() != null) {
onFragmentLoaded();
@@ -179,13 +176,12 @@ public class CompletedDownloadsFragment extends ListFragment {
}
@Override
- protected Object[] doInBackground(Void... params) {
+ protected List<FeedItem> doInBackground(Void... params) {
Context context = getActivity();
if (context != null) {
- return new Object[]{DBReader.getDownloadedItems(context),
- QueueAccess.IDListAccess(DBReader.getQueueIDList(context))};
+ return DBReader.getDownloadedItems(context);
}
- return null;
+ 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 0f6f7d53c..074a87ea0 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java
@@ -20,8 +20,6 @@ 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 de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
/**
* Shows the download log
@@ -119,7 +117,7 @@ public class DownloadLogFragment extends ListFragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
MenuItem clearHistory = menu.add(Menu.NONE, R.id.clear_history_item, Menu.CATEGORY_CONTAINER, R.string.clear_history_label);
MenuItemCompat.setShowAsAction(clearHistory, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
TypedArray drawables = getActivity().obtainStyledAttributes(new int[]{R.attr.content_discard});
@@ -131,8 +129,11 @@ public class DownloadLogFragment extends ListFragment {
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
- menu.findItem(R.id.clear_history_item).setVisible(downloadLog != null && !downloadLog.isEmpty());
+ if (itemsLoaded) {
+ MenuItem menuItem = menu.findItem(R.id.clear_history_item);
+ if(menuItem != null) {
+ menuItem.setVisible(downloadLog != null && !downloadLog.isEmpty());
+ }
}
}
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 712db1421..1ce379cf8 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java
@@ -17,6 +17,8 @@ import de.danoeh.antennapod.R;
*/
public class DownloadsFragment extends Fragment {
+ public static final String TAG = "DownloadsFragment";
+
public static final String ARG_SELECTED_TAB = "selected_tab";
public static final int POS_RUNNING = 0;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
index a42658057..fdb128f03 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
@@ -13,7 +13,6 @@ import android.widget.TextView;
import com.squareup.picasso.Picasso;
-import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.core.util.Converter;
@@ -54,8 +53,7 @@ public class ExternalPlayerFragment extends Fragment {
@Override
public void onClick(View v) {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "layoutInfo was clicked");
+ Log.d(TAG, "layoutInfo was clicked");
if (controller.getMedia() != null) {
startActivity(PlaybackService.getPlayerActivityIntent(
@@ -90,14 +88,10 @@ public class ExternalPlayerFragment extends Fragment {
@Override
public void onBufferStart() {
- // TODO Auto-generated method stub
-
}
@Override
public void onBufferEnd() {
- // TODO Auto-generated method stub
-
}
@Override
@@ -153,7 +147,6 @@ public class ExternalPlayerFragment extends Fragment {
butPlay.setOnClickListener(controller
.newOnPlayButtonClickListener());
}
-
}
@Override
@@ -170,8 +163,6 @@ public class ExternalPlayerFragment extends Fragment {
@Override
public void onPlaybackSpeedChange() {
- // TODO Auto-generated method stub
-
}
};
}
@@ -185,8 +176,7 @@ public class ExternalPlayerFragment extends Fragment {
@Override
public void onDestroy() {
super.onDestroy();
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Fragment is about to be destroyed");
+ Log.d(TAG, "Fragment is about to be destroyed");
if (controller != null) {
controller.release();
}
@@ -201,8 +191,7 @@ public class ExternalPlayerFragment extends Fragment {
}
private boolean loadMediaInfo() {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Loading media info");
+ Log.d(TAG, "Loading media info");
if (controller.serviceAvailable()) {
Playable media = controller.getMedia();
if (media != null) {
@@ -221,13 +210,11 @@ public class ExternalPlayerFragment extends Fragment {
}
return true;
} else {
- Log.w(TAG,
- "loadMediaInfo was called while the media object of playbackService was null!");
+ Log.w(TAG, "loadMediaInfo was called while the media object of playbackService was null!");
return false;
}
} else {
- Log.w(TAG,
- "loadMediaInfo was called while playbackService was null!");
+ Log.w(TAG, "loadMediaInfo was called while playbackService was null!");
return false;
}
}
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 e80bf5f14..51a1e2252 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -17,6 +17,7 @@ import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.text.format.DateUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
@@ -43,6 +44,7 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver;
import de.danoeh.antennapod.core.feed.EventDistributor;
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.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.download.Downloader;
import de.danoeh.antennapod.core.storage.DBReader;
@@ -51,18 +53,20 @@ import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.DownloadRequestException;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.core.util.Converter;
-import de.danoeh.antennapod.core.util.QueueAccess;
+import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.playback.Timeline;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
+import de.greenrobot.event.EventBus;
/**
* Displays information about a FeedItem and actions.
*/
-public class ItemFragment extends Fragment implements LoaderManager.LoaderCallbacks<Pair<FeedItem, QueueAccess>> {
+public class ItemFragment extends Fragment implements LoaderManager.LoaderCallbacks<Pair<FeedItem, LongList>> {
+
+ private static final String TAG = "ItemFragment";
private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED |
EventDistributor.DOWNLOAD_QUEUED |
- EventDistributor.QUEUE_UPDATE |
EventDistributor.UNREAD_ITEMS_UPDATE;
private static final String ARG_FEEDITEM = "feeditem";
@@ -84,7 +88,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
private boolean itemsLoaded = false;
private long itemID;
private FeedItem item;
- private QueueAccess queue;
+ private LongList queue;
private String webviewData;
private DownloadObserver downloadObserver;
private List<Downloader> downloaderList;
@@ -124,6 +128,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
public void onStart() {
super.onStart();
EventDistributor.getInstance().register(contentUpdate);
+ EventBus.getDefault().register(this);
if (downloadObserver != null) {
downloadObserver.setActivity(getActivity());
downloadObserver.onResume();
@@ -138,6 +143,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
public void onStop() {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
+ EventBus.getDefault().unregister(this);
}
private void resetViewState() {
@@ -264,7 +270,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
return;
}
popupMenu.getMenu().clear();
- popupMenu.inflate(R.menu.feeditem_dialog);
+ popupMenu.inflate(R.menu.feeditem_options);
if (item.hasMedia()) {
FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue);
} else {
@@ -387,25 +393,29 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
}
}
+ public void onEvent(QueueEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ getLoaderManager().restartLoader(0, null, ItemFragment.this);
+ }
@Override
- public Loader<Pair<FeedItem, QueueAccess>> onCreateLoader(int id, Bundle args) {
- return new DBTaskLoader<Pair<FeedItem, QueueAccess>>(getActivity()) {
+ public Loader<Pair<FeedItem,LongList>> onCreateLoader(int id, Bundle args) {
+ return new DBTaskLoader<Pair<FeedItem,LongList>>(getActivity()) {
@Override
- public Pair<FeedItem, QueueAccess> loadInBackground() {
+ public Pair<FeedItem,LongList> loadInBackground() {
FeedItem data1 = DBReader.getFeedItem(getContext(), itemID);
if (data1 != null) {
Timeline t = new Timeline(getActivity(), data1);
webviewData = t.processShownotes(false);
}
- QueueAccess data2 = QueueAccess.IDListAccess(DBReader.getQueueIDList(getContext()));
+ LongList data2 = DBReader.getQueueIDList(getContext());
return Pair.create(data1, data2);
}
};
}
@Override
- public void onLoadFinished(Loader<Pair<FeedItem, QueueAccess>> loader, Pair<FeedItem, QueueAccess> data) {
+ public void onLoadFinished(Loader<Pair<FeedItem,LongList>> loader, Pair<FeedItem,LongList> data) {
if (data != null) {
item = data.first;
@@ -420,8 +430,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba
}
@Override
- public void onLoaderReset(Loader<Pair<FeedItem, QueueAccess>> loader) {
-
+ public void onLoaderReset(Loader<Pair<FeedItem,LongList>> loader) {
}
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
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 acb07626c..a9cbe8291 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
@@ -9,27 +9,33 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
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.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
+import android.widget.AdapterView;
+import android.widget.IconTextView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
+import android.widget.RelativeLayout;
import android.widget.TextView;
+import com.joanzapata.android.iconify.Iconify;
import com.squareup.picasso.Picasso;
import org.apache.commons.lang3.Validate;
import java.util.List;
-import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.FeedInfoActivity;
import de.danoeh.antennapod.activity.MainActivity;
@@ -42,19 +48,23 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.feed.FeedEvent;
import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedItemFilter;
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;
import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.DownloadRequestException;
import de.danoeh.antennapod.core.storage.DownloadRequester;
-import de.danoeh.antennapod.core.util.QueueAccess;
+import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil;
+import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
+import de.greenrobot.event.EventBus;
/**
* Displays a list of FeedItems.
@@ -65,7 +75,6 @@ public class ItemlistFragment extends ListFragment {
private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED
| EventDistributor.DOWNLOAD_QUEUED
- | EventDistributor.QUEUE_UPDATE
| EventDistributor.UNREAD_ITEMS_UPDATE
| EventDistributor.PLAYER_STATUS_UPDATE;
@@ -73,10 +82,13 @@ public class ItemlistFragment extends ListFragment {
public static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id";
protected FeedItemlistAdapter adapter;
+ private ContextMenu contextMenu;
private long feedID;
private Feed feed;
- protected QueueAccess queue;
+ private LongList queuedItemsIds;
+ private LongList newItemsIds;
+
private boolean itemsLoaded = false;
private boolean viewsCreated = false;
@@ -87,6 +99,10 @@ public class ItemlistFragment extends ListFragment {
private MoreContentListFooterUtil listFooter;
private boolean isUpdatingFeed;
+
+ private IconTextView txtvFailure;
+
+ private TextView txtvInformation;
/**
* Creates new ItemlistFragment which shows the Feeditems of a specific
@@ -118,6 +134,7 @@ public class ItemlistFragment extends ListFragment {
public void onStart() {
super.onStart();
EventDistributor.getInstance().register(contentUpdate);
+ EventBus.getDefault().register(this);
if (downloadObserver != null) {
downloadObserver.setActivity(getActivity());
downloadObserver.onResume();
@@ -131,6 +148,7 @@ public class ItemlistFragment extends ListFragment {
public void onStop() {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
+ EventBus.getDefault().unregister(this);
stopItemLoader();
}
@@ -177,11 +195,12 @@ public class ItemlistFragment extends ListFragment {
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
FeedMenuHandler.onCreateOptionsMenu(inflater, menu);
- final SearchView sv = new SearchView(getActivity());
- MenuItemUtils.addSearchItem(menu, sv);
+ MenuItem searchItem = menu.findItem(R.id.action_search);
+ final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem);
+ MenuItemUtils.adjustTextColor(getActivity(), sv);
sv.setQueryHint(getString(R.string.search_hint));
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
@@ -204,7 +223,7 @@ public class ItemlistFragment extends ListFragment {
@Override
public void onPrepareOptionsMenu(Menu menu) {
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
FeedMenuHandler.onPrepareOptionsMenu(menu, feed);
}
}
@@ -221,7 +240,7 @@ public class ItemlistFragment extends ListFragment {
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
- ((MainActivity) getActivity()).loadNavFragment(MainActivity.POS_NEW, null);
+ ((MainActivity) getActivity()).loadFragment(NewEpisodesFragment.TAG, null);
}
};
ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(),
@@ -252,10 +271,61 @@ public class ItemlistFragment extends ListFragment {
} else {
return true;
}
+ }
+ private final FeedItemMenuHandler.MenuInterface contextMenuInterface = new FeedItemMenuHandler.MenuInterface() {
+ @Override
+ public void setItemVisibility(int id, boolean visible) {
+ if(contextMenu == null) {
+ return;
+ }
+ MenuItem item = contextMenu.findItem(id);
+ if (item != null) {
+ item.setVisible(visible);
+ }
+ }
+ };
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
+
+ // because of addHeaderView(), positions are increased by 1!
+ FeedItem item = itemAccess.getItem(adapterInfo.position-1);
+
+ MenuInflater inflater = getActivity().getMenuInflater();
+ inflater.inflate(R.menu.feeditemlist_context, menu);
+
+ if (item != null) {
+ menu.setHeaderTitle(item.getTitle());
+ }
+
+ contextMenu = menu;
+ FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queuedItemsIds);
}
@Override
+ public boolean onContextItemSelected(MenuItem item) {
+ AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
+ // because of addHeaderView(), positions are increased by 1!
+ FeedItem selectedItem = itemAccess.getItem(menuInfo.position-1);
+
+ if (selectedItem == null) {
+ Log.i(TAG, "Selected item at position " + menuInfo.position + " was null, ignoring selection");
+ return super.onContextItemSelected(item);
+ }
+
+ try {
+ return FeedItemMenuHandler.onMenuItemClicked(getActivity(), item.getItemId(), selectedItem);
+ } catch (DownloadRequestException e) {
+ // context menu doesn't contain download functionality
+ return true;
+ }
+ }
+
+
+ @Override
public void setListAdapter(ListAdapter adapter) {
// This workaround prevents the ListFragment from setting a list adapter when its state is restored.
// This is only necessary on API 10 because addFooterView throws an internal exception in this case.
@@ -269,6 +339,8 @@ public class ItemlistFragment extends ListFragment {
super.onViewCreated(view, savedInstanceState);
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("");
+ registerForContextMenu(getListView());
+
viewsCreated = true;
if (itemsLoaded) {
onFragmentLoaded();
@@ -283,13 +355,24 @@ public class ItemlistFragment extends ListFragment {
}
}
+ public void onEvent(QueueEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ startItemLoader();
+ }
+
+ public void onEvent(FeedEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ if(event.feedId == feedID) {
+ startItemLoader();
+ }
+ }
+
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((EVENTS & arg) != 0) {
- if (BuildConfig.DEBUG)
- Log.d(TAG, "Received contentUpdate Intent.");
+ Log.d(TAG, "Received contentUpdate Intent. arg " + arg);
if ((EventDistributor.DOWNLOAD_QUEUED & arg) != 0) {
updateProgressBarVisibility();
} else {
@@ -323,6 +406,7 @@ public class ItemlistFragment extends ListFragment {
downloadObserver = new DownloadObserver(getActivity(), new Handler(), downloadObserverCallback);
downloadObserver.onResume();
}
+ refreshHeaderView();
setListShown(true);
adapter.notifyDataSetChanged();
@@ -336,6 +420,32 @@ public class ItemlistFragment extends ListFragment {
}
+ private void refreshHeaderView() {
+ if(feed.hasLastUpdateFailed()) {
+ txtvFailure.setVisibility(View.VISIBLE);
+ } else {
+ txtvFailure.setVisibility(View.GONE);
+ }
+ if(feed.getItemFilter() != null) {
+ FeedItemFilter filter = feed.getItemFilter();
+ if(filter.getValues().length > 0) {
+ if(feed.hasLastUpdateFailed()) {
+ RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) txtvInformation.getLayoutParams();
+ p.addRule(RelativeLayout.BELOW, R.id.txtvFailure);
+ }
+ txtvInformation.setText("{fa-info-circle} " + this.getString(R.string.filtered_label));
+ Iconify.addIcons(txtvInformation);
+ txtvInformation.setVisibility(View.VISIBLE);
+ } else {
+ txtvInformation.setVisibility(View.GONE);
+ }
+ } else {
+
+ txtvInformation.setVisibility(View.GONE);
+ }
+ }
+
+
private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() {
@Override
public void onContentChanged() {
@@ -369,6 +479,8 @@ public class ItemlistFragment extends ListFragment {
ImageView imgvBackground = (ImageView) header.findViewById(R.id.imgvBackground);
ImageView imgvCover = (ImageView) header.findViewById(R.id.imgvCover);
ImageButton butShowInfo = (ImageButton) header.findViewById(R.id.butShowInfo);
+ txtvInformation = (TextView) header.findViewById(R.id.txtvInformation);
+ txtvFailure = (IconTextView) header.findViewById(R.id.txtvFailure);
txtvTitle.setText(feed.getTitle());
txtvAuthor.setText(feed.getAuthor());
@@ -399,6 +511,7 @@ public class ItemlistFragment extends ListFragment {
});
}
+
private void setupFooterView() {
if (getListView() == null || feed == null) {
Log.e(TAG, "Unable to setup listview: listView = null or feed = null");
@@ -431,17 +544,22 @@ public class ItemlistFragment extends ListFragment {
@Override
public FeedItem getItem(int position) {
- return (feed != null) ? feed.getItemAtIndex(true, position) : null;
+ return (feed != null) ? feed.getItemAtIndex(position) : null;
}
@Override
public int getCount() {
- return (feed != null) ? feed.getNumOfItems(true) : 0;
+ return (feed != null) ? feed.getNumOfItems() : 0;
}
@Override
public boolean isInQueue(FeedItem item) {
- return (queue != null) && queue.contains(item.getId());
+ return (queuedItemsIds != null) && queuedItemsIds.contains(item.getId());
+ }
+
+ @Override
+ public boolean isNew(FeedItem item) {
+ return (newItemsIds != null) && newItemsIds.contains(item.getId());
}
@Override
@@ -480,8 +598,14 @@ public class ItemlistFragment extends ListFragment {
long feedID = params[0];
Context context = getActivity();
if (context != null) {
- return new Object[]{DBReader.getFeed(context, feedID),
- QueueAccess.IDListAccess(DBReader.getQueueIDList(context))};
+ Feed feed = DBReader.getFeed(context, feedID);
+ if(feed.getItemFilter() != null) {
+ FeedItemFilter filter = feed.getItemFilter();
+ feed.setItems(filter.filter(context, feed.getItems()));
+ }
+ LongList queuedItemsIds = DBReader.getQueueIDList(context);
+ LongList newItemsIds = DBReader.getNewItemIds(context);
+ return new Object[] { feed, queuedItemsIds, newItemsIds };
} else {
return null;
}
@@ -492,7 +616,8 @@ public class ItemlistFragment extends ListFragment {
super.onPostExecute(res);
if (res != null) {
feed = (Feed) res[0];
- queue = (QueueAccess) res[1];
+ queuedItemsIds = (LongList) res[1];
+ newItemsIds = res[2] == null ? null : (LongList) res[2];
itemsLoaded = true;
if (viewsCreated) {
onFragmentLoaded();
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java
index c14b0cc6e..16789d694 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java
@@ -1,6 +1,7 @@
package de.danoeh.antennapod.fragment;
import android.content.Intent;
+import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -28,6 +29,7 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.DefaultOnlineFeedViewActivity;
import de.danoeh.antennapod.activity.OnlineFeedViewActivity;
import de.danoeh.antennapod.adapter.itunes.ItunesAdapter;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
import static de.danoeh.antennapod.adapter.itunes.ItunesAdapter.*;
@@ -124,6 +126,13 @@ public class ItunesSearchFragment extends Fragment {
}
});
+ SearchView.SearchAutoComplete textField = (SearchView.SearchAutoComplete) searchView.findViewById(de.danoeh.antennapod.R.id.search_src_text);
+ if(UserPreferences.getTheme() == de.danoeh.antennapod.R.style.Theme_AntennaPod_Dark) {
+ textField.setTextColor(Resources.getSystem().getColor(android.R.color.white));
+ } else {
+ textField.setTextColor(Resources.getSystem().getColor(android.R.color.black));
+ }
+
return view;
}
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 c2bbae42d..4bce3c7ba 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java
@@ -1,7 +1,7 @@
package de.danoeh.antennapod.fragment;
+import android.content.Context;
import android.os.Bundle;
-import android.os.Parcelable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -11,17 +11,25 @@ import com.mobeta.android.dslv.DragSortListView;
import de.danoeh.antennapod.R;
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.preferences.UserPreferences;
+import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken;
import de.danoeh.antennapod.core.util.gui.UndoBarController;
+import de.greenrobot.event.EventBus;
+
/**
* Like 'EpisodesFragment' except that it only shows new episodes and
* supports swiping to mark as read.
*/
+
public class NewEpisodesFragment extends AllEpisodesFragment {
- private static final String TAG = "NewEpisodesFragment";
+ public static final String TAG = "NewEpisodesFragment";
+
private static final String PREF_NAME = "PrefNewEpisodesFragment";
private UndoBarController undoBarController;
@@ -30,6 +38,23 @@ public class NewEpisodesFragment extends AllEpisodesFragment {
super(true, PREF_NAME);
}
+ public void onEvent(QueueEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ startItemLoader();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ EventBus.getDefault().register(this);
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ EventBus.getDefault().unregister(this);
+ }
+
@Override
protected void resetViewState() {
super.resetViewState();
@@ -55,18 +80,30 @@ public class NewEpisodesFragment extends AllEpisodesFragment {
}
});
- undoBarController = new UndoBarController(root.findViewById(R.id.undobar), new UndoBarController.UndoListener() {
+ undoBarController = new UndoBarController<FeedItemUndoToken>(root.findViewById(R.id.undobar), new UndoBarController.UndoListener<FeedItemUndoToken>() {
+
+ private final Context context = getActivity();
+
@Override
- public void onUndo(Parcelable token) {
- // Perform the undo
- FeedItemUndoToken undoToken = (FeedItemUndoToken) token;
+ public void onUndo(FeedItemUndoToken token) {
if (token != null) {
- long itemId = undoToken.getFeedItemId();
- int position = undoToken.getPosition();
- DBWriter.markItemRead(getActivity(), itemId, false);
+ long itemId = token.getFeedItemId();
+ DBWriter.markItemRead(context, itemId, false);
+ }
+ }
+ @Override
+ public void onHide(FeedItemUndoToken token) {
+ if (token != null && context != null) {
+ long itemId = token.getFeedItemId();
+ FeedItem item = DBReader.getFeedItem(context, itemId);
+ FeedMedia media = item.getMedia();
+ if(media != null && media.hasAlmostEnded() && UserPreferences.isAutoDelete()) {
+ DBWriter.deleteFeedMediaOfItem(context, media.getId());
+ }
}
}
});
return root;
}
+
}
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 9002227d6..9099829d8 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
@@ -7,7 +7,9 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.ListFragment;
+import android.support.v4.util.Pair;
import android.support.v4.view.MenuItemCompat;
+import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -25,20 +27,22 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver;
import de.danoeh.antennapod.core.feed.EventDistributor;
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.Downloader;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.core.util.QueueAccess;
-import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
+import de.danoeh.antennapod.core.util.LongList;
+import de.greenrobot.event.EventBus;
public class PlaybackHistoryFragment extends ListFragment {
- private static final String TAG = "PlaybackHistoryFragment";
+
+ public static final String TAG = "PlaybackHistoryFragment";
+
private static final int EVENTS = EventDistributor.PLAYBACK_HISTORY_UPDATE |
EventDistributor.PLAYER_STATUS_UPDATE;
private List<FeedItem> playbackHistory;
- private QueueAccess queue;
+ private LongList queue;
private FeedItemlistAdapter adapter;
private boolean itemsLoaded = false;
@@ -66,12 +70,14 @@ public class PlaybackHistoryFragment extends ListFragment {
public void onStart() {
super.onStart();
EventDistributor.getInstance().register(contentUpdate);
+ EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
+ EventBus.getDefault().unregister(this);
stopItemLoader();
}
@@ -133,7 +139,7 @@ public class PlaybackHistoryFragment extends ListFragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
MenuItem clearHistory = menu.add(Menu.NONE, R.id.clear_history_item, Menu.CATEGORY_CONTAINER, R.string.clear_history_label);
MenuItemCompat.setShowAsAction(clearHistory, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
TypedArray drawables = getActivity().obtainStyledAttributes(new int[]{R.attr.content_discard});
@@ -145,7 +151,7 @@ public class PlaybackHistoryFragment extends ListFragment {
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
MenuItem menuItem = menu.findItem(R.id.clear_history_item);
if (menuItem != null) {
menuItem.setVisible(playbackHistory != null && !playbackHistory.isEmpty());
@@ -168,6 +174,11 @@ public class PlaybackHistoryFragment extends ListFragment {
}
}
+ public void onEvent(QueueEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ startItemLoader();
+ }
+
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
@Override
@@ -215,6 +226,11 @@ public class PlaybackHistoryFragment extends ListFragment {
}
@Override
+ public boolean isNew(FeedItem item) {
+ return false;
+ }
+
+ @Override
public int getItemDownloadProgressPercent(FeedItem item) {
if (downloaderList != null) {
for (Downloader downloader : downloaderList) {
@@ -254,27 +270,27 @@ public class PlaybackHistoryFragment extends ListFragment {
}
}
- private class ItemLoader extends AsyncTask<Void, Void, Object[]> {
+ private class ItemLoader extends AsyncTask<Void, Void, Pair<List<FeedItem>,LongList>> {
@Override
- protected Object[] doInBackground(Void... params) {
+ protected Pair<List<FeedItem>,LongList> doInBackground(Void... params) {
Context context = activity.get();
if (context != null) {
- List<FeedItem> ph = DBReader.getPlaybackHistory(context);
- DBReader.loadFeedDataOfFeedItemlist(context, ph);
- return new Object[]{ph,
- QueueAccess.IDListAccess(DBReader.getQueueIDList(context))};
+ List<FeedItem> history = DBReader.getPlaybackHistory(context);
+ LongList queue = DBReader.getQueueIDList(context);
+ DBReader.loadFeedDataOfFeedItemlist(context, history);
+ return Pair.create(history, queue);
} else {
return null;
}
}
@Override
- protected void onPostExecute(Object[] res) {
+ protected void onPostExecute(Pair<List<FeedItem>,LongList> res) {
super.onPostExecute(res);
if (res != null) {
- playbackHistory = (List<FeedItem>) res[0];
- queue = (QueueAccess) res[1];
+ 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 70a231cad..d82c7b8f7 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -7,8 +7,8 @@ import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
-import android.os.Parcelable;
import android.support.v4.app.Fragment;
+import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.ContextMenu;
@@ -21,6 +21,7 @@ import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ProgressBar;
import android.widget.TextView;
+import android.widget.Toast;
import com.mobeta.android.dslv.DragSortListView;
@@ -37,26 +38,32 @@ 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.preferences.UserPreferences;
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.DownloadRequestException;
import de.danoeh.antennapod.core.storage.DownloadRequester;
+import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.QueueSorter;
import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken;
import de.danoeh.antennapod.core.util.gui.UndoBarController;
+import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
+import de.greenrobot.event.EventBus;
/**
* Shows all items in the queue
*/
public class QueueFragment extends Fragment {
- private static final String TAG = "QueueFragment";
+
+ public static final String TAG = "QueueFragment";
+
private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED |
EventDistributor.DOWNLOAD_QUEUED |
- EventDistributor.QUEUE_UPDATE |
EventDistributor.PLAYER_STATUS_UPDATE;
private DragSortListView listView;
@@ -64,7 +71,9 @@ public class QueueFragment extends Fragment {
private TextView txtvEmpty;
private ProgressBar progLoading;
- private UndoBarController undoBarController;
+ private ContextMenu contextMenu;
+
+ private UndoBarController<FeedItemUndoToken> undoBarController;
private List<FeedItem> queue;
private List<Downloader> downloaderList;
@@ -104,6 +113,7 @@ public class QueueFragment extends Fragment {
public void onStart() {
super.onStart();
EventDistributor.getInstance().register(contentUpdate);
+ EventBus.getDefault().register(this);
this.activity.set((MainActivity) getActivity());
if (downloadObserver != null) {
downloadObserver.setActivity(getActivity());
@@ -124,7 +134,11 @@ public class QueueFragment extends Fragment {
public void onStop() {
super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
+ EventBus.getDefault().unregister(this);
stopItemLoader();
+ if(undoBarController.isShowing()) {
+ undoBarController.close();
+ }
}
@Override
@@ -133,6 +147,15 @@ public class QueueFragment extends Fragment {
this.activity.set((MainActivity) activity);
}
+ public void onEventMainThread(QueueEvent event) {
+ Log.d(TAG, "onEvent(" + event + ")");
+ if(event.action == QueueEvent.Action.REMOVED) {
+ undoBarController.showUndoBar(false, getString(R.string.removed_from_queue),
+ new FeedItemUndoToken(event.item, event.position));
+ }
+ startItemLoader();
+ }
+
private void saveScrollPosition() {
SharedPreferences prefs = getActivity().getSharedPreferences(PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
@@ -185,11 +208,12 @@ public class QueueFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
inflater.inflate(R.menu.queue, menu);
- final SearchView sv = new SearchView(getActivity());
- MenuItemUtils.addSearchItem(menu, sv);
+ MenuItem searchItem = menu.findItem(R.id.action_search);
+ final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem);
+ MenuItemUtils.adjustTextColor(getActivity(), sv);
sv.setQueryHint(getString(R.string.search_hint));
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
@@ -204,6 +228,9 @@ public class QueueFragment extends Fragment {
return false;
}
});
+
+ MenuItemUtils.refreshLockItem(getActivity(), menu);
+
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
}
@@ -212,6 +239,17 @@ public class QueueFragment extends Fragment {
public boolean onOptionsItemSelected(MenuItem item) {
if (!super.onOptionsItemSelected(item)) {
switch (item.getItemId()) {
+ case R.id.queue_lock:
+ boolean locked = !UserPreferences.isQueueLocked();
+ if(locked) {
+ listView.setDragEnabled(false);
+ } else {
+ listView.setDragEnabled(true);
+ }
+ UserPreferences.setQueueLocked(locked);
+ getActivity().supportInvalidateOptionsMenu();
+ listAdapter.setLocked(locked);
+ return true;
case R.id.refresh_item:
List<Feed> feeds = ((MainActivity) getActivity()).getFeeds();
if (feeds != null) {
@@ -260,6 +298,19 @@ public class QueueFragment extends Fragment {
}
+ private final FeedItemMenuHandler.MenuInterface contextMenuInterface = new FeedItemMenuHandler.MenuInterface() {
+ @Override
+ public void setItemVisibility(int id, boolean visible) {
+ if(contextMenu == null) {
+ return;
+ }
+ MenuItem item = contextMenu.findItem(id);
+ if (item != null) {
+ item.setVisible(visible);
+ }
+ }
+ };
+
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
@@ -273,8 +324,12 @@ public class QueueFragment extends Fragment {
menu.setHeaderTitle(item.getTitle());
}
- menu.findItem(R.id.move_to_top_item).setEnabled(!queue.isEmpty() && queue.get(0) != item);
- menu.findItem(R.id.move_to_bottom_item).setEnabled(!queue.isEmpty() && queue.get(queue.size() - 1) != item);
+ contextMenu = menu;
+ LongList queueIds = new LongList(queue.size());
+ for(FeedItem queueItem : queue) {
+ queueIds.add(queueItem.getId());
+ }
+ FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queueIds);
}
@Override
@@ -287,21 +342,16 @@ public class QueueFragment extends Fragment {
return super.onContextItemSelected(item);
}
- switch (item.getItemId()) {
- case R.id.move_to_top_item:
- DBWriter.moveQueueItemToTop(getActivity(), selectedItem.getId(), true);
- return true;
- case R.id.move_to_bottom_item:
- DBWriter.moveQueueItemToBottom(getActivity(), selectedItem.getId(), true);
- return true;
- case R.id.remove_from_queue_item:
- DBWriter.removeQueueItem(getActivity(), selectedItem.getId(), false);
- return true;
- default:
- return super.onContextItemSelected(item);
+ try {
+ return FeedItemMenuHandler.onMenuItemClicked(getActivity(), item.getItemId(), selectedItem);
+ } catch (DownloadRequestException e) {
+ e.printStackTrace();
+ Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
+ return true;
}
}
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
@@ -313,6 +363,12 @@ public class QueueFragment extends Fragment {
progLoading = (ProgressBar) root.findViewById(R.id.progLoading);
listView.setEmptyView(txtvEmpty);
+ if(UserPreferences.isQueueLocked()) {
+ listView.setDragEnabled(false);
+ } else {
+ listView.setDragEnabled(true);
+ }
+
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@@ -343,30 +399,40 @@ public class QueueFragment extends Fragment {
@Override
public void remove(int which) {
- Log.d(TAG, "remove("+which+")");
+ Log.d(TAG, "remove(" + which + ")");
stopItemLoader();
FeedItem item = (FeedItem) listView.getAdapter().getItem(which);
- DBWriter.removeQueueItem(getActivity(), item.getId(), true);
- undoBarController.showUndoBar(false,
- getString(R.string.removed_from_queue), new FeedItemUndoToken(item,
- which)
- );
+ DBWriter.removeQueueItem(getActivity(), item, true);
}
});
- undoBarController = new UndoBarController(root.findViewById(R.id.undobar), new UndoBarController.UndoListener() {
- @Override
- public void onUndo(Parcelable token) {
- // Perform the undo
- FeedItemUndoToken undoToken = (FeedItemUndoToken) token;
- if (token != null) {
- long itemId = undoToken.getFeedItemId();
- int position = undoToken.getPosition();
- DBWriter.addQueueItemAt(getActivity(), itemId, position, false);
- }
- }
- });
+ undoBarController = new UndoBarController<FeedItemUndoToken>(root.findViewById(R.id.undobar),
+ new UndoBarController.UndoListener<FeedItemUndoToken>() {
+
+ private final Context context = getActivity();
+
+ @Override
+ public void onUndo(FeedItemUndoToken token) {
+ if (token != null) {
+ long itemId = token.getFeedItemId();
+ int position = token.getPosition();
+ DBWriter.addQueueItemAt(context, itemId, position, false);
+ }
+ }
+ @Override
+ public void onHide(FeedItemUndoToken token) {
+ if (token != null && context != null) {
+ long itemId = token.getFeedItemId();
+ FeedItem item = DBReader.getFeedItem(context, itemId);
+ FeedMedia media = item.getMedia();
+ if(media != null && media.hasAlmostEnded() && UserPreferences.isAutoDelete()) {
+ DBWriter.deleteFeedMediaOfItem(context, media.getId());
+ }
+ }
+ }
+
+ });
registerForContextMenu(listView);
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 f578d4338..b1b61f74b 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
@@ -5,15 +5,21 @@ import android.os.Handler;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ListView;
+import android.widget.Toast;
+
+import java.util.List;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.DownloadlistAdapter;
import de.danoeh.antennapod.core.asynctask.DownloadObserver;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.service.download.DownloadRequest;
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 java.util.List;
-
/**
* Displays all running downloads and provides actions to cancel them
*/
@@ -73,7 +79,17 @@ public class RunningDownloadsFragment extends ListFragment {
@Override
public void onSecondaryActionClick(Downloader downloader) {
- DownloadRequester.getInstance().cancelDownload(getActivity(), downloader.getDownloadRequest().getSource());
+ DownloadRequest downloadRequest = downloader.getDownloadRequest();
+ DownloadRequester.getInstance().cancelDownload(getActivity(), downloadRequest.getSource());
+
+ if(downloadRequest.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA &&
+ UserPreferences.isEnableAutodownload()) {
+ FeedMedia media = DBReader.getFeedMedia(getActivity(), downloadRequest.getFeedfileId());
+ DBWriter.setFeedItemAutoDownload(getActivity(), media.getItem(), false);
+ Toast.makeText(getActivity(), R.string.download_canceled_autodownload_enabled_msg, Toast.LENGTH_SHORT).show();
+ } else {
+ Toast.makeText(getActivity(), R.string.download_canceled_msg, Toast.LENGTH_SHORT).show();
+ }
}
};
}
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 cf96bb094..fc6225409 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
@@ -13,6 +13,7 @@ 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;
@@ -23,11 +24,7 @@ import de.danoeh.antennapod.core.feed.Feed;
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.DBReader;
import de.danoeh.antennapod.core.storage.FeedSearcher;
-import de.danoeh.antennapod.core.util.QueueAccess;
-import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
/**
* Performs a search operation on all feeds or one specific feed and displays the search result.
@@ -44,8 +41,6 @@ public class SearchFragment extends ListFragment {
private boolean viewCreated = false;
private boolean itemsLoaded = false;
- private QueueAccess queue;
-
/**
* Create a new SearchFragment that searches all feeds.
*/
@@ -125,7 +120,7 @@ public class SearchFragment extends ListFragment {
SearchResult result = (SearchResult) l.getAdapter().getItem(position);
FeedComponent comp = result.getComponent();
if (comp.getClass() == Feed.class) {
- ((MainActivity) getActivity()).loadFeedFragment(comp.getId());
+ ((MainActivity) getActivity()).loadFeedFragmentById(comp.getId());
} else {
if (comp.getClass() == FeedItem.class) {
FeedItem item = (FeedItem) comp;
@@ -137,7 +132,7 @@ public class SearchFragment extends ListFragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
+ if (itemsLoaded) {
MenuItem item = menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label);
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
final SearchView sv = new SearchView(getActivity());
@@ -165,8 +160,7 @@ public class SearchFragment extends ListFragment {
@Override
public void update(EventDistributor eventDistributor, Integer arg) {
if ((arg & (EventDistributor.UNREAD_ITEMS_UPDATE
- | EventDistributor.DOWNLOAD_HANDLED
- | EventDistributor.QUEUE_UPDATE)) != 0) {
+ | EventDistributor.DOWNLOAD_HANDLED)) != 0) {
startSearchTask();
}
}
@@ -209,17 +203,16 @@ public class SearchFragment extends ListFragment {
}
}
- private class SearchTask extends AsyncTask<Bundle, Void, Object[]> {
+ private class SearchTask extends AsyncTask<Bundle, Void, List<SearchResult>> {
@Override
- protected Object[] doInBackground(Bundle... params) {
+ 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 new Object[]{FeedSearcher.performSearch(context, query, feed),
- QueueAccess.IDListAccess(DBReader.getQueueIDList(context))};
+ return FeedSearcher.performSearch(context, query, feed);
} else {
- return null;
+ return Collections.emptyList();
}
}
@@ -232,12 +225,11 @@ public class SearchFragment extends ListFragment {
}
@Override
- protected void onPostExecute(Object[] results) {
+ protected void onPostExecute(List<SearchResult> results) {
super.onPostExecute(results);
if (results != null) {
itemsLoaded = true;
- searchResults = (List<SearchResult>) results[0];
- queue = (QueueAccess) results[1];
+ searchResults = results;
if (viewCreated) {
onFragmentLoaded();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
index 45b2403c8..55d4b940f 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
@@ -31,8 +31,8 @@ public class GpodnetMainFragment extends Fragment {
private static final int NUM_PAGES = 2;
- private static final int POS_TAGS = 0;
- private static final int POS_TOPLIST = 1;
+ private static final int POS_TOPLIST = 0;
+ private static final int POS_TAGS = 1;
private static final int POS_SUGGESTIONS = 2;
Resources resources;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java
index 15a0b55b1..6139a4901 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java
@@ -5,11 +5,23 @@ import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.support.v4.view.MenuItemCompat;
+import android.support.v7.widget.SearchView;
import android.util.Log;
-import android.view.*;
-import android.widget.*;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.GridView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import java.util.List;
-import de.danoeh.antennapod.BuildConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.DefaultOnlineFeedViewActivity;
import de.danoeh.antennapod.activity.MainActivity;
@@ -19,14 +31,12 @@ import de.danoeh.antennapod.core.gpoddernet.GpodnetService;
import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException;
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
-
-import java.util.List;
/**
* Displays a list of GPodnetPodcast-Objects in a GridView
*/
public abstract class PodcastListFragment extends Fragment {
+
private static final String TAG = "PodcastListFragment";
private GridView gridView;
@@ -43,24 +53,24 @@ public abstract class PodcastListFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (!MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
- final android.support.v7.widget.SearchView sv = new android.support.v7.widget.SearchView(getActivity());
- MenuItemUtils.addSearchItem(menu, sv);
- sv.setQueryHint(getString(R.string.gpodnet_search_hint));
- sv.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(String s) {
- sv.clearFocus();
- ((MainActivity) getActivity()).loadChildFragment(SearchListFragment.newInstance(s));
- return true;
- }
+ inflater.inflate(R.menu.gpodder_podcasts, menu);
+ MenuItem searchItem = menu.findItem(R.id.action_search);
+ final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem);
+ MenuItemUtils.adjustTextColor(getActivity(), sv);
+ sv.setQueryHint(getString(R.string.gpodnet_search_hint));
+ sv.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String s) {
+ sv.clearFocus();
+ ((MainActivity) getActivity()).loadChildFragment(SearchListFragment.newInstance(s));
+ return true;
+ }
- @Override
- public boolean onQueryTextChange(String s) {
- return false;
- }
- });
- }
+ @Override
+ public boolean onQueryTextChange(String s) {
+ return false;
+ }
+ });
}
@Override
@@ -90,7 +100,7 @@ public abstract class PodcastListFragment extends Fragment {
}
protected void onPodcastSelected(GpodnetPodcast selection) {
- if (BuildConfig.DEBUG) Log.d(TAG, "Selected podcast: " + selection.toString());
+ Log.d(TAG, "Selected podcast: " + selection.toString());
Intent intent = new Intent(getActivity(), DefaultOnlineFeedViewActivity.class);
intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, selection.getUrl());
intent.putExtra(DefaultOnlineFeedViewActivity.ARG_TITLE, getString(R.string.gpodnet_main_label));
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java
index 635842196..613e06805 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java
@@ -1,9 +1,11 @@
package de.danoeh.antennapod.fragment.gpodnet;
import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
+import android.view.MenuItem;
import org.apache.commons.lang3.Validate;
@@ -14,7 +16,6 @@ import de.danoeh.antennapod.core.gpoddernet.GpodnetService;
import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException;
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
/**
* Performs a search on the gpodder.net directory and displays the results.
@@ -45,25 +46,26 @@ public class SearchListFragment extends PodcastListFragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- final SearchView sv = new SearchView(getActivity());
- if (!MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
- MenuItemUtils.addSearchItem(menu, sv);
- sv.setQueryHint(getString(R.string.gpodnet_search_hint));
- sv.setQuery(query, false);
- sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(String s) {
- sv.clearFocus();
- changeQuery(s);
- return true;
- }
+ super.onCreateOptionsMenu(menu, inflater);
+ // parent already inflated menu
+ MenuItem searchItem = menu.findItem(R.id.action_search);
+ final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem);
+ MenuItemUtils.adjustTextColor(getActivity(), sv);
+ sv.setQueryHint(getString(R.string.gpodnet_search_hint));
+ sv.setQuery(query, false);
+ sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String s) {
+ sv.clearFocus();
+ changeQuery(s);
+ return true;
+ }
- @Override
- public boolean onQueryTextChange(String s) {
- return false;
- }
- });
- }
+ @Override
+ public boolean onQueryTextChange(String s) {
+ return false;
+ }
+ });
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java
index cc87407b4..5bd567a2f 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java
@@ -5,9 +5,11 @@ 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.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
@@ -21,9 +23,9 @@ import de.danoeh.antennapod.core.gpoddernet.GpodnetService;
import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException;
import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
public class TagListFragment extends ListFragment {
+
private static final String TAG = "TagListFragment";
private static final int COUNT = 50;
@@ -36,27 +38,27 @@ public class TagListFragment extends ListFragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (!MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) {
- final SearchView sv = new SearchView(getActivity());
- MenuItemUtils.addSearchItem(menu, sv);
- sv.setQueryHint(getString(R.string.gpodnet_search_hint));
- sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(String s) {
- Activity activity = getActivity();
- if (activity != null) {
- sv.clearFocus();
- ((MainActivity) activity).loadChildFragment(SearchListFragment.newInstance(s));
- }
- return true;
+ inflater.inflate(R.menu.gpodder_podcasts, menu);
+ MenuItem searchItem = menu.findItem(R.id.action_search);
+ final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem);
+ MenuItemUtils.adjustTextColor(getActivity(), sv);
+ sv.setQueryHint(getString(R.string.gpodnet_search_hint));
+ sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String s) {
+ Activity activity = getActivity();
+ if (activity != null) {
+ sv.clearFocus();
+ ((MainActivity) activity).loadChildFragment(SearchListFragment.newInstance(s));
}
+ return true;
+ }
- @Override
- public boolean onQueryTextChange(String s) {
- return false;
- }
- });
- }
+ @Override
+ public boolean onQueryTextChange(String s) {
+ return false;
+ }
+ });
}
@Override