From c1a06011069895fe8ea21a6577abcfef40deb122 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Mon, 3 Jan 2022 23:21:49 +0100 Subject: [PATCH] Player graphical adjustments --- .idea/misc.xml | 10 +- .../ui/fragment/PlayerControllerFragment.java | 61 +++++++++ app/src/main/res/drawable/ic_lyrics.xml | 10 ++ .../main/res/drawable/ic_mix_from_here.xml | 10 ++ app/src/main/res/drawable/ic_playlist_add.xml | 10 ++ app/src/main/res/drawable/ic_queue_music.xml | 10 ++ ...nner_fragment_player_controller_layout.xml | 125 +++++++++++++----- .../layout/inner_fragment_player_queue.xml | 2 +- 8 files changed, 201 insertions(+), 37 deletions(-) create mode 100644 app/src/main/res/drawable/ic_lyrics.xml create mode 100644 app/src/main/res/drawable/ic_mix_from_here.xml create mode 100644 app/src/main/res/drawable/ic_playlist_add.xml create mode 100644 app/src/main/res/drawable/ic_queue_music.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 7e49d62c..09b7204d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -18,6 +18,8 @@ + + @@ -35,16 +37,22 @@ + + + + + + @@ -91,7 +99,7 @@ - + diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java index 2a4fe540..cee73671 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java @@ -22,17 +22,27 @@ import androidx.media3.session.SessionToken; import androidx.navigation.fragment.NavHostFragment; import androidx.viewpager2.widget.ViewPager2; +import com.cappielloantonio.play.App; import com.cappielloantonio.play.R; import com.cappielloantonio.play.databinding.InnerFragmentPlayerControllerBinding; +import com.cappielloantonio.play.interfaces.MediaCallback; +import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.repository.SongRepository; +import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.service.MediaService; import com.cappielloantonio.play.ui.activity.MainActivity; +import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog; import com.cappielloantonio.play.ui.dialog.RatingDialog; import com.cappielloantonio.play.ui.fragment.pager.PlayerControllerHorizontalPager; +import com.cappielloantonio.play.util.DownloadUtil; +import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; +import java.util.List; + public class PlayerControllerFragment extends Fragment { private static final String TAG = "PlayerCoverFragment"; @@ -43,6 +53,10 @@ public class PlayerControllerFragment extends Fragment { private ToggleButton buttonFavorite; private TextView playerSongTitleLabel; private TextView playerArtistNameLabel; + private ImageButton buttonDownload; + private ImageButton buttonAddToPlaylist; + private ImageButton buttonStartMix; + private ImageButton buttonLyrics; private MainActivity activity; private PlayerBottomSheetViewModel playerBottomSheetViewModel; @@ -61,6 +75,7 @@ public class PlayerControllerFragment extends Fragment { initCoverLyricsSlideView(); initMediaListenable(); initArtistLabelButton(); + initButtonRow(); return view; } @@ -94,6 +109,11 @@ public class PlayerControllerFragment extends Fragment { playerSongTitleLabel = bind.getRoot().findViewById(R.id.player_song_title_label); playerArtistNameLabel = bind.getRoot().findViewById(R.id.player_artist_name_label); + buttonDownload = bind.getRoot().findViewById(R.id.button_download); + buttonAddToPlaylist = bind.getRoot().findViewById(R.id.button_playlist); + buttonStartMix = bind.getRoot().findViewById(R.id.button_mix); + buttonLyrics = bind.getRoot().findViewById(R.id.button_lyrics); + playerMoveDownBottomSheet.setOnClickListener(view -> activity.collapseBottomSheet()); } @@ -190,6 +210,47 @@ public class PlayerControllerFragment extends Fragment { }); } + private void initButtonRow() { + playerBottomSheetViewModel.getLiveSong().observe(requireActivity(), song -> { + if (song != null) { + buttonDownload.setOnClickListener(view -> DownloadUtil + .getDownloadTracker(requireContext()) + .download( + MappingUtil.mapMediaItem(requireContext(), song, false), + MappingUtil.mapDownload(song, null, null) + )); + + buttonAddToPlaylist.setOnClickListener(view -> { + Bundle bundle = new Bundle(); + bundle.putParcelable("song_object", song); + + PlaylistChooserDialog dialog = new PlaylistChooserDialog(); + dialog.setArguments(bundle); + dialog.show(requireActivity().getSupportFragmentManager(), null); + }); + + buttonStartMix.setOnClickListener(view -> { + MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), song); + + SongRepository songRepository = new SongRepository(App.getInstance()); + songRepository.getInstantMix(song, 20, new MediaCallback() { + @Override + public void onError(Exception exception) { + Log.e(TAG, "onError() " + exception.getMessage()); + } + + @Override + public void onLoadMedia(List media) { + MediaManager.enqueue(mediaBrowserListenableFuture, requireContext(), (List) media, true); + } + }); + }); + } + }); + + buttonLyrics.setOnClickListener(view -> playerSongCoverViewPager.setCurrentItem(1, true)); + } + public void goBackToFirstPage() { playerSongCoverViewPager.setCurrentItem(0, false); } diff --git a/app/src/main/res/drawable/ic_lyrics.xml b/app/src/main/res/drawable/ic_lyrics.xml new file mode 100644 index 00000000..cac983a6 --- /dev/null +++ b/app/src/main/res/drawable/ic_lyrics.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_mix_from_here.xml b/app/src/main/res/drawable/ic_mix_from_here.xml new file mode 100644 index 00000000..8c351abe --- /dev/null +++ b/app/src/main/res/drawable/ic_mix_from_here.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_playlist_add.xml b/app/src/main/res/drawable/ic_playlist_add.xml new file mode 100644 index 00000000..25c22a79 --- /dev/null +++ b/app/src/main/res/drawable/ic_playlist_add.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_queue_music.xml b/app/src/main/res/drawable/ic_queue_music.xml new file mode 100644 index 00000000..88e9249c --- /dev/null +++ b/app/src/main/res/drawable/ic_queue_music.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml index 73c558c6..f1f654df 100644 --- a/app/src/main/res/layout/inner_fragment_player_controller_layout.xml +++ b/app/src/main/res/layout/inner_fragment_player_controller_layout.xml @@ -52,11 +52,18 @@ android:layout_width="0dp" android:layout_height="0dp" android:layout_marginBottom="12dp" - app:layout_constraintBottom_toTopOf="@id/player_song_title_label" + app:layout_constraintBottom_toTopOf="@id/guideline" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/appbar" /> + + + app:layout_constraintStart_toEndOf="@+id/button_rating" + app:layout_constraintTop_toBottomOf="@+id/guideline" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/player_song_title_label" /> + app:layout_constraintTop_toBottomOf="@+id/exo_progress" /> + app:layout_constraintTop_toBottomOf="@+id/exo_progress" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/exo_duration" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/exo_duration" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/exo_duration" /> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/inner_fragment_player_queue.xml b/app/src/main/res/layout/inner_fragment_player_queue.xml index 9e8a0cc0..e78dd308 100644 --- a/app/src/main/res/layout/inner_fragment_player_queue.xml +++ b/app/src/main/res/layout/inner_fragment_player_queue.xml @@ -8,7 +8,7 @@ android:layout_height="match_parent" android:clipToPadding="false" android:orientation="vertical" - android:paddingTop="12dp" + android:paddingTop="4dp" android:paddingBottom="@dimen/global_padding_bottom" /> \ No newline at end of file