diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/menuhandler')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java | 68 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java | 18 |
2 files changed, 59 insertions, 27 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index fe1a09149..3e2fdf24f 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.util.Log; +import android.widget.Toast; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; @@ -16,7 +17,7 @@ import de.danoeh.antennapod.core.service.playback.PlaybackService; 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.IntentUtils; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.ShareUtils; @@ -56,7 +57,7 @@ public class FeedItemMenuHandler { * @param queueAccess Used for testing if the queue contains the selected item * @return Returns true if selectedItem is not null. */ - public static boolean onPrepareMenu(MenuInterface mi, FeedItem selectedItem, + public static boolean onPrepareMenu(Context context, MenuInterface mi, FeedItem selectedItem, boolean showExtendedMenu, LongList queueAccess) { if (selectedItem == null) { return false; @@ -84,8 +85,19 @@ public class FeedItemMenuHandler { if (!(!isInQueue && selectedItem.getMedia() != null)) { mi.setItemVisibility(R.id.add_to_queue_item, false); } + if (!showExtendedMenu || selectedItem.getLink() == null) { + mi.setItemVisibility(R.id.visit_website_item, false); mi.setItemVisibility(R.id.share_link_item, false); + mi.setItemVisibility(R.id.share_link_with_position_item, false); + } + if (!showExtendedMenu || !hasMedia || selectedItem.getMedia().getDownload_url() == null) { + mi.setItemVisibility(R.id.share_download_url_item, false); + mi.setItemVisibility(R.id.share_download_url_with_position_item, false); + } + if(false == hasMedia || selectedItem.getMedia().getPosition() <= 0) { + mi.setItemVisibility(R.id.share_link_with_position_item, false); + mi.setItemVisibility(R.id.share_download_url_with_position_item, false); } if (!(state == FeedItem.State.UNREAD || state == FeedItem.State.IN_PROGRESS)) { @@ -108,10 +120,6 @@ public class FeedItemMenuHandler { mi.setItemVisibility(R.id.deactivate_auto_download, false); } - if (!showExtendedMenu || selectedItem.getLink() == null) { - mi.setItemVisibility(R.id.visit_website_item, false); - } - if (selectedItem.getPaymentLink() == null || !selectedItem.getFlattrStatus().flattrable()) { mi.setItemVisibility(R.id.support_item, false); } @@ -125,21 +133,19 @@ public class FeedItemMenuHandler { * @param excludeIds Menu item that should be excluded * @return true if selectedItem is not null. */ - public static boolean onPrepareMenu(MenuInterface mi, - FeedItem selectedItem, boolean showExtendedMenu, LongList queueAccess, int... excludeIds) { - boolean rc = onPrepareMenu(mi, selectedItem, showExtendedMenu, queueAccess); + public static boolean onPrepareMenu(Context context, MenuInterface mi, FeedItem selectedItem, + boolean showExtendedMenu, LongList queueAccess, int... excludeIds) { + boolean rc = onPrepareMenu(context, mi, selectedItem, showExtendedMenu, queueAccess); if (rc && excludeIds != null) { for (int id : excludeIds) { mi.setItemVisibility(id, false); } } - return rc; } public static boolean onMenuItemClicked(Context context, int menuItemId, FeedItem selectedItem) throws DownloadRequestException { - DownloadRequester requester = DownloadRequester.getInstance(); switch (menuItemId) { case R.id.skip_episode_item: context.sendBroadcast(new Intent(PlaybackService.ACTION_SKIP_CURRENT_EPISODE)); @@ -148,22 +154,25 @@ public class FeedItemMenuHandler { DBWriter.deleteFeedMediaOfItem(context, selectedItem.getMedia().getId()); break; case R.id.mark_read_item: - selectedItem.setRead(true); + selectedItem.setPlayed(true); DBWriter.markItemRead(context, selectedItem, true, false); if(GpodnetPreferences.loggedIn()) { FeedMedia media = selectedItem.getMedia(); - GpodnetEpisodeAction actionPlay = new GpodnetEpisodeAction.Builder(selectedItem, Action.PLAY) - .currentDeviceId() - .currentTimestamp() - .started(media.getDuration() / 1000) - .position(media.getDuration() / 1000) - .total(media.getDuration() / 1000) - .build(); - GpodnetPreferences.enqueueEpisodeAction(actionPlay); + // not all items have media, Gpodder only cares about those that do + if (media != null) { + GpodnetEpisodeAction actionPlay = new GpodnetEpisodeAction.Builder(selectedItem, Action.PLAY) + .currentDeviceId() + .currentTimestamp() + .started(media.getDuration() / 1000) + .position(media.getDuration() / 1000) + .total(media.getDuration() / 1000) + .build(); + GpodnetPreferences.enqueueEpisodeAction(actionPlay); + } } break; case R.id.mark_unread_item: - selectedItem.setRead(false); + selectedItem.setPlayed(false); DBWriter.markItemRead(context, selectedItem, false, false); if(GpodnetPreferences.loggedIn()) { GpodnetEpisodeAction actionNew = new GpodnetEpisodeAction.Builder(selectedItem, Action.NEW) @@ -198,7 +207,13 @@ public class FeedItemMenuHandler { break; case R.id.visit_website_item: Uri uri = Uri.parse(selectedItem.getLink()); - context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + if(IntentUtils.isCallable(context, intent)) { + context.startActivity(intent); + } else { + Toast.makeText(context, context.getString(R.string.download_error_malformed_url), + Toast.LENGTH_SHORT); + } break; case R.id.support_item: DBTasks.flattrItemIfLoggedIn(context, selectedItem); @@ -206,6 +221,15 @@ public class FeedItemMenuHandler { case R.id.share_link_item: ShareUtils.shareFeedItemLink(context, selectedItem); break; + case R.id.share_download_url_item: + ShareUtils.shareFeedItemDownloadLink(context, selectedItem); + break; + case R.id.share_link_with_position_item: + ShareUtils.shareFeedItemLink(context, selectedItem, true); + break; + case R.id.share_download_url_with_position_item: + ShareUtils.shareFeedItemDownloadLink(context, selectedItem, true); + break; default: Log.d(TAG, "Unknown menuItemId: " + menuItemId); return false; diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index 7bd8fedc9..3df59724d 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -9,6 +9,7 @@ import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.widget.Toast; import java.util.ArrayList; import java.util.Arrays; @@ -20,6 +21,7 @@ import de.danoeh.antennapod.core.feed.Feed; 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.util.IntentUtils; import de.danoeh.antennapod.core.util.ShareUtils; /** @@ -39,11 +41,11 @@ public class FeedMenuHandler { } Log.d(TAG, "Preparing options menu"); - menu.findItem(R.id.mark_all_read_item).setVisible(selectedFeed.hasNewItems()); - if (selectedFeed.getPaymentLink() != null && selectedFeed.getFlattrStatus().flattrable()) + if (selectedFeed.getPaymentLink() != null && selectedFeed.getFlattrStatus().flattrable()) { menu.findItem(R.id.support_item).setVisible(true); - else + } else { menu.findItem(R.id.support_item).setVisible(false); + } menu.findItem(R.id.refresh_complete_item).setVisible(selectedFeed.isPaged()); @@ -83,7 +85,13 @@ public class FeedMenuHandler { break; case R.id.visit_website_item: Uri uri = Uri.parse(selectedFeed.getLink()); - context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + if(IntentUtils.isCallable(context, intent)) { + context.startActivity(intent); + } else { + Toast.makeText(context, context.getString(R.string.download_error_malformed_url), + Toast.LENGTH_SHORT); + } break; case R.id.support_item: DBTasks.flattrFeedIfLoggedIn(context, selectedFeed); @@ -91,7 +99,7 @@ public class FeedMenuHandler { case R.id.share_link_item: ShareUtils.shareFeedlink(context, selectedFeed); break; - case R.id.share_source_item: + case R.id.share_download_url_item: ShareUtils.shareFeedDownloadLink(context, selectedFeed); break; default: |