summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--res/menu/feeditem.xml5
-rw-r--r--res/values/strings.xml3
-rw-r--r--src/de/danoeh/antennapod/storage/DBWriter.java67
-rw-r--r--src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java5
4 files changed, 42 insertions, 38 deletions
diff --git a/res/menu/feeditem.xml b/res/menu/feeditem.xml
index 2d952d3c3..644b71081 100644
--- a/res/menu/feeditem.xml
+++ b/res/menu/feeditem.xml
@@ -72,5 +72,10 @@
android:showAsAction="collapseActionView"
android:title="@string/move_to_top_label">
</item>
+ <item
+ android:id="@+id/move_to_bottom_item"
+ android:showAsAction="collapseActionView"
+ android:title="@string/move_to_bottom_label">
+ </item>
</menu> \ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5fb778825..7b45a7201 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -127,6 +127,8 @@
<string name="organize_queue_label">Organize queue</string>
<string name="undo">Undo</string>
<string name="removed_from_queue">Item removed</string>
+ <string name="move_to_top_label">Move to top</string>
+ <string name="move_to_bottom_label">Move to bottom</string>
<!-- Flattr -->
<string name="flattr_auth_label">Flattr sign-in</string>
@@ -250,6 +252,5 @@
<string name="folder_not_empty_dialog_title">Folder is not empty</string>
<string name="folder_not_empty_dialog_msg">The folder you have selected is not empty. Media downloads and other files will be placed directly in this folder. Continue anyway?</string>
<string name="set_to_default_folder">Choose default folder</string>
- <string name="move_to_top_label">Move to top</string>
</resources> \ No newline at end of file
diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java
index c34f134ff..d879f3c83 100644
--- a/src/de/danoeh/antennapod/storage/DBWriter.java
+++ b/src/de/danoeh/antennapod/storage/DBWriter.java
@@ -467,44 +467,39 @@ public class DBWriter {
* @param selectedItem The item to move to the top of the queue
* @param broadcastUpdate true if this operation should trigger a QueueUpdateBroadcast. This option should be set to
* false if the caller wants to avoid unexpected updates of the GUI.
- * @throws IndexOutOfBoundsException if (to < 0 || to >= queue.size()) || (from < 0 || from >= queue.size())
*/
- public static Future<?> moveQueueItemToTop(final Context context, final FeedItem selectedItem, final boolean broadcastUpdate) {
- return dbExec.submit(new Runnable() {
-
- @Override
- public void run() {
- final PodDBAdapter adapter = new PodDBAdapter(context);
- adapter.open();
- final List<FeedItem> queue = DBReader
- .getQueue(context, adapter);
-
- if (queue != null) {
- // it seems like there should be a better way to get
- // the item we need, but iterating seems to be the
- // only way
- for (FeedItem item : queue) {
- if (item.getId() == selectedItem.getId()) {
- if (queue.remove(item)) {
- queue.add(0, item);
- Log.d(TAG, "moveQueueItemToTop: moved");
- adapter.setQueue(queue);
- if (broadcastUpdate) {
- EventDistributor.getInstance()
- .sendQueueUpdateBroadcast();
- }
- } else {
- Log.e(TAG, "moveQueueItemToTop: Could not move to top, no such item");
- }
- break;
- }
- }
- } else {
- Log.e(TAG, "moveQueueItemToTop: Could not move to top, no queue");
- }
- adapter.close();
+ public static Future<?> moveQueueItemToTop(final Context context, final long itemId, final boolean broadcastUpdate) {
+ List<Long> queueIdList = DBReader.getQueueIDList(context);
+ int currentLocation = 0;
+ for (long id : queueIdList) {
+ if (id == itemId) {
+ return moveQueueItem(context, currentLocation, 0, true);
}
- });
+ currentLocation++;
+ }
+ Log.e(TAG, "moveQueueItemToTop: item not found");
+ return null;
+ }
+
+ /**
+ * Moves the specified item to the bottom of the queue.
+ *
+ * @param context A context that is used for opening a database connection.
+ * @param selectedItem The item to move to the bottom of the queue
+ * @param broadcastUpdate true if this operation should trigger a QueueUpdateBroadcast. This option should be set to
+ * false if the caller wants to avoid unexpected updates of the GUI.
+ */
+ public static Future<?> moveQueueItemToBottom(final Context context, final long itemId, final boolean broadcastUpdate) {
+ List<Long> queueIdList = DBReader.getQueueIDList(context);
+ int currentLocation = 0;
+ for (long id : queueIdList) {
+ if (id == itemId) {
+ return moveQueueItem(context, currentLocation, queueIdList.size() - 1, true);
+ }
+ currentLocation++;
+ }
+ Log.e(TAG, "moveQueueItemToBottom: item not found");
+ return null;
}
/**
diff --git a/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java b/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java
index 4b99b47fb..0116dbf21 100644
--- a/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java
+++ b/src/de/danoeh/antennapod/util/menuhandler/FeedItemMenuHandler.java
@@ -151,7 +151,10 @@ public class FeedItemMenuHandler {
true);
break;
case R.id.move_to_top_item:
- DBWriter.moveQueueItemToTop(context, selectedItem, true);
+ DBWriter.moveQueueItemToTop(context, selectedItem.getId(), true);
+ break;
+ case R.id.move_to_bottom_item:
+ DBWriter.moveQueueItemToBottom(context, selectedItem.getId(), true);
break;
case R.id.visit_website_item:
Uri uri = Uri.parse(selectedItem.getLink());