From 0d6a7580de4bef2128468457b1b12958de63a08d Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Tue, 26 Jun 2012 18:39:02 +0200 Subject: Added support for flattr-paymentlinks --- src/de/podfetcher/activity/FeedItemlistActivity.java | 2 +- src/de/podfetcher/feed/Feed.java | 9 +++++++++ src/de/podfetcher/feed/FeedItem.java | 10 ++++++++++ src/de/podfetcher/feed/FeedManager.java | 13 +++++++++---- src/de/podfetcher/fragment/FeedlistFragment.java | 2 +- src/de/podfetcher/storage/PodDBAdapter.java | 9 +++++++-- .../podfetcher/syndication/namespace/atom/NSAtom.java | 18 ++++++++++++++++-- src/de/podfetcher/util/FeedItemMenuHandler.java | 10 +++++++++- src/de/podfetcher/util/FeedMenuHandler.java | 9 ++++++++- 9 files changed, 70 insertions(+), 12 deletions(-) (limited to 'src/de') diff --git a/src/de/podfetcher/activity/FeedItemlistActivity.java b/src/de/podfetcher/activity/FeedItemlistActivity.java index 253ebae33..cd3276673 100644 --- a/src/de/podfetcher/activity/FeedItemlistActivity.java +++ b/src/de/podfetcher/activity/FeedItemlistActivity.java @@ -61,7 +61,7 @@ public class FeedItemlistActivity extends SherlockFragmentActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { - return FeedMenuHandler.onPrepareOptionsMenu(menu); + return FeedMenuHandler.onPrepareOptionsMenu(menu, feed); } @Override diff --git a/src/de/podfetcher/feed/Feed.java b/src/de/podfetcher/feed/Feed.java index bcec1e55b..59eaf7046 100644 --- a/src/de/podfetcher/feed/Feed.java +++ b/src/de/podfetcher/feed/Feed.java @@ -19,6 +19,7 @@ public class Feed extends FeedFile { private ArrayList items; /** Date of last refresh. */ private Date lastUpdate; + private String paymentLink; public Feed(Date lastUpdate) { super(); @@ -97,5 +98,13 @@ public class Feed extends FeedFile { public void setLastUpdate(Date lastUpdate) { this.lastUpdate = lastUpdate; } + + public String getPaymentLink() { + return paymentLink; + } + + public void setPaymentLink(String paymentLink) { + this.paymentLink = paymentLink; + } } diff --git a/src/de/podfetcher/feed/FeedItem.java b/src/de/podfetcher/feed/FeedItem.java index 9806fbb77..0ad35d6e3 100644 --- a/src/de/podfetcher/feed/FeedItem.java +++ b/src/de/podfetcher/feed/FeedItem.java @@ -9,6 +9,7 @@ import java.util.Date; * */ public class FeedItem extends FeedComponent{ + private String title; private String description; private String contentEncoded; @@ -17,6 +18,7 @@ public class FeedItem extends FeedComponent{ private FeedMedia media; private Feed feed; protected boolean read; + private String paymentLink; public FeedItem() { this.read = true; @@ -93,6 +95,14 @@ public class FeedItem extends FeedComponent{ public void setContentEncoded(String contentEncoded) { this.contentEncoded = contentEncoded; } + + public String getPaymentLink() { + return paymentLink; + } + + public void setPaymentLink(String paymentLink) { + this.paymentLink = paymentLink; + } } diff --git a/src/de/podfetcher/feed/FeedManager.java b/src/de/podfetcher/feed/FeedManager.java index 36588dcfd..3533c676f 100644 --- a/src/de/podfetcher/feed/FeedManager.java +++ b/src/de/podfetcher/feed/FeedManager.java @@ -335,7 +335,8 @@ public class FeedManager { } } Log.e(TAG, "Couldn't find FeedMedia with id " + id); - if (feed == null) Log.e(TAG, "Feed was null"); + if (feed == null) + Log.e(TAG, "Feed was null"); return null; } @@ -395,6 +396,8 @@ public class FeedManager { .getColumnIndex(PodDBAdapter.KEY_LINK))); feed.setDescription(feedlistCursor.getString(feedlistCursor .getColumnIndex(PodDBAdapter.KEY_DESCRIPTION))); + feed.setPaymentLink(feedlistCursor.getString(feedlistCursor + .getColumnIndex(PodDBAdapter.KEY_PAYMENT_LINK))); feed.setImage(adapter.getFeedImage(feedlistCursor .getLong(feedlistCursor .getColumnIndex(PodDBAdapter.KEY_IMAGE)))); @@ -438,6 +441,8 @@ public class FeedManager { .getColumnIndex(PodDBAdapter.KEY_CONTENT_ENCODED))); item.setPubDate(new Date(itemlistCursor.getLong(itemlistCursor .getColumnIndex(PodDBAdapter.KEY_PUBDATE)))); + item.setPaymentLink(itemlistCursor.getString(itemlistCursor + .getColumnIndex(PodDBAdapter.KEY_PAYMENT_LINK))); long mediaId = itemlistCursor.getLong(itemlistCursor .getColumnIndex(PodDBAdapter.KEY_MEDIA)); if (mediaId != 0) { @@ -505,13 +510,13 @@ public class FeedManager { .getColumnIndex(PodDBAdapter.KEY_FEED))); if (feed != null) { FeedItem item = getFeedItem( - cursor.getColumnIndex(PodDBAdapter.KEY_FEEDITEM), feed); + cursor.getColumnIndex(PodDBAdapter.KEY_FEEDITEM), + feed); if (item != null) { queue.add(index, item); } } - - + } while (cursor.moveToNext()); } cursor.close(); diff --git a/src/de/podfetcher/fragment/FeedlistFragment.java b/src/de/podfetcher/fragment/FeedlistFragment.java index f1e160295..c76e3c051 100644 --- a/src/de/podfetcher/fragment/FeedlistFragment.java +++ b/src/de/podfetcher/fragment/FeedlistFragment.java @@ -143,7 +143,7 @@ public class FeedlistFragment extends SherlockListFragment { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - return false; + return FeedMenuHandler.onPrepareOptionsMenu(menu, selectedFeed); } @Override diff --git a/src/de/podfetcher/storage/PodDBAdapter.java b/src/de/podfetcher/storage/PodDBAdapter.java index 4169d4570..37db7759a 100644 --- a/src/de/podfetcher/storage/PodDBAdapter.java +++ b/src/de/podfetcher/storage/PodDBAdapter.java @@ -52,6 +52,7 @@ public class PodDBAdapter { public static final String KEY_COMPLETION_DATE = "completion_date"; public static final String KEY_FEEDITEM = "feeditem"; public static final String KEY_CONTENT_ENCODED = "content_encoded"; + public static final String KEY_PAYMENT_LINK = "payment_link"; // Table names public static final String TABLE_NAME_FEEDS = "Feeds"; @@ -70,14 +71,16 @@ public class PodDBAdapter { + " TEXT," + KEY_LINK + " TEXT," + KEY_DESCRIPTION + " TEXT," + KEY_IMAGE + " INTEGER," + KEY_CATEGORY + " INTEGER," + KEY_FILE_URL + " TEXT," + KEY_DOWNLOAD_URL + " TEXT," - + KEY_DOWNLOADED + " INTEGER," + KEY_LASTUPDATE + " TEXT)"; + + KEY_DOWNLOADED + " INTEGER," + KEY_LASTUPDATE + " TEXT," + + KEY_PAYMENT_LINK + " TEXT)"; private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE " + TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE + " TEXT," + KEY_LINK + " TEXT," + KEY_DESCRIPTION + " TEXT," + KEY_CONTENT_ENCODED + " TEXT," + KEY_PUBDATE + " INTEGER," + KEY_MEDIA + " INTEGER," + KEY_FEED - + " INTEGER," + KEY_READ + " INTEGER)"; + + " INTEGER," + KEY_READ + " INTEGER," + + KEY_PAYMENT_LINK + " TEXT)"; private static final String CREATE_TABLE_FEED_CATEGORIES = "CREATE TABLE " + TABLE_NAME_FEED_CATEGORIES + " (" + TABLE_PRIMARY_KEY + KEY_NAME @@ -150,6 +153,7 @@ public class PodDBAdapter { values.put(KEY_TITLE, feed.getTitle()); values.put(KEY_LINK, feed.getLink()); values.put(KEY_DESCRIPTION, feed.getDescription()); + values.put(KEY_PAYMENT_LINK, feed.getPaymentLink()); if (feed.getImage() != null) { if (feed.getImage().getId() == 0) { setImage(feed.getImage()); @@ -259,6 +263,7 @@ public class PodDBAdapter { values.put(KEY_DESCRIPTION, item.getDescription()); values.put(KEY_CONTENT_ENCODED, item.getContentEncoded()); values.put(KEY_PUBDATE, item.getPubDate().getTime()); + values.put(KEY_PAYMENT_LINK, item.getPaymentLink()); if (item.getMedia() != null) { if (item.getMedia().getId() == 0) { setMedia(item.getMedia()); diff --git a/src/de/podfetcher/syndication/namespace/atom/NSAtom.java b/src/de/podfetcher/syndication/namespace/atom/NSAtom.java index 3005e8a6d..979f3a86a 100644 --- a/src/de/podfetcher/syndication/namespace/atom/NSAtom.java +++ b/src/de/podfetcher/syndication/namespace/atom/NSAtom.java @@ -2,6 +2,8 @@ package de.podfetcher.syndication.namespace.atom; import org.xml.sax.Attributes; +import android.util.Log; + import de.podfetcher.feed.Feed; import de.podfetcher.feed.FeedImage; import de.podfetcher.feed.FeedItem; @@ -9,9 +11,11 @@ import de.podfetcher.feed.FeedMedia; import de.podfetcher.syndication.handler.HandlerState; import de.podfetcher.syndication.namespace.Namespace; import de.podfetcher.syndication.namespace.SyndElement; +import de.podfetcher.syndication.namespace.rss20.NSRSS20; import de.podfetcher.syndication.util.SyndDateUtils; public class NSAtom extends Namespace { + private static final String TAG = "NSAtom"; public static final String NSTAG = "atom"; public static final String NSURI = "http://www.w3.org/2005/Atom"; @@ -36,6 +40,7 @@ public class NSAtom extends Namespace { // rel-values private static final String LINK_REL_ALTERNATE = "alternate"; private static final String LINK_REL_ENCLOSURE = "enclosure"; + private static final String LINK_REL_PAYMENT = "payment"; private static final String LINK_REL_RELATED = "related"; private static final String LINK_REL_SELF = "self"; @@ -43,6 +48,9 @@ public class NSAtom extends Namespace { private static final String isText = TITLE + "|" + CONTENT + "|" + "|" + SUBTITLE; + public static final String isFeed = FEED + "|" + NSRSS20.CHANNEL; + public static final String isFeedItem = ENTRY + "|" + NSRSS20.ITEM; + @Override public SyndElement handleElementStart(String localName, HandlerState state, Attributes attributes) { @@ -57,7 +65,7 @@ public class NSAtom extends Namespace { String href = attributes.getValue(LINK_HREF); String rel = attributes.getValue(LINK_REL); SyndElement parent = state.getTagstack().peek(); - if (parent.getName().equals(ENTRY)) { + if (parent.getName().matches(isFeedItem)) { if (rel == null || rel.equals(LINK_REL_ALTERNATE)) { state.getCurrentItem().setLink(href); } else if (rel.equals(LINK_REL_ENCLOSURE)) { @@ -71,10 +79,16 @@ public class NSAtom extends Namespace { state.getCurrentItem().setMedia( new FeedMedia(state.getCurrentItem(), download_url, size, type)); + } else if (rel.equals(LINK_REL_PAYMENT)) { + Log.d(TAG, "Found payment item link"); + state.getCurrentItem().setPaymentLink(href); } - } else if (parent.getName().equals(FEED)) { + } else if (parent.getName().matches(isFeed)) { if (rel == null || rel.equals(LINK_REL_ALTERNATE)) { state.getFeed().setLink(href); + } else if (rel.equals(LINK_REL_PAYMENT)) { + Log.d(TAG, "Found payment link"); + state.getFeed().setPaymentLink(href); } } } diff --git a/src/de/podfetcher/util/FeedItemMenuHandler.java b/src/de/podfetcher/util/FeedItemMenuHandler.java index 503c454eb..59d46de0f 100644 --- a/src/de/podfetcher/util/FeedItemMenuHandler.java +++ b/src/de/podfetcher/util/FeedItemMenuHandler.java @@ -49,7 +49,11 @@ public class FeedItemMenuHandler { if (selectedItem.getLink() != null) { menu.findItem(R.id.visit_website_item).setVisible(true); } - + + if (selectedItem.getPaymentLink() != null) { + menu.findItem(R.id.support_item).setVisible(true); + } + return true; } @@ -92,6 +96,10 @@ public class FeedItemMenuHandler { Uri uri = Uri.parse(selectedItem.getLink()); context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); break; + case R.id.support_item: + Uri supportUri = Uri.parse(selectedItem.getPaymentLink()); + context.startActivity(new Intent(Intent.ACTION_VIEW, supportUri)); + break; default: return false; } diff --git a/src/de/podfetcher/util/FeedMenuHandler.java b/src/de/podfetcher/util/FeedMenuHandler.java index bf258078d..3a62215b9 100644 --- a/src/de/podfetcher/util/FeedMenuHandler.java +++ b/src/de/podfetcher/util/FeedMenuHandler.java @@ -22,7 +22,10 @@ public class FeedMenuHandler { return true; } - public static boolean onPrepareOptionsMenu(Menu menu) { + public static boolean onPrepareOptionsMenu(Menu menu, Feed selectedFeed) { + if (selectedFeed.getPaymentLink() != null) { + menu.findItem(R.id.support_item).setVisible(true); + } return true; } @@ -38,6 +41,10 @@ public class FeedMenuHandler { Uri uri = Uri.parse(selectedFeed.getLink()); context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); break; + case R.id.support_item: + Uri supportUri = Uri.parse(selectedFeed.getPaymentLink()); + context.startActivity(new Intent(Intent.ACTION_VIEW, supportUri)); + break; default: return false; } -- cgit v1.2.3