Implementation of song/album/artist page list

This commit is contained in:
CappielloAntonio 2021-07-30 17:12:08 +02:00
parent 051ba23b58
commit b5eaa1e523
17 changed files with 550 additions and 40 deletions

View file

@ -0,0 +1,111 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter;
import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
import com.cappielloantonio.play.databinding.FragmentAlbumListPageBinding;
import com.cappielloantonio.play.databinding.FragmentSongListPageBinding;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.viewmodel.AlbumListPageViewModel;
import com.cappielloantonio.play.viewmodel.SongListPageViewModel;
import java.util.Collections;
public class AlbumListPageFragment extends Fragment {
private FragmentAlbumListPageBinding bind;
private MainActivity activity;
private AlbumListPageViewModel albumListPageViewModel;
private AlbumHorizontalAdapter albumHorizontalAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentAlbumListPageBinding.inflate(inflater, container, false);
View view = bind.getRoot();
albumListPageViewModel = new ViewModelProvider(requireActivity()).get(AlbumListPageViewModel.class);
init();
initAppBar();
initAlbumListView();
return view;
}
@Override
public void onStart() {
super.onStart();
activity.setBottomNavigationBarVisibility(false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void init() {
if(getArguments().getString(Album.RECENTLY_PLAYED) != null) {
albumListPageViewModel.title = Album.RECENTLY_PLAYED;
bind.pageTitleLabel.setText("Recently played albums");
}
else if(getArguments().getString(Album.MOST_PLAYED) != null) {
albumListPageViewModel.title = Album.MOST_PLAYED;
bind.pageTitleLabel.setText("Most played albums");
}
else if(getArguments().getString(Album.RECENTLY_ADDED) != null) {
albumListPageViewModel.title = Album.RECENTLY_ADDED;
bind.pageTitleLabel.setText("Recently added albums");
}
else if(getArguments().getString(Album.STARRED) != null) {
albumListPageViewModel.title = Album.STARRED;
bind.pageTitleLabel.setText("Starred albums");
}
}
private void initAppBar() {
activity.setSupportActionBar(bind.toolbar);
if (activity.getSupportActionBar() != null) {
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
activity.getSupportActionBar().setDisplayShowHomeEnabled(true);
}
bind.toolbar.setNavigationOnClickListener(v -> {
activity.navController.navigateUp();
});
bind.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> {
if ((bind.albumInfoSector.getHeight() + verticalOffset) < (2 * ViewCompat.getMinimumHeight(bind.toolbar))) {
bind.toolbar.setTitle("Albums");
} else {
bind.toolbar.setTitle("");
}
});
}
private void initAlbumListView() {
bind.albumListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
bind.albumListRecyclerView.setHasFixedSize(true);
albumHorizontalAdapter = new AlbumHorizontalAdapter(activity, requireContext(), getChildFragmentManager());
bind.albumListRecyclerView.setAdapter(albumHorizontalAdapter);
albumListPageViewModel.getAlbumList(requireActivity()).observe(requireActivity(), albums -> albumHorizontalAdapter.setItems(albums));
}
}

View file

@ -0,0 +1,93 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter;
import com.cappielloantonio.play.adapter.ArtistHorizontalAdapter;
import com.cappielloantonio.play.databinding.FragmentAlbumListPageBinding;
import com.cappielloantonio.play.databinding.FragmentArtistListPageBinding;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.viewmodel.AlbumListPageViewModel;
import com.cappielloantonio.play.viewmodel.ArtistListPageViewModel;
public class ArtistListPageFragment extends Fragment {
private FragmentArtistListPageBinding bind;
private MainActivity activity;
private ArtistListPageViewModel artistListPageViewModel;
private ArtistHorizontalAdapter artistHorizontalAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentArtistListPageBinding.inflate(inflater, container, false);
View view = bind.getRoot();
artistListPageViewModel = new ViewModelProvider(requireActivity()).get(ArtistListPageViewModel.class);
init();
initAppBar();
initArtistListView();
return view;
}
@Override
public void onStart() {
super.onStart();
activity.setBottomNavigationBarVisibility(false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void init() {
if(getArguments().getString(Album.STARRED) != null) {
artistListPageViewModel.title = Album.STARRED;
bind.pageTitleLabel.setText("Starred artists");
}
}
private void initAppBar() {
activity.setSupportActionBar(bind.toolbar);
if (activity.getSupportActionBar() != null) {
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
activity.getSupportActionBar().setDisplayShowHomeEnabled(true);
}
bind.toolbar.setNavigationOnClickListener(v -> {
activity.navController.navigateUp();
});
bind.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> {
if ((bind.artistInfoSector.getHeight() + verticalOffset) < (2 * ViewCompat.getMinimumHeight(bind.toolbar))) {
bind.toolbar.setTitle("Artists");
} else {
bind.toolbar.setTitle("");
}
});
}
private void initArtistListView() {
bind.artistListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
bind.artistListRecyclerView.setHasFixedSize(true);
artistHorizontalAdapter = new ArtistHorizontalAdapter(activity, requireContext(), getChildFragmentManager());
bind.artistListRecyclerView.setAdapter(artistHorizontalAdapter);
artistListPageViewModel.getArtistList().observe(requireActivity(), artists -> artistHorizontalAdapter.setItems(artists));
}
}

View file

@ -4,7 +4,6 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -25,15 +24,14 @@ import com.cappielloantonio.play.adapter.RecentMusicAdapter;
import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
import com.cappielloantonio.play.adapter.YearAdapter;
import com.cappielloantonio.play.databinding.FragmentHomeBinding;
import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.MappingUtil;
import com.cappielloantonio.play.util.UIUtil;
import com.cappielloantonio.play.viewmodel.HomeViewModel;
import java.util.List;
public class HomeFragment extends Fragment {
private static final String TAG = "CategoriesFragment";
@ -98,38 +96,38 @@ public class HomeFragment extends Fragment {
private void init() {
bind.recentlyAddedAlbumsTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putString(Song.RECENTLY_ADDED, Song.RECENTLY_ADDED);
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
bundle.putString(Album.RECENTLY_ADDED, Album.RECENTLY_ADDED);
activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle);
});
bind.recentlyPlayedAlbumsTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putString(Song.RECENTLY_PLAYED, Song.RECENTLY_PLAYED);
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
bundle.putString(Album.RECENTLY_PLAYED, Album.RECENTLY_PLAYED);
activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle);
});
bind.mostPlayedAlbumsTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putString(Song.MOST_PLAYED, Song.MOST_PLAYED);
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
bundle.putString(Album.MOST_PLAYED, Album.MOST_PLAYED);
activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle);
});
bind.starredTracksTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putString(Song.IS_FAVORITE, Song.IS_FAVORITE);
bundle.putString(Song.STARRED, Song.STARRED);
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
});
bind.starredAlbumsTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putString(Song.IS_FAVORITE, Song.IS_FAVORITE);
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
bundle.putString(Album.STARRED, Album.STARRED);
activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle);
});
bind.starredArtistsTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putString(Song.IS_FAVORITE, Song.IS_FAVORITE);
activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle);
bundle.putString(Artist.STARRED, Artist.STARRED);
activity.navController.navigate(R.id.action_homeFragment_to_artistListPageFragment, bundle);
});
bind.downloadedTracksTextViewClickable.setOnClickListener(v -> {
@ -180,6 +178,8 @@ public class HomeFragment extends Fragment {
}
private void initYearSongView() {
if(bind != null) bind.homeFlashbackSector.setVisibility(!homeViewModel.getYearList().isEmpty() ? View.VISIBLE : View.GONE);
bind.yearsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.yearsRecyclerView.setHasFixedSize(true);

View file

@ -60,25 +60,25 @@ public class SongListPageFragment extends Fragment {
private void init() {
if(getArguments().getString(Song.RECENTLY_PLAYED) != null) {
songListPageViewModel.title = Song.RECENTLY_PLAYED;
bind.pageTitleLabel.setText("Recently played songs");
bind.pageTitleLabel.setText("Recently played tracks");
}
else if(getArguments().getString(Song.MOST_PLAYED) != null) {
songListPageViewModel.title = Song.MOST_PLAYED;
bind.pageTitleLabel.setText("Most played songs");
bind.pageTitleLabel.setText("Most played tracks");
}
else if(getArguments().getString(Song.RECENTLY_ADDED) != null) {
songListPageViewModel.title = Song.RECENTLY_ADDED;
bind.pageTitleLabel.setText("Recently added song");
bind.pageTitleLabel.setText("Recently added tracks");
}
else if(getArguments().getString(Song.BY_GENRE) != null) {
songListPageViewModel.title = Song.BY_GENRE;
songListPageViewModel.genre = getArguments().getParcelable("genre_object");
bind.pageTitleLabel.setText(songListPageViewModel.genre.getName() + ": all songs");
bind.pageTitleLabel.setText(songListPageViewModel.genre.getName() + ": all tracks");
}
else if(getArguments().getString(Song.BY_ARTIST) != null) {
songListPageViewModel.title = Song.BY_ARTIST;
songListPageViewModel.artist = getArguments().getParcelable("artist_object");
bind.pageTitleLabel.setText(songListPageViewModel.artist.getName() + "'s top songs");
bind.pageTitleLabel.setText(songListPageViewModel.artist.getName() + "'s top tracks");
}
else if(getArguments().getString(Song.BY_GENRES) != null) {
songListPageViewModel.title = Song.BY_GENRES;
@ -91,19 +91,14 @@ public class SongListPageFragment extends Fragment {
songListPageViewModel.year = getArguments().getInt("year_object");
bind.pageTitleLabel.setText("Year " + songListPageViewModel.year);
}
else if(getArguments().getString(Song.IS_FAVORITE) != null) {
songListPageViewModel.title = Song.IS_FAVORITE;
bind.pageTitleLabel.setText("Favourite song");
else if(getArguments().getString(Song.STARRED) != null) {
songListPageViewModel.title = Song.STARRED;
bind.pageTitleLabel.setText("Starred tracks");
}
else if(getArguments().getString(Song.DOWNLOADED) != null) {
songListPageViewModel.title = Song.DOWNLOADED;
bind.pageTitleLabel.setText("Downloaded");
}
else if(getArguments().getString(Song.RADIO) != null) {
songListPageViewModel.title = Song.IS_FAVORITE;
songListPageViewModel.year = getArguments().getInt("radio_object");
bind.pageTitleLabel.setText("Radio");
}
}
private void initAppBar() {