From 4fc29b47be39ec2c781f4ab764d78bdb4999c398 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Thu, 29 Jul 2021 14:56:00 +0200 Subject: [PATCH] Fix playlist sample visualization --- .../play/adapter/PlaylistAdapter.java | 9 +++- .../cappielloantonio/play/model/Playlist.java | 38 ++++++--------- .../play/repository/PlaylistRepository.java | 46 +++++++++++++++++++ .../play/subsonic/models/Playlists.java | 2 +- .../play/ui/fragment/LibraryFragment.java | 7 ++- .../play/util/MappingUtil.java | 12 +++++ .../play/viewmodel/LibraryViewModel.java | 10 ++-- .../item_library_catalogue_playlist.xml | 16 +++++++ .../main/res/layout/item_library_playlist.xml | 17 +++++++ 9 files changed, 123 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/PlaylistAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/PlaylistAdapter.java index f908ff48..e836066c 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/PlaylistAdapter.java @@ -1,5 +1,6 @@ package com.cappielloantonio.play.adapter; +import android.annotation.SuppressLint; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; @@ -17,6 +18,7 @@ import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.util.PreferenceUtil; +import java.util.ArrayList; import java.util.List; public class PlaylistAdapter extends RecyclerView.Adapter { @@ -27,11 +29,11 @@ public class PlaylistAdapter extends RecyclerView.Adapter playlists) { + public PlaylistAdapter(MainActivity activity, Context context) { this.activity = activity; this.context = context; this.mInflater = LayoutInflater.from(context); - this.playlists = playlists; + this.playlists = new ArrayList<>(); } @Override @@ -45,6 +47,7 @@ public class PlaylistAdapter extends RecyclerView.Adapter> listLivePlaylists = new MutableLiveData<>(new ArrayList<>()); + private MutableLiveData> listLiveRandomPlaylist = new MutableLiveData<>(new ArrayList<>()); + public PlaylistRepository(Application application) { + this.application = application; + } + + public MutableLiveData> getPlaylists(boolean random, int size) { + App.getSubsonicClientInstance(application, false) + .getPlaylistClient() + .getPlaylists() + .enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.body().getStatus().getValue().equals(ResponseStatus.OK)) { + List playlists = new ArrayList<>(MappingUtil.mapPlaylist(response.body().getPlaylists().getPlaylists())); + listLivePlaylists.setValue(playlists); + Collections.shuffle(playlists); + listLiveRandomPlaylist.setValue(playlists); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + } + }); + + return listLivePlaylists; } } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/models/Playlists.java b/app/src/main/java/com/cappielloantonio/play/subsonic/models/Playlists.java index bb90eb8d..298a2d1b 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/models/Playlists.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/models/Playlists.java @@ -8,7 +8,7 @@ import java.util.List; @Xml public class Playlists { - @Element + @Element(name = "playlist") protected List playlists; public List getPlaylists() { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java index 572e53ca..d2811738 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java @@ -18,6 +18,7 @@ import androidx.viewpager2.widget.ViewPager2; import com.cappielloantonio.play.R; import com.cappielloantonio.play.adapter.AlbumAdapter; import com.cappielloantonio.play.adapter.ArtistAdapter; +import com.cappielloantonio.play.adapter.DiscoverSongAdapter; import com.cappielloantonio.play.adapter.GenreAdapter; import com.cappielloantonio.play.adapter.PlaylistAdapter; import com.cappielloantonio.play.databinding.FragmentLibraryBinding; @@ -119,9 +120,13 @@ public class LibraryFragment extends Fragment { private void initPlaylistSlideView() { bind.playlistViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); - playlistAdapter = new PlaylistAdapter(activity, requireContext(), libraryViewModel.getPlaylistSample()); + playlistAdapter = new PlaylistAdapter(activity, requireContext()); bind.playlistViewPager.setAdapter(playlistAdapter); bind.playlistViewPager.setOffscreenPageLimit(3); + libraryViewModel.getPlaylistSample().observe(requireActivity(), playlists -> { + playlistAdapter.setItems(playlists); + }); + setDiscoverSongSlideViewOffset(20, 16); } diff --git a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java index 7dafde65..f2e2f246 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java @@ -2,12 +2,14 @@ package com.cappielloantonio.play.util; import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Artist; +import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Queue; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.subsonic.models.AlbumID3; import com.cappielloantonio.play.subsonic.models.ArtistID3; import com.cappielloantonio.play.subsonic.models.ArtistWithAlbumsID3; import com.cappielloantonio.play.subsonic.models.Child; +import com.cappielloantonio.play.subsonic.models.Playlists; import java.util.ArrayList; import java.util.List; @@ -56,4 +58,14 @@ public class MappingUtil { return songs; } + + public static ArrayList mapPlaylist(List playlists) { + ArrayList playlist = new ArrayList(); + + for(com.cappielloantonio.play.subsonic.models.Playlist item : playlists){ + playlist.add(new Playlist(item)); + } + + return playlist; + } } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java index a256a70c..e9b29fc8 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java @@ -25,7 +25,7 @@ public class LibraryViewModel extends AndroidViewModel { private GenreRepository genreRepository; private PlaylistRepository playlistRepository; - private List playlistSample; + private LiveData> playlistSample; private LiveData> sampleAlbum; private LiveData> sampleArtist; private LiveData> sampleGenres; @@ -48,14 +48,10 @@ public class LibraryViewModel extends AndroidViewModel { sampleAlbum = albumRepository.getAlbums("random", 20); sampleArtist = artistRepository.getArtists(true, 20); sampleGenres = new MutableLiveData<>(); - playlistSample = new ArrayList<>(); + playlistSample = playlistRepository.getPlaylists(true, 10); } - public List getPlaylistSample() { - if (playlistSample.isEmpty()) { - // playlistSample = playlistRepository.getRandomSample(5); - } - + public LiveData> getPlaylistSample() { return playlistSample; } diff --git a/app/src/main/res/layout/item_library_catalogue_playlist.xml b/app/src/main/res/layout/item_library_catalogue_playlist.xml index 0f7711ad..5dbd57e6 100644 --- a/app/src/main/res/layout/item_library_catalogue_playlist.xml +++ b/app/src/main/res/layout/item_library_catalogue_playlist.xml @@ -30,9 +30,25 @@ android:layout_marginTop="18dp" android:layout_marginRight="16dp" android:ellipsize="end" + android:fontFamily="@font/inter" android:maxLines="2" android:textColor="@color/gradientTitleColor" + android:textFontWeight="400" android:textSize="20sp" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/item_library_playlist.xml b/app/src/main/res/layout/item_library_playlist.xml index 8d00972f..835f0fb5 100644 --- a/app/src/main/res/layout/item_library_playlist.xml +++ b/app/src/main/res/layout/item_library_playlist.xml @@ -32,9 +32,26 @@ android:layout_marginTop="18dp" android:layout_marginRight="16dp" android:ellipsize="end" + android:fontFamily="@font/inter" android:maxLines="2" android:textColor="@color/gradientTitleColor" + android:textFontWeight="400" android:textSize="20sp" /> + + \ No newline at end of file