mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Show the information of the media being played inside the player
This commit is contained in:
parent
ede3bf6482
commit
cbacb417ab
4 changed files with 110 additions and 40 deletions
4
.idea/misc.xml
generated
4
.idea/misc.xml
generated
|
|
@ -54,6 +54,7 @@
|
||||||
<entry key="app/src/main/res/drawable/ic_pause.xml" value="0.28055555555555556" />
|
<entry key="app/src/main/res/drawable/ic_pause.xml" value="0.28055555555555556" />
|
||||||
<entry key="app/src/main/res/drawable/ic_pause_circle.xml" value="0.28703703703703703" />
|
<entry key="app/src/main/res/drawable/ic_pause_circle.xml" value="0.28703703703703703" />
|
||||||
<entry key="app/src/main/res/drawable/ic_pause_white_24dp.xml" value="0.18958333333333333" />
|
<entry key="app/src/main/res/drawable/ic_pause_white_24dp.xml" value="0.18958333333333333" />
|
||||||
|
<entry key="app/src/main/res/drawable/ic_pill.xml" value="0.1825" />
|
||||||
<entry key="app/src/main/res/drawable/ic_play.xml" value="0.27685185185185185" />
|
<entry key="app/src/main/res/drawable/ic_play.xml" value="0.27685185185185185" />
|
||||||
<entry key="app/src/main/res/drawable/ic_play_arrow_white_24dp.xml" value="0.28055555555555556" />
|
<entry key="app/src/main/res/drawable/ic_play_arrow_white_24dp.xml" value="0.28055555555555556" />
|
||||||
<entry key="app/src/main/res/drawable/ic_play_for_work.xml" value="0.30625" />
|
<entry key="app/src/main/res/drawable/ic_play_for_work.xml" value="0.30625" />
|
||||||
|
|
@ -80,6 +81,7 @@
|
||||||
<entry key="app/src/main/res/drawable/ic_speed.xml" value="0.156" />
|
<entry key="app/src/main/res/drawable/ic_speed.xml" value="0.156" />
|
||||||
<entry key="app/src/main/res/drawable/ic_star.xml" value="0.2722222222222222" />
|
<entry key="app/src/main/res/drawable/ic_star.xml" value="0.2722222222222222" />
|
||||||
<entry key="app/src/main/res/drawable/ic_toolbar_motion_on.xml" value="0.30625" />
|
<entry key="app/src/main/res/drawable/ic_toolbar_motion_on.xml" value="0.30625" />
|
||||||
|
<entry key="app/src/main/res/drawable/ic_transcode.xml" value="0.2275" />
|
||||||
<entry key="app/src/main/res/drawable/ic_unfold.xml" value="0.5484375" />
|
<entry key="app/src/main/res/drawable/ic_unfold.xml" value="0.5484375" />
|
||||||
<entry key="app/src/main/res/drawable/outline_play_circle.xml" value="0.28703703703703703" />
|
<entry key="app/src/main/res/drawable/outline_play_circle.xml" value="0.28703703703703703" />
|
||||||
<entry key="app/src/main/res/drawable/ui_empty_list.xml" value="0.28055555555555556" />
|
<entry key="app/src/main/res/drawable/ui_empty_list.xml" value="0.28055555555555556" />
|
||||||
|
|
@ -122,7 +124,7 @@
|
||||||
<entry key="app/src/main/res/layout/fragment_song_list_page.xml" value="0.225" />
|
<entry key="app/src/main/res/layout/fragment_song_list_page.xml" value="0.225" />
|
||||||
<entry key="app/src/main/res/layout/fragment_starred.xml" value="0.3166496424923391" />
|
<entry key="app/src/main/res/layout/fragment_starred.xml" value="0.3166496424923391" />
|
||||||
<entry key="app/src/main/res/layout/inner_fragment_player_controller.xml" value="0.3229166666666667" />
|
<entry key="app/src/main/res/layout/inner_fragment_player_controller.xml" value="0.3229166666666667" />
|
||||||
<entry key="app/src/main/res/layout/inner_fragment_player_controller_layout.xml" value="0.29030797101449274" />
|
<entry key="app/src/main/res/layout/inner_fragment_player_controller_layout.xml" value="0.21822916666666667" />
|
||||||
<entry key="app/src/main/res/layout/inner_fragment_player_cover.xml" value="0.40390879478827363" />
|
<entry key="app/src/main/res/layout/inner_fragment_player_cover.xml" value="0.40390879478827363" />
|
||||||
<entry key="app/src/main/res/layout/inner_fragment_player_lyrics.xml" value="0.3229166666666667" />
|
<entry key="app/src/main/res/layout/inner_fragment_player_lyrics.xml" value="0.3229166666666667" />
|
||||||
<entry key="app/src/main/res/layout/inner_fragment_player_queue.xml" value="0.3229166666666667" />
|
<entry key="app/src/main/res/layout/inner_fragment_player_queue.xml" value="0.3229166666666667" />
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ import com.cappielloantonio.play.ui.fragment.pager.PlayerControllerHorizontalPag
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
import com.cappielloantonio.play.util.PreferenceUtil;
|
||||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||||
|
import com.google.android.material.chip.Chip;
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import com.google.common.util.concurrent.MoreExecutors;
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
|
|
||||||
|
|
@ -41,13 +42,17 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
private static final String TAG = "PlayerCoverFragment";
|
private static final String TAG = "PlayerCoverFragment";
|
||||||
|
|
||||||
private InnerFragmentPlayerControllerBinding bind;
|
private InnerFragmentPlayerControllerBinding bind;
|
||||||
private ImageView playerMoveDownBottomSheet;
|
|
||||||
private ViewPager2 playerMediaCoverViewPager;
|
private ViewPager2 playerMediaCoverViewPager;
|
||||||
private ToggleButton buttonFavorite;
|
private ToggleButton buttonFavorite;
|
||||||
private TextView playerMediaTitleLabel;
|
private TextView playerMediaTitleLabel;
|
||||||
private TextView playerArtistNameLabel;
|
private TextView playerArtistNameLabel;
|
||||||
private Button playbackSpeedButton;
|
private Button playbackSpeedButton;
|
||||||
private ToggleButton skipSilenceToggleButton;
|
private ToggleButton skipSilenceToggleButton;
|
||||||
|
private Chip playerMediaExtension;
|
||||||
|
private TextView playerMediaBitrate;
|
||||||
|
private ImageView playerMediaTranscodingIcon;
|
||||||
|
private Chip playerMediaTranscodedExtension;
|
||||||
|
private TextView playerMediaTranscodedBitrate;
|
||||||
|
|
||||||
private MainActivity activity;
|
private MainActivity activity;
|
||||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||||
|
|
@ -67,7 +72,6 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
initMediaListenable();
|
initMediaListenable();
|
||||||
initArtistLabelButton();
|
initArtistLabelButton();
|
||||||
|
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,15 +96,17 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
|
|
||||||
@SuppressLint("UnsafeOptInUsageError")
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
private void init() {
|
private void init() {
|
||||||
playerMoveDownBottomSheet = bind.getRoot().findViewById(R.id.player_move_down_bottom_sheet);
|
|
||||||
playerMediaCoverViewPager = bind.getRoot().findViewById(R.id.player_media_cover_view_pager);
|
playerMediaCoverViewPager = bind.getRoot().findViewById(R.id.player_media_cover_view_pager);
|
||||||
buttonFavorite = bind.getRoot().findViewById(R.id.button_favorite);
|
buttonFavorite = bind.getRoot().findViewById(R.id.button_favorite);
|
||||||
playerMediaTitleLabel = bind.getRoot().findViewById(R.id.player_media_title_label);
|
playerMediaTitleLabel = bind.getRoot().findViewById(R.id.player_media_title_label);
|
||||||
playerArtistNameLabel = bind.getRoot().findViewById(R.id.player_artist_name_label);
|
playerArtistNameLabel = bind.getRoot().findViewById(R.id.player_artist_name_label);
|
||||||
playbackSpeedButton = bind.getRoot().findViewById(R.id.player_playback_speed_button);
|
playbackSpeedButton = bind.getRoot().findViewById(R.id.player_playback_speed_button);
|
||||||
skipSilenceToggleButton = bind.getRoot().findViewById(R.id.player_skip_silence_toggle_button);
|
skipSilenceToggleButton = bind.getRoot().findViewById(R.id.player_skip_silence_toggle_button);
|
||||||
|
playerMediaExtension = bind.getRoot().findViewById(R.id.player_media_extension);
|
||||||
playerMoveDownBottomSheet.setOnClickListener(view -> activity.collapseBottomSheet());
|
playerMediaBitrate = bind.getRoot().findViewById(R.id.player_media_bitrate);
|
||||||
|
playerMediaTranscodingIcon = bind.getRoot().findViewById(R.id.player_media_transcoding_audio);
|
||||||
|
playerMediaTranscodedExtension = bind.getRoot().findViewById(R.id.player_media_transcoded_extension);
|
||||||
|
playerMediaTranscodedBitrate = bind.getRoot().findViewById(R.id.player_media_transcoded_bitrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("UnsafeOptInUsageError")
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
|
|
@ -131,12 +137,14 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
private void setMediaControllerListener(MediaBrowser mediaBrowser) {
|
private void setMediaControllerListener(MediaBrowser mediaBrowser) {
|
||||||
setMediaControllerUI(mediaBrowser);
|
setMediaControllerUI(mediaBrowser);
|
||||||
setMetadata(mediaBrowser.getMediaMetadata());
|
setMetadata(mediaBrowser.getMediaMetadata());
|
||||||
|
setMediaInfo(mediaBrowser.getMediaMetadata());
|
||||||
|
|
||||||
mediaBrowser.addListener(new Player.Listener() {
|
mediaBrowser.addListener(new Player.Listener() {
|
||||||
@Override
|
@Override
|
||||||
public void onMediaMetadataChanged(@NonNull MediaMetadata mediaMetadata) {
|
public void onMediaMetadataChanged(@NonNull MediaMetadata mediaMetadata) {
|
||||||
setMediaControllerUI(mediaBrowser);
|
setMediaControllerUI(mediaBrowser);
|
||||||
setMetadata(mediaMetadata);
|
setMetadata(mediaMetadata);
|
||||||
|
setMediaInfo(mediaMetadata);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -150,6 +158,41 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
playerArtistNameLabel.setSelected(true);
|
playerArtistNameLabel.setSelected(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setMediaInfo(MediaMetadata mediaMetadata) {
|
||||||
|
if(mediaMetadata.extras != null) {
|
||||||
|
String extension = mediaMetadata.extras.getString("extension", "Unknown format");
|
||||||
|
String bitrate = mediaMetadata.extras.getInt("bitrate", 0) != 0 ? mediaMetadata.extras.getInt("bitrate", 0) + "kbps" : "Original";
|
||||||
|
|
||||||
|
playerMediaExtension.setText(extension);
|
||||||
|
|
||||||
|
if(bitrate.equals("Original")) {
|
||||||
|
playerMediaBitrate.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
playerMediaBitrate.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
playerMediaBitrate.setText(bitrate);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String transcodingExtension = MusicUtil.getTranscodingFormatPreference(requireContext());
|
||||||
|
String transcodingBitrate = Integer.parseInt(MusicUtil.getBitratePreference(requireContext())) != 0 ? Integer.parseInt(MusicUtil.getBitratePreference(requireContext())) + "kbps" : "Original";
|
||||||
|
|
||||||
|
if(transcodingExtension.equals("raw") && transcodingBitrate.equals("Original")) {
|
||||||
|
playerMediaTranscodingIcon.setVisibility(View.GONE);
|
||||||
|
playerMediaTranscodedBitrate.setVisibility(View.GONE);
|
||||||
|
playerMediaTranscodedExtension.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
playerMediaTranscodingIcon.setVisibility(View.VISIBLE);
|
||||||
|
playerMediaTranscodedBitrate.setVisibility(View.VISIBLE);
|
||||||
|
playerMediaTranscodedExtension.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
playerMediaTranscodedExtension.setText(transcodingExtension);
|
||||||
|
playerMediaTranscodedBitrate.setText(transcodingBitrate);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("UnsafeOptInUsageError")
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
private void setMediaControllerUI(MediaBrowser mediaBrowser) {
|
private void setMediaControllerUI(MediaBrowser mediaBrowser) {
|
||||||
initPlaybackSpeedButton(mediaBrowser);
|
initPlaybackSpeedButton(mediaBrowser);
|
||||||
|
|
@ -205,9 +248,7 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
playerBottomSheetViewModel.getLiveMedia().observe(requireActivity(), media -> {
|
playerBottomSheetViewModel.getLiveMedia().observe(requireActivity(), media -> {
|
||||||
if (media != null) {
|
if (media != null) {
|
||||||
buttonFavorite.setChecked(media.isStarred());
|
buttonFavorite.setChecked(media.isStarred());
|
||||||
|
|
||||||
buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext(), media));
|
buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext(), media));
|
||||||
|
|
||||||
buttonFavorite.setOnLongClickListener(v -> {
|
buttonFavorite.setOnLongClickListener(v -> {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putParcelable("song_object", media);
|
bundle.putParcelable("song_object", media);
|
||||||
|
|
|
||||||
9
app/src/main/res/drawable/ic_transcode.xml
Normal file
9
app/src/main/res/drawable/ic_transcode.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/titleTextColor"
|
||||||
|
android:pathData="M19,4h-4L7.11,16.63 4.5,12 9,4H5L0.5,12 5,20h4l7.89,-12.63L19.5,12 15,20h4l4.5,-8L19,4z"/>
|
||||||
|
</vector>
|
||||||
|
|
@ -5,52 +5,70 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<LinearLayout
|
||||||
android:id="@+id/appbar"
|
android:id="@+id/player_media_quality_sector"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/player_media_extension"
|
||||||
android:layout_width="match_parent"
|
style="@style/Widget.Material3.Chip.Suggestion"
|
||||||
android:layout_height="wrap_content">
|
android:checked="true"
|
||||||
|
android:clickable="false"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:chipStrokeWidth="0dp"
|
||||||
|
android:text="Unknown"/>
|
||||||
|
|
||||||
<LinearLayout
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/player_media_bitrate"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/player_move_down_bottom_sheet"
|
android:id="@+id/player_media_transcoding_audio"
|
||||||
android:layout_width="32dp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="32dp"
|
android:layout_height="20dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:src="@drawable/ic_transcode"
|
||||||
android:layout_marginEnd="8dp"
|
android:layout_margin="12dp"
|
||||||
android:background="@drawable/ic_bottom_sheet_down"
|
android:visibility="gone"/>
|
||||||
android:foreground="?android:attr/selectableItemBackgroundBorderless" />
|
|
||||||
|
|
||||||
<TextView
|
<com.google.android.material.chip.Chip
|
||||||
style="@style/HeadlineMedium"
|
android:id="@+id/player_media_transcoded_extension"
|
||||||
android:layout_width="match_parent"
|
style="@style/Widget.Material3.Chip.Suggestion"
|
||||||
android:layout_height="wrap_content"
|
android:checked="true"
|
||||||
android:paddingStart="8dp"
|
android:clickable="false"
|
||||||
android:paddingEnd="8dp"
|
android:layout_width="wrap_content"
|
||||||
android:text="@string/player_bottom_sheet_title" />
|
android:layout_height="wrap_content"
|
||||||
</LinearLayout>
|
app:chipStrokeWidth="0dp"
|
||||||
</com.google.android.material.appbar.MaterialToolbar>
|
android:text="Unknown"
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/player_media_transcoded_bitrate"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.viewpager2.widget.ViewPager2
|
<androidx.viewpager2.widget.ViewPager2
|
||||||
android:id="@+id/player_media_cover_view_pager"
|
android:id="@+id/player_media_cover_view_pager"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
app:layout_constraintBottom_toTopOf="@id/guideline"
|
app:layout_constraintBottom_toTopOf="@id/guideline"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/appbar" />
|
app:layout_constraintTop_toBottomOf="@+id/player_media_quality_sector" />
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/guideline"
|
android:id="@+id/guideline"
|
||||||
|
|
@ -255,8 +273,8 @@
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@id/exo_play_pause"
|
android:id="@id/exo_play_pause"
|
||||||
style="@style/ExoStyledControls.Button.Center.PlayPause"
|
style="@style/ExoStyledControls.Button.Center.PlayPause"
|
||||||
android:layout_width="70dp"
|
android:layout_width="80dp"
|
||||||
android:layout_height="70dp"
|
android:layout_height="80dp"
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue