summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitStart <1501599+gitstart@users.noreply.github.com>2023-02-22 20:04:04 +0100
committerGitHub <noreply@github.com>2023-02-22 20:04:04 +0100
commit25ddd73f244dc6444ed052942d763384f5c58cac (patch)
treef0b032d95c166df3c06092b83aafb3147bbcd2f5 /app
parent50eb1e9cf93c81e4eec440934feb9ad30bda85b4 (diff)
downloadAntennaPod-25ddd73f244dc6444ed052942d763384f5c58cac.zip
Add sort option to episodes screen (#6286)
Diffstat (limited to 'app')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java55
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java13
-rw-r--r--app/src/main/res/menu/episodes.xml9
4 files changed, 70 insertions, 14 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java b/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java
index bb3c0bf67..426a30bb8 100644
--- a/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java
@@ -13,6 +13,7 @@ import androidx.test.rule.ActivityTestRule;
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
import de.danoeh.antennapod.model.feed.FeedItemFilter;
+import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.playback.base.PlayerStatus;
import org.awaitility.Awaitility;
import org.hamcrest.Matcher;
@@ -252,7 +253,8 @@ public class PlaybackTest {
openNavDrawer();
onDrawerItem(withText(R.string.episodes_label)).perform(click());
- final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10, FeedItemFilter.unfiltered());
+ final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10,
+ FeedItemFilter.unfiltered(), SortOrder.DATE_NEW_OLD);
Matcher<View> allEpisodesMatcher = allOf(withId(R.id.recyclerView), isDisplayed(), hasMinimumChildCount(2));
onView(isRoot()).perform(waitForView(allEpisodesMatcher, 1000));
onView(allEpisodesMatcher).perform(actionOnItemAtPosition(0, clickChildViewWithId(R.id.secondaryActionButton)));
@@ -287,7 +289,8 @@ public class PlaybackTest {
uiTestUtils.addLocalFeedData(true);
DBWriter.clearQueue().get();
activityTestRule.launchActivity(new Intent());
- final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10, FeedItemFilter.unfiltered());
+ final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10,
+ FeedItemFilter.unfiltered(), SortOrder.DATE_NEW_OLD);
startLocalPlayback();
FeedMedia media = episodes.get(0).getMedia();
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
index dbf314876..dfbaf9695 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -9,13 +9,17 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.dialog.AllEpisodesFilterDialog;
+import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedItemFilter;
+import de.danoeh.antennapod.model.feed.SortOrder;
import org.apache.commons.lang3.StringUtils;
import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
/**
* Shows all episodes (possibly filtered by user).
@@ -24,20 +28,55 @@ public class AllEpisodesFragment extends EpisodesListFragment {
public static final String TAG = "EpisodesFragment";
private static final String PREF_NAME = "PrefAllEpisodesFragment";
private static final String PREF_FILTER = "filter";
+ public static final String PREF_SORT = "prefEpisodesSort";
+ private SharedPreferences prefs;
@NonNull
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View root = super.onCreateView(inflater, container, savedInstanceState);
toolbar.inflateMenu(R.menu.episodes);
+ inflateSortMenu();
toolbar.setTitle(R.string.episodes_label);
updateToolbar();
updateFilterUi();
+ prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
txtvInformation.setOnClickListener(
v -> AllEpisodesFilterDialog.newInstance(getFilter()).show(getChildFragmentManager(), null));
return root;
}
+ private void inflateSortMenu() {
+ MenuItem sortItem = toolbar.getMenu().findItem(R.id.episodes_sort);
+ getActivity().getMenuInflater().inflate(R.menu.sort_menu, sortItem.getSubMenu());
+
+ // Remove the sorting options that are not needed in this fragment
+ toolbar.getMenu().findItem(R.id.sort_episode_title).setVisible(false);
+ toolbar.getMenu().findItem(R.id.sort_feed_title).setVisible(false);
+ toolbar.getMenu().findItem(R.id.sort_random).setVisible(false);
+ toolbar.getMenu().findItem(R.id.sort_smart_shuffle).setVisible(false);
+ toolbar.getMenu().findItem(R.id.keep_sorted).setVisible(false);
+ }
+
+ @NonNull
+ @Override
+ protected List<FeedItem> loadData() {
+ return DBReader.getRecentlyPublishedEpisodes(0, page * EPISODES_PER_PAGE,
+ getFilter(), getSortOrder());
+ }
+
+ @NonNull
+ @Override
+ protected List<FeedItem> loadMoreData(int page) {
+ return DBReader.getRecentlyPublishedEpisodes((page - 1) * EPISODES_PER_PAGE,
+ EPISODES_PER_PAGE, getFilter(), getSortOrder());
+ }
+
+ @Override
+ protected int loadTotalItemCount() {
+ return DBReader.getTotalEpisodeCount(getFilter());
+ }
+
@Override
protected FeedItemFilter getFilter() {
SharedPreferences prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
@@ -71,13 +110,23 @@ public class AllEpisodesFragment extends EpisodesListFragment {
}
onFilterChanged(new AllEpisodesFilterDialog.AllEpisodesFilterChangedEvent(new HashSet<>(filter)));
return true;
+ } else {
+ SortOrder sortOrder = MenuItemToSortOrderConverter.convert(item);
+ if (sortOrder != null) {
+ saveSortOrderAndRefresh(sortOrder);
+ return true;
+ }
}
return false;
}
+ private void saveSortOrderAndRefresh(SortOrder type) {
+ prefs.edit().putString(PREF_SORT, "" + type.code).apply();
+ loadItems();
+ }
+
@Subscribe
public void onFilterChanged(AllEpisodesFilterDialog.AllEpisodesFilterChangedEvent event) {
- SharedPreferences prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
prefs.edit().putString(PREF_FILTER, StringUtils.join(event.filterValues, ",")).apply();
updateFilterUi();
page = 1;
@@ -96,4 +145,8 @@ public class AllEpisodesFragment extends EpisodesListFragment {
toolbar.getMenu().findItem(R.id.action_favorites).setIcon(
getFilter().showIsFavorite ? R.drawable.ic_star : R.drawable.ic_star_border);
}
+
+ private SortOrder getSortOrder() {
+ return SortOrder.fromCodeString(prefs.getString(PREF_SORT, "" + SortOrder.DATE_NEW_OLD.code));
+ }
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
index 1384b5d78..5ba323372 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
@@ -31,7 +31,6 @@ import de.danoeh.antennapod.core.event.DownloadEvent;
import de.danoeh.antennapod.core.event.DownloaderUpdate;
import de.danoeh.antennapod.core.menuhandler.MenuItemUtils;
import de.danoeh.antennapod.core.service.download.DownloadService;
-import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.download.AutoUpdateManager;
import de.danoeh.antennapod.event.FeedItemEvent;
@@ -442,18 +441,12 @@ public abstract class EpisodesListFragment extends Fragment
}
@NonNull
- protected List<FeedItem> loadData() {
- return DBReader.getRecentlyPublishedEpisodes(0, page * EPISODES_PER_PAGE, getFilter());
- }
+ protected abstract List<FeedItem> loadData();
@NonNull
- protected List<FeedItem> loadMoreData(int page) {
- return DBReader.getRecentlyPublishedEpisodes((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE, getFilter());
- }
+ protected abstract List<FeedItem> loadMoreData(int page);
- protected int loadTotalItemCount() {
- return DBReader.getTotalEpisodeCount(getFilter());
- }
+ protected abstract int loadTotalItemCount();
protected abstract FeedItemFilter getFilter();
diff --git a/app/src/main/res/menu/episodes.xml b/app/src/main/res/menu/episodes.xml
index 2841fc12f..358573c93 100644
--- a/app/src/main/res/menu/episodes.xml
+++ b/app/src/main/res/menu/episodes.xml
@@ -21,7 +21,7 @@
android:icon="@drawable/ic_filter"
android:menuCategory="container"
android:title="@string/filter"
- custom:showAsAction="always"/>
+ custom:showAsAction="ifRoom"/>
<item
android:id="@+id/action_favorites"
@@ -30,4 +30,11 @@
android:title="@string/favorite_episodes_label"
custom:showAsAction="always"/>
+ <item
+ android:id="@+id/episodes_sort"
+ android:title="@string/sort"
+ custom:showAsAction="never">
+ <menu />
+ </item>
+
</menu>