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 1d3cdcd6..609cad84 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/PlaylistAdapter.java @@ -1,14 +1,17 @@ package com.cappielloantonio.play.adapter; import android.content.Context; +import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.navigation.Navigation; import androidx.recyclerview.widget.RecyclerView; import com.cappielloantonio.play.R; +import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Playlist; import java.util.ArrayList; @@ -20,7 +23,6 @@ public class PlaylistAdapter extends RecyclerView.Adapter playlists; private LayoutInflater mInflater; private Context context; - private ItemClickListener itemClickListener; public PlaylistAdapter(Context context) { this.context = context; @@ -59,21 +61,19 @@ public class PlaylistAdapter extends RecyclerView.Adapter playlists) { this.playlists = playlists; notifyDataSetChanged(); } - - public void setClickListener(ItemClickListener itemClickListener) { - this.itemClickListener = itemClickListener; - } - - public interface ItemClickListener { - void onItemClick(View view, int position); - } } 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 dae84f90..d2efdbe1 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 @@ -112,7 +112,6 @@ public class LibraryFragment extends Fragment { bind.playlistRecyclerView.setHasFixedSize(true); playlistAdapter = new PlaylistAdapter(requireContext()); - 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)); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java new file mode 100644 index 00000000..77dc7623 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java @@ -0,0 +1,96 @@ +package com.cappielloantonio.play.ui.fragment; + +import android.graphics.PorterDuff; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.cappielloantonio.play.R; +import com.cappielloantonio.play.adapter.SongResultSearchAdapter; +import com.cappielloantonio.play.databinding.FragmentAlbumPageBinding; +import com.cappielloantonio.play.databinding.FragmentPlaylistPageBinding; +import com.cappielloantonio.play.glide.CustomGlideRequest; +import com.cappielloantonio.play.ui.activities.MainActivity; +import com.cappielloantonio.play.viewmodel.AlbumPageViewModel; +import com.cappielloantonio.play.viewmodel.PlaylistPageViewModel; + +public class PlaylistPageFragment extends Fragment { + + private FragmentPlaylistPageBinding bind; + private MainActivity activity; + private PlaylistPageViewModel playlistPageViewModel; + + private SongResultSearchAdapter songResultSearchAdapter; + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + initAppBar(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + activity = (MainActivity) getActivity(); + + bind = FragmentPlaylistPageBinding.inflate(inflater, container, false); + View view = bind.getRoot(); + playlistPageViewModel = new ViewModelProvider(requireActivity()).get(PlaylistPageViewModel.class); + + init(); + initSongsView(); + + return view; + } + + @Override + public void onStart() { + super.onStart(); + activity.setBottomNavigationBarVisibility(false); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + bind = null; + } + + private void init() { + playlistPageViewModel.setPlaylist(getArguments().getParcelable("playlist_object")); + } + + private void initAppBar() { + activity.setSupportActionBar(bind.animToolbar); + if (activity.getSupportActionBar() != null) + activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + bind.collapsingToolbar.setTitle(playlistPageViewModel.getPlaylist().getName()); + bind.animToolbar.setNavigationOnClickListener(v -> activity.navController.navigateUp()); + bind.collapsingToolbar.setCollapsedTitleTextColor(getResources().getColor(R.color.titleTextColor, null)); + + bind.appbar.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { + if ((bind.collapsingToolbar.getHeight() + verticalOffset) < (2 * ViewCompat.getMinimumHeight(bind.collapsingToolbar))) { + bind.animToolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.titleTextColor, null), PorterDuff.Mode.SRC_ATOP); + } else { + bind.animToolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.white, null), PorterDuff.Mode.SRC_ATOP); + } + }); + + } + + private void initSongsView() { + bind.songRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); + bind.songRecyclerView.setHasFixedSize(true); + + songResultSearchAdapter = new SongResultSearchAdapter(activity, requireContext(), getChildFragmentManager()); + bind.songRecyclerView.setAdapter(songResultSearchAdapter); + playlistPageViewModel.getPlaylistSongList().observe(requireActivity(), songs -> songResultSearchAdapter.setItems(songs)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java new file mode 100644 index 00000000..84a3da5e --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java @@ -0,0 +1,42 @@ +package com.cappielloantonio.play.viewmodel; + +import android.app.Application; + +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LiveData; + +import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.model.Playlist; +import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.repository.SongRepository; + +import java.util.List; + +public class PlaylistPageViewModel extends AndroidViewModel { + private SongRepository songRepository; + + private LiveData> songList; + + private Playlist playlist; + + public PlaylistPageViewModel(@NonNull Application application) { + super(application); + + songRepository = new SongRepository(application); + } + + public LiveData> getPlaylistSongList() { + // Prendere le canzoni di ciascuna playlist + songList = songRepository.getAlbumListLiveSong(playlist.getId()); + return songList; + } + + public Playlist getPlaylist() { + return playlist; + } + + public void setPlaylist(Playlist playlist) { + this.playlist = playlist; + } +} diff --git a/app/src/main/res/layout/fragment_playlist_page.xml b/app/src/main/res/layout/fragment_playlist_page.xml new file mode 100644 index 00000000..273be5ef --- /dev/null +++ b/app/src/main/res/layout/fragment_playlist_page.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 667785d9..08930e65 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -98,6 +98,9 @@ app:destination="@id/syncFragment" app:popUpTo="@id/libraryFragment" app:popUpToInclusive="true" /> + +