store favorite and primary with queue and fix sort method references
This commit is contained in:
parent
821181d819
commit
65a311e83b
8 changed files with 73 additions and 69 deletions
|
|
@ -14,10 +14,10 @@ import com.kabouzeid.gramophone.util.PreferenceUtil;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public class SongLoader {
|
||||
public static final String QUEUE_PRIMARY = "image";
|
||||
public static final String QUEUE_FAVORITE = "favorite";
|
||||
|
||||
protected static final String BASE_SELECTION = AudioColumns.IS_MUSIC + "=1" + " AND " + AudioColumns.TITLE + " != ''";
|
||||
protected static final String[] BASE_PROJECTION = new String[]{
|
||||
BaseColumns._ID,
|
||||
|
|
@ -29,6 +29,8 @@ public class SongLoader {
|
|||
AudioColumns.ALBUM,
|
||||
AudioColumns.ARTIST_ID,
|
||||
AudioColumns.ARTIST,
|
||||
QUEUE_PRIMARY,
|
||||
QUEUE_FAVORITE,
|
||||
};
|
||||
|
||||
@NonNull
|
||||
|
|
@ -37,18 +39,6 @@ public class SongLoader {
|
|||
return getSongs(cursor);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static List<Song> getSongs(@NonNull final Context context, final String query) {
|
||||
Cursor cursor = makeSongCursor(context, AudioColumns.TITLE + " LIKE ?", new String[]{"%" + query + "%"});
|
||||
return getSongs(cursor);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Song getSong(@NonNull final Context context, final int queryId) {
|
||||
Cursor cursor = makeSongCursor(context, AudioColumns._ID + "=?", new String[]{String.valueOf(queryId)});
|
||||
return getSong(cursor);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static List<Song> getSongs(@Nullable final Cursor cursor) {
|
||||
List<Song> songs = new ArrayList<>();
|
||||
|
|
@ -58,8 +48,7 @@ public class SongLoader {
|
|||
} while (cursor.moveToNext());
|
||||
}
|
||||
|
||||
if (cursor != null)
|
||||
cursor.close();
|
||||
if (cursor != null) cursor.close();
|
||||
return songs;
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +82,10 @@ public class SongLoader {
|
|||
final String artistId = cursor.getString(7);
|
||||
final String artistName = cursor.getString(8);
|
||||
|
||||
return new Song(id, title, trackNumber, year, duration, albumId, albumName, artistId, artistName);
|
||||
final String primary = cursor.getString(9);
|
||||
final boolean favorite = Boolean.valueOf(cursor.getString(10));
|
||||
|
||||
return new Song(id, title, trackNumber, year, duration, albumId, albumName, artistId, artistName, primary, favorite);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import android.os.Parcelable;
|
|||
import org.jellyfin.apiclient.model.dto.BaseItemDto;
|
||||
|
||||
public class Song implements Parcelable {
|
||||
public static final Song EMPTY_SONG = new Song(null, "", -1, -1, -1, null, "", null, "");
|
||||
public static final Song EMPTY_SONG = new Song(null, "", -1, -1, -1, null, "", null, "", null, false);
|
||||
|
||||
public final String id;
|
||||
public final String title;
|
||||
|
|
@ -45,7 +45,7 @@ public class Song implements Parcelable {
|
|||
this.favorite = itemDto.getUserData() != null && itemDto.getUserData().getIsFavorite();
|
||||
}
|
||||
|
||||
public Song(String id, String title, int trackNumber, int year, long duration, String albumId, String albumName, String artistId, String artistName) {
|
||||
public Song(String id, String title, int trackNumber, int year, long duration, String albumId, String albumName, String artistId, String artistName, String primary, boolean favorite) {
|
||||
this.id = id;
|
||||
this.title = title;
|
||||
this.trackNumber = trackNumber;
|
||||
|
|
@ -58,8 +58,8 @@ public class Song implements Parcelable {
|
|||
this.artistId = artistId;
|
||||
this.artistName = artistName;
|
||||
|
||||
this.primary = null;
|
||||
this.favorite = false;
|
||||
this.primary = primary;
|
||||
this.favorite = favorite;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public class QueueStore extends SQLiteOpenHelper {
|
|||
public static final String DATABASE_NAME = "music_playback_state.db";
|
||||
public static final String PLAYING_QUEUE_TABLE_NAME = "playing_queue";
|
||||
public static final String ORIGINAL_PLAYING_QUEUE_TABLE_NAME = "original_playing_queue";
|
||||
private static final int VERSION = 4;
|
||||
private static final int VERSION = 5;
|
||||
|
||||
public QueueStore(final Context context) {
|
||||
super(context, DATABASE_NAME, null, VERSION);
|
||||
|
|
@ -81,6 +81,12 @@ public class QueueStore extends SQLiteOpenHelper {
|
|||
builder.append(" INT NOT NULL,");
|
||||
|
||||
builder.append(AudioColumns.ARTIST);
|
||||
builder.append(" STRING NOT NULL,");
|
||||
|
||||
builder.append(SongLoader.QUEUE_PRIMARY);
|
||||
builder.append(" STRING NOT NULL,");
|
||||
|
||||
builder.append(SongLoader.QUEUE_FAVORITE);
|
||||
builder.append(" STRING NOT NULL);");
|
||||
|
||||
db.execSQL(builder.toString());
|
||||
|
|
@ -143,9 +149,12 @@ public class QueueStore extends SQLiteOpenHelper {
|
|||
values.put(AudioColumns.ALBUM, song.albumName);
|
||||
values.put(AudioColumns.ARTIST_ID, song.artistId);
|
||||
values.put(AudioColumns.ARTIST, song.artistName);
|
||||
values.put(SongLoader.QUEUE_PRIMARY, song.primary);
|
||||
values.put(SongLoader.QUEUE_FAVORITE, song.favorite);
|
||||
|
||||
database.insert(tableName, null, values);
|
||||
}
|
||||
|
||||
database.setTransactionSuccessful();
|
||||
} finally {
|
||||
database.endTransaction();
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
|||
return true;
|
||||
}
|
||||
|
||||
if (handleSortOrderMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
|
||||
if (handleSortMethodMenuItem(absLibraryRecyclerViewCustomGridSizeFragment, item)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -288,6 +288,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
|||
gridSizeMenu.findItem(R.id.action_grid_size_8).setChecked(true);
|
||||
break;
|
||||
}
|
||||
|
||||
int maxGridSize = fragment.getMaxGridSize();
|
||||
if (maxGridSize < 8) {
|
||||
gridSizeMenu.findItem(R.id.action_grid_size_8).setVisible(false);
|
||||
|
|
@ -348,38 +349,38 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
|||
return false;
|
||||
}
|
||||
|
||||
private void setUpSortMethodMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortOrderMenu) {
|
||||
String currentSortOrder = fragment.getSortMethod();
|
||||
sortOrderMenu.clear();
|
||||
private void setUpSortMethodMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortMethodMenu) {
|
||||
String currentSortMethod = fragment.getSortMethod();
|
||||
sortMethodMenu.clear();
|
||||
|
||||
if (fragment instanceof AlbumsFragment) {
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_order_name)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.NAME));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_artist, 1, R.string.sort_order_artist)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.ARTIST));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_year, 2, R.string.sort_order_year)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.YEAR));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_random, 3, R.string.sort_order_random)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.RANDOM));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_order_name)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.NAME));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_artist, 1, R.string.sort_order_artist)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.ARTIST));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_year, 2, R.string.sort_order_year)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.YEAR));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_random, 3, R.string.sort_order_random)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.RANDOM));
|
||||
} else if (fragment instanceof ArtistsFragment) {
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_order_name)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.NAME));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_random, 1, R.string.sort_order_random)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.RANDOM));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_order_name)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.NAME));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_random, 1, R.string.sort_order_random)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.RANDOM));
|
||||
} else if (fragment instanceof SongsFragment) {
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_order_name)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.NAME));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_album, 1, R.string.sort_order_album)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.ALBUM));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_artist, 2, R.string.sort_order_artist)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.ARTIST));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_year, 3, R.string.sort_order_year)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.YEAR));
|
||||
sortOrderMenu.add(0, R.id.action_sort_method_random, 4, R.string.sort_order_random)
|
||||
.setChecked(currentSortOrder.equals(SortMethod.RANDOM));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_name, 0, R.string.sort_order_name)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.NAME));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_album, 1, R.string.sort_order_album)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.ALBUM));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_artist, 2, R.string.sort_order_artist)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.ARTIST));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_year, 3, R.string.sort_order_year)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.YEAR));
|
||||
sortMethodMenu.add(0, R.id.action_sort_method_random, 4, R.string.sort_order_random)
|
||||
.setChecked(currentSortMethod.equals(SortMethod.RANDOM));
|
||||
}
|
||||
|
||||
sortOrderMenu.setGroupCheckable(0, true, true);
|
||||
sortMethodMenu.setGroupCheckable(0, true, true);
|
||||
}
|
||||
|
||||
private void setUpSortOrderMenu(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull SubMenu sortOrderMenu) {
|
||||
|
|
@ -394,29 +395,29 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
|
|||
sortOrderMenu.setGroupCheckable(0, true, true);
|
||||
}
|
||||
|
||||
private boolean handleSortOrderMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) {
|
||||
String sortOrder = null;
|
||||
private boolean handleSortMethodMenuItem(@NonNull AbsLibraryPagerRecyclerViewCustomGridSizeFragment fragment, @NonNull MenuItem item) {
|
||||
String sortMethod = null;
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_sort_method_name:
|
||||
sortOrder = SortMethod.NAME;
|
||||
sortMethod = SortMethod.NAME;
|
||||
break;
|
||||
case R.id.action_sort_method_album:
|
||||
sortOrder = SortMethod.ALBUM;
|
||||
sortMethod = SortMethod.ALBUM;
|
||||
break;
|
||||
case R.id.action_sort_method_artist:
|
||||
sortOrder = SortMethod.ARTIST;
|
||||
sortMethod = SortMethod.ARTIST;
|
||||
break;
|
||||
case R.id.action_sort_method_year:
|
||||
sortOrder = SortMethod.YEAR;
|
||||
sortMethod = SortMethod.YEAR;
|
||||
break;
|
||||
case R.id.action_sort_method_random:
|
||||
sortOrder = SortMethod.RANDOM;
|
||||
sortMethod = SortMethod.RANDOM;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sortOrder != null) {
|
||||
if (sortMethod != null) {
|
||||
item.setChecked(true);
|
||||
fragment.setAndSaveSortOrder(sortOrder);
|
||||
fragment.setAndSaveSortMethod(sortMethod);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
|
|||
setUsePalette(usePalette);
|
||||
}
|
||||
|
||||
public void setAndSaveSortOrder(final String sortMethod) {
|
||||
public void setAndSaveSortMethod(final String sortMethod) {
|
||||
this.sortMethod = sortMethod;
|
||||
saveSortMethod(sortMethod);
|
||||
setSortMethod(sortMethod);
|
||||
|
|
@ -99,6 +99,7 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
|
|||
|
||||
protected final void notifyLayoutResChanged(@LayoutRes int res) {
|
||||
this.currentLayoutRes = res;
|
||||
|
||||
RecyclerView recyclerView = getRecyclerView();
|
||||
if (recyclerView != null) {
|
||||
applyRecyclerViewPaddingForLayoutRes(recyclerView, currentLayoutRes);
|
||||
|
|
@ -118,6 +119,7 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
|
|||
} else {
|
||||
padding = 0;
|
||||
}
|
||||
|
||||
recyclerView.setPadding(padding, padding, padding, padding);
|
||||
}
|
||||
|
||||
|
|
@ -139,9 +141,9 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment<A extend
|
|||
|
||||
protected abstract String loadSortMethod();
|
||||
|
||||
protected abstract void saveSortMethod(String sortOrder);
|
||||
protected abstract void saveSortMethod(String sortMethod);
|
||||
|
||||
protected abstract void setSortMethod(String sortOrder);
|
||||
protected abstract void setSortMethod(String sortMethod);
|
||||
|
||||
protected int getMaxGridSizeForList() {
|
||||
if (isLandscape()) {
|
||||
|
|
|
|||
|
|
@ -57,12 +57,12 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void saveSortMethod(String sortOrder) {
|
||||
PreferenceUtil.getInstance(getActivity()).setAlbumSortMethod(sortOrder);
|
||||
protected void saveSortMethod(String sortMethod) {
|
||||
PreferenceUtil.getInstance(getActivity()).setAlbumSortMethod(sortMethod);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setSortMethod(String sortOrder) {
|
||||
protected void setSortMethod(String sortMethod) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void setSortMethod(String sortOrder) {
|
||||
protected void setSortMethod(String sortMethod) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -82,12 +82,12 @@ public class SongsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFrag
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void saveSortMethod(String sortOrder) {
|
||||
PreferenceUtil.getInstance(getActivity()).setSongSortMethod(sortOrder);
|
||||
protected void saveSortMethod(String sortMethod) {
|
||||
PreferenceUtil.getInstance(getActivity()).setSongSortMethod(sortMethod);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setSortMethod(String sortOrder) {
|
||||
protected void setSortMethod(String sortMethod) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue