diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java index 74135d6c..86dd9cd9 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java @@ -2,24 +2,37 @@ package com.cappielloantonio.play.ui.fragment; import android.graphics.PorterDuff; import android.os.Bundle; +import android.util.Log; +import android.view.ContextMenu; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; +import androidx.annotation.NonNull; 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.App; import com.cappielloantonio.play.R; import com.cappielloantonio.play.adapter.SongResultSearchAdapter; import com.cappielloantonio.play.databinding.FragmentAlbumPageBinding; import com.cappielloantonio.play.glide.CustomGlideRequest; +import com.cappielloantonio.play.helper.MusicPlayerRemote; +import com.cappielloantonio.play.repository.QueueRepository; import com.cappielloantonio.play.ui.activities.MainActivity; import com.cappielloantonio.play.viewmodel.AlbumPageViewModel; +import java.util.Collections; + public class AlbumPageFragment extends Fragment { + private static final String TAG = "AlbumPageFragment"; private FragmentAlbumPageBinding bind; private MainActivity activity; @@ -67,28 +80,58 @@ public class AlbumPageFragment extends Fragment { private void initAppBar() { activity.setSupportActionBar(bind.animToolbar); - if (activity.getSupportActionBar() != null) + + if (activity.getSupportActionBar() != null) { activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + activity.getSupportActionBar().setDisplayShowHomeEnabled(true); + } - bind.collapsingToolbar.setTitle(albumPageViewModel.getAlbum().getTitle()); - bind.animToolbar.setNavigationOnClickListener(v -> activity.navController.navigateUp()); - bind.collapsingToolbar.setCollapsedTitleTextColor(getResources().getColor(R.color.titleTextColor, null)); + bind.albumNameLabel.setText(albumPageViewModel.getAlbum().getTitle()); + bind.albumArtistLabel.setText(albumPageViewModel.getAlbum().getArtistName()); + bind.albumReleaseYearLabel.setText(String.valueOf(albumPageViewModel.getAlbum().getYear())); - 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); + albumPageViewModel.getAlbumSongList().observe(requireActivity(), songs -> { + if(bind != null) { + bind.albumPagePlayButton.setOnClickListener(v -> { + QueueRepository queueRepository = new QueueRepository(App.getInstance()); + queueRepository.insertAllAndStartNew(songs); + + activity.isBottomSheetInPeek(true); + activity.setBottomSheetMusicInfo(songs.get(0)); + + MusicPlayerRemote.openQueue(songs, 0, true); + }); + + bind.albumPageShuffleButton.setOnClickListener(v -> { + Collections.shuffle(songs); + + QueueRepository queueRepository = new QueueRepository(App.getInstance()); + queueRepository.insertAllAndStartNew(songs); + + activity.isBottomSheetInPeek(true); + activity.setBottomSheetMusicInfo(songs.get(0)); + + MusicPlayerRemote.openQueue(songs, 0, true); + }); } }); + bind.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { + if ((bind.albumInfoSector.getHeight() + verticalOffset) < (2 * ViewCompat.getMinimumHeight(bind.animToolbar))) { + bind.animToolbar.setTitle(albumPageViewModel.getAlbum().getTitle()); + } else { + bind.animToolbar.setTitle("Album"); + } + }); + + bind.animToolbar.setNavigationOnClickListener(v -> activity.navController.navigateUp()); } private void initBackCover() { CustomGlideRequest.Builder .from(requireContext(), albumPageViewModel.getAlbum().getPrimary(), albumPageViewModel.getAlbum().getBlurHash(), CustomGlideRequest.PRIMARY, CustomGlideRequest.TOP_QUALITY, CustomGlideRequest.ALBUM_PIC) .build() - .into(bind.albumBackCoverImageView); + .into(bind.albumCoverImageView); } private void initSongsView() { @@ -97,6 +140,9 @@ public class AlbumPageFragment extends Fragment { songResultSearchAdapter = new SongResultSearchAdapter(activity, requireContext(), getChildFragmentManager()); bind.songRecyclerView.setAdapter(songResultSearchAdapter); - albumPageViewModel.getAlbumSongList().observe(requireActivity(), songs -> songResultSearchAdapter.setItems(songs)); + + albumPageViewModel.getAlbumSongList().observe(requireActivity(), songs -> { + songResultSearchAdapter.setItems(songs); + }); } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_arrow_back.xml b/app/src/main/res/drawable/ic_arrow_back.xml new file mode 100644 index 00000000..b941b121 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_downloading.xml b/app/src/main/res/drawable/ic_downloading.xml new file mode 100644 index 00000000..dc70bf7d --- /dev/null +++ b/app/src/main/res/drawable/ic_downloading.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_shuffle.xml b/app/src/main/res/drawable/ic_shuffle.xml new file mode 100644 index 00000000..9210568d --- /dev/null +++ b/app/src/main/res/drawable/ic_shuffle.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/fragment_album_page.xml b/app/src/main/res/layout/fragment_album_page.xml index 273be5ef..d5598495 100644 --- a/app/src/main/res/layout/fragment_album_page.xml +++ b/app/src/main/res/layout/fragment_album_page.xml @@ -1,59 +1,195 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="?attr/actionBarSize" + app:titleTextColor="@color/titleTextColor" + app:layout_collapseMode="pin" + app:navigationIcon="@drawable/ic_arrow_back" + app:popupTheme="@style/ThemeOverlay.MaterialComponents.Light" /> - + + + + + + + + + + + + + + + + + + + + + +