From df587ec5af9c5180e195de094218c15e091646c7 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sat, 26 Mar 2016 12:10:06 -0400 Subject: context menu for subscriptions --- .../antennapod/adapter/SubscriptionsAdapter.java | 2 +- .../antennapod/fragment/SubscriptionFragment.java | 107 ++++++++++++++++++--- 2 files changed, 93 insertions(+), 16 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java index bd07c4a45..e8e034afa 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsAdapter.java @@ -71,7 +71,7 @@ public class SubscriptionsAdapter extends BaseAdapter { } else { holder = (Holder) convertView.getTag(); } - + holder.feedTitle.setText(feed.getTitle()); Glide.with(context) .load(feed.getImageUri()) diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java index b932e1a1b..d25d7f2c3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -1,9 +1,14 @@ package de.danoeh.antennapod.fragment; +import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; +import android.view.ContextMenu; import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -16,8 +21,14 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.NavListAdapter; import de.danoeh.antennapod.adapter.SubscriptionsAdapter; +import de.danoeh.antennapod.core.asynctask.FeedRemover; +import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.preferences.PlaybackPreferences; +import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.util.FeedItemUtil; import de.greenrobot.event.EventBus; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; @@ -36,6 +47,7 @@ public class SubscriptionFragment extends Fragment { private NavListAdapter.ItemAccess mItemAccess; private List mSubscriptionList = new ArrayList<>(); + private int mPosition = -1; public SubscriptionFragment() { @@ -57,6 +69,7 @@ public class SubscriptionFragment extends Fragment { Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_subscriptions, container, false); mSubscriptionGridLayout = (GridView) root.findViewById(R.id.subscriptions_grid); + registerForContextMenu(mSubscriptionGridLayout); return root; } @@ -67,7 +80,23 @@ public class SubscriptionFragment extends Fragment { mSubscriptionGridLayout.setAdapter(mSubscriptionAdapter); - Observable.fromCallable(() -> loadData()) + loadSubscriptions(); + + mSubscriptionGridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + EventBus.getDefault().post(new SubscriptionEvent(mSubscriptionList.get(position))); + } + }); + + if (getActivity() instanceof MainActivity) { + ((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.subscriptions_label); + } + + } + + private void loadSubscriptions() { + Observable.fromCallable(() -> DBReader.getNavDrawerData()) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(result -> { @@ -78,19 +107,72 @@ public class SubscriptionFragment extends Fragment { }, error -> { Log.e(TAG, Log.getStackTraceString(error)); }); + } + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; + int position = adapterInfo.position; - mSubscriptionGridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - EventBus.getDefault().post(new SubscriptionEvent(mSubscriptionList.get(position))); - } - }); + MenuInflater inflater = getActivity().getMenuInflater(); + inflater.inflate(R.menu.nav_feed_context, menu); + Feed feed = (Feed)mSubscriptionAdapter.getItem(position); + menu.setHeaderTitle(feed.getTitle()); - if (getActivity() instanceof MainActivity) { - ((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.subscriptions_label); - } + mPosition = position; + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + final int position = mPosition; + mPosition = -1; // reset + if(position < 0) { + return false; + } + Feed feed = mDrawerData.feeds.get(position); + switch(item.getItemId()) { + case R.id.mark_all_seen_item: + DBWriter.markFeedSeen(feed.getId()); + return true; + case R.id.mark_all_read_item: + DBWriter.markFeedRead(feed.getId()); + return true; + case R.id.remove_item: + final FeedRemover remover = new FeedRemover(getContext(), feed) { + @Override + protected void onPostExecute(Void result) { + super.onPostExecute(result); + loadSubscriptions(); + } + }; + ConfirmationDialog conDialog = new ConfirmationDialog(getContext(), + R.string.remove_feed_label, + R.string.feed_delete_confirmation_msg) { + @Override + public void onConfirmButtonPressed( + DialogInterface dialog) { + dialog.dismiss(); + long mediaId = PlaybackPreferences.getCurrentlyPlayingFeedMediaId(); + if (mediaId > 0 && + FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId) >= 0) { + Log.d(TAG, "Currently playing episode is about to be deleted, skipping"); + remover.skipOnCompletion = true; + int playerStatus = PlaybackPreferences.getCurrentPlayerStatus(); + if(playerStatus == PlaybackPreferences.PLAYER_STATUS_PLAYING) { + getActivity().sendBroadcast(new Intent( + PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE)); + } + } + remover.executeAsync(); + } + }; + conDialog.createNewDialog().show(); + return true; + default: + return super.onContextItemSelected(item); + } } @Override @@ -105,9 +187,4 @@ public class SubscriptionFragment extends Fragment { feed = f; } } - - - private DBReader.NavDrawerData loadData() { - return DBReader.getNavDrawerData(); - } } -- cgit v1.2.3