diff --git a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java index 5d27af33..3310cab0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/loader/SongLoader.java @@ -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 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 getSongs(@Nullable final Cursor cursor) { List 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 diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java index 56a63ae6..6b7b960d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java @@ -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 diff --git a/app/src/main/java/com/kabouzeid/gramophone/provider/QueueStore.java b/app/src/main/java/com/kabouzeid/gramophone/provider/QueueStore.java index c8d9c578..7a2adfac 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/provider/QueueStore.java +++ b/app/src/main/java/com/kabouzeid/gramophone/provider/QueueStore.java @@ -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(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java index 71ae7dcb..dda9ca6b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java @@ -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; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java index d83a75ca..2801780e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/pager/AbsLibraryPagerRecyclerViewCustomGridSizeFragment.java @@ -78,7 +78,7 @@ public abstract class AbsLibraryPagerRecyclerViewCustomGridSizeFragment