diff options
author | Martin Fietz <Martin.Fietz@gmail.com> | 2015-11-06 00:20:59 +0100 |
---|---|---|
committer | Martin Fietz <Martin.Fietz@gmail.com> | 2015-11-06 00:20:59 +0100 |
commit | 51aba83ae2cfeab919fa25aa9efd898af856a21f (patch) | |
tree | 89ca07adf5128b515dd96abfeef968eb75ecea1a /app/src/main/java/de/danoeh/antennapod/adapter | |
parent | 32a47d0f652a579007a9035a0c4ffe5aeeebdd31 (diff) | |
download | AntennaPod-51aba83ae2cfeab919fa25aa9efd898af856a21f.zip |
RecyclerView context menus (with ripple)
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/adapter')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java | 97 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java | 11 |
2 files changed, 45 insertions, 63 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java index c72c95feb..0aad26a28 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java @@ -7,8 +7,10 @@ import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.text.format.DateUtils; 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.view.ViewGroup; @@ -51,6 +53,8 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR private final boolean showOnlyNewEpisodes; private final WeakReference<MainActivity> mainActivityRef; + private int position = -1; + public AllEpisodesRecycleAdapter(Context context, MainActivity mainActivity, ItemAccess itemAccess, @@ -96,6 +100,10 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR public void onBindViewHolder(final Holder holder, int position) { final FeedItem item = itemAccess.getItem(position); if (item == null) return; + holder.itemView.setOnLongClickListener(v -> { + this.position = position; + return false; + }); holder.item = item; holder.position = position; holder.placeholder.setVisibility(View.VISIBLE); @@ -189,6 +197,10 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR return itemAccess.getItem(position); } + public int getPosition() { + return position; + } + private class CoverTarget extends GlideDrawableImageViewTarget { private final WeakReference<Uri> fallback; @@ -235,63 +247,8 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR } }; - private Menu popupMenu; - private final FeedItemMenuHandler.MenuInterface contextMenuInterface = new FeedItemMenuHandler.MenuInterface() { - @Override - public void setItemVisibility(int id, boolean visible) { - if(popupMenu == null) { - return; - } - MenuItem item = popupMenu.findItem(id); - if (item != null) { - item.setVisible(visible); - } - } - }; - - private final boolean showContextMenu(View view) { - // Create a PopupMenu, giving it the clicked view for an anchor - MainActivity mainActivity = this.mainActivityRef.get(); - if (mainActivity == null) { - Log.d(TAG, "mainActivity is null"); - return false; - } - PopupMenu popup = new PopupMenu(mainActivity, view); - Menu menu = popup.getMenu(); - - // Inflate our menu resource into the PopupMenu's Menu - popup.getMenuInflater().inflate(R.menu.allepisodes_context, popup.getMenu()); - - Holder holder = (Holder) view.getTag(); - FeedItem item = holder.item; - if (item == null) { - return false; - } - - popupMenu = menu; - FeedItemMenuHandler.onPrepareMenu(context, contextMenuInterface, item, true, null); - - // Set a listener so we are notified if a menu item is clicked - popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem menuItem) { - try { - FeedItemMenuHandler.onMenuItemClicked(context, menuItem.getItemId(), item); - return true; - } catch (DownloadRequestException e) { - e.printStackTrace(); - } - return false; - } - }); - - popup.show(); - return true; - } - - public class Holder extends RecyclerView.ViewHolder - implements View.OnClickListener, View.OnLongClickListener{ + implements View.OnClickListener, View.OnCreateContextMenuListener { TextView placeholder; TextView title; TextView pubDate; @@ -308,7 +265,7 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR public Holder(View itemView) { super(itemView); itemView.setOnClickListener(this); - itemView.setOnLongClickListener(this); + itemView.setOnCreateContextMenuListener(this); } @Override @@ -321,12 +278,30 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR public FeedItem getFeedItem() { return item; } - public int getItemPosition() { return position; } - @Override - public boolean onLongClick(View view) { - return showContextMenu(view); + public void onCreateContextMenu(final ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + FeedItem item = itemAccess.getItem(getAdapterPosition()); + + MenuInflater inflater = mainActivityRef.get().getMenuInflater(); + inflater.inflate(R.menu.allepisodes_context, menu); + + if (item != null) { + menu.setHeaderTitle(item.getTitle()); + } + + FeedItemMenuHandler.MenuInterface contextMenuInterface = (id, visible) -> { + if (menu == null) { + return; + } + MenuItem item1 = menu.findItem(id); + if (item1 != null) { + item1.setVisible(visible); + } + }; + FeedItemMenuHandler.onPrepareMenu(mainActivityRef.get(), contextMenuInterface, item, true, + null); } + } public interface ItemAccess { diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java index 539c2786f..3402d39f1 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java @@ -58,6 +58,8 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap private boolean locked; + private int position = -1; + public QueueRecyclerAdapter(MainActivity mainActivity, ItemAccess itemAccess, ActionButtonCallback actionButtonCallback, @@ -84,13 +86,19 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap public void onBindViewHolder(ViewHolder holder, int pos) { FeedItem item = itemAccess.getItem(pos); holder.bind(item); - holder.position = pos; + holder.itemView.setOnLongClickListener(v -> { + position = pos; + return false; + }); } public int getItemCount() { return itemAccess.getCount(); } + public int getPosition() { + return position; + } public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener { @@ -106,7 +114,6 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap private final ImageButton butSecondary; private FeedItem item; - private int position; public ViewHolder(View v) { super(v); |