diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/DiscoverSongAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/DiscoverSongAdapter.java index 0e992516..23a18637 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/DiscoverSongAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/DiscoverSongAdapter.java @@ -102,7 +102,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew(songs); - mainActivity.isBottomSheetInPeek(true); + mainActivity.setBottomSheetInPeek(true); mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition())); MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java b/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java index 48deb2d0..e4451d43 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/activity/MainActivity.java @@ -12,6 +12,7 @@ import androidx.lifecycle.ViewModelProvider; import androidx.navigation.NavController; import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.ui.NavigationUI; +import androidx.viewpager2.widget.ViewPager2; import com.cappielloantonio.play.App; import com.cappielloantonio.play.R; @@ -97,10 +98,10 @@ public class MainActivity extends BaseActivity { /* * All'apertura mostro il bottom sheet solo se in coda c'รจ qualcosa */ - isBottomSheetInPeek(mainViewModel.isQueueLoaded()); + setBottomSheetInPeek(mainViewModel.isQueueLoaded()); } - public void isBottomSheetInPeek(Boolean isVisible) { + public void setBottomSheetInPeek(Boolean isVisible) { if (isVisible) { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } else { @@ -108,6 +109,10 @@ public class MainActivity extends BaseActivity { } } + public void setBottomSheetDraggableState(Boolean isDraggable) { + bottomSheetBehavior.setDraggable(isDraggable); + } + private void initNavigation() { bottomNavigationView = findViewById(R.id.bottom_navigation); navHostFragment = (NavHostFragment) fragmentManager.findFragmentById(R.id.nav_host_fragment); @@ -150,20 +155,26 @@ public class MainActivity extends BaseActivity { new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View view, int state) { + PlayerBottomSheetFragment playerBottomSheetFragment = (PlayerBottomSheetFragment) getSupportFragmentManager().findFragmentByTag("PlayerBottomSheet"); + switch (state) { case BottomSheetBehavior.STATE_HIDDEN: MusicPlayerRemote.quitPlaying(); break; case BottomSheetBehavior.STATE_COLLAPSED: + if (playerBottomSheetFragment != null) { + playerBottomSheetFragment.goBackToFirstPage(); + } case BottomSheetBehavior.STATE_SETTLING: - PlayerBottomSheetFragment playerBottomSheetFragment = (PlayerBottomSheetFragment) getSupportFragmentManager().findFragmentByTag("PlayerBottomSheet"); if (playerBottomSheetFragment != null) { playerBottomSheetFragment.scrollOnTop(); - // playerBottomSheetFragment.setPlayerCommandViewVisibility(false); } break; - case BottomSheetBehavior.STATE_DRAGGING: case BottomSheetBehavior.STATE_EXPANDED: + if (playerBottomSheetFragment != null) { + setBottomSheetDraggableState(playerBottomSheetFragment.isViewPagerInFirstPage()); + } + case BottomSheetBehavior.STATE_DRAGGING: case BottomSheetBehavior.STATE_HALF_EXPANDED: break; } @@ -219,7 +230,7 @@ public class MainActivity extends BaseActivity { } public void goFromLogin() { - isBottomSheetInPeek(mainViewModel.isQueueLoaded()); + setBottomSheetInPeek(mainViewModel.isQueueLoaded()); goToHome(); } 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 414bd737..18fe3435 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 @@ -138,7 +138,7 @@ public class AlbumPageFragment extends Fragment { QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew(songs); - activity.isBottomSheetInPeek(true); + activity.setBottomSheetInPeek(true); activity.setBottomSheetMusicInfo(songs.get(0)); MusicPlayerRemote.openQueue(songs, 0, true); @@ -150,7 +150,7 @@ public class AlbumPageFragment extends Fragment { QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew(songs); - activity.isBottomSheetInPeek(true); + activity.setBottomSheetInPeek(true); activity.setBottomSheetMusicInfo(songs.get(0)); MusicPlayerRemote.openQueue(songs, 0, true); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java index 48c9dc7d..5ede9a94 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistPageFragment.java @@ -149,7 +149,7 @@ public class ArtistPageFragment extends Fragment { queueRepository.insertAllAndStartNew(songs); MusicPlayerRemote.openQueue(songs, 0, true); - activity.isBottomSheetInPeek(true); + activity.setBottomSheetInPeek(true); } else { Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_tracks), Toast.LENGTH_SHORT).show(); } @@ -170,7 +170,7 @@ public class ArtistPageFragment extends Fragment { QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew((ArrayList) media); - activity.isBottomSheetInPeek(true); + activity.setBottomSheetInPeek(true); activity.setBottomSheetMusicInfo((Song) media.get(0)); MusicPlayerRemote.openQueue((List) media, 0, true); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java index 85d41fca..c81b20ea 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java @@ -126,6 +126,19 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE private void initCoverLyricsSlideView() { bodyBind.playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); bodyBind.playerSongCoverViewPager.setAdapter(new PlayerNowPlayingSongAdapter(this)); + + bodyBind.playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + + if (position == 0) { + activity.setBottomSheetDraggableState(true); + } else if (position == 1) { + activity.setBottomSheetDraggableState(false); + } + } + }); } private void initQueueRecyclerView() { @@ -213,7 +226,13 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE } private void initMusicCommandUnfoldButton() { - bodyBind.playerCommandUnfoldButton.setOnClickListener(view -> setPlayerCommandViewVisibility(bodyBind.playerCommandCardview.getVisibility() == View.INVISIBLE || bodyBind.playerCommandCardview.getVisibility() == View.GONE)); + bodyBind.playerCommandUnfoldButton.setOnClickListener(view -> { + if (bodyBind.playerCommandCardview.getVisibility() == View.INVISIBLE || bodyBind.playerCommandCardview.getVisibility() == View.GONE) { + bodyBind.playerCommandCardview.setVisibility(View.VISIBLE); + } else { + bodyBind.playerCommandCardview.setVisibility(View.GONE); + } + }); } private void initMusicCommandButton() { @@ -290,14 +309,6 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE bodyBind.buttonFavorite.setChecked(song.isFavorite()); } - public void setPlayerCommandViewVisibility(boolean isVisible) { - if (isVisible) { - bodyBind.playerCommandCardview.setVisibility(View.VISIBLE); - } else { - bodyBind.playerCommandCardview.setVisibility(View.GONE); - } - } - protected void updatePlayPauseState() { headerBind.playerHeaderButton.setChecked(!MusicPlayerRemote.isPlaying()); bodyBind.playerBigPlayPauseButton.setChecked(!MusicPlayerRemote.isPlaying()); @@ -315,6 +326,14 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE bind.playerNestedScrollView.fullScroll(ScrollView.FOCUS_UP); } + public void goBackToFirstPage() { + bodyBind.playerSongCoverViewPager.setCurrentItem(0); + } + + public boolean isViewPagerInFirstPage() { + return bodyBind.playerSongCoverViewPager.getCurrentItem() == 0; + } + @Override public void onServiceConnected() { setSongInfo(Objects.requireNonNull(MusicPlayerRemote.getCurrentSong())); 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 index e81308e2..1d12d9bd 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java @@ -143,7 +143,7 @@ public class PlaylistPageFragment extends Fragment { QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew(songs); - activity.isBottomSheetInPeek(true); + activity.setBottomSheetInPeek(true); activity.setBottomSheetMusicInfo(songs.get(0)); MusicPlayerRemote.openQueue(songs, 0, true); @@ -155,7 +155,7 @@ public class PlaylistPageFragment extends Fragment { QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew(songs); - activity.isBottomSheetInPeek(true); + activity.setBottomSheetInPeek(true); activity.setBottomSheetMusicInfo(songs.get(0)); MusicPlayerRemote.openQueue(songs, 0, true); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java index fdc75a82..a7fae63f 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java @@ -138,7 +138,7 @@ public class SongListPageFragment extends Fragment { QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew(songs); - activity.isBottomSheetInPeek(true); + activity.setBottomSheetInPeek(true); activity.setBottomSheetMusicInfo(songs.get(0)); MusicPlayerRemote.openQueue(songs, 0, true); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java index f67441ce..28842c81 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java @@ -94,7 +94,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew((ArrayList) media); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); ((MainActivity) requireActivity()).setBottomSheetMusicInfo((Song) media.get(0)); MusicPlayerRemote.openQueue((List) media, 0, true); @@ -117,7 +117,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements queueRepository.insertAllAndStartNew(songs); MusicPlayerRemote.openQueue(songs, 0, true); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); dismissBottomSheet(); }); @@ -126,7 +126,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements TextView playNext = view.findViewById(R.id.play_next_text_view); playNext.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { MusicPlayerRemote.playNext(songs); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); dismissBottomSheet(); })); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java index c3902c00..7011eabf 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/ArtistBottomSheetDialog.java @@ -88,7 +88,7 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew((ArrayList) media); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); ((MainActivity) requireActivity()).setBottomSheetMusicInfo((Song) media.get(0)); MusicPlayerRemote.openQueue((List) media, 0, true); @@ -110,7 +110,7 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement queueRepository.insertAllAndStartNew(songs); MusicPlayerRemote.openQueue(songs, 0, true); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); } else { Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_tracks), Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java index 53b78f50..1a182454 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java @@ -99,7 +99,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements QueueRepository queueRepository = new QueueRepository(App.getInstance()); queueRepository.insertAllAndStartNew(opener); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); ((MainActivity) requireActivity()).setBottomSheetMusicInfo(song); SongRepository songRepository = new SongRepository(App.getInstance()); @@ -121,14 +121,14 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements TextView playNext = view.findViewById(R.id.play_next_text_view); playNext.setOnClickListener(v -> { MusicPlayerRemote.playNext(song); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); dismissBottomSheet(); }); TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view); addToQueue.setOnClickListener(v -> { MusicPlayerRemote.enqueue(song); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + ((MainActivity) requireActivity()).setBottomSheetInPeek(true); dismissBottomSheet(); }); diff --git a/app/src/main/res/layout/player_body_bottom_sheet.xml b/app/src/main/res/layout/player_body_bottom_sheet.xml index 394ae47d..1e753e76 100644 --- a/app/src/main/res/layout/player_body_bottom_sheet.xml +++ b/app/src/main/res/layout/player_body_bottom_sheet.xml @@ -187,6 +187,7 @@ android:layout_height="wrap_content" android:backgroundTint="@color/colorPrimary" app:cardElevation="0dp" + android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/player_music_command_sector"> @@ -203,9 +204,9 @@ android:layout_marginEnd="24dp" android:background="?attr/selectableItemBackgroundBorderless" android:scaleType="fitCenter" + app:layout_constraintBottom_toBottomOf="@+id/player_big_play_pause_button" app:layout_constraintEnd_toStartOf="@+id/player_big_play_pause_button" app:layout_constraintTop_toTopOf="@+id/player_big_play_pause_button" - app:layout_constraintBottom_toBottomOf="@+id/player_big_play_pause_button" app:srcCompat="@drawable/ic_skip_previous" /> @@ -253,8 +254,21 @@ android:layout_height="wrap_content" android:clipToPadding="false" android:paddingTop="12dp" - android:paddingBottom="18dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/player_command_cardview" /> + +