summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment
diff options
context:
space:
mode:
authordamoasda <46045854+damoasda@users.noreply.github.com>2019-08-10 21:25:59 +0200
committerdamoasda <46045854+damoasda@users.noreply.github.com>2019-08-10 21:25:59 +0200
commitbe676c6faa4ec22650ef3d0bf614a8a0e09d4a77 (patch)
tree6595d55b44f6d93d9e047f4381d57590d9d85db5 /app/src/main/java/de/danoeh/antennapod/fragment
parentdb2661fb3ffa013e4663a788f0af4f4d6ecddda7 (diff)
downloadAntennaPod-be676c6faa4ec22650ef3d0bf614a8a0e09d4a77.zip
Queue: Keep sorted #1556
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java72
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java15
2 files changed, 56 insertions, 31 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 4947d5a87..4b926200d 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -276,12 +276,22 @@ public class QueueFragment extends Fragment {
MenuItemUtils.refreshLockItem(getActivity(), menu);
- // Show Lock Item and Sort Item only if queue is sorted manually
- boolean sortedManually = UserPreferences.isQueueSortedManually();
+ // Show Lock Item only if queue is sorted manually
+ boolean sortedAutomatically = UserPreferences.isQueueSortedAutomatically();
MenuItem lockItem = menu.findItem(R.id.queue_lock);
- lockItem.setVisible(sortedManually);
- MenuItem sortItem = menu.findItem(R.id.queue_sort);
- sortItem.setVisible(sortedManually);
+ lockItem.setVisible(!sortedAutomatically);
+
+ // 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 sortSmart1Item = menu.findItem(R.id.queue_sort_smart_shuffle_asc);
+ sortSmart1Item.setVisible(!sortedAutomatically);
+ MenuItem sortSmart2Item = menu.findItem(R.id.queue_sort_smart_shuffle_desc);
+ sortSmart2Item.setVisible(!sortedAutomatically);
isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker);
}
@@ -331,38 +341,52 @@ 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:
- QueueSorter.sort(QueueSorter.Rule.EPISODE_TITLE_ASC, true);
+ queueSortOrderChanged(QueueSorter.Rule.EPISODE_TITLE_ASC);
return true;
case R.id.queue_sort_episode_title_desc:
- QueueSorter.sort(QueueSorter.Rule.EPISODE_TITLE_DESC, true);
+ queueSortOrderChanged(QueueSorter.Rule.EPISODE_TITLE_DESC);
return true;
case R.id.queue_sort_date_asc:
- QueueSorter.sort(QueueSorter.Rule.DATE_ASC, true);
+ queueSortOrderChanged(QueueSorter.Rule.DATE_ASC);
return true;
case R.id.queue_sort_date_desc:
- QueueSorter.sort(QueueSorter.Rule.DATE_DESC, true);
+ queueSortOrderChanged(QueueSorter.Rule.DATE_DESC);
return true;
case R.id.queue_sort_duration_asc:
- QueueSorter.sort(QueueSorter.Rule.DURATION_ASC, true);
+ queueSortOrderChanged(QueueSorter.Rule.DURATION_ASC);
return true;
case R.id.queue_sort_duration_desc:
- QueueSorter.sort(QueueSorter.Rule.DURATION_DESC, true);
+ queueSortOrderChanged(QueueSorter.Rule.DURATION_DESC);
return true;
case R.id.queue_sort_feed_title_asc:
- QueueSorter.sort(QueueSorter.Rule.FEED_TITLE_ASC, true);
+ queueSortOrderChanged(QueueSorter.Rule.FEED_TITLE_ASC);
return true;
case R.id.queue_sort_feed_title_desc:
- QueueSorter.sort(QueueSorter.Rule.FEED_TITLE_DESC, true);
+ queueSortOrderChanged(QueueSorter.Rule.FEED_TITLE_DESC);
return true;
case R.id.queue_sort_random:
- QueueSorter.sort(QueueSorter.Rule.RANDOM, true);
+ queueSortOrderChanged(QueueSorter.Rule.RANDOM);
return true;
case R.id.queue_sort_smart_shuffle_asc:
- QueueSorter.sort(QueueSorter.Rule.SMART_SHUFFLE_ASC, true);
+ queueSortOrderChanged(QueueSorter.Rule.SMART_SHUFFLE_ASC);
return true;
case R.id.queue_sort_smart_shuffle_desc:
- QueueSorter.sort(QueueSorter.Rule.SMART_SHUFFLE_DESC, true);
+ queueSortOrderChanged(QueueSorter.Rule.SMART_SHUFFLE_DESC);
return true;
default:
return false;
@@ -372,6 +396,22 @@ 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.
+ *
+ * @param rule Sort rule.
+ */
+ 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);
+ }
+ // Sort queue
+ QueueSorter.sort(rule, true);
+ }
@Override
public boolean onContextItemSelected(MenuItem item) {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java
index db852cee7..8c0e0295f 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java
@@ -11,11 +11,7 @@ import android.widget.ListView;
import android.widget.Toast;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
-import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.preferences.UserPreferences;
-import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.core.util.Permutor;
-import de.danoeh.antennapod.core.util.QueueSorter;
import org.apache.commons.lang3.ArrayUtils;
@@ -94,17 +90,6 @@ public class UserInterfacePreferencesFragment extends PreferenceFragmentCompat {
if (Build.VERSION.SDK_INT >= 26) {
findPreference(UserPreferences.PREF_EXPANDED_NOTIFICATION).setVisible(false);
}
-
- findPreference(UserPreferences.PREF_QUEUE_SORT_ORDER)
- .setOnPreferenceChangeListener((preference, newValue) -> {
- UserPreferences.QueueSortOrder newSortOrder = UserPreferences.parseQueueSortOrder((String) newValue);
- if (newSortOrder != UserPreferences.QueueSortOrder.MANUALLY) {
- QueueSorter.Rule sortRule = QueueSorter.queueSortOrder2Rule(newSortOrder);
- Permutor<FeedItem> permutor = QueueSorter.getPermutor(sortRule);
- DBWriter.reorderQueue(permutor, true);
- }
- return true;
- });
}
private void showDrawerPreferencesDialog() {