Add artist page

This commit is contained in:
Antonio Cappiello 2020-11-22 19:11:38 +01:00
parent 8b7e383dc2
commit c2be2711b9
44 changed files with 1028 additions and 191 deletions

View file

@ -11,11 +11,9 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager;
import com.cappielloantonio.play.adapter.AlbumCatalogueAdapter;
import com.cappielloantonio.play.adapter.ArtistCatalogueAdapter;
import com.cappielloantonio.play.databinding.FragmentAlbumCatalogueBinding;
import com.cappielloantonio.play.databinding.FragmentArtistCatalogueBinding;
import com.cappielloantonio.play.helper.recyclerview.ItemlDecoration;
import com.cappielloantonio.play.viewmodel.AlbumCatalogueViewModel;
import com.cappielloantonio.play.viewmodel.ArtistCatalogueViewModel;
import java.util.ArrayList;
@ -46,6 +44,7 @@ public class AlbumCatalogueFragment extends Fragment {
private void initAlbumCatalogueView() {
bind.albumCatalogueRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
bind.albumCatalogueRecyclerView.addItemDecoration(new ItemlDecoration(2, 20, false));
bind.albumCatalogueRecyclerView.setHasFixedSize(true);
albumAdapter = new AlbumCatalogueAdapter(requireContext(), new ArrayList<>());

View file

@ -17,6 +17,7 @@ import com.cappielloantonio.play.adapter.ArtistAdapter;
import com.cappielloantonio.play.adapter.ArtistCatalogueAdapter;
import com.cappielloantonio.play.adapter.RecentMusicAdapter;
import com.cappielloantonio.play.databinding.FragmentArtistCatalogueBinding;
import com.cappielloantonio.play.helper.recyclerview.ItemlDecoration;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.cappielloantonio.play.viewmodel.ArtistCatalogueViewModel;
@ -51,6 +52,7 @@ public class ArtistCatalogueFragment extends Fragment {
private void initArtistCatalogueView() {
bind.artistCatalogueRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
bind.artistCatalogueRecyclerView.addItemDecoration(new ItemlDecoration(2, 20, false));
bind.artistCatalogueRecyclerView.setHasFixedSize(true);
artistAdapter = new ArtistCatalogueAdapter(requireContext(), new ArrayList<>());

View file

@ -0,0 +1,78 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.AlbumArtistPageAdapter;
import com.cappielloantonio.play.adapter.RecentMusicAdapter;
import com.cappielloantonio.play.adapter.SongResultSearchAdapter;
import com.cappielloantonio.play.databinding.FragmentArtistPageBinding;
import com.cappielloantonio.play.databinding.FragmentHomeBinding;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.cappielloantonio.play.viewmodel.ArtistPageViewModel;
import com.cappielloantonio.play.viewmodel.HomeViewModel;
import java.util.ArrayList;
public class ArtistPageFragment extends Fragment {
private FragmentArtistPageBinding bind;
private MainActivity activity;
private ArtistPageViewModel artistPageViewModel;
private SongResultSearchAdapter songResultSearchAdapter;
private AlbumArtistPageAdapter albumArtistPageAdapter;
private String artistID;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentArtistPageBinding.inflate(inflater, container, false);
View view = bind.getRoot();
artistPageViewModel = new ViewModelProvider(requireActivity()).get(ArtistPageViewModel.class);
init();
initTopSongsView();
initAlbumsView();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void init() {
artistID = getArguments().getString("artistID");
}
private void initTopSongsView() {
bind.mostStreamedSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
bind.mostStreamedSongRecyclerView.setHasFixedSize(true);
songResultSearchAdapter = new SongResultSearchAdapter(requireContext(), new ArrayList<>());
bind.mostStreamedSongRecyclerView.setAdapter(songResultSearchAdapter);
artistPageViewModel.getArtistTopSongList(artistID).observe(requireActivity(), songs -> songResultSearchAdapter.setItems(songs));
}
private void initAlbumsView() {
bind.albumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.albumsRecyclerView.setHasFixedSize(true);
albumArtistPageAdapter = new AlbumArtistPageAdapter(requireContext(), new ArrayList<>());
bind.albumsRecyclerView.setAdapter(albumArtistPageAdapter);
artistPageViewModel.getAlbumList(artistID).observe(requireActivity(), songs -> albumArtistPageAdapter.setItems(songs));
}
}

View file

@ -44,6 +44,7 @@ public class FilterFragment extends Fragment {
private void setFilterChips() {
filterViewModel.getGenreList().observe(requireActivity(), genres -> {
bind.loadingProgressBar.setVisibility(View.GONE);
bind.filterContainer.setVisibility(View.VISIBLE);
for (Genre genre : genres) {
Chip mChip = (Chip) requireActivity().getLayoutInflater().inflate(R.layout.chip_search_filter_genre, null, false);
mChip.setText(genre.getName());

View file

@ -15,6 +15,7 @@ import com.cappielloantonio.play.adapter.GenreAdapter;
import com.cappielloantonio.play.adapter.GenreCatalogueAdapter;
import com.cappielloantonio.play.databinding.FragmentArtistCatalogueBinding;
import com.cappielloantonio.play.databinding.FragmentGenreCatalogueBinding;
import com.cappielloantonio.play.helper.recyclerview.ItemlDecoration;
import com.cappielloantonio.play.viewmodel.ArtistCatalogueViewModel;
import com.cappielloantonio.play.viewmodel.GenreCatalogueViewModel;
@ -47,11 +48,13 @@ public class GenreCatalogueFragment extends Fragment {
private void initArtistCatalogueView() {
bind.genreCatalogueRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
bind.genreCatalogueRecyclerView.addItemDecoration(new ItemlDecoration(2, 20, false));
bind.genreCatalogueRecyclerView.setHasFixedSize(true);
genreCatalogueAdapter = new GenreCatalogueAdapter(requireContext(), new ArrayList<>());
genreCatalogueAdapter.setClickListener((view, position) -> Toast.makeText(requireContext(), "Click: " + position, Toast.LENGTH_SHORT).show());
bind.genreCatalogueRecyclerView.setAdapter(genreCatalogueAdapter);
genreCatalogueViewModel.getGenreList().observe(requireActivity(), genres -> {
bind.loadingProgressBar.setVisibility(View.GONE);
bind.genreCatalogueContainer.setVisibility(View.VISIBLE);

View file

@ -9,22 +9,19 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.adapter.DiscoverSongAdapter;
import com.cappielloantonio.play.adapter.RecentMusicAdapter;
import com.cappielloantonio.play.databinding.FragmentHomeBinding;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.viewmodel.HomeViewModel;
import java.util.ArrayList;
import java.util.List;
public class HomeFragment extends Fragment implements RecentMusicAdapter.ItemClickListener {
public class HomeFragment extends Fragment {
private static final String TAG = "CategoriesFragment";
private FragmentHomeBinding bind;
@ -33,6 +30,7 @@ public class HomeFragment extends Fragment implements RecentMusicAdapter.ItemCli
private DiscoverSongAdapter discoverSongAdapter;
private RecentMusicAdapter recentlyAddedMusicAdapter;
private RecentMusicAdapter recentlyPlayedMusicAdapter;
private RecentMusicAdapter mostPlayedMusicAdapter;
@Nullable
@ -46,6 +44,7 @@ public class HomeFragment extends Fragment implements RecentMusicAdapter.ItemCli
init();
initDiscoverSongSlideView();
initRecentAddedSongView();
initRecentPlayedSongView();
initMostPlayedSongView();
@ -66,20 +65,27 @@ public class HomeFragment extends Fragment implements RecentMusicAdapter.ItemCli
}
private void initDiscoverSongSlideView() {
discoverSongAdapter = new DiscoverSongAdapter(requireContext(), new ArrayList<>());
discoverSongAdapter = new DiscoverSongAdapter(requireContext(), homeViewModel.getDiscoverSongList());
bind.discoverSongViewPager.setAdapter(discoverSongAdapter);
bind.discoverSongViewPager.setPageMargin(20);
homeViewModel.getDiscoverSongList().observe(requireActivity(), songs -> discoverSongAdapter.setItems(songs));
}
private void initRecentAddedSongView() {
bind.recentlyAddedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.recentlyAddedTracksRecyclerView.setHasFixedSize(true);
recentlyAddedMusicAdapter = new RecentMusicAdapter(requireContext(), new ArrayList<>());
bind.recentlyAddedTracksRecyclerView.setAdapter(recentlyAddedMusicAdapter);
homeViewModel.getRecentlyAddedSongList().observe(requireActivity(), songs -> recentlyAddedMusicAdapter.setItems(songs));
}
private void initRecentPlayedSongView() {
bind.recentlyPlayedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.recentlyPlayedTracksRecyclerView.setHasFixedSize(true);
recentlyAddedMusicAdapter = new RecentMusicAdapter(requireContext(), new ArrayList<>());
recentlyAddedMusicAdapter.setClickListener(this);
bind.recentlyPlayedTracksRecyclerView.setAdapter(recentlyAddedMusicAdapter);
homeViewModel.getRecentlyAddedSongList().observe(requireActivity(), songs -> recentlyAddedMusicAdapter.setItems(songs));
recentlyPlayedMusicAdapter = new RecentMusicAdapter(requireContext(), new ArrayList<>());
bind.recentlyPlayedTracksRecyclerView.setAdapter(recentlyPlayedMusicAdapter);
homeViewModel.getRecentlyPlayedSongList().observe(requireActivity(), songs -> recentlyPlayedMusicAdapter.setItems(songs));
}
private void initMostPlayedSongView() {
@ -87,13 +93,7 @@ public class HomeFragment extends Fragment implements RecentMusicAdapter.ItemCli
bind.mostPlayedTracksRecyclerView.setHasFixedSize(true);
mostPlayedMusicAdapter = new RecentMusicAdapter(requireContext(), new ArrayList<>());
mostPlayedMusicAdapter.setClickListener(this);
bind.mostPlayedTracksRecyclerView.setAdapter(mostPlayedMusicAdapter);
homeViewModel.getMostPlayedSongList().observe(requireActivity(), songs -> mostPlayedMusicAdapter.setItems(songs));
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(requireContext(), "Click: " + position, Toast.LENGTH_SHORT).show();
}
}

View file

@ -107,8 +107,9 @@ public class LibraryFragment extends Fragment {
bind.playlistRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
bind.playlistRecyclerView.setHasFixedSize(true);
playlistAdapter = new PlaylistAdapter(requireContext(), libraryViewModel.getPlaylist());
playlistAdapter = new PlaylistAdapter(requireContext(), new ArrayList<>());
playlistAdapter.setClickListener((view, position) -> Toast.makeText(requireContext(), "Playlist: " + position, Toast.LENGTH_SHORT).show());
bind.playlistRecyclerView.setAdapter(playlistAdapter);
libraryViewModel.getPlaylistList().observe(requireActivity(), playlists -> playlistAdapter.setItems(playlists));
}
}

View file

@ -12,12 +12,17 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.AlbumCatalogueAdapter;
import com.cappielloantonio.play.adapter.ArtistCatalogueAdapter;
import com.cappielloantonio.play.adapter.RecentSearchAdapter;
import com.cappielloantonio.play.adapter.SongResultSearchAdapter;
import com.cappielloantonio.play.databinding.FragmentSearchBinding;
import com.cappielloantonio.play.helper.recyclerview.ItemlDecoration;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.RecentSearch;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.ui.activities.MainActivity;
@ -35,6 +40,8 @@ public class SearchFragment extends Fragment {
private RecentSearchAdapter recentSearchAdapter;
private SongResultSearchAdapter songResultSearchAdapter;
private AlbumCatalogueAdapter albumResultSearchAdapter;
private ArtistCatalogueAdapter artistResultSearchAdapter;
@Nullable
@Override
@ -78,14 +85,37 @@ public class SearchFragment extends Fragment {
}
private void initSearchResultView() {
// Songs
bind.searchResultTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
bind.searchResultTracksRecyclerView.setHasFixedSize(true);
songResultSearchAdapter = new SongResultSearchAdapter(requireContext(), new ArrayList<>());
songResultSearchAdapter.setClickListener((view, position) -> {
Toast.makeText(requireContext(), "Song " + position, Toast.LENGTH_SHORT).show();
});
bind.searchResultTracksRecyclerView.setAdapter(songResultSearchAdapter);
// Albums
bind.searchResultAlbumRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
bind.searchResultAlbumRecyclerView.addItemDecoration(new ItemlDecoration(2, 20, false));
bind.searchResultAlbumRecyclerView.setHasFixedSize(true);
albumResultSearchAdapter = new AlbumCatalogueAdapter(requireContext(), new ArrayList<>());
albumResultSearchAdapter.setClickListener((view, position) -> {
Toast.makeText(requireContext(), "Album " + position, Toast.LENGTH_SHORT).show();
});
bind.searchResultAlbumRecyclerView.setAdapter(albumResultSearchAdapter);
// Artist
bind.searchResultArtistRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
bind.searchResultArtistRecyclerView.addItemDecoration(new ItemlDecoration(2, 20, false));
bind.searchResultArtistRecyclerView.setHasFixedSize(true);
artistResultSearchAdapter = new ArtistCatalogueAdapter(requireContext(), new ArrayList<>());
artistResultSearchAdapter.setClickListener((view, position) -> {
Toast.makeText(requireContext(), "Artist " + position, Toast.LENGTH_SHORT).show();
Bundle bundle = new Bundle();
bundle.putString("artistID", artistResultSearchAdapter.getItem(position).id);
activity.navController.navigate(R.id.action_searchFragment_to_artistPageFragment, bundle);
});
bind.searchResultArtistRecyclerView.setAdapter(artistResultSearchAdapter);
}
private void initSearchView() {
@ -118,5 +148,9 @@ public class SearchFragment extends Fragment {
private void performSearch(String query) {
searchViewModel.searchSong(query).observe(requireActivity(), songs -> songResultSearchAdapter.setItems(songs));
searchViewModel.searchAlbum(query).observe(requireActivity(), albums -> albumResultSearchAdapter.setItems(albums));
searchViewModel.searchArtist(query).observe(requireActivity(), artists -> artistResultSearchAdapter.setItems(artists));
bind.searchResultNestedScrollView.setVisibility(View.VISIBLE);
}
}