summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
authorTom Hennen <tom.hennen@gmail.com>2015-09-19 14:40:01 -0400
committerTom Hennen <tom.hennen@gmail.com>2015-09-20 14:21:15 -0400
commit1993f779e8b25507a4096effd72618937c2f4ad0 (patch)
tree53b14b25a51af25844bde6eacc91af87ae4e0eb7 /core/src/main
parenta89edfcad4f69a7f8ddbce62ca33d4ba80d4a9ad (diff)
downloadAntennaPod-1993f779e8b25507a4096effd72618937c2f4ad0.zip
basic favorite functionality
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/EventDistributor.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java33
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java26
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java56
-rw-r--r--core/src/main/res/values/strings.xml4
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>