replaced context menu with popup menu. still a couple of other issues
This commit is contained in:
parent
a02b84d2d2
commit
89bbc88826
|
@ -3,13 +3,15 @@ package de.danoeh.antennapod.adapter;
|
|||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.widget.PopupMenu;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
|
@ -28,10 +30,12 @@ import de.danoeh.antennapod.activity.MainActivity;
|
|||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.glide.ApGlideSettings;
|
||||
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.NetworkUtils;
|
||||
import de.danoeh.antennapod.fragment.ItemFragment;
|
||||
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
|
||||
|
||||
/**
|
||||
* List adapter for the list of new episodes
|
||||
|
@ -82,6 +86,8 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR
|
|||
holder.item = null;
|
||||
holder.mainActivity = mainActivity;
|
||||
holder.position = -1;
|
||||
// so we can grab this later
|
||||
view.setTag(holder);
|
||||
|
||||
return holder;
|
||||
}
|
||||
|
@ -229,9 +235,58 @@ 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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public static class Holder extends RecyclerView.ViewHolder
|
||||
implements View.OnClickListener {
|
||||
private final boolean showContextMenu(View view) {
|
||||
// Create a PopupMenu, giving it the clicked view for an anchor
|
||||
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{
|
||||
TextView placeholder;
|
||||
TextView title;
|
||||
TextView pubDate;
|
||||
|
@ -248,7 +303,7 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR
|
|||
public Holder(View itemView) {
|
||||
super(itemView);
|
||||
itemView.setOnClickListener(this);
|
||||
itemView.setOnCreateContextMenuListener(mainActivity);
|
||||
itemView.setOnLongClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -261,6 +316,11 @@ 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 interface ItemAccess {
|
||||
|
|
|
@ -78,11 +78,8 @@ public class AllEpisodesFragment extends Fragment {
|
|||
private AllEpisodesRecycleAdapter listAdapter;
|
||||
private TextView txtvEmpty;
|
||||
private ProgressBar progLoading;
|
||||
private ContextMenu contextMenu;
|
||||
private AdapterView.AdapterContextMenuInfo lastMenuInfo = null;
|
||||
|
||||
private List<FeedItem> episodes;
|
||||
private LongList queuedItemsIds;
|
||||
private List<Downloader> downloaderList;
|
||||
|
||||
private boolean itemsLoaded = false;
|
||||
|
@ -297,7 +294,7 @@ public class AllEpisodesFragment extends Fragment {
|
|||
txtvEmpty = (TextView) root.findViewById(android.R.id.empty);
|
||||
progLoading = (ProgressBar) root.findViewById(R.id.progLoading);
|
||||
|
||||
registerForContextMenu(listView);
|
||||
//registerForContextMenu(listView);
|
||||
|
||||
if (!itemsLoaded) {
|
||||
progLoading.setVisibility(View.VISIBLE);
|
||||
|
@ -313,75 +310,6 @@ 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);
|
||||
if (menuInfo == null) { return; }
|
||||
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;
|
||||
lastMenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
|
||||
FeedItemMenuHandler.onPrepareMenu(getActivity(), contextMenuInterface, item, true, queuedItemsIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onContextItemSelected(MenuItem item) {
|
||||
if (!getUserVisibleHint()) {
|
||||
// we're not visible, don't do anything.
|
||||
return false;
|
||||
}
|
||||
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
|
||||
if (menuInfo == null) {
|
||||
menuInfo = lastMenuInfo;
|
||||
}
|
||||
if (menuInfo == null) {
|
||||
Log.e(TAG, "menuInfo is null, not doing anything");
|
||||
return false;
|
||||
}
|
||||
|
||||
FeedItem selectedItem = null;
|
||||
|
||||
// make sure the item still makes sense
|
||||
if (menuInfo.position >= 0 && menuInfo.position < itemAccess.getCount()) {
|
||||
selectedItem = itemAccess.getItem(menuInfo.position);
|
||||
} else {
|
||||
Log.d(TAG, "Selected item at position " + menuInfo.position + " does not exist, only " + itemAccess.getCount() + " items available");
|
||||
}
|
||||
|
||||
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 AllEpisodesRecycleAdapter(activity.get(), activity.get(), itemAccess,
|
||||
|
@ -439,11 +367,10 @@ public class AllEpisodesFragment extends Fragment {
|
|||
|
||||
@Override
|
||||
public boolean isInQueue(FeedItem item) {
|
||||
if (itemsLoaded) {
|
||||
return queuedItemsIds.contains(item.getId());
|
||||
} else {
|
||||
return false;
|
||||
if (item != null) {
|
||||
return item.isTagged(FeedItem.TAG_QUEUE);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -478,8 +405,7 @@ public class AllEpisodesFragment extends Fragment {
|
|||
listView.setVisibility(View.VISIBLE);
|
||||
progLoading.setVisibility(View.GONE);
|
||||
if (data != null) {
|
||||
episodes = data.first;
|
||||
queuedItemsIds = data.second;
|
||||
episodes = data;
|
||||
itemsLoaded = true;
|
||||
if (viewsCreated && activity.get() != null) {
|
||||
onFragmentLoaded();
|
||||
|
@ -490,11 +416,8 @@ public class AllEpisodesFragment extends Fragment {
|
|||
});
|
||||
}
|
||||
|
||||
protected Pair<List<FeedItem>,LongList> loadData() {
|
||||
List<FeedItem> items;
|
||||
items = DBReader.getRecentlyPublishedEpisodes(RECENT_EPISODES_LIMIT);
|
||||
LongList queuedIds = DBReader.getQueueIDList();
|
||||
return Pair.create(items, queuedIds);
|
||||
protected List<FeedItem> loadData() {
|
||||
return DBReader.getRecentlyPublishedEpisodes(RECENT_EPISODES_LIMIT);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue