use enums for sort method and order

This commit is contained in:
dkanada 2021-05-23 21:52:01 +09:00
commit 85704bb95b
15 changed files with 107 additions and 155 deletions

View file

@ -21,7 +21,6 @@ import com.dkanada.gramophone.adapter.base.MediaEntryViewHolder;
import com.dkanada.gramophone.glide.CustomGlideRequest; import com.dkanada.gramophone.glide.CustomGlideRequest;
import com.dkanada.gramophone.glide.CustomPaletteTarget; import com.dkanada.gramophone.glide.CustomPaletteTarget;
import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.helper.menu.SongsMenuHelper;
import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Album; import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.util.MusicUtil; import com.dkanada.gramophone.util.MusicUtil;
@ -187,17 +186,17 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
public String getSectionName(int position) { public String getSectionName(int position) {
@Nullable String sectionName = null; @Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getAlbumSortMethod()) { switch (PreferenceUtil.getInstance(activity).getAlbumSortMethod()) {
case SortMethod.NAME: case NAME:
sectionName = dataSet.get(position).title; sectionName = dataSet.get(position).title;
break; break;
case SortMethod.ARTIST: case ARTIST:
sectionName = dataSet.get(position).artistName; sectionName = dataSet.get(position).artistName;
break; break;
case SortMethod.YEAR: case YEAR:
return MusicUtil.getYearString(dataSet.get(position).year); return MusicUtil.getYearString(dataSet.get(position).year);
case SortMethod.ADDED: case ADDED:
return ""; return "";
case SortMethod.RANDOM: case RANDOM:
return activity.getResources().getString(R.string.random); return activity.getResources().getString(R.string.random);
} }

View file

@ -23,7 +23,6 @@ import com.dkanada.gramophone.glide.CustomPaletteTarget;
import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.helper.MusicPlayerRemote;
import com.dkanada.gramophone.helper.menu.SongMenuHelper; import com.dkanada.gramophone.helper.menu.SongMenuHelper;
import com.dkanada.gramophone.helper.menu.SongsMenuHelper; import com.dkanada.gramophone.helper.menu.SongsMenuHelper;
import com.dkanada.gramophone.helper.sort.SortMethod;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.model.Album; import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.model.Song;
@ -191,20 +190,20 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
@Nullable String sectionName = null; @Nullable String sectionName = null;
switch (PreferenceUtil.getInstance(activity).getSongSortMethod()) { switch (PreferenceUtil.getInstance(activity).getSongSortMethod()) {
case SortMethod.NAME: case NAME:
sectionName = dataSet.get(position).title; sectionName = dataSet.get(position).title;
break; break;
case SortMethod.ALBUM: case ALBUM:
sectionName = dataSet.get(position).albumName; sectionName = dataSet.get(position).albumName;
break; break;
case SortMethod.ARTIST: case ARTIST:
sectionName = dataSet.get(position).artistName; sectionName = dataSet.get(position).artistName;
break; break;
case SortMethod.YEAR: case YEAR:
return MusicUtil.getYearString(dataSet.get(position).year); return MusicUtil.getYearString(dataSet.get(position).year);
case SortMethod.ADDED: case ADDED:
return ""; return "";
case SortMethod.RANDOM: case RANDOM:
return activity.getResources().getString(R.string.random); return activity.getResources().getString(R.string.random);
} }

View file

@ -11,7 +11,6 @@ import android.view.MenuItem;
import android.view.SubMenu; import android.view.SubMenu;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
@ -19,7 +18,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.dkanada.gramophone.databinding.FragmentLibraryBinding; import com.dkanada.gramophone.databinding.FragmentLibraryBinding;
import com.dkanada.gramophone.fragments.mainactivity.library.pager.FavoritesFragment;
import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.helper.MusicPlayerRemote;
import com.dkanada.gramophone.util.ShortcutUtil; import com.dkanada.gramophone.util.ShortcutUtil;
import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.AppBarLayout;
@ -31,8 +29,8 @@ import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.MusicLibraryPagerAdapter; import com.dkanada.gramophone.adapter.MusicLibraryPagerAdapter;
import com.dkanada.gramophone.dialogs.CreatePlaylistDialog; import com.dkanada.gramophone.dialogs.CreatePlaylistDialog;
import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.model.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder; import com.dkanada.gramophone.model.SortOrder;
import com.dkanada.gramophone.interfaces.CabHolder; import com.dkanada.gramophone.interfaces.CabHolder;
import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.activities.MainActivity;
import com.dkanada.gramophone.activities.SearchActivity; import com.dkanada.gramophone.activities.SearchActivity;
@ -343,7 +341,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
} }
private void setUpSortMethodMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortMethodMenu) { private void setUpSortMethodMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortMethodMenu) {
String currentSortMethod = fragment.getSortMethod(); SortMethod currentSortMethod = fragment.getSortMethod();
sortMethodMenu.clear(); sortMethodMenu.clear();
if (fragment instanceof AlbumsFragment) { if (fragment instanceof AlbumsFragment) {
@ -357,7 +355,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
.setChecked(currentSortMethod.equals(SortMethod.ADDED)); .setChecked(currentSortMethod.equals(SortMethod.ADDED));
sortMethodMenu.add(0, R.id.action_sort_method_random, 4, R.string.sort_method_random) sortMethodMenu.add(0, R.id.action_sort_method_random, 4, R.string.sort_method_random)
.setChecked(currentSortMethod.equals(SortMethod.RANDOM)); .setChecked(currentSortMethod.equals(SortMethod.RANDOM));
} else if (fragment instanceof SongsFragment || fragment instanceof FavoritesFragment) { } else if (fragment instanceof SongsFragment) {
sortMethodMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_method_name) sortMethodMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_method_name)
.setChecked(currentSortMethod.equals(SortMethod.NAME)); .setChecked(currentSortMethod.equals(SortMethod.NAME));
sortMethodMenu.add(0, R.id.action_sort_method_album, 1, R.string.sort_method_album) sortMethodMenu.add(0, R.id.action_sort_method_album, 1, R.string.sort_method_album)
@ -376,7 +374,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.getSortOrder(); SortOrder 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)
@ -388,7 +386,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
} }
private boolean handleSortMethodMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) { private boolean handleSortMethodMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) {
String sortMethod = null; SortMethod sortMethod = null;
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_sort_method_name: case R.id.action_sort_method_name:
sortMethod = SortMethod.NAME; sortMethod = SortMethod.NAME;
@ -420,7 +418,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
} }
private boolean handleSortOrderMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) { private boolean handleSortOrderMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) {
String sortOrder = null; SortOrder sortOrder = null;
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_sort_order_ascending: case R.id.action_sort_order_ascending:
sortOrder = SortOrder.ASCENDING; sortOrder = SortOrder.ASCENDING;

View file

@ -8,12 +8,14 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.model.SortMethod;
import com.dkanada.gramophone.model.SortOrder;
import com.dkanada.gramophone.util.Util; 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 SortMethod sortMethod;
private String sortOrder; private SortOrder sortOrder;
private boolean usePaletteInitialized; private boolean usePaletteInitialized;
private boolean usePalette; private boolean usePalette;
@ -48,7 +50,7 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
return usePalette; return usePalette;
} }
public final String getSortMethod() { public final SortMethod getSortMethod() {
if (sortMethod == null) { if (sortMethod == null) {
sortMethod = loadSortMethod(); sortMethod = loadSortMethod();
} }
@ -56,7 +58,7 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
return sortMethod; return sortMethod;
} }
public final String getSortOrder() { public final SortOrder getSortOrder() {
if (sortOrder == null) { if (sortOrder == null) {
sortOrder = loadSortOrder(); sortOrder = loadSortOrder();
} }
@ -88,14 +90,14 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
setUsePalette(usePalette); setUsePalette(usePalette);
} }
public void setAndSaveSortMethod(final String sortMethod) { public void setAndSaveSortMethod(final SortMethod sortMethod) {
this.sortMethod = sortMethod; this.sortMethod = sortMethod;
saveSortMethod(sortMethod); saveSortMethod(sortMethod);
setSortMethod(sortMethod); setSortMethod(sortMethod);
invalidateAdapter(); invalidateAdapter();
} }
public void setAndSaveSortOrder(final String sortOrder) { public void setAndSaveSortOrder(final SortOrder sortOrder) {
this.sortOrder = sortOrder; this.sortOrder = sortOrder;
saveSortOrder(sortOrder); saveSortOrder(sortOrder);
setSortOrder(sortOrder); setSortOrder(sortOrder);
@ -157,17 +159,17 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
protected abstract void setGridSize(int gridSize); protected abstract void setGridSize(int gridSize);
protected abstract String loadSortMethod(); protected abstract SortMethod loadSortMethod();
protected abstract void saveSortMethod(String sortMethod); protected abstract void saveSortMethod(SortMethod sortMethod);
protected abstract void setSortMethod(String sortMethod); protected abstract void setSortMethod(SortMethod sortMethod);
protected abstract String loadSortOrder(); protected abstract SortOrder loadSortOrder();
protected abstract void saveSortOrder(String sortOrder); protected abstract void saveSortOrder(SortOrder sortOrder);
protected abstract void setSortOrder(String sortOrder); protected abstract void setSortOrder(SortOrder sortOrder);
protected int getMaxGridSizeForList() { protected int getMaxGridSizeForList() {
if (isLandscape()) { if (isLandscape()) {

View file

@ -9,6 +9,8 @@ import com.dkanada.gramophone.App;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.album.AlbumAdapter; import com.dkanada.gramophone.adapter.album.AlbumAdapter;
import com.dkanada.gramophone.model.Album; import com.dkanada.gramophone.model.Album;
import com.dkanada.gramophone.model.SortMethod;
import com.dkanada.gramophone.model.SortOrder;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil; import com.dkanada.gramophone.util.QueryUtil;
@ -54,8 +56,8 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
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()); query.setSortBy(new String[]{PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod().getApi()});
QueryUtil.applySortOrder(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortOrder()); query.setSortOrder(PreferenceUtil.getInstance(App.getInstance()).getAlbumSortOrder().getApi());
return query; return query;
} }
@ -89,31 +91,31 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
} }
@Override @Override
protected String loadSortMethod() { protected SortMethod loadSortMethod() {
return PreferenceUtil.getInstance(getActivity()).getAlbumSortMethod(); return PreferenceUtil.getInstance(getActivity()).getAlbumSortMethod();
} }
@Override @Override
protected void saveSortMethod(String sortMethod) { protected void saveSortMethod(SortMethod sortMethod) {
PreferenceUtil.getInstance(getActivity()).setAlbumSortMethod(sortMethod); PreferenceUtil.getInstance(getActivity()).setAlbumSortMethod(sortMethod);
} }
@Override @Override
protected void setSortMethod(String sortMethod) { protected void setSortMethod(SortMethod sortMethod) {
} }
@Override @Override
protected String loadSortOrder() { protected SortOrder loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getAlbumSortOrder(); return PreferenceUtil.getInstance(getActivity()).getAlbumSortOrder();
} }
@Override @Override
protected void saveSortOrder(String sortOrder) { protected void saveSortOrder(SortOrder sortOrder) {
PreferenceUtil.getInstance(getActivity()).setAlbumSortOrder(sortOrder); PreferenceUtil.getInstance(getActivity()).setAlbumSortOrder(sortOrder);
} }
@Override @Override
protected void setSortOrder(String sortOrder) { protected void setSortOrder(SortOrder sortOrder) {
} }
@Override @Override

View file

@ -9,8 +9,8 @@ import androidx.recyclerview.widget.GridLayoutManager;
import com.dkanada.gramophone.App; 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.model.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder; import com.dkanada.gramophone.model.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;
@ -101,31 +101,31 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
} }
@Override @Override
protected String loadSortMethod() { protected SortMethod loadSortMethod() {
return SortMethod.NAME; return SortMethod.NAME;
} }
@Override @Override
protected void saveSortMethod(String sortMethod) { protected void saveSortMethod(SortMethod sortMethod) {
// not supported through API // not supported through API
} }
@Override @Override
protected void setSortMethod(String sortMethod) { protected void setSortMethod(SortMethod sortMethod) {
} }
@Override @Override
protected String loadSortOrder() { protected SortOrder loadSortOrder() {
return SortOrder.ASCENDING; return SortOrder.ASCENDING;
} }
@Override @Override
protected void saveSortOrder(String sortOrder) { protected void saveSortOrder(SortOrder sortOrder) {
// not supported through API // not supported through API
} }
@Override @Override
protected void setSortOrder(String sortOrder) { protected void setSortOrder(SortOrder sortOrder) {
} }
@Override @Override

View file

@ -12,19 +12,11 @@ public class FavoritesFragment extends SongsFragment {
@NonNull @NonNull
@Override @Override
protected ItemQuery createQuery() { protected ItemQuery createQuery() {
ItemQuery query = new ItemQuery(); ItemQuery query = super.createQuery();
query.setIncludeItemTypes(new String[]{"Audio"}); // the only difference from the songs fragment is the favorite filter
query.setFields(new ItemFields[]{ItemFields.MediaSources});
query.setUserId(App.getApiClient().getCurrentUserId());
query.setRecursive(true);
query.setLimit(PreferenceUtil.getInstance(App.getInstance()).getPageSize());
query.setStartIndex(getAdapter().getItemCount());
query.setParentId(QueryUtil.currentLibrary.getId());
query.setFilters(new ItemFilter[]{ItemFilter.IsFavorite}); query.setFilters(new ItemFilter[]{ItemFilter.IsFavorite});
QueryUtil.applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortMethod());
QueryUtil.applySortOrder(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortOrder());
return query; return query;
} }
} }

View file

@ -10,6 +10,8 @@ import com.dkanada.gramophone.R;
import com.dkanada.gramophone.adapter.song.ShuffleButtonSongAdapter; import com.dkanada.gramophone.adapter.song.ShuffleButtonSongAdapter;
import com.dkanada.gramophone.adapter.song.SongAdapter; import com.dkanada.gramophone.adapter.song.SongAdapter;
import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.model.Song;
import com.dkanada.gramophone.model.SortMethod;
import com.dkanada.gramophone.model.SortOrder;
import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.PreferenceUtil;
import com.dkanada.gramophone.util.QueryUtil; import com.dkanada.gramophone.util.QueryUtil;
@ -76,8 +78,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()).getSongSortMethod()); query.setSortBy(new String[]{PreferenceUtil.getInstance(App.getInstance()).getSongSortMethod().getApi()});
QueryUtil.applySortOrder(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortOrder()); query.setSortOrder(PreferenceUtil.getInstance(App.getInstance()).getSongSortOrder().getApi());
return query; return query;
} }
@ -112,31 +114,31 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
} }
@Override @Override
protected String loadSortMethod() { protected SortMethod loadSortMethod() {
return PreferenceUtil.getInstance(getActivity()).getSongSortMethod(); return PreferenceUtil.getInstance(getActivity()).getSongSortMethod();
} }
@Override @Override
protected void saveSortMethod(String sortMethod) { protected void saveSortMethod(SortMethod sortMethod) {
PreferenceUtil.getInstance(getActivity()).setSongSortMethod(sortMethod); PreferenceUtil.getInstance(getActivity()).setSongSortMethod(sortMethod);
} }
@Override @Override
protected void setSortMethod(String sortMethod) { protected void setSortMethod(SortMethod sortMethod) {
} }
@Override @Override
protected String loadSortOrder() { protected SortOrder loadSortOrder() {
return PreferenceUtil.getInstance(getActivity()).getSongSortOrder(); return PreferenceUtil.getInstance(getActivity()).getSongSortOrder();
} }
@Override @Override
protected void saveSortOrder(String sortOrder) { protected void saveSortOrder(SortOrder sortOrder) {
PreferenceUtil.getInstance(getActivity()).setSongSortOrder(sortOrder); PreferenceUtil.getInstance(getActivity()).setSongSortOrder(sortOrder);
} }
@Override @Override
protected void setSortOrder(String sortOrder) { protected void setSortOrder(SortOrder sortOrder) {
} }
@Override @Override

View file

@ -1,11 +0,0 @@
package com.dkanada.gramophone.helper.sort;
public class SortMethod {
public static final String NAME = "NAME";
public static final String ALBUM = "ALBUM";
public static final String ARTIST = "ARTIST";
public static final String YEAR = "YEAR";
public static final String ADDED = "ADDED";
public static final String RANDOM = "RANDOM";
public static final String COUNT = "COUNT";
}

View file

@ -1,6 +0,0 @@
package com.dkanada.gramophone.helper.sort;
public class SortOrder {
public static final String ASCENDING = "ASCENDING";
public static final String DESCENDING = "DESCENDING";
}

View file

@ -0,0 +1,11 @@
package com.dkanada.gramophone.model
enum class SortMethod(val api: String) {
NAME("SortName"),
ALBUM("Album"),
ARTIST("AlbumArtist"),
YEAR("ProductionYear"),
ADDED("DateCreated"),
RANDOM("Random"),
COUNT("PlayCount");
}

View file

@ -0,0 +1,8 @@
package com.dkanada.gramophone.model
import org.jellyfin.apiclient.model.entities.SortOrder as Order
enum class SortOrder(val api: Order) {
ASCENDING(Order.Ascending),
DESCENDING(Order.Descending);
}

View file

@ -11,8 +11,8 @@ import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.dkanada.gramophone.model.Theme; import com.dkanada.gramophone.model.Theme;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.helper.sort.SortMethod; import com.dkanada.gramophone.model.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder; import com.dkanada.gramophone.model.SortOrder;
import com.dkanada.gramophone.model.CategoryInfo; import com.dkanada.gramophone.model.CategoryInfo;
import com.dkanada.gramophone.model.Codec; import com.dkanada.gramophone.model.Codec;
import com.dkanada.gramophone.interfaces.base.PreferenceMigration; import com.dkanada.gramophone.interfaces.base.PreferenceMigration;
@ -227,43 +227,43 @@ public final class PreferenceUtil {
return mPreferences.getBoolean(BLUR_ALBUM_COVER, true); return mPreferences.getBoolean(BLUR_ALBUM_COVER, true);
} }
public final String getAlbumSortOrder() { public final SortOrder getAlbumSortOrder() {
return mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.DESCENDING); return SortOrder.valueOf(mPreferences.getString(ALBUM_SORT_ORDER, SortOrder.DESCENDING.toString()));
} }
public void setAlbumSortOrder(final String sortOrder) { public void setAlbumSortOrder(SortOrder sortOrder) {
final SharedPreferences.Editor editor = mPreferences.edit(); final SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(ALBUM_SORT_ORDER, sortOrder); editor.putString(ALBUM_SORT_ORDER, sortOrder.toString());
editor.apply(); editor.apply();
} }
public final String getSongSortOrder() { public final SortOrder getSongSortOrder() {
return mPreferences.getString(SONG_SORT_ORDER, SortOrder.DESCENDING); return SortOrder.valueOf(mPreferences.getString(SONG_SORT_ORDER, SortOrder.DESCENDING.toString()));
} }
public void setSongSortOrder(final String sortOrder) { public void setSongSortOrder(SortOrder sortOrder) {
final SharedPreferences.Editor editor = mPreferences.edit(); final SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(SONG_SORT_ORDER, sortOrder); editor.putString(SONG_SORT_ORDER, sortOrder.toString());
editor.apply(); editor.apply();
} }
public final String getAlbumSortMethod() { public final SortMethod getAlbumSortMethod() {
return mPreferences.getString(ALBUM_SORT_METHOD, SortMethod.RANDOM); return SortMethod.valueOf(mPreferences.getString(ALBUM_SORT_METHOD, SortMethod.RANDOM.toString()));
} }
public void setAlbumSortMethod(final String sortMethod) { public void setAlbumSortMethod(SortMethod sortMethod) {
final SharedPreferences.Editor editor = mPreferences.edit(); final SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(ALBUM_SORT_METHOD, sortMethod); editor.putString(ALBUM_SORT_METHOD, sortMethod.toString());
editor.apply(); editor.apply();
} }
public final String getSongSortMethod() { public final SortMethod getSongSortMethod() {
return mPreferences.getString(SONG_SORT_METHOD, SortMethod.RANDOM); return SortMethod.valueOf(mPreferences.getString(SONG_SORT_METHOD, SortMethod.RANDOM.toString()));
} }
public void setSongSortMethod(final String sortMethod) { public void setSongSortMethod(SortMethod sortMethod) {
final SharedPreferences.Editor editor = mPreferences.edit(); final SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(SONG_SORT_METHOD, sortMethod); editor.putString(SONG_SORT_METHOD, sortMethod.toString());
editor.apply(); editor.apply();
} }

View file

@ -1,8 +1,6 @@
package com.dkanada.gramophone.util; 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.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;
@ -121,7 +119,6 @@ public class QueryUtil {
public static void getAlbums(ItemQuery query, MediaCallback<Album> callback) { public static void getAlbums(ItemQuery query, MediaCallback<Album> callback) {
query.setIncludeItemTypes(new String[]{"MusicAlbum"}); query.setIncludeItemTypes(new String[]{"MusicAlbum"});
applyProperties(query); applyProperties(query);
applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod());
App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() { App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() {
@Override @Override
public void onResponse(ItemsResult result) { public void onResponse(ItemsResult result) {
@ -165,7 +162,6 @@ public class QueryUtil {
query.setIncludeItemTypes(new String[]{"Audio"}); query.setIncludeItemTypes(new String[]{"Audio"});
query.setFields(new ItemFields[]{ItemFields.MediaSources}); query.setFields(new ItemFields[]{ItemFields.MediaSources});
applyProperties(query); applyProperties(query);
applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getSongSortMethod());
App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() { App.getApiClient().GetItemsAsync(query, new Response<ItemsResult>() {
@Override @Override
public void onResponse(ItemsResult result) { public void onResponse(ItemsResult result) {
@ -205,44 +201,4 @@ public class QueryUtil {
if (currentLibrary == null || query.getParentId() != null) return; if (currentLibrary == null || query.getParentId() != null) return;
query.setParentId(currentLibrary.getId()); query.setParentId(currentLibrary.getId());
} }
public static void applySortMethod(ItemQuery query, String method) {
// album activity will always sort by track number
if (query.getSortBy().length != 0) return;
switch (method) {
case SortMethod.NAME:
query.setSortBy(new String[]{"SortName"});
break;
case SortMethod.ALBUM:
query.setSortBy(new String[]{"Album"});
break;
case SortMethod.ARTIST:
query.setSortBy(new String[]{"AlbumArtist"});
break;
case SortMethod.YEAR:
query.setSortBy(new String[]{"ProductionYear"});
break;
case SortMethod.ADDED:
query.setSortBy(new String[]{"DateCreated"});
break;
case SortMethod.RANDOM:
query.setSortBy(new String[]{"Random"});
break;
case SortMethod.COUNT:
query.setSortBy(new String[]{"PlayCount"});
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;
}
}
} }

View file

@ -1,8 +1,8 @@
package com.dkanada.gramophone.util; 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.model.SortMethod;
import com.dkanada.gramophone.helper.sort.SortOrder; import com.dkanada.gramophone.model.SortOrder;
import com.dkanada.gramophone.interfaces.MediaCallback; import com.dkanada.gramophone.interfaces.MediaCallback;
import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.model.Song;
@ -19,8 +19,8 @@ public class ShortcutUtil {
public static void getFrequent(MediaCallback<Song> callback) { public static void getFrequent(MediaCallback<Song> callback) {
ItemQuery query = new ItemQuery(); ItemQuery query = new ItemQuery();
QueryUtil.applySortMethod(query, SortMethod.COUNT); query.setSortBy(new String[]{SortMethod.COUNT.getApi()});
QueryUtil.applySortOrder(query, SortOrder.DESCENDING); query.setSortOrder(SortOrder.DESCENDING.getApi());
getSongs(query, callback); getSongs(query, callback);
} }
@ -28,8 +28,8 @@ public class ShortcutUtil {
public static void getLatest(MediaCallback<Song> callback) { public static void getLatest(MediaCallback<Song> callback) {
ItemQuery query = new ItemQuery(); ItemQuery query = new ItemQuery();
QueryUtil.applySortMethod(query, SortMethod.ADDED); query.setSortBy(new String[]{SortMethod.ADDED.getApi()});
QueryUtil.applySortOrder(query, SortOrder.DESCENDING); query.setSortOrder(SortOrder.DESCENDING.getApi());
getSongs(query, callback); getSongs(query, callback);
} }
@ -37,8 +37,8 @@ public class ShortcutUtil {
public static void getShuffle(MediaCallback<Song> callback) { public static void getShuffle(MediaCallback<Song> callback) {
ItemQuery query = new ItemQuery(); ItemQuery query = new ItemQuery();
QueryUtil.applySortMethod(query, SortMethod.RANDOM); query.setSortBy(new String[]{SortMethod.RANDOM.getApi()});
QueryUtil.applySortOrder(query, SortOrder.DESCENDING); query.setSortOrder(SortOrder.DESCENDING.getApi());
getSongs(query, callback); getSongs(query, callback);
} }