store favorite and primary with queue and fix sort method references

This commit is contained in:
dkanada 2020-05-05 17:15:21 +09:00
commit 65a311e83b
8 changed files with 73 additions and 69 deletions

View file

@ -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

View file

@ -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

View file

@ -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();

View file

@ -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;
}

View file

@ -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()) {

View file

@ -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

View file

@ -69,7 +69,7 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
}
@Override
protected void setSortMethod(String sortOrder) {
protected void setSortMethod(String sortMethod) {
}
@Override

View file

@ -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