mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 18:03:33 +00:00
Added a viewpager on the music playback screen to display the lyrics
This commit is contained in:
parent
84fc07efe7
commit
d8662820f7
15 changed files with 176 additions and 162 deletions
|
|
@ -188,7 +188,7 @@ public class MainActivity extends BaseActivity {
|
|||
PlayerBottomSheetFragment playerBottomSheetFragment = (PlayerBottomSheetFragment) getSupportFragmentManager().findFragmentByTag("PlayerBottomSheet");
|
||||
if (playerBottomSheetFragment == null) return;
|
||||
|
||||
playerBottomSheetFragment.scrollPager(song, 0, false);
|
||||
playerBottomSheetFragment.setSongInfo(song);
|
||||
}
|
||||
|
||||
public void collapseBottomSheet() {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
package com.cappielloantonio.play.ui.fragment;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ScrollView;
|
||||
|
|
@ -34,7 +36,6 @@ import com.cappielloantonio.play.ui.activity.MainActivity;
|
|||
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||
|
||||
import java.util.Collections;
|
||||
|
|
@ -49,7 +50,6 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
private MainActivity activity;
|
||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||
|
||||
private PlayerNowPlayingSongAdapter playerNowPlayingSongAdapter;
|
||||
private PlayerSongQueueAdapter playerSongQueueAdapter;
|
||||
|
||||
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
|
||||
|
|
@ -75,8 +75,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||
|
||||
init();
|
||||
initLyricsView();
|
||||
initQueueSlideView();
|
||||
initCoverLyricsSlideView();
|
||||
initQueueRecyclerView();
|
||||
initFavoriteButtonClick();
|
||||
initMusicCommandUnfoldButton();
|
||||
|
|
@ -127,59 +126,9 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
bodyBind.playerMoveDownBottomSheet.setOnClickListener(view -> activity.collapseBottomSheet());
|
||||
}
|
||||
|
||||
private void initLyricsView() {
|
||||
/*playerBottomSheetViewModel.getLyrics().observe(requireActivity(), lyrics -> {
|
||||
if (lyrics != null && !lyrics.trim().equals("")) {
|
||||
bodyBind.playerSongLyricsCardview.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
bodyBind.playerSongLyricsCardview.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
bodyBind.playerSongLyricsTextView.setText(MusicUtil.getReadableString(lyrics));
|
||||
});
|
||||
|
||||
bodyBind.playerSongLyricsLabelClickable.setOnClickListener(view -> {
|
||||
if (bodyBind.playerSongLyricsTextView.getVisibility() == View.INVISIBLE || bodyBind.playerSongLyricsTextView.getVisibility() == View.GONE) {
|
||||
setLyricsTextViewVisibility(true);
|
||||
} else {
|
||||
setLyricsTextViewVisibility(false);
|
||||
}
|
||||
});*/
|
||||
}
|
||||
|
||||
private void initQueueSlideView() {
|
||||
private void initCoverLyricsSlideView() {
|
||||
bodyBind.playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
||||
|
||||
playerNowPlayingSongAdapter = new PlayerNowPlayingSongAdapter(requireContext());
|
||||
bodyBind.playerSongCoverViewPager.setAdapter(playerNowPlayingSongAdapter);
|
||||
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerNowPlayingSongAdapter.setItems(MappingUtil.mapQueue(queue)));
|
||||
|
||||
bodyBind.playerSongCoverViewPager.setOffscreenPageLimit(3);
|
||||
bodyBind.playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||
// 0 = IDLE
|
||||
// 1 = DRAGGING
|
||||
// 2 = SETTLING
|
||||
// -1 = NEW
|
||||
int pageState = -1;
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
super.onPageScrollStateChanged(state);
|
||||
pageState = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
super.onPageSelected(position);
|
||||
|
||||
if (pageState != -1) {
|
||||
MusicPlayerRemote.playSongAt(position);
|
||||
pageState = -1;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setViewPageDelayed(PreferenceUtil.getInstance(requireContext()).getPosition());
|
||||
bodyBind.playerSongCoverViewPager.setAdapter(new PlayerNowPlayingSongAdapter(this));
|
||||
}
|
||||
|
||||
private void initQueueRecyclerView() {
|
||||
|
|
@ -326,17 +275,8 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
});
|
||||
}
|
||||
|
||||
private void setViewPageDelayed(int position) {
|
||||
final Handler handler = new Handler();
|
||||
final Runnable r = () -> {
|
||||
if (bind != null) bodyBind.playerSongCoverViewPager.setCurrentItem(position, false);
|
||||
};
|
||||
handler.postDelayed(r, 100);
|
||||
}
|
||||
|
||||
private void setSongInfo(Song song) {
|
||||
// setLyricsTextViewVisibility(false);
|
||||
playerBottomSheetViewModel.refreshSongLyrics(requireActivity(), song);
|
||||
public void setSongInfo(Song song) {
|
||||
playerBottomSheetViewModel.refreshSongInfo(requireActivity(), song);
|
||||
|
||||
bodyBind.playerSongTitleLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||
bodyBind.playerArtistNameLabel.setText(MusicUtil.getReadableString(song.getArtistName()));
|
||||
|
|
@ -354,7 +294,7 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
}
|
||||
|
||||
public void setPlayerCommandViewVisibility(boolean isVisible) {
|
||||
if(isVisible) {
|
||||
if (isVisible) {
|
||||
bodyBind.playerCommandCardview.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
bodyBind.playerCommandCardview.setVisibility(View.GONE);
|
||||
|
|
@ -377,11 +317,6 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
bind.playerNestedScrollView.fullScroll(ScrollView.FOCUS_UP);
|
||||
}
|
||||
|
||||
public void scrollPager(Song song, int page, boolean smoothScroll) {
|
||||
bodyBind.playerSongCoverViewPager.setCurrentItem(page, smoothScroll);
|
||||
setSongInfo(song);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceConnected() {
|
||||
setSongInfo(Objects.requireNonNull(MusicPlayerRemote.getCurrentSong()));
|
||||
|
|
@ -400,7 +335,6 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
|
||||
@Override
|
||||
public void onPlayMetadataChanged() {
|
||||
setViewPageDelayed(MusicPlayerRemote.getPosition());
|
||||
setSongInfo(Objects.requireNonNull(MusicPlayerRemote.getCurrentSong()));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
package com.cappielloantonio.play.ui.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.cappielloantonio.play.databinding.FragmentPlayerCoverBinding;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||
|
||||
public class PlayerCoverFragment extends Fragment {
|
||||
private static final String TAG = "PlayerCoverFragment";
|
||||
|
||||
private FragmentPlayerCoverBinding bind;
|
||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
bind = FragmentPlayerCoverBinding.inflate(inflater, container, false);
|
||||
View view = bind.getRoot();
|
||||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||
|
||||
init();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
bind = null;
|
||||
}
|
||||
|
||||
private void init() {
|
||||
playerBottomSheetViewModel.getLiveSong().observe(requireActivity(), song -> {
|
||||
if (song != null) {
|
||||
CustomGlideRequest.Builder
|
||||
.from(requireContext(), song.getId(), CustomGlideRequest.SONG_PIC, null)
|
||||
.build()
|
||||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||
.into(bind.nowPlayingSongCoverImageView);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package com.cappielloantonio.play.ui.fragment;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.text.method.ScrollingMovementMethod;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.databinding.FragmentPlayerLyricsBinding;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||
|
||||
public class PlayerLyricsFragment extends Fragment {
|
||||
private static final String TAG = "PlayerLyricsFragment";
|
||||
|
||||
private FragmentPlayerLyricsBinding bind;
|
||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
bind = FragmentPlayerLyricsBinding.inflate(inflater, container, false);
|
||||
View view = bind.getRoot();
|
||||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||
|
||||
initLyrics();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
bind = null;
|
||||
}
|
||||
|
||||
private void initLyrics() {
|
||||
playerBottomSheetViewModel.getLiveLyrics().observe(requireActivity(), lyrics -> {
|
||||
if (lyrics == null || lyrics.trim().equals("")) {
|
||||
bind.nowPlayingSongLyricsTextView.setText(R.string.player_song_lyrics_none_available_label);
|
||||
} else {
|
||||
bind.nowPlayingSongLyricsTextView.setText(MusicUtil.getReadableString(lyrics));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue