summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShom Bandopadhaya <shom@bandopadhaya.com>2022-01-04 10:26:59 +0000
committerGitHub <noreply@github.com>2022-01-04 11:26:59 +0100
commit8568226468e7377e273410847a97ebf8a1d7e5e7 (patch)
tree487879cce40c1dba0180d4041430bdde9f0cf26f
parent4f031c4e45cc2e83059da8bed55f23bca345320d (diff)
downloadantennapod-8568226468e7377e273410847a97ebf8a1d7e5e7.zip
Local feeds: add sort option for file name (#5629)
Co-authored-by: widlok <widlok@users.noreply.github.com>
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/IntraFeedSortDialog.java59
-rw-r--r--app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/FeedItemPermutors.java12
-rw-r--r--core/src/main/res/values/arrays.xml23
-rw-r--r--core/src/main/res/values/strings.xml2
-rw-r--r--model/src/main/java/de/danoeh/antennapod/model/feed/SortOrder.java10
6 files changed, 86 insertions, 22 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/IntraFeedSortDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/IntraFeedSortDialog.java
index 58f070046..40afddb6c 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/IntraFeedSortDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/IntraFeedSortDialog.java
@@ -16,35 +16,52 @@ public abstract class IntraFeedSortDialog {
@NonNull
protected Context context;
- public IntraFeedSortDialog(@NonNull Context context, @Nullable SortOrder sortOrder) {
+ private final String[] sortItems;
+ private final SortOrder[] sortValues;
+
+ public IntraFeedSortDialog(@NonNull Context context, @Nullable SortOrder sortOrder, @NonNull boolean isLocalFeed) {
this.context = context;
this.currentSortOrder = sortOrder;
+
+ if (isLocalFeed) {
+ sortItems = context.getResources().getStringArray(R.array.local_feed_episodes_sort_options);
+ final String[] localSortStringValues =
+ context.getResources().getStringArray(R.array.local_feed_episodes_sort_values);
+ sortValues = SortOrder.valuesOf(localSortStringValues);
+ } else {
+ sortItems = context.getResources().getStringArray(R.array.feed_episodes_sort_options);
+ final String[] commonSortStringValues =
+ context.getResources().getStringArray(R.array.feed_episodes_sort_values);
+ sortValues = SortOrder.valuesOf(commonSortStringValues);
+ }
}
public void openDialog() {
- final String[] items = context.getResources().getStringArray(R.array.feed_episodes_sort_options);
- final String[] valueStrs = context.getResources().getStringArray(R.array.feed_episodes_sort_values);
- final SortOrder[] values = new SortOrder[valueStrs.length];
- for (int i = 0; i < valueStrs.length; i++) {
- values[i] = SortOrder.valueOf(valueStrs[i]);
- }
+ int idxCurrentSort = getCurrentSortOrderIndex();
- int idxCurrentSort = 0;
- for (int i = 0; i < values.length; i++) {
- if (currentSortOrder == values[i]) {
- idxCurrentSort = i;
- break;
+ AlertDialog.Builder builder =
+ new AlertDialog.Builder(context)
+ .setTitle(R.string.sort)
+ .setSingleChoiceItems(sortItems, idxCurrentSort, (dialog, idxNewSort) -> {
+ updateSort(sortValues[idxNewSort]);
+ dialog.dismiss();
+ })
+ .setNegativeButton(R.string.cancel_label, null);
+ builder.create().show();
+ }
+
+ /**
+ * Retrieves index of currentSortOrder index in values array.
+ * @return if currentSortOrder is found in array - returns index of that element,
+ * otherwise returns 0, the default sort option;
+ */
+ private int getCurrentSortOrderIndex() {
+ for (int i = 0; i < sortValues.length; i++) {
+ if (currentSortOrder == sortValues[i]) {
+ return i;
}
}
-
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.sort);
- builder.setSingleChoiceItems(items, idxCurrentSort, (dialog, idxNewSort) -> {
- updateSort(values[idxNewSort]);
- dialog.dismiss();
- });
- builder.setNegativeButton(R.string.cancel_label, null);
- builder.create().show();
+ return 0;
}
protected abstract void updateSort(@NonNull SortOrder sortOrder);
diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
index fded5fb34..d4c7a838c 100644
--- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
+++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java
@@ -108,7 +108,7 @@ public class FeedMenuHandler {
private static void showSortDialog(Context context, Feed selectedFeed) {
- IntraFeedSortDialog sortDialog = new IntraFeedSortDialog(context, selectedFeed.getSortOrder()) {
+ IntraFeedSortDialog sortDialog = new IntraFeedSortDialog(context, selectedFeed.getSortOrder(), selectedFeed.isLocalFeed()) {
@Override
protected void updateSort(@NonNull SortOrder sortOrder) {
selectedFeed.setSortOrder(sortOrder);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FeedItemPermutors.java b/core/src/main/java/de/danoeh/antennapod/core/util/FeedItemPermutors.java
index 09161ca7b..7f2742ab0 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/FeedItemPermutors.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/FeedItemPermutors.java
@@ -50,6 +50,12 @@ public class FeedItemPermutors {
case DURATION_LONG_SHORT:
comparator = (f1, f2) -> Integer.compare(duration(f2), duration(f1));
break;
+ case EPISODE_FILENAME_A_Z:
+ comparator = (f1, f2) -> itemLink(f1).compareTo(itemLink(f2));
+ break;
+ case EPISODE_FILENAME_Z_A:
+ comparator = (f1, f2) -> itemLink(f2).compareTo(itemLink(f1));
+ break;
case FEED_TITLE_A_Z:
comparator = (f1, f2) -> feedTitle(f1).compareTo(feedTitle(f2));
break;
@@ -91,6 +97,12 @@ public class FeedItemPermutors {
}
@NonNull
+ private static String itemLink(@Nullable FeedItem item) {
+ return (item != null && item.getLink() != null)
+ ? item.getLink().toLowerCase(Locale.getDefault()) : "";
+ }
+
+ @NonNull
private static String feedTitle(@Nullable FeedItem item) {
return (item != null && item.getFeed() != null && item.getFeed().getTitle() != null)
? item.getFeed().getTitle().toLowerCase(Locale.getDefault()) : "";
diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml
index ba4d48219..de83bbf59 100644
--- a/core/src/main/res/values/arrays.xml
+++ b/core/src/main/res/values/arrays.xml
@@ -209,6 +209,18 @@
<item>@string/sort_duration_long_short</item>
</string-array>
+ <!-- sort for local feed screen -->
+ <string-array name="local_feed_episodes_sort_options">
+ <item>@string/sort_date_new_old</item>
+ <item>@string/sort_date_old_new</item>
+ <item>@string/sort_title_a_z</item>
+ <item>@string/sort_title_z_a</item>
+ <item>@string/sort_duration_short_long</item>
+ <item>@string/sort_duration_long_short</item>
+ <item>@string/sort_filename_a_z</item>
+ <item>@string/sort_filename_z_a</item>
+ </string-array>
+
<string-array name="feed_episodes_sort_values">
<item>DATE_NEW_OLD</item>
<item>DATE_OLD_NEW</item>
@@ -218,6 +230,17 @@
<item>DURATION_LONG_SHORT</item>
</string-array>
+ <string-array name="local_feed_episodes_sort_values">
+ <item>DATE_NEW_OLD</item>
+ <item>DATE_OLD_NEW</item>
+ <item>EPISODE_TITLE_A_Z</item>
+ <item>EPISODE_TITLE_Z_A</item>
+ <item>DURATION_SHORT_LONG</item>
+ <item>DURATION_LONG_SHORT</item>
+ <item>EPISODE_FILENAME_A_Z</item>
+ <item>EPISODE_FILENAME_Z_A</item>
+ </string-array>
+
<string-array name="compact_notification_buttons_options">
<item>@string/rewind_label</item>
<item>@string/fast_forward_label</item>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index d011b9cf1..5ed065793 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -761,6 +761,8 @@
<string name="sort_date_old_new">Date (Old \u2192 New)</string>
<string name="sort_duration_short_long">Duration (Short \u2192 Long)</string>
<string name="sort_duration_long_short">Duration (Long \u2192 Short)</string>
+ <string name="sort_filename_a_z">File Name (A \u2192 Z)</string>
+ <string name="sort_filename_z_a">File Name (Z \u2192 A)</string>
<string name="sort_a_z">A \u2192 Z</string>
<string name="sort_z_a">Z \u2192 A</string>
diff --git a/model/src/main/java/de/danoeh/antennapod/model/feed/SortOrder.java b/model/src/main/java/de/danoeh/antennapod/model/feed/SortOrder.java
index cbc56fd11..1f9687b2e 100644
--- a/model/src/main/java/de/danoeh/antennapod/model/feed/SortOrder.java
+++ b/model/src/main/java/de/danoeh/antennapod/model/feed/SortOrder.java
@@ -18,6 +18,8 @@ public enum SortOrder {
EPISODE_TITLE_Z_A(4, INTRA_FEED),
DURATION_SHORT_LONG(5, INTRA_FEED),
DURATION_LONG_SHORT(6, INTRA_FEED),
+ EPISODE_FILENAME_A_Z(7, INTRA_FEED),
+ EPISODE_FILENAME_Z_A(8, INTRA_FEED),
FEED_TITLE_A_Z(101, INTER_FEED),
FEED_TITLE_Z_A(102, INTER_FEED),
RANDOM(103, INTER_FEED),
@@ -68,4 +70,12 @@ public enum SortOrder {
public static String toCodeString(@Nullable SortOrder sortOrder) {
return sortOrder != null ? Integer.toString(sortOrder.code) : null;
}
+
+ public static SortOrder[] valuesOf(String[] stringValues) {
+ SortOrder[] values = new SortOrder[stringValues.length];
+ for (int i = 0; i < stringValues.length; i++) {
+ values[i] = SortOrder.valueOf(stringValues[i]);
+ }
+ return values;
+ }
}