Honor sort in episode list view in Android Auto (#6756)
This commit is contained in:
parent
0bb4870820
commit
c7d6cd358c
@ -1,7 +1,5 @@
|
|||||||
package de.danoeh.antennapod.fragment;
|
package de.danoeh.antennapod.fragment;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@ -14,6 +12,8 @@ import de.danoeh.antennapod.dialog.AllEpisodesFilterDialog;
|
|||||||
import de.danoeh.antennapod.model.feed.FeedItem;
|
import de.danoeh.antennapod.model.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.model.feed.FeedItemFilter;
|
import de.danoeh.antennapod.model.feed.FeedItemFilter;
|
||||||
import de.danoeh.antennapod.model.feed.SortOrder;
|
import de.danoeh.antennapod.model.feed.SortOrder;
|
||||||
|
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
@ -26,10 +26,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class AllEpisodesFragment extends EpisodesListFragment {
|
public class AllEpisodesFragment extends EpisodesListFragment {
|
||||||
public static final String TAG = "EpisodesFragment";
|
public static final String TAG = "EpisodesFragment";
|
||||||
private static final String PREF_NAME = "PrefAllEpisodesFragment";
|
public static final String PREF_NAME = "PrefAllEpisodesFragment";
|
||||||
private static final String PREF_FILTER = "filter";
|
|
||||||
public static final String PREF_SORT = "prefEpisodesSort";
|
|
||||||
private SharedPreferences prefs;
|
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
@ -40,7 +37,6 @@ public class AllEpisodesFragment extends EpisodesListFragment {
|
|||||||
toolbar.setTitle(R.string.episodes_label);
|
toolbar.setTitle(R.string.episodes_label);
|
||||||
updateToolbar();
|
updateToolbar();
|
||||||
updateFilterUi();
|
updateFilterUi();
|
||||||
prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
|
|
||||||
txtvInformation.setOnClickListener(
|
txtvInformation.setOnClickListener(
|
||||||
v -> AllEpisodesFilterDialog.newInstance(getFilter()).show(getChildFragmentManager(), null));
|
v -> AllEpisodesFilterDialog.newInstance(getFilter()).show(getChildFragmentManager(), null));
|
||||||
return root;
|
return root;
|
||||||
@ -61,13 +57,15 @@ public class AllEpisodesFragment extends EpisodesListFragment {
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
protected List<FeedItem> loadData() {
|
protected List<FeedItem> loadData() {
|
||||||
return DBReader.getEpisodes(0, page * EPISODES_PER_PAGE, getFilter(), getSortOrder());
|
return DBReader.getEpisodes(0, page * EPISODES_PER_PAGE, getFilter(),
|
||||||
|
UserPreferences.getAllEpisodesSortOrder());
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
protected List<FeedItem> loadMoreData(int page) {
|
protected List<FeedItem> loadMoreData(int page) {
|
||||||
return DBReader.getEpisodes((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE, getFilter(), getSortOrder());
|
return DBReader.getEpisodes((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE, getFilter(),
|
||||||
|
UserPreferences.getAllEpisodesSortOrder());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -77,8 +75,7 @@ public class AllEpisodesFragment extends EpisodesListFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected FeedItemFilter getFilter() {
|
protected FeedItemFilter getFilter() {
|
||||||
SharedPreferences prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
|
return new FeedItemFilter(UserPreferences.getPrefFilterAllEpisodes());
|
||||||
return new FeedItemFilter(prefs.getString(PREF_FILTER, ""));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -119,13 +116,13 @@ public class AllEpisodesFragment extends EpisodesListFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void saveSortOrderAndRefresh(SortOrder type) {
|
private void saveSortOrderAndRefresh(SortOrder type) {
|
||||||
prefs.edit().putString(PREF_SORT, "" + type.code).apply();
|
UserPreferences.setAllEpisodesSortOrder(type);
|
||||||
loadItems();
|
loadItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onFilterChanged(AllEpisodesFilterDialog.AllEpisodesFilterChangedEvent event) {
|
public void onFilterChanged(AllEpisodesFilterDialog.AllEpisodesFilterChangedEvent event) {
|
||||||
prefs.edit().putString(PREF_FILTER, StringUtils.join(event.filterValues, ",")).apply();
|
UserPreferences.setPrefFilterAllEpisodes(StringUtils.join(event.filterValues, ","));
|
||||||
updateFilterUi();
|
updateFilterUi();
|
||||||
page = 1;
|
page = 1;
|
||||||
loadItems();
|
loadItems();
|
||||||
@ -143,8 +140,4 @@ public class AllEpisodesFragment extends EpisodesListFragment {
|
|||||||
toolbar.getMenu().findItem(R.id.action_favorites).setIcon(
|
toolbar.getMenu().findItem(R.id.action_favorites).setIcon(
|
||||||
getFilter().showIsFavorite ? R.drawable.ic_star : R.drawable.ic_star_border);
|
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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -6,12 +6,15 @@ import android.view.KeyEvent;
|
|||||||
import androidx.core.app.NotificationManagerCompat;
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import de.danoeh.antennapod.BuildConfig;
|
import de.danoeh.antennapod.BuildConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
|
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
|
||||||
import de.danoeh.antennapod.error.CrashReportWriter;
|
import de.danoeh.antennapod.error.CrashReportWriter;
|
||||||
|
import de.danoeh.antennapod.fragment.AllEpisodesFragment;
|
||||||
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
import de.danoeh.antennapod.storage.preferences.UserPreferences;
|
||||||
import de.danoeh.antennapod.storage.preferences.UserPreferences.EnqueueLocation;
|
import de.danoeh.antennapod.storage.preferences.UserPreferences.EnqueueLocation;
|
||||||
import de.danoeh.antennapod.fragment.QueueFragment;
|
import de.danoeh.antennapod.fragment.QueueFragment;
|
||||||
@ -149,5 +152,19 @@ public class PreferenceUpgrader {
|
|||||||
if (oldVersion < 3020000) {
|
if (oldVersion < 3020000) {
|
||||||
NotificationManagerCompat.from(context).deleteNotificationChannel("auto_download");
|
NotificationManagerCompat.from(context).deleteNotificationChannel("auto_download");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oldVersion < 3030000) {
|
||||||
|
SharedPreferences allEpisodesPreferences =
|
||||||
|
context.getSharedPreferences(AllEpisodesFragment.PREF_NAME, Context.MODE_PRIVATE);
|
||||||
|
String oldEpisodeSort = allEpisodesPreferences.getString(UserPreferences.PREF_SORT_ALL_EPISODES, "");
|
||||||
|
if (!StringUtils.isAllEmpty(oldEpisodeSort)) {
|
||||||
|
prefs.edit().putString(UserPreferences.PREF_SORT_ALL_EPISODES, oldEpisodeSort).apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
String oldEpisodeFilter = allEpisodesPreferences.getString("filter", "");
|
||||||
|
if (!StringUtils.isAllEmpty(oldEpisodeFilter)) {
|
||||||
|
prefs.edit().putString(UserPreferences.PREF_FILTER_ALL_EPISODES, oldEpisodeFilter).apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,6 @@ import de.danoeh.antennapod.model.feed.FeedItem;
|
|||||||
import de.danoeh.antennapod.model.feed.FeedItemFilter;
|
import de.danoeh.antennapod.model.feed.FeedItemFilter;
|
||||||
import de.danoeh.antennapod.model.feed.FeedMedia;
|
import de.danoeh.antennapod.model.feed.FeedMedia;
|
||||||
import de.danoeh.antennapod.model.feed.FeedPreferences;
|
import de.danoeh.antennapod.model.feed.FeedPreferences;
|
||||||
import de.danoeh.antennapod.model.feed.SortOrder;
|
|
||||||
import de.danoeh.antennapod.model.playback.MediaType;
|
import de.danoeh.antennapod.model.playback.MediaType;
|
||||||
import de.danoeh.antennapod.model.playback.Playable;
|
import de.danoeh.antennapod.model.playback.Playable;
|
||||||
import de.danoeh.antennapod.playback.base.PlaybackServiceMediaPlayer;
|
import de.danoeh.antennapod.playback.base.PlaybackServiceMediaPlayer;
|
||||||
@ -429,10 +428,11 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
|||||||
new FeedItemFilter(FeedItemFilter.DOWNLOADED), UserPreferences.getDownloadsSortedOrder());
|
new FeedItemFilter(FeedItemFilter.DOWNLOADED), UserPreferences.getDownloadsSortedOrder());
|
||||||
} else if (parentId.equals(getResources().getString(R.string.episodes_label))) {
|
} else if (parentId.equals(getResources().getString(R.string.episodes_label))) {
|
||||||
feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED,
|
feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED,
|
||||||
new FeedItemFilter(FeedItemFilter.UNPLAYED), SortOrder.DATE_NEW_OLD);
|
new FeedItemFilter(FeedItemFilter.UNPLAYED), UserPreferences.getAllEpisodesSortOrder());
|
||||||
} else if (parentId.startsWith("FeedId:")) {
|
} else if (parentId.startsWith("FeedId:")) {
|
||||||
long feedId = Long.parseLong(parentId.split(":")[1]);
|
long feedId = Long.parseLong(parentId.split(":")[1]);
|
||||||
feedItems = DBReader.getFeedItemList(DBReader.getFeed(feedId));
|
Feed feed = DBReader.getFeed(feedId);
|
||||||
|
feedItems = DBReader.getFeedItemList(feed, FeedItemFilter.unfiltered(), feed.getSortOrder());
|
||||||
} else if (parentId.equals(getString(R.string.recently_played_episodes))) {
|
} else if (parentId.equals(getString(R.string.recently_played_episodes))) {
|
||||||
Playable playable = PlaybackPreferences.createInstanceFromPreferences(this);
|
Playable playable = PlaybackPreferences.createInstanceFromPreferences(this);
|
||||||
if (playable instanceof FeedMedia) {
|
if (playable instanceof FeedMedia) {
|
||||||
|
@ -15,9 +15,9 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.core.util.FeedItemPermutors;
|
||||||
import de.danoeh.antennapod.core.util.LongList;
|
import de.danoeh.antennapod.core.util.LongList;
|
||||||
import de.danoeh.antennapod.core.util.comparator.DownloadResultComparator;
|
import de.danoeh.antennapod.core.util.comparator.DownloadResultComparator;
|
||||||
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
|
|
||||||
import de.danoeh.antennapod.core.util.comparator.PlaybackCompletionDateComparator;
|
import de.danoeh.antennapod.core.util.comparator.PlaybackCompletionDateComparator;
|
||||||
import de.danoeh.antennapod.model.feed.Chapter;
|
import de.danoeh.antennapod.model.feed.Chapter;
|
||||||
import de.danoeh.antennapod.model.feed.Feed;
|
import de.danoeh.antennapod.model.feed.Feed;
|
||||||
@ -170,13 +170,18 @@ public final class DBReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<FeedItem> getFeedItemList(final Feed feed, final FeedItemFilter filter) {
|
public static List<FeedItem> getFeedItemList(final Feed feed, final FeedItemFilter filter) {
|
||||||
|
return getFeedItemList(feed, filter, SortOrder.DATE_NEW_OLD);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<FeedItem> getFeedItemList(final Feed feed, final FeedItemFilter filter, SortOrder sortOrder) {
|
||||||
Log.d(TAG, "getFeedItemList() called with: " + "feed = [" + feed + "]");
|
Log.d(TAG, "getFeedItemList() called with: " + "feed = [" + feed + "]");
|
||||||
|
|
||||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||||
adapter.open();
|
adapter.open();
|
||||||
try (Cursor cursor = adapter.getItemsOfFeedCursor(feed, filter)) {
|
try (Cursor cursor = adapter.getItemsOfFeedCursor(feed, filter)) {
|
||||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||||
Collections.sort(items, new FeedItemPubdateComparator());
|
FeedItemPermutors.getPermutor(sortOrder).reorder(items);
|
||||||
|
feed.setItems(items);
|
||||||
for (FeedItem item : items) {
|
for (FeedItem item : items) {
|
||||||
item.setFeed(feed);
|
item.setFeed(feed);
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,10 @@ public class UserPreferences {
|
|||||||
private static final String PREF_DOWNLOADS_SORTED_ORDER = "prefDownloadSortedOrder";
|
private static final String PREF_DOWNLOADS_SORTED_ORDER = "prefDownloadSortedOrder";
|
||||||
private static final String PREF_INBOX_SORTED_ORDER = "prefInboxSortedOrder";
|
private static final String PREF_INBOX_SORTED_ORDER = "prefInboxSortedOrder";
|
||||||
|
|
||||||
|
// Episode
|
||||||
|
public static final String PREF_SORT_ALL_EPISODES = "prefEpisodesSort";
|
||||||
|
public static final String PREF_FILTER_ALL_EPISODES = "prefEpisodesFilter";
|
||||||
|
|
||||||
// Playback
|
// Playback
|
||||||
public static final String PREF_PAUSE_ON_HEADSET_DISCONNECT = "prefPauseOnHeadsetDisconnect";
|
public static final String PREF_PAUSE_ON_HEADSET_DISCONNECT = "prefPauseOnHeadsetDisconnect";
|
||||||
public static final String PREF_UNPAUSE_ON_HEADSET_RECONNECT = "prefUnpauseOnHeadsetReconnect";
|
public static final String PREF_UNPAUSE_ON_HEADSET_RECONNECT = "prefUnpauseOnHeadsetReconnect";
|
||||||
@ -867,4 +871,21 @@ public class UserPreferences {
|
|||||||
public static boolean shouldShowSubscriptionTitle() {
|
public static boolean shouldShowSubscriptionTitle() {
|
||||||
return prefs.getBoolean(PREF_SUBSCRIPTION_TITLE, false);
|
return prefs.getBoolean(PREF_SUBSCRIPTION_TITLE, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setAllEpisodesSortOrder(SortOrder s) {
|
||||||
|
prefs.edit().putString(PREF_SORT_ALL_EPISODES, "" + s.code).apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SortOrder getAllEpisodesSortOrder() {
|
||||||
|
return SortOrder.fromCodeString(prefs.getString(PREF_SORT_ALL_EPISODES,
|
||||||
|
"" + SortOrder.DATE_NEW_OLD.code));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getPrefFilterAllEpisodes() {
|
||||||
|
return prefs.getString(PREF_FILTER_ALL_EPISODES, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setPrefFilterAllEpisodes(String filter) {
|
||||||
|
prefs.edit().putString(PREF_FILTER_ALL_EPISODES, filter).apply();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user