From fe9f0c8e7e65ba66590780d2344658112692c816 Mon Sep 17 00:00:00 2001
From: damoasda <46045854+damoasda@users.noreply.github.com>
Date: Sun, 11 Aug 2019 11:08:19 +0200
Subject: [PATCH] Changes due to feedback in pull request #3315
---
.../antennapod/fragment/QueueFragment.java | 87 ++++++-------
.../menuhandler/FeedItemMenuHandler.java | 6 +-
app/src/main/res/menu/queue.xml | 10 +-
.../core/preferences/UserPreferences.java | 74 +++++++----
.../antennapod/core/storage/DBWriter.java | 16 ++-
.../antennapod/core/util/QueueSorter.java | 118 +++---------------
.../antennapod/core/util/SortOrder.java | 18 +++
core/src/main/res/values-de/strings.xml | 2 +-
core/src/main/res/values/strings.xml | 2 +-
.../antennapod/core/util/QueueSorterTest.java | 16 +--
10 files changed, 154 insertions(+), 195 deletions(-)
create mode 100644 core/src/main/java/de/danoeh/antennapod/core/util/SortOrder.java
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 3190227a2..cf80bccc7 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -49,6 +49,7 @@ import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.QueueSorter;
+import de.danoeh.antennapod.core.util.SortOrder;
import de.danoeh.antennapod.dialog.EpisodesApplyActionFragment;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
@@ -277,19 +278,17 @@ public class QueueFragment extends Fragment {
MenuItemUtils.refreshLockItem(getActivity(), menu);
// Show Lock Item only if queue is sorted manually
- boolean sortedAutomatically = UserPreferences.isQueueSortedAutomatically();
+ boolean keepSorted = UserPreferences.isQueueKeepSorted();
MenuItem lockItem = menu.findItem(R.id.queue_lock);
- lockItem.setVisible(!sortedAutomatically);
+ lockItem.setVisible(!keepSorted);
+
+ // Random sort is not supported in keep sorted mode
+ MenuItem sortRandomItem = menu.findItem(R.id.queue_sort_random);
+ sortRandomItem.setVisible(!keepSorted);
// Set keep sorted checkbox
- MenuItem sortedAutomaticallyItem = menu.findItem(R.id.queue_sort_automatically);
- sortedAutomaticallyItem.setChecked(sortedAutomatically);
-
- // Hide sort menu items for sort orders that are not supported by automatic sort.
- MenuItem sortRandomItem = menu.findItem(R.id.queue_sort_random);
- sortRandomItem.setVisible(!sortedAutomatically);
- MenuItem sortSmartShuffleItem = menu.findItem(R.id.queue_sort_smart_shuffle);
- sortSmartShuffleItem.setVisible(!sortedAutomatically);
+ MenuItem keepSortedItem = menu.findItem(R.id.queue_keep_sorted);
+ keepSortedItem.setChecked(keepSorted);
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
@@ -339,52 +338,49 @@ public class QueueFragment extends Fragment {
((MainActivity) requireActivity()) .loadChildFragment(
EpisodesApplyActionFragment.newInstance(queue, ACTION_DELETE | ACTION_REMOVE_FROM_QUEUE));
return true;
- case R.id.queue_sort_automatically:
- boolean sortedAutomaticallyOld = UserPreferences.isQueueSortedAutomatically();
- boolean sortedAutomaticallyNew = !sortedAutomaticallyOld;
- if (sortedAutomaticallyNew) {
- // We have to choose an initially sort order, let's sort by episode date
- UserPreferences.QueueSortOrder sortOrder = UserPreferences.QueueSortOrder.DATE_NEW_OLD;
- UserPreferences.setQueueSortOrder(sortOrder);
- QueueSorter.sort(QueueSorter.queueSortOrder2Rule(sortOrder), true);
- } else {
- UserPreferences.setQueueSortOrder(UserPreferences.QueueSortOrder.MANUALLY);
- }
- // Update sort menu items visibility and state
- getActivity().invalidateOptionsMenu();
- return true;
case R.id.queue_sort_episode_title_asc:
- queueSortOrderChanged(QueueSorter.Rule.EPISODE_TITLE_ASC);
+ setSortOrder(SortOrder.EPISODE_TITLE_A_Z);
return true;
case R.id.queue_sort_episode_title_desc:
- queueSortOrderChanged(QueueSorter.Rule.EPISODE_TITLE_DESC);
+ setSortOrder(SortOrder.EPISODE_TITLE_Z_A);
return true;
case R.id.queue_sort_date_asc:
- queueSortOrderChanged(QueueSorter.Rule.DATE_ASC);
+ setSortOrder(SortOrder.DATE_OLD_NEW);
return true;
case R.id.queue_sort_date_desc:
- queueSortOrderChanged(QueueSorter.Rule.DATE_DESC);
+ setSortOrder(SortOrder.DATE_NEW_OLD);
return true;
case R.id.queue_sort_duration_asc:
- queueSortOrderChanged(QueueSorter.Rule.DURATION_ASC);
+ setSortOrder(SortOrder.DURATION_SHORT_LONG);
return true;
case R.id.queue_sort_duration_desc:
- queueSortOrderChanged(QueueSorter.Rule.DURATION_DESC);
+ setSortOrder(SortOrder.DURATION_LONG_SHORT);
return true;
case R.id.queue_sort_feed_title_asc:
- queueSortOrderChanged(QueueSorter.Rule.FEED_TITLE_ASC);
+ setSortOrder(SortOrder.FEED_TITLE_A_Z);
return true;
case R.id.queue_sort_feed_title_desc:
- queueSortOrderChanged(QueueSorter.Rule.FEED_TITLE_DESC);
+ setSortOrder(SortOrder.FEED_TITLE_Z_A);
return true;
case R.id.queue_sort_random:
- queueSortOrderChanged(QueueSorter.Rule.RANDOM);
+ setSortOrder(SortOrder.RANDOM);
return true;
case R.id.queue_sort_smart_shuffle_asc:
- queueSortOrderChanged(QueueSorter.Rule.SMART_SHUFFLE_ASC);
+ setSortOrder(SortOrder.SMART_SHUFFLE_OLD_NEW);
return true;
case R.id.queue_sort_smart_shuffle_desc:
- queueSortOrderChanged(QueueSorter.Rule.SMART_SHUFFLE_DESC);
+ setSortOrder(SortOrder.SMART_SHUFFLE_NEW_OLD);
+ return true;
+ case R.id.queue_keep_sorted:
+ boolean keepSortedOld = UserPreferences.isQueueKeepSorted();
+ boolean keepSortedNew = !keepSortedOld;
+ UserPreferences.setQueueKeepSorted(keepSortedNew);
+ if (keepSortedNew) {
+ SortOrder sortOrder = UserPreferences.getQueueKeepSortedOrder();
+ QueueSorter.sort(sortOrder, true);
+ }
+ // Update sort menu items and list lock elements
+ getActivity().recreate();
return true;
default:
return false;
@@ -395,20 +391,19 @@ public class QueueFragment extends Fragment {
}
/**
- * Sorts the queue on user interaction.
- * If the queue is sorted automatically, the new sort order is stored in the preferences.
+ * This method is called if the user clicks on a sort order menu item.
*
- * @param rule Sort rule.
+ * If the queue is in keep sorted mode, the new sort order is stored in the preferences and
+ * the queue is sorted. Otherwise the queue is just sorted.
+ *
+ * @param sortOrder New sort order.
*/
- private void queueSortOrderChanged(QueueSorter.Rule rule) {
- boolean sortedAutomatically = UserPreferences.isQueueSortedAutomatically();
- UserPreferences.QueueSortOrder sortOrder = QueueSorter.rule2QueueSortOrder(rule);
- // remember sort order to keep queue sorted
- if (sortedAutomatically && sortOrder != null) {
- UserPreferences.setQueueSortOrder(sortOrder);
+ private void setSortOrder(SortOrder sortOrder) {
+ boolean keepSorted = UserPreferences.isQueueKeepSorted();
+ if (keepSorted) {
+ UserPreferences.setQueueKeepSortedOrder(sortOrder);
}
- // Sort queue
- QueueSorter.sort(rule, true);
+ QueueSorter.sort(sortOrder, true);
}
@Override
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 5d6af35da..156657a00 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java
@@ -67,17 +67,17 @@ public class FeedItemMenuHandler {
}
boolean hasMedia = selectedItem.getMedia() != null;
boolean isPlaying = hasMedia && selectedItem.getState() == FeedItem.State.PLAYING;
- boolean sortedAutomatically = UserPreferences.isQueueSortedAutomatically();
+ boolean keepSorted = UserPreferences.isQueueKeepSorted();
if (!isPlaying) {
mi.setItemVisibility(R.id.skip_episode_item, false);
}
boolean isInQueue = selectedItem.isTagged(FeedItem.TAG_QUEUE);
- if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId() || sortedAutomatically) {
+ if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId() || keepSorted) {
mi.setItemVisibility(R.id.move_to_top_item, false);
}
- if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) == selectedItem.getId() || sortedAutomatically) {
+ if (queueAccess == null || queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) == selectedItem.getId() || keepSorted) {
mi.setItemVisibility(R.id.move_to_bottom_item, false);
}
if (!isInQueue) {
diff --git a/app/src/main/res/menu/queue.xml b/app/src/main/res/menu/queue.xml
index 99f0fd950..a4e511eb8 100644
--- a/app/src/main/res/menu/queue.xml
+++ b/app/src/main/res/menu/queue.xml
@@ -28,11 +28,6 @@
android:title="@string/sort">
+
+
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
index 2ce7f7835..b85518840 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
@@ -27,6 +27,7 @@ import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm;
import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm;
import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm;
import de.danoeh.antennapod.core.util.Converter;
+import de.danoeh.antennapod.core.util.SortOrder;
import de.danoeh.antennapod.core.util.download.AutoUpdateManager;
/**
@@ -54,10 +55,11 @@ public class UserPreferences {
private static final String PREF_SHOW_DOWNLOAD_REPORT = "prefShowDownloadReport";
public static final String PREF_BACK_BUTTON_BEHAVIOR = "prefBackButtonBehavior";
private static final String PREF_BACK_BUTTON_GO_TO_PAGE = "prefBackButtonGoToPage";
- public static final String PREF_QUEUE_SORT_ORDER = "prefQueueSortOrder";
// Queue
private static final String PREF_QUEUE_ADD_TO_FRONT = "prefQueueAddToFront";
+ public static final String PREF_QUEUE_KEEP_SORTED = "prefQueueKeepSorted";
+ public static final String PREF_QUEUE_KEEP_SORTED_ORDER = "prefQueueKeepSortedOrder";
// Playback
public static final String PREF_PAUSE_ON_HEADSET_DISCONNECT = "prefPauseOnHeadsetDisconnect";
@@ -493,7 +495,7 @@ public class UserPreferences {
public static boolean isQueueLocked() {
return prefs.getBoolean(PREF_QUEUE_LOCKED, false)
- || isQueueSortedAutomatically();
+ || isQueueKeepSorted();
}
public static void setFastForwardSecs(int secs) {
@@ -870,36 +872,60 @@ public class UserPreferences {
}
/**
- * Supported episode queue sort orders.
- * Use enum instead of integer to avoid mistakes at later maintenance changes.
+ * Returns if the queue is in keep sorted mode.
+ *
+ * @see #getQueueKeepSortedOrder()
*/
- public enum QueueSortOrder {
- MANUALLY, DATE_NEW_OLD, DATE_OLD_NEW, DURATION_SHORT_LONG, DURATION_LONG_SHORT,
- EPISODE_TITLE_A_Z, EPISODE_TITLE_Z_A, FEED_TITLE_A_Z, FEED_TITLE_Z_A
+ public static boolean isQueueKeepSorted() {
+ return prefs.getBoolean(PREF_QUEUE_KEEP_SORTED, false);
}
- public static QueueSortOrder getQueueSortOrder() {
- String sortOrderStr = prefs.getString(PREF_QUEUE_SORT_ORDER, "default");
- return parseQueueSortOrder(sortOrderStr);
- }
-
- public static void setQueueSortOrder(QueueSortOrder queueSortOrder) {
+ /**
+ * Enables/disables the keep sorted mode of the queue.
+ *
+ * @see #setQueueKeepSortedOrder(SortOrder)
+ */
+ public static void setQueueKeepSorted(boolean keepSorted) {
prefs.edit()
- .putString(PREF_QUEUE_SORT_ORDER, queueSortOrder.name())
+ .putBoolean(PREF_QUEUE_KEEP_SORTED, keepSorted)
.apply();
}
- public static QueueSortOrder parseQueueSortOrder(String value) {
- try {
- return QueueSortOrder.valueOf(value);
- } catch (IllegalArgumentException e) {
- // default value
- return QueueSortOrder.MANUALLY;
- }
+ /**
+ * Returns the sort order for the queue keep sorted mode.
+ * Note: This value is stored independently from the keep sorted state.
+ *
+ * @see #isQueueKeepSorted()
+ */
+ public static SortOrder getQueueKeepSortedOrder() {
+ String sortOrderStr = prefs.getString(PREF_QUEUE_KEEP_SORTED_ORDER, "use-default");
+ return parseSortOrder(sortOrderStr);
}
- public static boolean isQueueSortedAutomatically() {
- QueueSortOrder sortedOrder = getQueueSortOrder();
- return sortedOrder != QueueSortOrder.MANUALLY;
+ /**
+ * Sets the sort order for the queue keep sorted mode.
+ *
+ * @see #setQueueKeepSorted(boolean)
+ */
+ public static void setQueueKeepSortedOrder(SortOrder sortOrder) {
+ if (sortOrder == null) {
+ return;
+ }
+ prefs.edit()
+ .putString(PREF_QUEUE_KEEP_SORTED_ORDER, sortOrder.name())
+ .apply();
+ }
+
+ /**
+ * Converts the string representation to its enum value. If the string value is unknown,
+ * a default value is retuned.
+ */
+ private static SortOrder parseSortOrder(String value) {
+ try {
+ return SortOrder.valueOf(value);
+ } catch (IllegalArgumentException e) {
+ // default value
+ return SortOrder.DATE_NEW_OLD;
+ }
}
}
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 78812c234..b19bcfd1f 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
@@ -11,11 +11,8 @@ import android.util.Log;
import org.greenrobot.eventbus.EventBus;
import java.io.File;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Set;
@@ -45,6 +42,7 @@ import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.Permutor;
import de.danoeh.antennapod.core.util.QueueSorter;
+import de.danoeh.antennapod.core.util.SortOrder;
/**
* Provides methods for writing data to AntennaPod's database.
@@ -404,21 +402,21 @@ public class DBWriter {
}
/**
- * Sorts the queue depending on the configured sort order. If manual order is configured, the queue is not modified.
+ * Sorts the queue depending on the configured sort order.
+ * If the queue is not in keep sorted mode, nothing happens.
*
* @param queue The queue to be sorted.
* @param events Replaces the events by a single SORT event if the list has to be sorted automatically.
*/
private static void applySortOrder(List queue, List events) {
- if (!UserPreferences.isQueueSortedAutomatically()) {
- // automatic sort order is disabled, don't change anything
+ if (!UserPreferences.isQueueKeepSorted()) {
+ // queue is not in keep sorted mode, there's nothing to do
return;
}
// Sort queue by configured sort order
- UserPreferences.QueueSortOrder sortOrder = UserPreferences.getQueueSortOrder();
- QueueSorter.Rule sortRule = QueueSorter.queueSortOrder2Rule(sortOrder);
- Permutor permutor = QueueSorter.getPermutor(sortRule);
+ SortOrder sortOrder = UserPreferences.getQueueKeepSortedOrder();
+ Permutor permutor = QueueSorter.getPermutor(sortOrder);
permutor.reorder(queue);
// Replace ADDED events by a single SORTED event
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java b/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java
index 56402f940..37172d042 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/QueueSorter.java
@@ -9,68 +9,54 @@ import java.util.Map;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.DBWriter;
/**
* Provides method for sorting the queue according to rules.
*/
public class QueueSorter {
- public enum Rule {
- EPISODE_TITLE_ASC,
- EPISODE_TITLE_DESC,
- DATE_ASC,
- DATE_DESC,
- DURATION_ASC,
- DURATION_DESC,
- FEED_TITLE_ASC,
- FEED_TITLE_DESC,
- RANDOM,
- SMART_SHUFFLE_ASC,
- SMART_SHUFFLE_DESC
- }
/**
- * Sorts the queue by the given rule and sends a broadcast update.
+ * Sorts the queue by the given sort order and sends a broadcast update.
*
- * @param rule Sort rule.
+ * @param sortOrder Sort order.
* @param broadcastUpdate Send broadcast update?
*/
- public static void sort(Rule rule, boolean broadcastUpdate) {
- Permutor permutor = getPermutor(rule);
+ public static void sort(SortOrder sortOrder, boolean broadcastUpdate) {
+ Permutor permutor = getPermutor(sortOrder);
if (permutor != null) {
DBWriter.reorderQueue(permutor, broadcastUpdate);
}
}
/**
- * Returns a Permutor that sorts a list appropriate to the given sort rule.
+ * Returns a Permutor that sorts a list appropriate to the given sort order.
*
- * @param rule Sort rule.
- * @return Permutor that sorts a list appropriate to the given sort rule. null
if the rule is unknown or null
.
+ * @param sortOrder Sort order.
+ * @return Permutor that sorts a list appropriate to the given sort order. null
if the order is unknown or null
.
*/
- public static Permutor getPermutor(Rule rule) {
- if (rule == null) {
+ public static Permutor getPermutor(SortOrder sortOrder) {
+ if (sortOrder == null) {
return null;
}
Comparator comparator = null;
Permutor permutor = null;
- switch (rule) {
- case EPISODE_TITLE_ASC:
+ switch (sortOrder) {
+ case EPISODE_TITLE_A_Z:
comparator = (f1, f2) -> f1.getTitle().compareTo(f2.getTitle());
break;
- case EPISODE_TITLE_DESC:
+ case EPISODE_TITLE_Z_A:
comparator = (f1, f2) -> f2.getTitle().compareTo(f1.getTitle());
break;
- case DATE_ASC:
+ case DATE_OLD_NEW:
comparator = (f1, f2) -> f1.getPubDate().compareTo(f2.getPubDate());
break;
- case DATE_DESC:
+ case DATE_NEW_OLD:
comparator = (f1, f2) -> f2.getPubDate().compareTo(f1.getPubDate());
break;
- case DURATION_ASC:
+ case DURATION_SHORT_LONG:
comparator = (f1, f2) -> {
FeedMedia f1Media = f1.getMedia();
FeedMedia f2Media = f2.getMedia();
@@ -83,7 +69,7 @@ public class QueueSorter {
return duration1 - duration2;
};
break;
- case DURATION_DESC:
+ case DURATION_LONG_SHORT:
comparator = (f1, f2) -> {
FeedMedia f1Media = f1.getMedia();
FeedMedia f2Media = f2.getMedia();
@@ -93,19 +79,19 @@ public class QueueSorter {
return -1 * (duration1 - duration2);
};
break;
- case FEED_TITLE_ASC:
+ case FEED_TITLE_A_Z:
comparator = (f1, f2) -> f1.getFeed().getTitle().compareTo(f2.getFeed().getTitle());
break;
- case FEED_TITLE_DESC:
+ case FEED_TITLE_Z_A:
comparator = (f1, f2) -> f2.getFeed().getTitle().compareTo(f1.getFeed().getTitle());
break;
case RANDOM:
permutor = Collections::shuffle;
break;
- case SMART_SHUFFLE_ASC:
+ case SMART_SHUFFLE_OLD_NEW:
permutor = (queue) -> smartShuffle(queue, true);
break;
- case SMART_SHUFFLE_DESC:
+ case SMART_SHUFFLE_NEW_OLD:
permutor = (queue) -> smartShuffle(queue, false);
break;
}
@@ -117,70 +103,6 @@ public class QueueSorter {
return permutor;
}
- /**
- * Converts a QueueSortOrder value to its corresponding Rule value.
- *
- * @param sortOrder Sort order.
- * @return Rule value corresponding to the given sort order. null
if the sort order is unknown or null
.
- */
- public static Rule queueSortOrder2Rule(UserPreferences.QueueSortOrder sortOrder) {
- if (sortOrder == null) {
- return null;
- }
- switch (sortOrder) {
- case DATE_NEW_OLD:
- return QueueSorter.Rule.DATE_DESC;
- case DATE_OLD_NEW:
- return QueueSorter.Rule.DATE_ASC;
- case DURATION_SHORT_LONG:
- return QueueSorter.Rule.DURATION_ASC;
- case DURATION_LONG_SHORT:
- return QueueSorter.Rule.DURATION_DESC;
- case EPISODE_TITLE_A_Z:
- return QueueSorter.Rule.EPISODE_TITLE_ASC;
- case EPISODE_TITLE_Z_A:
- return QueueSorter.Rule.EPISODE_TITLE_DESC;
- case FEED_TITLE_A_Z:
- return QueueSorter.Rule.FEED_TITLE_ASC;
- case FEED_TITLE_Z_A:
- return QueueSorter.Rule.FEED_TITLE_DESC;
- default:
- return null;
- }
- }
-
- /**
- * Converts a Rule value to its corresponding QueueSortOrder value.
- *
- * @param rule Rule value.
- * @return QueueSortOrder value corresponding to the given Rule value. null
if the Rule value is unsupported or null
.
- */
- public static UserPreferences.QueueSortOrder rule2QueueSortOrder(Rule rule) {
- if (rule == null) {
- return null;
- }
- switch (rule) {
- case EPISODE_TITLE_ASC:
- return UserPreferences.QueueSortOrder.EPISODE_TITLE_A_Z;
- case EPISODE_TITLE_DESC:
- return UserPreferences.QueueSortOrder.EPISODE_TITLE_Z_A;
- case DATE_ASC:
- return UserPreferences.QueueSortOrder.DATE_OLD_NEW;
- case DATE_DESC:
- return UserPreferences.QueueSortOrder.DATE_NEW_OLD;
- case DURATION_ASC:
- return UserPreferences.QueueSortOrder.DURATION_SHORT_LONG;
- case DURATION_DESC:
- return UserPreferences.QueueSortOrder.DURATION_LONG_SHORT;
- case FEED_TITLE_ASC:
- return UserPreferences.QueueSortOrder.FEED_TITLE_A_Z;
- case FEED_TITLE_DESC:
- return UserPreferences.QueueSortOrder.FEED_TITLE_Z_A;
- default:
- return null;
- }
- }
-
/**
* Implements a reordering by pubdate that avoids consecutive episodes from the same feed in
* the queue.
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/SortOrder.java b/core/src/main/java/de/danoeh/antennapod/core/util/SortOrder.java
new file mode 100644
index 000000000..6c67262db
--- /dev/null
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/SortOrder.java
@@ -0,0 +1,18 @@
+package de.danoeh.antennapod.core.util;
+
+/**
+ * Provides sort orders to sort a list of episodes.
+ */
+public enum SortOrder {
+ EPISODE_TITLE_A_Z,
+ EPISODE_TITLE_Z_A,
+ DATE_OLD_NEW,
+ DATE_NEW_OLD,
+ DURATION_SHORT_LONG,
+ DURATION_LONG_SHORT,
+ FEED_TITLE_A_Z,
+ FEED_TITLE_Z_A,
+ RANDOM,
+ SMART_SHUFFLE_OLD_NEW,
+ SMART_SHUFFLE_NEW_OLD
+}
diff --git a/core/src/main/res/values-de/strings.xml b/core/src/main/res/values-de/strings.xml
index 449d8b283..f05b03fc4 100644
--- a/core/src/main/res/values-de/strings.xml
+++ b/core/src/main/res/values-de/strings.xml
@@ -276,7 +276,7 @@
Zum Anfang verschieben
Zum Ende verschieben
Sortieren
- Automatisch sortieren
+ Automatisch sortieren
Datum
Dauer
Episodentitel
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index b32bd60df..7ebce44a2 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -294,7 +294,7 @@
Move to top
Move to bottom
Sort
- Keep sorted
+ Keep sorted
Date
Duration
Episode title
diff --git a/core/src/test/java/de/danoeh/antennapod/core/util/QueueSorterTest.java b/core/src/test/java/de/danoeh/antennapod/core/util/QueueSorterTest.java
index 9e2bbf5d7..791b6a75b 100644
--- a/core/src/test/java/de/danoeh/antennapod/core/util/QueueSorterTest.java
+++ b/core/src/test/java/de/danoeh/antennapod/core/util/QueueSorterTest.java
@@ -25,7 +25,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_EPISODE_TITLE_ASC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.EPISODE_TITLE_ASC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.EPISODE_TITLE_A_Z);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting
@@ -35,7 +35,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_EPISODE_TITLE_DESC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.EPISODE_TITLE_DESC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.EPISODE_TITLE_Z_A);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting
@@ -45,7 +45,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_DATE_ASC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.DATE_ASC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.DATE_OLD_NEW);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting
@@ -55,7 +55,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_DATE_DESC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.DATE_DESC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.DATE_NEW_OLD);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting
@@ -65,7 +65,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_DURATION_ASC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.DURATION_ASC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.DURATION_SHORT_LONG);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting
@@ -75,7 +75,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_DURATION_DESC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.DURATION_DESC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.DURATION_LONG_SHORT);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting
@@ -85,7 +85,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_FEED_TITLE_ASC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.FEED_TITLE_ASC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.FEED_TITLE_A_Z);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting
@@ -95,7 +95,7 @@ public class QueueSorterTest {
@Test
public void testPermutorForRule_FEED_TITLE_DESC() {
- Permutor permutor = QueueSorter.getPermutor(QueueSorter.Rule.FEED_TITLE_DESC);
+ Permutor permutor = QueueSorter.getPermutor(SortOrder.FEED_TITLE_Z_A);
List itemList = getTestList();
assertTrue(checkIdOrder(itemList, 1, 3, 2)); // before sorting