From 898f23b9a19f9a97b48ac266d2c70e508a31e30e Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Mon, 12 Apr 2021 12:43:34 +0200 Subject: [PATCH] Added play/pause toggle button and seekbar text --- .../fragment/PlayerBottomSheetFragment.java | 27 +++++++++- .../cappielloantonio/play/util/MusicUtil.java | 15 ++++++ .../res/layout/player_body_bottom_sheet.xml | 50 ++++++++++++++++--- .../res/layout/player_header_bottom_sheet.xml | 12 +++-- 4 files changed, 90 insertions(+), 14 deletions(-) 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 aa7ac452..f64ee893 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 @@ -23,6 +23,7 @@ import com.cappielloantonio.play.helper.MusicProgressViewUpdateHelper; import com.cappielloantonio.play.interfaces.MusicServiceEventListener; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.ui.activities.MainActivity; +import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel; public class PlayerBottomSheetFragment extends Fragment implements MusicServiceEventListener, MusicProgressViewUpdateHelper.Callback { @@ -56,6 +57,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE initQueueSlideView(); initQueueRecyclerView(); initFavoriteButtonClick(); + initToggleButtonSongState(); return view; } @@ -121,6 +123,16 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE bind.playerBodyLayout.buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite()); } + private void initToggleButtonSongState() { + bind.playerHeaderLayout.playerHeaderButton.setOnClickListener(v -> { + if (MusicPlayerRemote.isPlaying()) { + MusicPlayerRemote.pauseSong(); + } else { + MusicPlayerRemote.resumePlaying(); + } + }); + } + private void initSeekBar() { bind.playerBodyLayout.playerBigSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override @@ -155,6 +167,14 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE bind.playerBodyLayout.buttonFavorite.setChecked(song.isFavorite()); } + protected void updatePlayPauseState() { + if (MusicPlayerRemote.isPlaying()) { + bind.playerHeaderLayout.playerHeaderButton.setChecked(false); + } else { + bind.playerHeaderLayout.playerHeaderButton.setChecked(true); + } + } + private void setUpMusicControllers() { // setUpPrevNext(); // setUpRepeatButton(); @@ -177,7 +197,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE @Override public void onServiceConnected() { - + updatePlayPauseState(); } @Override @@ -197,7 +217,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE @Override public void onPlayStateChanged() { - + updatePlayPauseState(); } @Override @@ -209,5 +229,8 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE public void onUpdateProgressViews(int progress, int total) { bind.playerBodyLayout.playerBigSeekBar.setMax(total); bind.playerBodyLayout.playerBigSeekBar.setProgress(progress); + + bind.playerBodyLayout.playerBigSongTimeIn.setText(MusicUtil.getReadableDurationString(progress)); + bind.playerBodyLayout.playerBigSongDuration.setText(MusicUtil.getReadableDurationString(total)); } } diff --git a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java index ad8a6701..2ba46eca 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java @@ -8,6 +8,8 @@ import com.cappielloantonio.play.model.Song; import org.jellyfin.apiclient.interaction.ApiClient; +import java.util.Locale; + public class MusicUtil { public static String getSongFileUri(Song song) { ApiClient apiClient = App.getApiClientInstance(App.getInstance()); @@ -51,4 +53,17 @@ public class MusicUtil { Log.i(MusicUtil.class.getName(), "playing audio: " + builder); return builder.toString(); } + + public static String getReadableDurationString(long songDurationMillis) { + long minutes = (songDurationMillis / 1000) / 60; + long seconds = (songDurationMillis / 1000) % 60; + + if (minutes < 60) { + return String.format(Locale.getDefault(), "%01d:%02d", minutes, seconds); + } else { + long hours = minutes / 60; + minutes = minutes % 60; + return String.format(Locale.getDefault(), "%d:%02d:%02d", hours, minutes, seconds); + } + } } 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 880f039d..6ee8ddc9 100644 --- a/app/src/main/res/layout/player_body_bottom_sheet.xml +++ b/app/src/main/res/layout/player_body_bottom_sheet.xml @@ -32,24 +32,58 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/collapse_bottom_sheet_button" /> - + app:layout_constraintTop_toBottomOf="@+id/player_song_cover_view_pager"> + + + + + + + + diff --git a/app/src/main/res/layout/player_header_bottom_sheet.xml b/app/src/main/res/layout/player_header_bottom_sheet.xml index 885250ee..12abc3a4 100644 --- a/app/src/main/res/layout/player_header_bottom_sheet.xml +++ b/app/src/main/res/layout/player_header_bottom_sheet.xml @@ -7,12 +7,16 @@ android:elevation="2dp" android:background="@color/almostCardColor"> -