From e7713ce19c7aff967aefc609e11ddcf4467e82c3 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sat, 1 May 2021 18:29:57 +0200 Subject: [PATCH] Added similar items in album page --- .../play/adapter/AlbumArtistPageAdapter.java | 9 ++-- .../play/ui/fragment/AlbumPageFragment.java | 30 ++++++++++++ .../play/util/PreferenceUtil.java | 5 ++ .../cappielloantonio/play/util/SyncUtil.java | 33 +++++++++++++ .../main/res/layout/fragment_album_page.xml | 46 +++++++++++++++++-- .../main/res/layout/fragment_artist_page.xml | 1 - .../res/layout/item_artist_page_album.xml | 13 +++++- app/src/main/res/values/arrays.xml | 12 +++++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/global_preferences.xml | 9 ++++ 10 files changed, 148 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageAdapter.java index e8f9aa0c..a9133cb9 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageAdapter.java @@ -42,6 +42,7 @@ public class AlbumArtistPageAdapter extends RecyclerView.Adapter media) { + bind.similarAlbumSector.setVisibility(View.VISIBLE); + + bind.similarAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); + + albumArtistPageAdapter = new AlbumArtistPageAdapter(requireContext()); + bind.similarAlbumsRecyclerView.setAdapter(albumArtistPageAdapter); + albumArtistPageAdapter.setItems((ArrayList) media); + } + }, SyncUtil.ALBUM, albumPageViewModel.getAlbum().getId(), PreferenceUtil.getInstance(requireContext()).getSimilarItemsNumber()); + } } \ No newline at end of file diff --git a/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java b/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java index 84bf4bee..04a65662 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java @@ -26,6 +26,7 @@ public class PreferenceUtil { public static final String IMAGE_CACHE_SIZE = "image_cache_size"; public static final String MEDIA_CACHE_SIZE = "media_cache_size"; public static final String INSTANT_MIX_SONG_NUMBER = "instant_mix_song_number"; + public static final String SIMILAR_ITEMS_NUMBER = "similar_items_number"; public static final String TRANSCODE_CODEC = "transcode_codec"; public static final String DIRECT_PLAY_CODECS = "direct_play_codecs"; public static final String MAXIMUM_BITRATE = "maximum_bitrate"; @@ -139,6 +140,10 @@ public class PreferenceUtil { return Integer.parseInt(mPreferences.getString(INSTANT_MIX_SONG_NUMBER, "10")); } + public final int getSimilarItemsNumber() { + return Integer.parseInt(mPreferences.getString(SIMILAR_ITEMS_NUMBER, "10")); + } + public final int getSearchElementPerCategory() { return Integer.parseInt(mPreferences.getString(SEARCH_ELEMENT_PER_CATEGORY, "10")); } diff --git a/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java b/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java index 2e301041..4b59ec1d 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/SyncUtil.java @@ -274,6 +274,39 @@ public class SyncUtil { }); } + public static void getSimilarItems(Context context, MediaCallback callback, String resultType, String itemID, int limit) { + SimilarItemsQuery query = new SimilarItemsQuery(); + + query.setId(itemID); + query.setUserId(App.getApiClientInstance(context).getCurrentUserId()); + query.setFields(new ItemFields[]{ItemFields.MediaSources}); + query.setLimit(limit); + + App.getApiClientInstance(context).GetSimilarItems(query, new Response() { + @Override + public void onResponse(ItemsResult result) { + List items = new ArrayList<>(); + + for (BaseItemDto itemDto : result.getItems()) { + if (resultType.equals(ARTIST) && itemDto.getBaseItemType() == BaseItemType.MusicArtist) { + items.add(new Artist(itemDto)); + } else if (resultType.equals(ALBUM) && itemDto.getBaseItemType() == BaseItemType.MusicAlbum) { + items.add(new Album(itemDto)); + } else if (resultType.equals(SONG) && itemDto.getBaseItemType() == BaseItemType.Audio) { + items.add(new Song(itemDto)); + } + } + + callback.onLoadMedia(items); + } + + @Override + public void onError(Exception exception) { + callback.onError(exception); + } + }); + } + public static Bundle getSyncBundle(Boolean syncAlbum, Boolean syncArtist, Boolean syncGenres, Boolean syncPlaylist, Boolean syncSong, Boolean crossSyncSongGenre) { Bundle bundle = new Bundle(); bundle.putBoolean("sync_album", syncAlbum); diff --git a/app/src/main/res/layout/fragment_album_page.xml b/app/src/main/res/layout/fragment_album_page.xml index 7f07ba93..c320ea4f 100644 --- a/app/src/main/res/layout/fragment_album_page.xml +++ b/app/src/main/res/layout/fragment_album_page.xml @@ -146,13 +146,49 @@ - + app:layout_behavior="@string/appbar_scrolling_view_behavior" + android:orientation="vertical"> + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_artist_page.xml b/app/src/main/res/layout/fragment_artist_page.xml index 85198afe..5789761d 100644 --- a/app/src/main/res/layout/fragment_artist_page.xml +++ b/app/src/main/res/layout/fragment_artist_page.xml @@ -46,7 +46,6 @@ - + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 10d84c9b..10f8a6b4 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -51,6 +51,18 @@ 50 + + 10 + 25 + 50 + + + + 10 + 25 + 50 + + 10 20 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 68a9f6e0..717b7fa8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,6 +14,7 @@ Save filters between sessions Number of songs generated by Instant Mix + Number of similar items Number of items searched for each category Synchronization diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index 4cb0237b..746fd8d7 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -37,6 +37,15 @@ app:title="@string/instant_mix_song_number" app:useSimpleSummaryProvider="true" /> + +