add sort order for albums and songs

This commit is contained in:
dkanada 2020-08-29 12:49:45 +09:00
commit 1ddbbf2fb0
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 // TODO the API doesn't support artist sorting
if (currentFragment instanceof ArtistsFragment) { if (currentFragment instanceof ArtistsFragment) {
menu.removeItem(R.id.action_sort_method); menu.removeItem(R.id.action_sort_method);
menu.removeItem(R.id.action_sort_order);
} else { } else {
setUpSortMethodMenu(absLibraryRecyclerViewCustomGridSizeFragment, menu.findItem(R.id.action_sort_method).getSubMenu()); 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 { } else {
menu.removeItem(R.id.action_grid_size); menu.removeItem(R.id.action_grid_size);
menu.removeItem(R.id.action_colored_footers); menu.removeItem(R.id.action_colored_footers);
@ -252,6 +251,10 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
if (handleSortMethodMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) { if (handleSortMethodMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
return true; return true;
} }
if (handleSortOrderMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
return true;
}
} }
int id = item.getItemId(); int id = item.getItemId();
@ -392,7 +395,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
} }
private void setUpSortOrderMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortOrderMenu) { private void setUpSortOrderMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortOrderMenu) {
String currentSortOrder = fragment.getSortMethod(); String currentSortOrder = fragment.getSortOrder();
sortOrderMenu.clear(); sortOrderMenu.clear();
sortOrderMenu.add(0, R.id.action_sort_order_ascending, 0, R.string.sort_order_ascending) 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; 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 @Override
public boolean handleBackPress() { public boolean handleBackPress() {
if (cab != null && cab.isActive()) { 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> { public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extends RecyclerView.Adapter, L extends RecyclerView.LayoutManager, Q> extends AbsLibraryPagerRecyclerViewFragment<A, L, Q> {
private int gridSize; private int gridSize;
private String sortMethod; private String sortMethod;
private String sortOrder;
private boolean usePaletteInitialized; private boolean usePaletteInitialized;
private boolean usePalette; private boolean usePalette;
@ -54,6 +55,14 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
return sortMethod; return sortMethod;
} }
public final String getSortOrder() {
if (sortOrder == null) {
sortOrder = loadSortOrder();
}
return sortOrder;
}
public void setAndSaveGridSize(final int gridSize) { public void setAndSaveGridSize(final int gridSize) {
int oldLayoutRes = getItemLayoutRes(); int oldLayoutRes = getItemLayoutRes();
this.gridSize = gridSize; this.gridSize = gridSize;
@ -85,6 +94,13 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
invalidateAdapter(); invalidateAdapter();
} }
public void setAndSaveSortOrder(final String sortOrder) {
this.sortOrder = sortOrder;
saveSortOrder(sortOrder);
setSortOrder(sortOrder);
invalidateAdapter();
}
public boolean canUsePalette() { public boolean canUsePalette() {
return getItemLayoutRes() == R.layout.item_grid; return getItemLayoutRes() == R.layout.item_grid;
} }
@ -146,6 +162,12 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
protected abstract void setSortMethod(String sortMethod); 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() { protected int getMaxGridSizeForList() {
if (isLandscape()) { if (isLandscape()) {
return getActivity().getResources().getInteger(R.integer.default_list_columns_land); 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()); query.setParentId(QueryUtil.currentLibrary.getId());
QueryUtil.applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod()); QueryUtil.applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod());
QueryUtil.applySortOrder(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortOrder());
return query; return query;
} }
@ -97,6 +98,20 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
protected void setSortMethod(String sortMethod) { 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 @Override
public boolean loadUsePalette() { public boolean loadUsePalette() {
return PreferenceUtil.getInstance(getActivity()).getAlbumColoredFooters(); 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.R;
import com.dkanada.gramophone.adapter.artist.ArtistAdapter; import com.dkanada.gramophone.adapter.artist.ArtistAdapter;
import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder;
import com.dkanada.gramophone.model.Artist; import com.dkanada.gramophone.model.Artist;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil; import com.dkanada.gramophone.util.QueryUtil;
@ -109,6 +110,21 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
protected void setSortMethod(String sortMethod) { 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 @Override
protected int loadGridSize() { protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity()); return PreferenceUtil.getInstance(getActivity()).getArtistGridSize(getActivity());

View file

@ -73,7 +73,8 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
query.setStartIndex(getAdapter().getItemCount()); query.setStartIndex(getAdapter().getItemCount());
query.setParentId(QueryUtil.currentLibrary.getId()); 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; return query;
} }
@ -117,6 +118,20 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
protected void setSortMethod(String sortMethod) { 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 @Override
protected int loadGridSize() { protected int loadGridSize() {
return PreferenceUtil.getInstance(getActivity()).getSongGridSize(getActivity()); 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.App;
import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder;
import com.dkanada.gramophone.interfaces.MediaCallback; import com.dkanada.gramophone.interfaces.MediaCallback;
import com.dkanada.gramophone.model.Album; import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.model.Artist; 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.interaction.Response;
import org.jellyfin.apiclient.model.dto.BaseItemDto; import org.jellyfin.apiclient.model.dto.BaseItemDto;
import org.jellyfin.apiclient.model.dto.BaseItemType; 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.ArtistsQuery;
import org.jellyfin.apiclient.model.querying.ItemFields; import org.jellyfin.apiclient.model.querying.ItemFields;
import org.jellyfin.apiclient.model.querying.ItemQuery; import org.jellyfin.apiclient.model.querying.ItemQuery;
@ -230,4 +230,15 @@ public class QueryUtil {
break; 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;
}
}
} }