Merge pull request #54 from CappielloAntonio/SortOrder

Allow sorting ascending/descending order for songs and albums
This commit is contained in:
dkanada 2020-08-29 12:52:18 +09:00 committed by GitHub
commit 6596bad8ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 108 additions and 6 deletions

View file

@ -207,12 +207,11 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
// TODO the API doesn't support artist sorting
if (currentFragment instanceof ArtistsFragment) {
menu.removeItem(R.id.action_sort_method);
menu.removeItem(R.id.action_sort_order);
} else {
setUpSortMethodMenu(absLibraryRecyclerViewCustomGridSizeFragment, menu.findItem(R.id.action_sort_method).getSubMenu());
setUpSortOrderMenu(absLibraryRecyclerViewCustomGridSizeFragment, menu.findItem(R.id.action_sort_order).getSubMenu());
}
// TODO implement sort order
menu.removeItem(R.id.action_sort_order);
} else {
menu.removeItem(R.id.action_grid_size);
menu.removeItem(R.id.action_colored_footers);
@ -252,6 +251,10 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
if (handleSortMethodMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
return true;
}
if (handleSortOrderMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
return true;
}
}
int id = item.getItemId();
@ -392,7 +395,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
}
private void setUpSortOrderMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortOrderMenu) {
String currentSortOrder = fragment.getSortMethod();
String currentSortOrder = fragment.getSortOrder();
sortOrderMenu.clear();
sortOrderMenu.add(0, R.id.action_sort_order_ascending, 0, R.string.sort_order_ascending)
@ -435,6 +438,26 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
return false;
}
private boolean handleSortOrderMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) {
String sortOrder = null;
switch (item.getItemId()) {
case R.id.action_sort_order_ascending:
sortOrder = SortOrder.ASCENDING;
break;
case R.id.action_sort_order_descending:
sortOrder = SortOrder.DESCENDING;
break;
}
if (sortOrder != null) {
item.setChecked(true);
fragment.setAndSaveSortOrder(sortOrder);
return true;
}
return false;
}
@Override
public boolean handleBackPress() {
if (cab != null && cab.isActive()) {

View file

@ -12,6 +12,7 @@ import com.dkanada.gramophone.util.Util;
public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extends RecyclerView.Adapter, L extends RecyclerView.LayoutManager, Q> extends AbsLibraryPagerRecyclerViewFragment<A, L, Q> {
private int gridSize;
private String sortMethod;
private String sortOrder;
private boolean usePaletteInitialized;
private boolean usePalette;
@ -54,6 +55,14 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
return sortMethod;
}
public final String getSortOrder() {
if (sortOrder == null) {
sortOrder = loadSortOrder();
}
return sortOrder;
}
public void setAndSaveGridSize(final int gridSize) {
int oldLayoutRes = getItemLayoutRes();
this.gridSize = gridSize;
@ -85,6 +94,13 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
invalidateAdapter();
}
public void setAndSaveSortOrder(final String sortOrder) {
this.sortOrder = sortOrder;
saveSortOrder(sortOrder);
setSortOrder(sortOrder);
invalidateAdapter();
}
public boolean canUsePalette() {
return getItemLayoutRes() == R.layout.item_grid;
}
@ -146,6 +162,12 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
protected abstract void setSortMethod(String sortMethod);
protected abstract String loadSortOrder();
protected abstract void saveSortOrder(String sortOrder);
protected abstract void setSortOrder(String sortOrder);
protected int getMaxGridSizeForList() {
if (isLandscape()) {
return getActivity().getResources().getInteger(R.integer.default_list_columns_land);

View file

@ -55,6 +55,7 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
query.setParentId(QueryUtil.currentLibrary.getId());
QueryUtil.applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod());
QueryUtil.applySortOrder(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortOrder());
return query;
}
@ -97,6 +98,20 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
protected void setSortMethod(String sortMethod) {
}
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getAlbumSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(getActivity()).setAlbumSortOrder(sortOrder);
}
@Override
protected void setSortOrder(String sortOrder) {
}
@Override
public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).getAlbumColoredFooters();

View file

@ -10,6 +10,7 @@ import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.artist.ArtistAdapter;
import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder;
import com.dkanada.gramophone.model.Artist;
import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil;
@ -109,6 +110,21 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
protected void setSortMethod(String sortMethod) {
}
@Override
protected String loadSortOrder() {
// TODO check artist support
return SortOrder.ASCENDING;
}
@Override
protected void saveSortOrder(String sortOrder) {
// not supported through API
}
@Override
protected void setSortOrder(String sortOrder) {
}
@Override
protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());

View file

@ -73,7 +73,8 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
query.setStartIndex(getAdapter().getItemCount());
query.setParentId(QueryUtil.currentLibrary.getId());
QueryUtil.applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod());
QueryUtil.applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortMethod());
QueryUtil.applySortOrder(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortOrder());
return query;
}
@ -117,6 +118,20 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
protected void setSortMethod(String sortMethod) {
}
@Override
protected String loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getSongSortOrder();
}
@Override
protected void saveSortOrder(String sortOrder) {
PreferenceUtil.getInstance(getActivity()).setSongSortOrder(sortOrder);
}
@Override
protected void setSortOrder(String sortOrder) {
}
@Override
protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity());

View file

@ -2,6 +2,7 @@ package com.dkanada.gramophone.util;
import com.dkanada.gramophone.App;
import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder;
import com.dkanada.gramophone.interfaces.MediaCallback;
import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.model.Artist;
@ -12,7 +13,6 @@ import com.dkanada.gramophone.model.Song;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.dto.BaseItemType;
import org.jellyfin.apiclient.model.entities.SortOrder;
import org.jellyfin.apiclient.model.querying.ArtistsQuery;
import org.jellyfin.apiclient.model.querying.ItemFields;
import org.jellyfin.apiclient.model.querying.ItemQuery;
@ -230,4 +230,15 @@ public class QueryUtil {
break;
}
}
public static void applySortOrder(ItemQuery query, String order) {
switch (order) {
case SortOrder.ASCENDING:
query.setSortOrder(org.jellyfin.apiclient.model.entities.SortOrder.Ascending);
break;
case SortOrder.DESCENDING:
query.setSortOrder(org.jellyfin.apiclient.model.entities.SortOrder.Descending);
break;
}
}
}