diff --git a/app/src/main/java/com/dkanada/gramophone/activities/SearchActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/SearchActivity.java index e7895975..1b6a5872 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/SearchActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/SearchActivity.java @@ -23,14 +23,11 @@ import com.dkanada.gramophone.util.QueryUtil; import com.dkanada.gramophone.util.Util; import com.kabouzeid.appthemehelper.ThemeStore; -import org.jellyfin.apiclient.model.querying.ArtistsQuery; import org.jellyfin.apiclient.model.querying.ItemQuery; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; public class SearchActivity extends AbsMusicServiceActivity implements SearchView.OnQueryTextListener { public String QUERY = "query"; @@ -139,51 +136,36 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie ItemQuery itemQuery = new ItemQuery(); itemQuery.setSearchTerm(query); - ArtistsQuery artistsQuery = new ArtistsQuery(); - artistsQuery.setSearchTerm(query); - - MediaCallback callback = new MediaCallback() { - private final List data = new ArrayList<>(); - - @SuppressWarnings("ConstantConditions") + MediaCallback callback = new MediaCallback() { @Override - public void onLoadMedia(List media) { - data.addAll(media); + public void onLoadMedia(List media) { + List artists = new ArrayList<>(); + List albums = new ArrayList<>(); + List songs = new ArrayList<>(); - Map, List> byClass = new HashMap<>(); - byClass.put(Artist.class, new ArrayList<>()); - byClass.put(Album.class, new ArrayList<>()); - byClass.put(Song.class, new ArrayList<>()); - byClass.put(Object.class, new ArrayList<>()); - - for (Object datum : data) { - if (byClass.containsKey(datum.getClass())) { - byClass.get(datum.getClass()).add(datum); - } else { - byClass.get(Object.class).add(datum); + for (Object result : media) { + if (result instanceof Artist) { + artists.add((Artist) result); + } else if (result instanceof Album) { + albums.add((Album) result); + } else if (result instanceof Song) { + songs.add((Song) result); } } - Collections.sort(byClass.get(Artist.class), - (one, two) -> ((Artist) one).name.compareTo(((Artist) two).name)); + Collections.sort(artists, (one, two) -> one.name.compareTo(two.name)); + Collections.sort(albums, (one, two) -> one.title.compareTo(two.title)); + Collections.sort(songs, (one, two) -> one.title.compareTo(two.title)); - Collections.sort(byClass.get(Album.class), - (one, two) -> ((Album) one).title.compareTo(((Album) two).title)); - - Collections.sort(byClass.get(Song.class), - (one, two) -> ((Song) one).title.compareTo(((Song) two).title)); - - - List sortedData = byClass.get(Artist.class); - sortedData.addAll(byClass.get(Album.class)); - sortedData.addAll(byClass.get(Song.class)); - sortedData.addAll(byClass.get(Object.class)); + List sortedData = new ArrayList<>(); + sortedData.addAll(artists); + sortedData.addAll(albums); + sortedData.addAll(songs); adapter.swapDataSet(sortedData); } }; - QueryUtil.getArtists(artistsQuery, callback); QueryUtil.getItems(itemQuery, callback); } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java index 0bfbf0e5..a43acb7c 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/AlbumDetailActivity.java @@ -68,12 +68,9 @@ public class AlbumDetailActivity extends AbsMusicPanelActivity implements Palett query.setParentId(album.id); query.setSortBy(new String[]{"ParentIndexNumber", "IndexNumber"}); - QueryUtil.getSongs(query, new MediaCallback() { - @Override - public void onLoadMedia(List media) { - album.songs = (List) media; - setAlbum(album); - } + QueryUtil.getSongs(query, media -> { + album.songs = media; + setAlbum(album); }); } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java index 0f84b1e7..d6003866 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/ArtistDetailActivity.java @@ -72,22 +72,16 @@ public class ArtistDetailActivity extends AbsMusicPanelActivity implements Palet ItemQuery albums = new ItemQuery(); albums.setArtistIds(new String[]{artist.id}); - QueryUtil.getAlbums(albums, new MediaCallback() { - @Override - public void onLoadMedia(List media) { - artist.albums = (List) media; - setArtist(artist); - } + QueryUtil.getAlbums(albums, media -> { + artist.albums = media; + setArtist(artist); }); ItemQuery songs = new ItemQuery(); songs.setArtistIds(new String[]{artist.id}); - QueryUtil.getSongs(songs, new MediaCallback() { - @Override - public void onLoadMedia(List media) { - artist.songs = (List) media; - setArtist(artist); - } + QueryUtil.getSongs(songs, media -> { + artist.songs = media; + setArtist(artist); }); } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java index 738a03c8..b5476381 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/GenreDetailActivity.java @@ -60,12 +60,9 @@ public class GenreDetailActivity extends AbsMusicPanelActivity implements CabHol ItemQuery query = new ItemQuery(); query.setGenreIds(new String[]{genre.id}); - QueryUtil.getSongs(query, new MediaCallback() { - @Override - public void onLoadMedia(List media) { - adapter.getDataSet().addAll((List) media); - adapter.notifyDataSetChanged(); - } + QueryUtil.getSongs(query, media -> { + adapter.getDataSet().addAll(media); + adapter.notifyDataSetChanged(); }); } diff --git a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java index 5808982b..bdf31ed2 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/details/PlaylistDetailActivity.java @@ -67,12 +67,9 @@ public class PlaylistDetailActivity extends AbsMusicPanelActivity implements Cab PlaylistItemQuery query = new PlaylistItemQuery(); query.setId(playlist.id); - PlaylistUtil.getPlaylist(query, new MediaCallback() { - @Override - public void onLoadMedia(List media) { - adapter.getDataSet().addAll((List) media); - adapter.notifyDataSetChanged(); - } + PlaylistUtil.getPlaylist(query, media -> { + adapter.getDataSet().addAll(media); + adapter.notifyDataSetChanged(); }); } diff --git a/app/src/main/java/com/dkanada/gramophone/dialogs/AddToPlaylistDialog.java b/app/src/main/java/com/dkanada/gramophone/dialogs/AddToPlaylistDialog.java index 628dc583..fcb097a8 100644 --- a/app/src/main/java/com/dkanada/gramophone/dialogs/AddToPlaylistDialog.java +++ b/app/src/main/java/com/dkanada/gramophone/dialogs/AddToPlaylistDialog.java @@ -57,19 +57,16 @@ public class AddToPlaylistDialog extends DialogFragment { }) .build(); - QueryUtil.getPlaylists(new MediaCallback() { - @Override - public void onLoadMedia(List media) { - playlists.addAll((List) media); + QueryUtil.getPlaylists(media -> { + List names = new ArrayList<>(); - CharSequence[] names = new CharSequence[playlists.size() + 1]; - names[0] = requireActivity().getResources().getString(R.string.action_new_playlist); - for (int i = 0; i < playlists.size(); i++) { - names[i + 1] = playlists.get(i).name; - } - - dialog.setItems(names); + names.add(requireActivity().getResources().getString(R.string.action_new_playlist)); + for (Playlist playlist : media) { + names.add(playlist.name); } + + playlists.addAll(media); + dialog.setItems(names.toArray(new String[0])); }); return dialog; diff --git a/app/src/main/java/com/dkanada/gramophone/interfaces/MediaCallback.java b/app/src/main/java/com/dkanada/gramophone/interfaces/MediaCallback.java index f5baebae..e62f9b5c 100644 --- a/app/src/main/java/com/dkanada/gramophone/interfaces/MediaCallback.java +++ b/app/src/main/java/com/dkanada/gramophone/interfaces/MediaCallback.java @@ -2,6 +2,6 @@ package com.dkanada.gramophone.interfaces; import java.util.List; -public interface MediaCallback { - void onLoadMedia(List media); +public interface MediaCallback { + void onLoadMedia(List media); } diff --git a/app/src/main/java/com/dkanada/gramophone/util/PlaylistUtil.java b/app/src/main/java/com/dkanada/gramophone/util/PlaylistUtil.java index 9eeebb21..7844243d 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/PlaylistUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/PlaylistUtil.java @@ -18,7 +18,7 @@ import java.util.ArrayList; import java.util.List; public class PlaylistUtil { - public static void getPlaylist(PlaylistItemQuery query, MediaCallback callback) { + public static void getPlaylist(PlaylistItemQuery query, MediaCallback callback) { query.setUserId(App.getApiClient().getCurrentUserId()); query.setFields(new ItemFields[]{ItemFields.MediaSources}); App.getApiClient().GetPlaylistItems(query, new Response() { diff --git a/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java b/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java index 41af5391..280f47fb 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/QueryUtil.java @@ -28,7 +28,7 @@ public class QueryUtil { // TODO return BaseItemDto everywhere // will simplify the code for the getPlaylists method - public static void getLibraries(MediaCallback callback) { + public static void getLibraries(MediaCallback callback) { String id = App.getApiClient().getCurrentUserId(); App.getApiClient().GetUserViews(id, new Response() { @Override @@ -46,7 +46,7 @@ public class QueryUtil { }); } - public static void getPlaylists(MediaCallback callback) { + public static void getPlaylists(MediaCallback callback) { ItemQuery query = new ItemQuery(); query.setIncludeItemTypes(new String[]{"Playlist"}); applyProperties(query); @@ -68,7 +68,7 @@ public class QueryUtil { }); } - public static void getGenres(MediaCallback callback) { + public static void getGenres(MediaCallback callback) { ItemsByNameQuery query = new ItemsByNameQuery(); applyProperties(query); App.getApiClient().GetGenresAsync(query, new Response() { @@ -89,8 +89,8 @@ public class QueryUtil { }); } - public static void getItems(ItemQuery query, MediaCallback callback) { - query.setIncludeItemTypes(new String[]{"MusicAlbum", "Audio"}); + public static void getItems(ItemQuery query, MediaCallback callback) { + query.setIncludeItemTypes(new String[]{"MusicArtist", "MusicAlbum", "Audio"}); query.setFields(new ItemFields[]{ItemFields.MediaSources}); query.setUserId(App.getApiClient().getCurrentUserId()); query.setLimit(40); @@ -119,7 +119,7 @@ public class QueryUtil { }); } - public static void getAlbums(ItemQuery query, MediaCallback callback) { + public static void getAlbums(ItemQuery query, MediaCallback callback) { query.setIncludeItemTypes(new String[]{"MusicAlbum"}); applyProperties(query); applySortMethod(query, PreferenceUtil.getInstance(App.getInstance()).getAlbumSortMethod()); @@ -141,7 +141,7 @@ public class QueryUtil { }); } - public static void getArtists(ArtistsQuery query, MediaCallback callback) { + public static void getArtists(ArtistsQuery query, MediaCallback callback) { query.setFields(new ItemFields[]{ItemFields.Genres}); applyProperties(query); App.getApiClient().GetAlbumArtistsAsync(query, new Response() { @@ -162,7 +162,7 @@ public class QueryUtil { }); } - public static void getSongs(ItemQuery query, MediaCallback callback) { + public static void getSongs(ItemQuery query, MediaCallback callback) { query.setIncludeItemTypes(new String[]{"Audio"}); query.setFields(new ItemFields[]{ItemFields.MediaSources}); applyProperties(query);