diff options
author | Tom Hennen <tom.hennen@gmail.com> | 2015-09-19 14:40:01 -0400 |
---|---|---|
committer | Tom Hennen <tom.hennen@gmail.com> | 2015-09-20 14:21:15 -0400 |
commit | 1993f779e8b25507a4096effd72618937c2f4ad0 (patch) | |
tree | 53b14b25a51af25844bde6eacc91af87ae4e0eb7 /core/src/main | |
parent | a89edfcad4f69a7f8ddbce62ca33d4ba80d4a9ad (diff) | |
download | AntennaPod-1993f779e8b25507a4096effd72618937c2f4ad0.zip |
basic favorite functionality
Diffstat (limited to 'core/src/main')
5 files changed, 116 insertions, 6 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java b/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java index 20a85d43f..50911f74e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java @@ -29,6 +29,7 @@ public class EventDistributor extends Observable { public static final int DOWNLOAD_QUEUED = 32; public static final int DOWNLOAD_HANDLED = 64; public static final int PLAYER_STATUS_UPDATE = 128; + public static final int FAVORITE_UPDATE = 256; private Handler handler; private AbstractQueue<Integer> events; @@ -116,6 +117,8 @@ public class EventDistributor extends Observable { addEvent(PLAYER_STATUS_UPDATE); } + public void sendFavoriteUpdateBroadcast() { addEvent(FAVORITE_UPDATE); } + public static abstract class EventListener implements Observer { @Override diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index 4ef4ac067..050af263f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -302,6 +302,22 @@ public final class DBReader { } /** + * Loads a list of FeedItems in Favorites + * @return + */ + public static List<FeedItem> getFavorites() { + Log.d(TAG, "getFavorites"); + + try (PodDBAdapter adapter = PodDBAdapter.getInstance().open()) { + try (Cursor itemListCursor = adapter.getQueueCursor()) { + List<FeedItem> items = extractItemlistFromCursor(adapter, itemListCursor); + loadFeedDataOfFeedItemlist(items); + return items; + } + } + } + + /** * Loads a list of FeedItems whose episode has been downloaded. * * @return A list of FeedItems whose episdoe has been downloaded. @@ -367,6 +383,23 @@ public final class DBReader { return items; } + public static List<FeedItem> getFavoriteItemsList() { + Log.d(TAG, "getFavoriteItemsList()"); + + PodDBAdapter adapter = PodDBAdapter.getInstance(); + adapter.open(); + + Cursor itemlistCursor = adapter.getFavoritesCursor(); + List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor); + itemlistCursor.close(); + + loadFeedDataOfFeedItemlist(items); + + adapter.close(); + + return items; + } + /** * Loads a list of FeedItems sorted by pubDate in descending order. * diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 521f960ec..190d032bf 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -371,7 +371,7 @@ public class DBWriter { queue.add(item); } queueModified = true; - if(item.isNew()) { + if (item.isNew()) { markAsUnplayedIds.add(item.getId()); } } @@ -380,8 +380,8 @@ public class DBWriter { if (queueModified) { adapter.setQueue(queue); EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.ADDED_ITEMS, queue)); - if(markAsUnplayedIds.size() > 0) { - DBWriter.markItemPlayed(FeedItem.UNPLAYED, markAsUnplayedIds.toArray()); + if (markAsUnplayedIds.size() > 0) { + DBWriter.markItemPlayed(FeedItem.UNPLAYED, markAsUnplayedIds.toArray()); } } } @@ -424,7 +424,7 @@ public class DBWriter { if (queue != null) { int position = queue.indexOf(item); - if(position >= 0) { + if (position >= 0) { queue.remove(position); adapter.setQueue(queue); EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.REMOVED, item, position)); @@ -442,6 +442,24 @@ public class DBWriter { } + public static Future<?> addFavoriteItem(final FeedItem item) { + return dbExec.submit(() -> { + final PodDBAdapter adapter = PodDBAdapter.getInstance().open(); + adapter.addFavoriteItem(item); + adapter.close(); + EventDistributor.getInstance().sendFavoriteUpdateBroadcast(); + }); + } + + public static Future<?> removeFavoriteItem(final FeedItem item) { + return dbExec.submit(() -> { + final PodDBAdapter adapter = PodDBAdapter.getInstance().open(); + adapter.removeFavoriteItem(item); + adapter.close(); + EventDistributor.getInstance().sendFavoriteUpdateBroadcast(); + }); + } + /** * Moves the specified item to the top of the queue. * @param itemId The item to move to the top of the queue diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java index fa4a5726a..8061427be 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java @@ -39,7 +39,7 @@ import de.greenrobot.event.EventBus; /** * Implements methods for accessing the database */ -public class PodDBAdapter { +public class PodDBAdapter implements AutoCloseable { private static final String TAG = "PodDBAdapter"; public static final String DATABASE_NAME = "Antennapod.db"; @@ -113,6 +113,7 @@ public class PodDBAdapter { public static final String TABLE_NAME_DOWNLOAD_LOG = "DownloadLog"; public static final String TABLE_NAME_QUEUE = "Queue"; public static final String TABLE_NAME_SIMPLECHAPTERS = "SimpleChapters"; + public static final String TABLE_NAME_FAVORITES = "Favorites"; // SQL Statements for creating new tables private static final String TABLE_PRIMARY_KEY = KEY_ID @@ -197,6 +198,10 @@ public class PodDBAdapter { public static final String CREATE_INDEX_SIMPLECHAPTERS_FEEDITEM = "CREATE INDEX " + TABLE_NAME_SIMPLECHAPTERS + "_" + KEY_FEEDITEM + " ON " + TABLE_NAME_SIMPLECHAPTERS + " (" + KEY_FEEDITEM + ")"; + + public static final String CREATE_TABLE_FAVORITES = "CREATE TABLE " + + TABLE_NAME_FAVORITES + "(" + KEY_ID + " INTEGER PRIMARY KEY," + + KEY_FEEDITEM + " INTEGER," + KEY_FEED + " INTEGER)"; /** * Select all columns from the feed-table @@ -785,6 +790,39 @@ public class PodDBAdapter { db.execSQL(sql); } + /** + * Adds the item to favorites + */ + public void addFavoriteItem(FeedItem item) { + // don't add an item that's already there... + if (isItemInFavorites(item)) { + Log.d(TAG, "item already in favorites"); + return; + } + ContentValues values = new ContentValues(); + values.put(KEY_FEEDITEM, item.getId()); + values.put(KEY_FEED, item.getFeedId()); + db.insert(TABLE_NAME_FAVORITES, null, values); + } + + public void removeFavoriteItem(FeedItem item) { + String deleteClause = String.format("DELETE FROM %s WHERE %s=%s AND %s=%s", + TABLE_NAME_FAVORITES, + KEY_FEEDITEM, item.getId(), + KEY_FEED, item.getFeedId()); + db.execSQL(deleteClause); + } + + public boolean isItemInFavorites(FeedItem item) { + String query = String.format("SELECT %s from %s WHERE %s=%d AND %s=%d", + KEY_ID, TABLE_NAME_FAVORITES, KEY_FEEDITEM, item.getId(), KEY_FEED, + item.getFeedId()); + Cursor c = db.rawQuery(query, null); + int count = c.getCount(); + c.close(); + return count > 0; + } + public long getDownloadLogSize() { final String query = String.format("SELECT COUNT(%s) FROM %s", KEY_ID, TABLE_NAME_DOWNLOAD_LOG); Cursor result = db.rawQuery(query, null); @@ -990,6 +1028,19 @@ public class PodDBAdapter { return c; } + + public final Cursor getFavoritesCursor() { + Object[] args = new String[] { + SEL_FI_SMALL_STR, + TABLE_NAME_FEED_ITEMS, TABLE_NAME_FAVORITES, + TABLE_NAME_FEED_ITEMS + "." + KEY_ID, + TABLE_NAME_FAVORITES + "." + KEY_FEEDITEM, + TABLE_NAME_FAVORITES + "." + KEY_ID }; + String query = String.format("SELECT %s FROM %s INNER JOIN %s ON %s=%s ORDER BY %s", args); + Cursor c = db.rawQuery(query, null); + return c; + } + /** * Returns a cursor which contains all feed items in the unread items list. * The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection. @@ -1374,7 +1425,7 @@ public class PodDBAdapter { */ private static class PodDBHelper extends SQLiteOpenHelper { - private final static int VERSION = 1030002; + private final static int VERSION = 1040000; private Context context; @@ -1400,6 +1451,7 @@ public class PodDBAdapter { db.execSQL(CREATE_TABLE_DOWNLOAD_LOG); db.execSQL(CREATE_TABLE_QUEUE); db.execSQL(CREATE_TABLE_SIMPLECHAPTERS); + db.execSQL(CREATE_TABLE_FAVORITES); db.execSQL(CREATE_INDEX_FEEDITEMS_FEED); db.execSQL(CREATE_INDEX_FEEDITEMS_IMAGE); diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index ff9891bab..b377cbb13 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -12,6 +12,7 @@ <string name="new_episodes_label">New Episodes</string> <string name="all_episodes_label">All Episodes</string> <string name="all_episodes_short_label">All</string> + <string name="favorite_episodes_label">Favorites</string> <string name="new_label">New</string> <string name="waiting_list_label">Waiting List</string> <string name="settings_label">Settings</string> @@ -137,6 +138,8 @@ <string name="add_to_queue_label">Add to Queue</string> <string name="added_to_queue_label">Added to Queue</string> <string name="remove_from_queue_label">Remove from Queue</string> + <string name="add_to_favorite_label">Add to Favorites</string> + <string name="remove_from_favorite_label">Remove from Favorites</string> <string name="visit_website_label">Visit Website</string> <string name="support_label">Flattr this</string> <string name="enqueue_all_new">Enqueue all</string> @@ -145,6 +148,7 @@ <string name="activate_auto_download">Activate Auto Download</string> <string name="deactivate_auto_download">Deactivate Auto Download</string> <string name="reset_position">Reset Playback Position</string> + <string name="removed_from_favorites">Removed from favorites</string> <!-- Download messages and labels --> <string name="download_successful">successful</string> |