diff options
4 files changed, 70 insertions, 2 deletions
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 302739b6a..185af0e93 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -174,6 +174,12 @@ public class QueueFragment extends Fragment { DBTasks.refreshAllFeeds(getActivity(), feeds); } return true; + case R.id.queue_sort_date_asc: + DBWriter.sortQueueItemByDate(getActivity(), true, true); + return true; + case R.id.queue_sort_date_desc: + DBWriter.sortQueueItemByDate(getActivity(), false, true); + return true; default: return false; } diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml index 0f06ea952..fa4d21b21 100644 --- a/app/src/main/res/menu/queue.xml +++ b/app/src/main/res/menu/queue.xml @@ -9,5 +9,19 @@ android:menuCategory="container" custom:showAsAction="ifRoom" android:icon="?attr/navigation_refresh"/> - -</menu>
\ No newline at end of file + + <item + android:id="@+id/queue_sort" + android:title="@string/sort"> + + <menu> + <item + android:id="@+id/queue_sort_date_asc" + android:title="@string/date_asc"/> + <item + android:id="@+id/queue_sort_date_desc" + android:title="@string/date_desc"/> + </menu> + </item> + +</menu> 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 d71d19433..41dde8656 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 @@ -24,6 +24,8 @@ import org.shredzone.flattr4j.model.Flattr; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -588,6 +590,49 @@ public class DBWriter { } /** + * Sort the FeedItems in the queue by date. + * <p/> + * This function must be run using the ExecutorService (dbExec). + * + * @param context A context that is used for opening a database connection. + * @param asc true sort by ascending order + * false sort by descending order + * @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 void sortQueueItemByDate(final Context context, final boolean asc, final boolean broadcastUpdate) { + final PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + final List<FeedItem> queue = DBReader.getQueue(context, adapter); + + if (queue != null) { + if (asc) { + Collections.sort(queue, new Comparator<FeedItem>() { + public int compare(FeedItem f1, FeedItem f2) { + return f1.getPubDate().compareTo(f2.getPubDate()); + } + }); + } else { + Collections.sort(queue, new Comparator<FeedItem>() { + public int compare(FeedItem f1, FeedItem f2) { + return f2.getPubDate().compareTo(f1.getPubDate()); + } + }); + } + + adapter.setQueue(queue); + if (broadcastUpdate) { + EventDistributor.getInstance() + .sendQueueUpdateBroadcast(); + } + + } else { + Log.e(TAG, "sortQueueItemByDate: Could not load queue"); + } + adapter.close(); + } + + /** * Sets the 'read'-attribute of a FeedItem to the specified value. * * @param context A context that is used for opening a database connection. diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 130007016..d76cc533b 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -159,6 +159,9 @@ <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> + <string name="sort">Sort</string> + <string name="date_asc">ascending date</string> + <string name="date_desc">descending date</string> <!-- Flattr --> <string name="flattr_auth_label">Flattr sign-in</string> |