diff options
Diffstat (limited to 'src/de/danoeh/antennapod/util')
5 files changed, 114 insertions, 20 deletions
diff --git a/src/de/danoeh/antennapod/util/QueueAccess.java b/src/de/danoeh/antennapod/util/QueueAccess.java new file mode 100644 index 000000000..4c70d74e2 --- /dev/null +++ b/src/de/danoeh/antennapod/util/QueueAccess.java @@ -0,0 +1,89 @@ +package de.danoeh.antennapod.util; + +import de.danoeh.antennapod.feed.FeedItem; + +import java.util.Iterator; +import java.util.List; + +/** + * Provides methods for accessing the queue. It is possible to load only a part of the information about the queue that + * is stored in the database (e.g. sometimes the user just has to test if a specific item is contained in the List. + * QueueAccess provides an interface for accessing the queue without having to care about the type of the queue + * representation. + */ +public abstract class QueueAccess { + /** + * Returns true if the item is in the queue, false otherwise. + */ + public abstract boolean contains(long id); + + /** + * Removes the item from the queue. + * + * @return true if the queue was modified by this operation. + */ + public abstract boolean remove(long id); + + private QueueAccess() { + + } + + public static QueueAccess IDListAccess(final List<Long> ids) { + return new QueueAccess() { + @Override + public boolean contains(long id) { + return (ids != null) && ids.contains(id); + } + + @Override + public boolean remove(long id) { + return ids.remove(id); + } + + + }; + } + + public static QueueAccess ItemListAccess(final List<FeedItem> items) { + return new QueueAccess() { + @Override + public boolean contains(long id) { + Iterator<FeedItem> it = items.iterator(); + for (FeedItem i = it.next(); it.hasNext(); i = it.next()) { + if (i.getId() == id) { + return true; + } + } + return false; + } + + @Override + public boolean remove(long id) { + Iterator<FeedItem> it = items.iterator(); + for (FeedItem i = it.next(); it.hasNext(); i = it.next()) { + if (i.getId() == id) { + it.remove(); + return true; + } + } + return false; + } + }; + } + + public static QueueAccess NotInQueueAccess() { + return new QueueAccess() { + @Override + public boolean contains(long id) { + return false; + } + + @Override + public boolean remove(long id) { + return false; + } + }; + + } + +} diff --git a/src/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java b/src/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java index 1891addc9..2cfe52364 100644 --- a/src/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java +++ b/src/de/danoeh/antennapod/util/comparator/DownloadStatusComparator.java @@ -2,7 +2,7 @@ package de.danoeh.antennapod.util.comparator; import java.util.Comparator; -import de.danoeh.antennapod.service.download.DownloadStatus; +import de.danoeh.antennapod.service.download.*; /** Compares the completion date of two Downloadstatus objects. */ public class DownloadStatusComparator implements Comparator<DownloadStatus> { diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java b/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java index 472124bf7..912e7c1c6 100644 --- a/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java +++ b/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java @@ -7,12 +7,16 @@ import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.asynctask.FlattrClickWorker; import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.service.PlaybackService; +import de.danoeh.antennapod.storage.DBTasks; +import de.danoeh.antennapod.storage.DBWriter; import de.danoeh.antennapod.storage.DownloadRequestException; import de.danoeh.antennapod.storage.DownloadRequester; +import de.danoeh.antennapod.util.QueueAccess; import de.danoeh.antennapod.util.ShareUtils; +import java.util.List; + /** Handles interactions with the FeedItemMenu. */ public class FeedItemMenuHandler { private FeedItemMenuHandler() { @@ -45,11 +49,12 @@ public class FeedItemMenuHandler { * True if MenuItems that let the user share information about * the FeedItem and visit its website should be set visible. This * parameter should be set to false if the menu space is limited. + * @param queueAccess + * Used for testing if the queue contains the selected item * @return Always returns true * */ public static boolean onPrepareMenu(MenuInterface mi, - FeedItem selectedItem, boolean showExtendedMenu) { - FeedManager manager = FeedManager.getInstance(); + FeedItem selectedItem, boolean showExtendedMenu, QueueAccess queueAccess) { DownloadRequester requester = DownloadRequester.getInstance(); boolean hasMedia = selectedItem.getMedia() != null; boolean downloaded = hasMedia && selectedItem.getMedia().isDownloaded(); @@ -79,7 +84,7 @@ public class FeedItemMenuHandler { mi.setItemVisibility(R.id.cancel_download_item, false); } - boolean isInQueue = manager.isInQueue(selectedItem); + boolean isInQueue = queueAccess.contains(selectedItem.getId()); if (!isInQueue || isPlaying) { mi.setItemVisibility(R.id.remove_from_queue_item, false); } @@ -111,39 +116,38 @@ public class FeedItemMenuHandler { public static boolean onMenuItemClicked(Context context, int menuItemId, FeedItem selectedItem) throws DownloadRequestException { DownloadRequester requester = DownloadRequester.getInstance(); - FeedManager manager = FeedManager.getInstance(); switch (menuItemId) { case R.id.skip_episode_item: context.sendBroadcast(new Intent( PlaybackService.ACTION_SKIP_CURRENT_EPISODE)); break; case R.id.download_item: - manager.downloadFeedItem(context, selectedItem); + DBTasks.downloadFeedItems(context, selectedItem); break; case R.id.play_item: - manager.playMedia(context, selectedItem.getMedia(), true, true, + DBTasks.playMedia(context, selectedItem.getMedia(), true, true, false); break; case R.id.remove_item: - manager.deleteFeedMedia(context, selectedItem.getMedia()); + DBWriter.deleteFeedMediaOfItem(context, selectedItem.getId()); break; case R.id.cancel_download_item: requester.cancelDownload(context, selectedItem.getMedia()); break; case R.id.mark_read_item: - manager.markItemRead(context, selectedItem, true, true); + DBWriter.markItemRead(context, selectedItem, true, true); break; case R.id.mark_unread_item: - manager.markItemRead(context, selectedItem, false, true); + DBWriter.markItemRead(context, selectedItem, false, true); break; case R.id.add_to_queue_item: - manager.addQueueItem(context, selectedItem); + DBWriter.addQueueItem(context, selectedItem.getId()); break; case R.id.remove_from_queue_item: - manager.removeQueueItem(context, selectedItem, true); + DBWriter.removeQueueItem(context, selectedItem.getId(), true); break; case R.id.stream_item: - manager.playMedia(context, selectedItem.getMedia(), true, true, + DBTasks.playMedia(context, selectedItem.getMedia(), true, true, true); break; case R.id.visit_website_item: diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java b/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java index af8538e83..fee8027a0 100644 --- a/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java +++ b/src/de/danoeh/antennapod/util/menuhandler/FeedMenuHandler.java @@ -14,8 +14,9 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.FeedInfoActivity; import de.danoeh.antennapod.asynctask.FlattrClickWorker; import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.service.download.DownloadService; +import de.danoeh.antennapod.storage.DBTasks; +import de.danoeh.antennapod.storage.DBWriter; import de.danoeh.antennapod.storage.DownloadRequestException; import de.danoeh.antennapod.storage.DownloadRequester; import de.danoeh.antennapod.util.ShareUtils; @@ -56,7 +57,6 @@ public class FeedMenuHandler { */ public static boolean onOptionsItemClicked(Context context, MenuItem item, Feed selectedFeed) throws DownloadRequestException { - FeedManager manager = FeedManager.getInstance(); switch (item.getItemId()) { case R.id.show_info_item: Intent startIntent = new Intent(context, FeedInfoActivity.class); @@ -65,10 +65,10 @@ public class FeedMenuHandler { context.startActivity(startIntent); break; case R.id.refresh_item: - manager.refreshFeed(context, selectedFeed); + DBTasks.refreshFeed(context, selectedFeed); break; case R.id.mark_all_read_item: - manager.markFeedRead(context, selectedFeed); + DBWriter.markFeedRead(context, selectedFeed.getId()); break; case R.id.visit_website_item: Uri uri = Uri.parse(selectedFeed.getLink()); diff --git a/src/de/danoeh/antennapod/util/playback/PlaybackController.java b/src/de/danoeh/antennapod/util/playback/PlaybackController.java index cebb11cf0..1d7057b10 100644 --- a/src/de/danoeh/antennapod/util/playback/PlaybackController.java +++ b/src/de/danoeh/antennapod/util/playback/PlaybackController.java @@ -33,6 +33,7 @@ import de.danoeh.antennapod.feed.FeedMedia; import de.danoeh.antennapod.preferences.PlaybackPreferences; import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.service.PlayerStatus; +import de.danoeh.antennapod.storage.DBTasks; import de.danoeh.antennapod.util.Converter; import de.danoeh.antennapod.util.playback.Playable.PlayableUtils; @@ -214,8 +215,8 @@ public abstract class PlaybackController { boolean lastIsStream = PlaybackPreferences .getCurrentEpisodeIsStream(); if (!fileExists && !lastIsStream && media instanceof FeedMedia) { - FeedManager.getInstance().notifyMissingFeedMediaFile( - activity, (FeedMedia) media); + DBTasks.notifyMissingFeedMediaFile( + activity, (FeedMedia) media); } serviceIntent.putExtra(PlaybackService.EXTRA_SHOULD_STREAM, lastIsStream || !fileExists); |