diff options
author | Tom Hennen <tom.hennen@gmail.com> | 2015-09-20 16:11:57 -0400 |
---|---|---|
committer | Tom Hennen <tom.hennen@gmail.com> | 2015-09-20 16:11:57 -0400 |
commit | dfbd878afe937e87f63d7c4e88a09ea669eff069 (patch) | |
tree | d311bc5887f167c3fd589d9e28a4cd7bc4bbd3f9 | |
parent | ed679b8a17b4c140a8cc0fc1c312c7996f12d5d7 (diff) | |
download | AntennaPod-dfbd878afe937e87f63d7c4e88a09ea669eff069.zip |
Added 'tags' to FeedItem and properly showing/not showing menu items for favorites.
24 files changed, 168 insertions, 63 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 869a13127..201ce17c0 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -12,7 +12,7 @@ import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.service.playback.PlaybackServiceTaskManager; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.playback.Playable; diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java index 6873cb9a6..3988669ce 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java @@ -102,7 +102,7 @@ public class DBReaderTest extends InstrumentationTestCase { items.add(item); } } - DBReader.loadFeedDataOfFeedItemlist(items); + DBReader.loadAdditionalFeedItemListData(items); for (int i = 0; i < numFeeds; i++) { for (int j = 0; j < numItems; j++) { FeedItem item = feeds.get(i).getItems().get(j); diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java index 2a63ef4b3..585e27e0b 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java @@ -556,7 +556,7 @@ public class DBWriterTest extends InstrumentationTestCase { } List<Future<?>> futures = new ArrayList<Future<?>>(); for (FeedItem item : feed.getItems()) { - futures.add(DBWriter.addQueueItem(context, item.getId())); + futures.add(DBWriter.addQueueItem(context, item)); } for (Future<?> f : futures) { f.get(TIMEOUT, TimeUnit.SECONDS); @@ -577,7 +577,7 @@ public class DBWriterTest extends InstrumentationTestCase { adapter.close(); assertTrue(item.getId() != 0); - DBWriter.addQueueItem(context, item.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.addQueueItem(context, item).get(TIMEOUT, TimeUnit.SECONDS); adapter = PodDBAdapter.getInstance(); adapter.open(); @@ -601,7 +601,7 @@ public class DBWriterTest extends InstrumentationTestCase { adapter.close(); assertTrue(item.getId() != 0); - DBWriter.addQueueItem(context, item.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.addQueueItem(context, item).get(TIMEOUT, TimeUnit.SECONDS); adapter = PodDBAdapter.getInstance(); adapter.open(); @@ -611,7 +611,7 @@ public class DBWriterTest extends InstrumentationTestCase { cursor.close(); adapter.close(); - DBWriter.addQueueItem(context, item.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.addQueueItem(context, item).get(TIMEOUT, TimeUnit.SECONDS); adapter = PodDBAdapter.getInstance(); adapter.open(); cursor = adapter.getQueueIDCursor(); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java index 9859e7534..973426841 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java @@ -26,7 +26,7 @@ import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedImage; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.greenrobot.event.EventBus; import de.test.antennapod.util.service.download.HTTPBin; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 76d657585..4b3460476 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -43,7 +43,7 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.event.ProgressEvent; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index f17f0ba0f..445e4832c 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -67,7 +67,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); } } else if(userChoseAddToQueue() && !queueIds.contains(item.getId())) { - DBWriter.addQueueItem(context, item.getId()); + DBWriter.addQueueItem(context, item); Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); } else { confirmMobileDownload(context, item); @@ -124,7 +124,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { @Override public void onClick(DialogInterface dialog, int which) { onlyAddToQueueTimeStamp = System.currentTimeMillis(); - DBWriter.addQueueItem(context, item.getId()); + DBWriter.addQueueItem(context, item); Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); } }) diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java index 37ca0ad26..8e416139e 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java @@ -361,13 +361,7 @@ public class EpisodesApplyActionFragment extends Fragment { } private void queueChecked() { - LongList orderedIds = new LongList(); - for(FeedItem episode : episodes) { - if(checkedIds.contains(episode.getId())) { - orderedIds.add((episode.getId())); - } - } - DBWriter.addQueueItem(getActivity(), false, orderedIds.toArray()); + DBWriter.addQueueItem(getActivity(), episodes.toArray(new FeedItem[0])); close(); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 82ee43d38..0d35c2c3b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -64,8 +64,7 @@ public class AllEpisodesFragment extends Fragment { EventDistributor.FEED_LIST_UPDATE | EventDistributor.DOWNLOAD_QUEUED | EventDistributor.UNREAD_ITEMS_UPDATE | - EventDistributor.PLAYER_STATUS_UPDATE | - EventDistributor.FAVORITE_UPDATE; + EventDistributor.PLAYER_STATUS_UPDATE; private static final int RECENT_EPISODES_LIMIT = 150; private static final String DEFAULT_PREF_NAME = "PrefAllEpisodesFragment"; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java index d72f00610..b49490d5e 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java @@ -1,7 +1,6 @@ package de.danoeh.antennapod.fragment; import android.content.Context; -import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.util.Pair; import android.util.Log; @@ -9,16 +8,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.mobeta.android.dslv.DragSortListView; - import java.util.List; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.event.FavoritesEvent; import de.danoeh.antennapod.core.feed.FeedItem; -import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.storage.DBReader; -import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken; import de.danoeh.antennapod.core.util.gui.UndoBarController; @@ -42,7 +38,7 @@ public class FavoriteEpisodesFragment extends AllEpisodesFragment { super(false, PREF_NAME); } - public void onEvent(QueueEvent event) { + public void onEvent(FavoritesEvent event) { Log.d(TAG, "onEvent(" + event + ")"); loadItems(); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java index 353d8149c..6d28478e9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -47,7 +47,7 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.Downloader; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index 3d0ff66f7..d17788dde 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -56,7 +56,7 @@ import de.danoeh.antennapod.core.feed.FeedEvent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedItemFilter; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.glide.ApGlideSettings; import de.danoeh.antennapod.core.glide.FastBlurTransformation; import de.danoeh.antennapod.core.preferences.UserPreferences; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index 826e6dbb8..60d0161b2 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -15,7 +15,7 @@ import java.util.List; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.LongList; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index e6460309b..d7ffa3e23 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -25,7 +25,7 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; @@ -277,7 +277,7 @@ public class PlaybackHistoryFragment extends ListFragment { private Pair<List<FeedItem>, LongList> loadData() { List<FeedItem> history = DBReader.getPlaybackHistory(); LongList queue = DBReader.getQueueIDList(); - DBReader.loadFeedDataOfFeedItemlist(history); + DBReader.loadAdditionalFeedItemListData(history); return Pair.create(history, queue); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 7bcd98dc8..0ac33f8fb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -37,7 +37,7 @@ import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; 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 ede40c53f..da87fb1b9 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -72,7 +72,7 @@ public class FeedItemMenuHandler { mi.setItemVisibility(R.id.skip_episode_item, false); } - boolean isInQueue = queueAccess.contains(selectedItem.getId()); + boolean isInQueue = selectedItem.isTagged(FeedItem.TAG_QUEUE); if(queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId()) { mi.setItemVisibility(R.id.move_to_top_item, false); } @@ -123,6 +123,11 @@ public class FeedItemMenuHandler { if (selectedItem.getPaymentLink() == null || !selectedItem.getFlattrStatus().flattrable()) { mi.setItemVisibility(R.id.support_item, false); } + + boolean isFavorite = selectedItem.isTagged(FeedItem.TAG_FAVORITE); + mi.setItemVisibility(R.id.add_to_favorites_item, !isFavorite); + mi.setItemVisibility(R.id.remove_from_favorites_item, isFavorite); + return true; } @@ -188,7 +193,7 @@ public class FeedItemMenuHandler { case R.id.move_to_bottom_item: DBWriter.moveQueueItemToBottom(selectedItem.getId(), true); case R.id.add_to_queue_item: - DBWriter.addQueueItem(context, selectedItem.getId()); + DBWriter.addQueueItem(context, selectedItem); break; case R.id.remove_from_queue_item: DBWriter.removeQueueItem(context, selectedItem, true); diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/FavoritesEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/FavoritesEvent.java new file mode 100644 index 000000000..d09f6802f --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/event/FavoritesEvent.java @@ -0,0 +1,38 @@ +package de.danoeh.antennapod.core.event; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import de.danoeh.antennapod.core.feed.FeedItem; + +public class FavoritesEvent { + + public enum Action { + ADDED, REMOVED + } + + public final Action action; + public final FeedItem item; + + private FavoritesEvent(Action action, FeedItem item) { + this.action = action; + this.item = item; + } + + public static FavoritesEvent added(FeedItem item) { + return new FavoritesEvent(Action.ADDED, item); + } + + public static FavoritesEvent removed(FeedItem item) { + return new FavoritesEvent(Action.REMOVED, item); + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) + .append("action", action) + .append("item", item) + .toString(); + } + +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java index 97d086e5b..4d59d75eb 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java @@ -1,10 +1,12 @@ -package de.danoeh.antennapod.core.feed; +package de.danoeh.antennapod.core.event; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import java.util.List; +import de.danoeh.antennapod.core.feed.FeedItem; + public class QueueEvent { public enum Action { 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 50911f74e..2667a2e12 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,7 +29,6 @@ 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; @@ -113,11 +112,7 @@ public class EventDistributor extends Observable { addEvent(DOWNLOAD_HANDLED); } - public void sendPlayerStatusUpdateBroadcast() { - addEvent(PLAYER_STATUS_UPDATE); - } - - public void sendFavoriteUpdateBroadcast() { addEvent(FAVORITE_UPDATE); } + public void sendPlayerStatusUpdateBroadcast() { addEvent(PLAYER_STATUS_UPDATE); } public static abstract class EventListener implements Observer { diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java index 5c3ed303f..c54cc1d5b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java @@ -7,7 +7,9 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.Callable; import de.danoeh.antennapod.core.asynctask.ImageResource; @@ -24,6 +26,11 @@ import de.danoeh.antennapod.core.util.flattr.FlattrThing; */ public class FeedItem extends FeedComponent implements ShownotesProvider, FlattrThing, ImageResource { + /** tag that indicates this item is in the queue */ + public static final String TAG_QUEUE = "Queue"; + /** tag that indicates this item is in favorites */ + public static final String TAG_FAVORITE = "Favorite"; + /** * The id/guid that can be found in the rss/atom feed. Might not be set. */ @@ -70,6 +77,11 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr private boolean autoDownload = true; + /** + * Any tags assigned to this item + */ + private Set<String> tags = new HashSet<>(); + public FeedItem() { this.state = UNPLAYED; this.flattrStatus = new FlattrStatus(); @@ -451,6 +463,21 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr this.getAutoDownload(); } + /** + * @return true if the item has this tag + */ + public boolean isTagged(String tag) { return tags.contains(tag); } + + /** + * @param tag adds this tag to the item. NOTE: does NOT persist to the database + */ + public void addTag(String tag) { tags.add(tag); } + + /** + * @param tag the to remove + */ + public void removeTag(String tag) { tags.remove(tag); } + @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 36ea1e222..cb050463e 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -1129,7 +1129,7 @@ public class DownloadService extends Service { DBWriter.setFeedMedia(media).get(); if (!DBTasks.isInQueue(DownloadService.this, item.getId())) { - DBWriter.addQueueItem(DownloadService.this, item.getId()).get(); + DBWriter.addQueueItem(DownloadService.this, item).get(); } } catch (ExecutionException e) { e.printStackTrace(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index dba66a36d..19ef6ef09 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -16,7 +16,7 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.feed.FeedItem; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.playback.Playable; import de.greenrobot.event.EventBus; 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 efa655f8b..d95e4ff02 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 @@ -104,6 +104,30 @@ public final class DBReader { return result; } + + /** + * Loads additional data in to the feed items from other database queries + * @param items the FeedItems who should have other data loaded + */ + public static void loadAdditionalFeedItemListData(List<FeedItem> items) { + loadTagsOfFeedItemList(items); + loadFeedDataOfFeedItemList(items); + } + + public static void loadTagsOfFeedItemList(List<FeedItem> items) { + LongList favoriteIds = getFavoriteIDList(); + LongList queueIds = getQueueIDList(); + + for (FeedItem item : items) { + if (favoriteIds.contains(item.getId())) { + item.addTag(FeedItem.TAG_FAVORITE); + } + if (queueIds.contains(item.getId())) { + item.addTag(FeedItem.TAG_QUEUE); + } + } + } + /** * Takes a list of FeedItems and loads their corresponding Feed-objects from the database. * The feedID-attribute of a FeedItem must be set to the ID of its feed or the method will @@ -111,7 +135,7 @@ public final class DBReader { * * @param items The FeedItems whose Feed-objects should be loaded. */ - public static void loadFeedDataOfFeedItemlist(List<FeedItem> items) { + public static void loadFeedDataOfFeedItemList(List<FeedItem> items) { List<Feed> feeds = getFeedList(); for (FeedItem item : items) { for (Feed feed : feeds) { @@ -251,7 +275,7 @@ public final class DBReader { Cursor itemlistCursor = adapter.getQueueCursor(); List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor); itemlistCursor.close(); - loadFeedDataOfFeedItemlist(items); + loadAdditionalFeedItemListData(items); return items; } @@ -316,7 +340,7 @@ public final class DBReader { List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor); itemlistCursor.close(); - loadFeedDataOfFeedItemlist(items); + loadAdditionalFeedItemListData(items); Collections.sort(items, new FeedItemPubdateComparator()); adapter.close(); @@ -338,7 +362,7 @@ public final class DBReader { List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor); itemlistCursor.close(); - loadFeedDataOfFeedItemlist(items); + loadAdditionalFeedItemListData(items); adapter.close(); @@ -360,7 +384,7 @@ public final class DBReader { List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor); itemlistCursor.close(); - loadFeedDataOfFeedItemlist(items); + loadAdditionalFeedItemListData(items); adapter.close(); @@ -377,13 +401,27 @@ public final class DBReader { List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor); itemlistCursor.close(); - loadFeedDataOfFeedItemlist(items); + loadAdditionalFeedItemListData(items); adapter.close(); return items; } + static LongList getFavoriteIDList() { + PodDBAdapter adapter = PodDBAdapter.getInstance().open(); + Cursor favoritesCursor = adapter.getFavoritesCursor(); + + LongList favoriteIDs = new LongList(favoritesCursor.getCount()); + if (favoritesCursor.moveToFirst()) { + do { + favoriteIDs.add(favoritesCursor.getLong(0)); + } while (favoritesCursor.moveToNext()); + } + favoritesCursor.close(); + return favoriteIDs; + } + /** * Loads a list of FeedItems sorted by pubDate in descending order. * @@ -399,7 +437,7 @@ public final class DBReader { List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor); itemlistCursor.close(); - loadFeedDataOfFeedItemlist(items); + loadAdditionalFeedItemListData(items); adapter.close(); @@ -428,7 +466,7 @@ public final class DBReader { mediaCursor.close(); Cursor itemCursor = adapter.getFeedItemCursor(itemIds); List<FeedItem> items = extractItemlistFromCursor(adapter, itemCursor); - loadFeedDataOfFeedItemlist(items); + loadAdditionalFeedItemListData(items); itemCursor.close(); adapter.close(); @@ -550,7 +588,7 @@ public final class DBReader { List<FeedItem> list = extractItemlistFromCursor(adapter, itemCursor); if (list.size() > 0) { item = list.get(0); - loadFeedDataOfFeedItemlist(list); + loadAdditionalFeedItemListData(list); if (item.hasChapters()) { loadChaptersOfFeedItem(adapter, item); } @@ -573,7 +611,7 @@ public final class DBReader { Cursor itemCursor = adapter.getFeedItemCursor(ids); if (itemCursor.moveToFirst()) { result = extractItemlistFromCursor(adapter, itemCursor); - loadFeedDataOfFeedItemlist(result); + loadAdditionalFeedItemListData(result); for(FeedItem item : result) { if (item.hasChapters()) { loadChaptersOfFeedItem(adapter, item); @@ -613,7 +651,7 @@ public final class DBReader { List<FeedItem> list = extractItemlistFromCursor(adapter, itemCursor); if (list.size() > 0) { item = list.get(0); - loadFeedDataOfFeedItemlist(list); + loadAdditionalFeedItemListData(list); if (item.hasChapters()) { loadChaptersOfFeedItem(adapter, item); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index 96a632d68..3f9cece77 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -601,7 +601,7 @@ public final class DBTasks { Cursor searchResult = adapter.searchItemTitles(feedID, query); List<FeedItem> items = DBReader.extractItemlistFromCursor(searchResult); - DBReader.loadFeedDataOfFeedItemlist(items); + DBReader.loadAdditionalFeedItemListData(items); setResult(items); searchResult.close(); } @@ -625,7 +625,7 @@ public final class DBTasks { Cursor searchResult = adapter.searchItemDescriptions(feedID, query); List<FeedItem> items = DBReader.extractItemlistFromCursor(searchResult); - DBReader.loadFeedDataOfFeedItemlist(items); + DBReader.loadAdditionalFeedItemListData(items); setResult(items); searchResult.close(); } @@ -649,7 +649,7 @@ public final class DBTasks { Cursor searchResult = adapter.searchItemContentEncoded(feedID, query); List<FeedItem> items = DBReader.extractItemlistFromCursor(searchResult); - DBReader.loadFeedDataOfFeedItemlist(items); + DBReader.loadAdditionalFeedItemListData(items); setResult(items); searchResult.close(); } @@ -672,7 +672,7 @@ public final class DBTasks { Cursor searchResult = adapter.searchItemChapters(feedID, query); List<FeedItem> items = DBReader.extractItemlistFromCursor(searchResult); - DBReader.loadFeedDataOfFeedItemlist(items); + DBReader.loadAdditionalFeedItemListData(items); setResult(items); searchResult.close(); } 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 190d032bf..f4f2a1bfa 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 @@ -26,6 +26,7 @@ import java.util.concurrent.Future; import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.asynctask.FlattrClickWorker; +import de.danoeh.antennapod.core.event.FavoritesEvent; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedEvent; @@ -33,7 +34,7 @@ import de.danoeh.antennapod.core.feed.FeedImage; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.FeedPreferences; -import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; @@ -317,6 +318,8 @@ public class DBWriter { if (item != null) { queue.add(index, item); adapter.setQueue(queue); + // no need to tag the item here, since we got it right out of the database + // and no one is ever going to see it... EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.ADDED, item, index)); if (item.isNew()) { DBWriter.markItemPlayed(FeedItem.UNPLAYED, item.getId()); @@ -335,8 +338,13 @@ public class DBWriter { } public static Future<?> addQueueItem(final Context context, - final long... itemIds) { - return addQueueItem(context, false, itemIds); + final FeedItem... items) { + LongList itemIds = new LongList(items.length); + for (FeedItem item : items) { + itemIds.add(item.getId()); + item.addTag(FeedItem.TAG_QUEUE); + } + return addQueueItem(context, false, itemIds.toArray()); } /** @@ -427,6 +435,7 @@ public class DBWriter { if (position >= 0) { queue.remove(position); adapter.setQueue(queue); + item.removeTag(FeedItem.TAG_QUEUE); EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.REMOVED, item, position)); } else { Log.w(TAG, "Queue was not modified by call to removeQueueItem"); @@ -447,7 +456,8 @@ public class DBWriter { final PodDBAdapter adapter = PodDBAdapter.getInstance().open(); adapter.addFavoriteItem(item); adapter.close(); - EventDistributor.getInstance().sendFavoriteUpdateBroadcast(); + item.addTag(FeedItem.TAG_FAVORITE); + EventBus.getDefault().post(FavoritesEvent.added(item)); }); } @@ -456,7 +466,8 @@ public class DBWriter { final PodDBAdapter adapter = PodDBAdapter.getInstance().open(); adapter.removeFavoriteItem(item); adapter.close(); - EventDistributor.getInstance().sendFavoriteUpdateBroadcast(); + item.removeTag(FeedItem.TAG_FAVORITE); + EventBus.getDefault().post(FavoritesEvent.removed(item)); }); } |