add sort order for albums and songs
This commit is contained in:
parent
a7d05ed9e5
commit
1ddbbf2fb0
6 changed files with 108 additions and 6 deletions
|
|
@ -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()) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue