Added buttons to FeedItemDialog and the episode lists for items without an episode.
fixes #470, fixes #464
This commit is contained in:
parent
af4929728f
commit
b87db68419
@ -27,8 +27,8 @@ public class ActionButtonUtils {
|
|||||||
|
|
||||||
this.context = context;
|
this.context = context;
|
||||||
drawables = context.obtainStyledAttributes(new int[]{
|
drawables = context.obtainStyledAttributes(new int[]{
|
||||||
R.attr.av_play, R.attr.navigation_cancel, R.attr.av_download, R.attr.navigation_chapters});
|
R.attr.av_play, R.attr.navigation_cancel, R.attr.av_download, R.attr.navigation_chapters, R.attr.navigation_accept});
|
||||||
labels = new int[]{R.string.play_label, R.string.cancel_download_label, R.string.download_label};
|
labels = new int[]{R.string.play_label, R.string.cancel_download_label, R.string.download_label, R.string.mark_read_label};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -66,7 +66,13 @@ public class ActionButtonUtils {
|
|||||||
butSecondary.setContentDescription(context.getString(labels[0]));
|
butSecondary.setContentDescription(context.getString(labels[0]));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
butSecondary.setVisibility(View.INVISIBLE);
|
if (item.isRead()) {
|
||||||
|
butSecondary.setVisibility(View.INVISIBLE);
|
||||||
|
} else {
|
||||||
|
butSecondary.setVisibility(View.VISIBLE);
|
||||||
|
butSecondary.setImageDrawable(drawables.getDrawable(4));
|
||||||
|
butSecondary.setContentDescription(context.getString(labels[3]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
|
|||||||
import de.danoeh.antennapod.feed.FeedItem;
|
import de.danoeh.antennapod.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.feed.FeedMedia;
|
import de.danoeh.antennapod.feed.FeedMedia;
|
||||||
import de.danoeh.antennapod.storage.DBTasks;
|
import de.danoeh.antennapod.storage.DBTasks;
|
||||||
|
import de.danoeh.antennapod.storage.DBWriter;
|
||||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||||
|
|
||||||
@ -28,25 +29,29 @@ public class DefaultActionButtonCallback implements ActionButtonCallback {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActionButtonPressed(final FeedItem item) {
|
public void onActionButtonPressed(final FeedItem item) {
|
||||||
final FeedMedia media = item.getMedia();
|
|
||||||
if (media == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
|
|
||||||
if (!isDownloading && !media.isDownloaded()) {
|
if (item.hasMedia()) {
|
||||||
try {
|
final FeedMedia media = item.getMedia();
|
||||||
DBTasks.downloadFeedItems(context, item);
|
boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
|
||||||
Toast.makeText(context, R.string.status_downloading_label, Toast.LENGTH_SHORT).show();
|
if (!isDownloading && !media.isDownloaded()) {
|
||||||
} catch (DownloadRequestException e) {
|
try {
|
||||||
e.printStackTrace();
|
DBTasks.downloadFeedItems(context, item);
|
||||||
DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage());
|
Toast.makeText(context, R.string.status_downloading_label, Toast.LENGTH_SHORT).show();
|
||||||
|
} catch (DownloadRequestException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage());
|
||||||
|
}
|
||||||
|
} else if (isDownloading) {
|
||||||
|
DownloadRequester.getInstance().cancelDownload(context, media);
|
||||||
|
Toast.makeText(context, R.string.download_cancelled_msg, Toast.LENGTH_SHORT).show();
|
||||||
|
} else { // media is downloaded
|
||||||
|
DBTasks.playMedia(context, media, true, true, false);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!item.isRead()) {
|
||||||
|
DBWriter.markItemRead(context, item, true, true);
|
||||||
}
|
}
|
||||||
} else if (isDownloading) {
|
|
||||||
DownloadRequester.getInstance().cancelDownload(context, media);
|
|
||||||
Toast.makeText(context, R.string.download_cancelled_msg, Toast.LENGTH_SHORT).show();
|
|
||||||
} else { // media is downloaded
|
|
||||||
DBTasks.playMedia(context, media, true, true, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,14 @@ import android.webkit.WebViewClient;
|
|||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringEscapeUtils;
|
||||||
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import de.danoeh.antennapod.BuildConfig;
|
import de.danoeh.antennapod.BuildConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
|
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
|
||||||
@ -35,12 +43,6 @@ import de.danoeh.antennapod.storage.DownloadRequester;
|
|||||||
import de.danoeh.antennapod.util.QueueAccess;
|
import de.danoeh.antennapod.util.QueueAccess;
|
||||||
import de.danoeh.antennapod.util.ShownotesProvider;
|
import de.danoeh.antennapod.util.ShownotesProvider;
|
||||||
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
|
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
|
||||||
import org.apache.commons.lang3.StringEscapeUtils;
|
|
||||||
import org.apache.commons.lang3.Validate;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows information about a specific FeedItem and provides actions like playing, downloading, etc.
|
* Shows information about a specific FeedItem and provides actions like playing, downloading, etc.
|
||||||
@ -150,12 +152,9 @@ public class FeedItemDialog extends Dialog {
|
|||||||
@Override
|
@Override
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
FeedMedia media = item.getMedia();
|
|
||||||
if (media == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
actionButtonCallback.onActionButtonPressed(item);
|
actionButtonCallback.onActionButtonPressed(item);
|
||||||
if (media.isDownloaded()) {
|
FeedMedia media = item.getMedia();
|
||||||
|
if (media != null && media.isDownloaded()) {
|
||||||
// playback was started, dialog should close itself
|
// playback was started, dialog should close itself
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
@ -169,16 +168,17 @@ public class FeedItemDialog extends Dialog {
|
|||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
FeedMedia media = item.getMedia();
|
if (item.hasMedia()) {
|
||||||
if (media == null) {
|
FeedMedia media = item.getMedia();
|
||||||
return;
|
if (!media.isDownloaded()) {
|
||||||
}
|
DBTasks.playMedia(getContext(), media, true, true, true);
|
||||||
|
dismiss();
|
||||||
if (!media.isDownloaded()) {
|
} else {
|
||||||
DBTasks.playMedia(getContext(), media, true, true, true);
|
DBWriter.deleteFeedMediaOfItem(getContext(), media.getId());
|
||||||
dismiss();
|
}
|
||||||
} else {
|
} else if (item.getLink() != null) {
|
||||||
DBWriter.deleteFeedMediaOfItem(getContext(), media.getId());
|
Uri uri = Uri.parse(item.getLink());
|
||||||
|
getContext().startActivity(new Intent(Intent.ACTION_VIEW, uri));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -189,7 +189,13 @@ public class FeedItemDialog extends Dialog {
|
|||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
popupMenu.getMenu().clear();
|
popupMenu.getMenu().clear();
|
||||||
popupMenu.inflate(R.menu.feeditem_dialog);
|
popupMenu.inflate(R.menu.feeditem_dialog);
|
||||||
FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue);
|
if (item.hasMedia()) {
|
||||||
|
FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue);
|
||||||
|
} else {
|
||||||
|
// these are already available via button1 and button2
|
||||||
|
FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue,
|
||||||
|
R.id.mark_read_item, R.id.visit_website_item);
|
||||||
|
}
|
||||||
popupMenu.show();
|
popupMenu.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,9 +237,26 @@ public class FeedItemDialog extends Dialog {
|
|||||||
}
|
}
|
||||||
FeedMedia media = item.getMedia();
|
FeedMedia media = item.getMedia();
|
||||||
if (media == null) {
|
if (media == null) {
|
||||||
header.setVisibility(View.GONE);
|
TypedArray drawables = getContext().obtainStyledAttributes(new int[]{R.attr.navigation_accept,
|
||||||
|
R.attr.location_web_site});
|
||||||
|
|
||||||
|
if (!item.isRead()) {
|
||||||
|
butAction1.setImageDrawable(drawables.getDrawable(0));
|
||||||
|
butAction1.setContentDescription(getContext().getString(R.string.mark_read_label));
|
||||||
|
butAction1.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
butAction1.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.getLink() != null) {
|
||||||
|
butAction2.setImageDrawable(drawables.getDrawable(1));
|
||||||
|
butAction2.setContentDescription(getContext().getString(R.string.visit_website_label));
|
||||||
|
} else {
|
||||||
|
butAction2.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
drawables.recycle();
|
||||||
} else {
|
} else {
|
||||||
header.setVisibility(View.VISIBLE);
|
|
||||||
boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
|
boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
|
||||||
TypedArray drawables = getContext().obtainStyledAttributes(new int[]{R.attr.av_play,
|
TypedArray drawables = getContext().obtainStyledAttributes(new int[]{R.attr.av_play,
|
||||||
R.attr.av_download, R.attr.action_stream, R.attr.content_discard, R.attr.navigation_cancel});
|
R.attr.av_download, R.attr.action_stream, R.attr.content_discard, R.attr.navigation_cancel});
|
||||||
@ -390,7 +413,7 @@ public class FeedItemDialog extends Dialog {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to save the FeedItemDialog's state across configuration changes
|
* Used to save the FeedItemDialog's state across configuration changes
|
||||||
* */
|
*/
|
||||||
public static class FeedItemDialogSavedInstance {
|
public static class FeedItemDialogSavedInstance {
|
||||||
final FeedItem item;
|
final FeedItem item;
|
||||||
final QueueAccess queueAccess;
|
final QueueAccess queueAccess;
|
||||||
|
@ -3,6 +3,7 @@ package de.danoeh.antennapod.util.menuhandler;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
|
||||||
import de.danoeh.antennapod.BuildConfig;
|
import de.danoeh.antennapod.BuildConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.feed.FeedItem;
|
import de.danoeh.antennapod.feed.FeedItem;
|
||||||
@ -113,6 +114,25 @@ public class FeedItemMenuHandler {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The same method as onPrepareMenu(MenuInterface, FeedItem, boolean, QueueAccess), but lets the
|
||||||
|
* caller also specify a list of menu items that should not be shown.
|
||||||
|
*
|
||||||
|
* @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, QueueAccess queueAccess, int... excludeIds) {
|
||||||
|
boolean rc = onPrepareMenu(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,
|
public static boolean onMenuItemClicked(Context context, int menuItemId,
|
||||||
FeedItem selectedItem) throws DownloadRequestException {
|
FeedItem selectedItem) throws DownloadRequestException {
|
||||||
DownloadRequester requester = DownloadRequester.getInstance();
|
DownloadRequester requester = DownloadRequester.getInstance();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user