mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Deleted all references from the adapters and dialogs to the old queue management system
This commit is contained in:
parent
4e968a8c4b
commit
a32c39867f
18 changed files with 286 additions and 292 deletions
|
|
@ -19,7 +19,6 @@ import com.cappielloantonio.play.interfaces.MediaCallback;
|
|||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.repository.SongRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
|
||||
|
|
@ -97,13 +96,13 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
|||
public void onClick(View view) {
|
||||
List<Song> opener = new ArrayList<>();
|
||||
opener.add(songs.get(getBindingAdapterPosition()));
|
||||
MusicPlayerRemote.openQueue(opener, 0, true);
|
||||
// MusicPlayerRemote.openQueue(opener, 0, true);
|
||||
|
||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
queueRepository.insertAllAndStartNew(opener);
|
||||
|
||||
activity.setBottomSheetInPeek(true);
|
||||
activity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
// activity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
|
||||
SongRepository songRepository = new SongRepository(App.getInstance());
|
||||
songRepository.getInstantMix(songs.get(getBindingAdapterPosition()), 20, new MediaCallback() {
|
||||
|
|
@ -114,7 +113,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
|||
|
||||
@Override
|
||||
public void onLoadMedia(List<?> media) {
|
||||
MusicPlayerRemote.enqueue((List<Song>) media);
|
||||
//MusicPlayerRemote.enqueue((List<Song>) media);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,18 +8,22 @@ import android.widget.ImageView;
|
|||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.media3.session.MediaBrowser;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.fragment.PlayerBottomSheetFragment;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueueAdapter.ViewHolder> {
|
||||
private static final String TAG = "SongResultSearchAdapter";
|
||||
|
|
@ -57,10 +61,10 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
|
|||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||
.into(holder.cover);
|
||||
|
||||
if (position < MusicPlayerRemote.getPosition()) {
|
||||
/* if (position < MusicPlayerRemote.getPosition()) {
|
||||
holder.songTitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null));
|
||||
holder.songSubtitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null));
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -101,8 +105,8 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
|
|||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
playerBottomSheetFragment.setSongInfo(songs.get(getBindingAdapterPosition()));
|
||||
MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||
// playerBottomSheetFragment.setSongInfo(songs.get(getBindingAdapterPosition()));
|
||||
// MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.cappielloantonio.play.adapter;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
|
@ -10,20 +11,18 @@ import android.widget.ImageView;
|
|||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.media3.session.MediaController;
|
||||
import androidx.navigation.Navigation;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.cappielloantonio.play.App;
|
||||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.repository.SongRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -74,6 +73,7 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
|||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||
TextView textTitle;
|
||||
ImageView cover;
|
||||
|
|
@ -90,17 +90,31 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
|||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
List<Song> opener = new ArrayList<>();
|
||||
opener.add(songs.get(getBindingAdapterPosition()));
|
||||
MusicPlayerRemote.openQueue(opener, 0, true);
|
||||
// List<Song> opener = new ArrayList<>();
|
||||
// opener.add(songs.get(getBindingAdapterPosition()));
|
||||
// MusicPlayerRemote.openQueue(opener, 0, true);
|
||||
|
||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
queueRepository.insertAllAndStartNew(opener);
|
||||
// MediaManager.startQueue(mainActivity.getMediaControllerInstance(), MappingUtil.mapMediaItem(context, opener), opener);
|
||||
|
||||
mainActivity.mediaControllerListenableFuture.addListener(() -> {
|
||||
try {
|
||||
if (mainActivity.mediaControllerListenableFuture.isDone()) {
|
||||
MediaController mediaController = mainActivity.mediaControllerListenableFuture.get();
|
||||
|
||||
mediaController.setMediaItem(MappingUtil.mapMediaItem(context, songs.get(getBindingAdapterPosition())));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
}
|
||||
}, MoreExecutors.directExecutor());
|
||||
|
||||
// QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
// queueRepository.insertAllAndStartNew(opener);
|
||||
|
||||
mainActivity.setBottomSheetInPeek(true);
|
||||
mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
// mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
|
||||
SongRepository songRepository = new SongRepository(App.getInstance());
|
||||
/*SongRepository songRepository = new SongRepository(App.getInstance());
|
||||
songRepository.getInstantMix(songs.get(getBindingAdapterPosition()), 20, new MediaCallback() {
|
||||
@Override
|
||||
public void onError(Exception exception) {
|
||||
|
|
@ -109,9 +123,10 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
|||
|
||||
@Override
|
||||
public void onLoadMedia(List<?> media) {
|
||||
MusicPlayerRemote.enqueue((List<Song>) media);
|
||||
// MusicPlayerRemote.enqueue((List<Song>) media);
|
||||
MediaManager.enqueue(mainActivity.getMediaControllerInstance(), MappingUtil.mapMediaItem(context, (List<Song>) media), (List<Song>) media);
|
||||
}
|
||||
});
|
||||
});*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import com.cappielloantonio.play.R;
|
|||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
|
|
@ -59,11 +58,11 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
|
|||
holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtistName()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
||||
holder.trackNumber.setText(String.valueOf(song.getTrackNumber()));
|
||||
|
||||
if (DownloadUtil.getDownloadTracker(context).isDownloaded(song)) {
|
||||
/*if (DownloadUtil.getDownloadTracker(context).isDownloaded(song)) {
|
||||
holder.downloadIndicator.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
holder.downloadIndicator.setVisibility(View.GONE);
|
||||
}
|
||||
}*/
|
||||
|
||||
if (isCoverVisible) CustomGlideRequest.Builder
|
||||
.from(context, song.getPrimary(), CustomGlideRequest.SONG_PIC, null)
|
||||
|
|
@ -125,9 +124,9 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
|
|||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
mainActivity.setBottomSheetInPeek(true);
|
||||
mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
// mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||
// MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import com.cappielloantonio.play.R;
|
|||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
|
||||
|
|
@ -97,9 +96,9 @@ public class TrackAdapter extends RecyclerView.Adapter<TrackAdapter.ViewHolder>
|
|||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
mainActivity.setBottomSheetInPeek(true);
|
||||
mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
// mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||
// MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ import android.app.Application;
|
|||
import androidx.lifecycle.LiveData;
|
||||
|
||||
import com.cappielloantonio.play.database.AppDatabase;
|
||||
import com.cappielloantonio.play.database.dao.DownloadDao;
|
||||
import com.cappielloantonio.play.database.dao.QueueDao;
|
||||
import com.cappielloantonio.play.model.Download;
|
||||
import com.cappielloantonio.play.model.Queue;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
|
|
@ -46,6 +48,12 @@ public class QueueRepository {
|
|||
return songs;
|
||||
}
|
||||
|
||||
public void insertAll(List<Song> songs) {
|
||||
InsertAllThreadSafe insertAll = new InsertAllThreadSafe(queueDao, songs);
|
||||
Thread thread = new Thread(insertAll);
|
||||
thread.start();
|
||||
}
|
||||
|
||||
public void insertAllAndStartNew(List<Song> songs) {
|
||||
try {
|
||||
final Thread delete = new Thread(new DeleteAllThreadSafe(queueDao));
|
||||
|
|
|
|||
|
|
@ -12,15 +12,12 @@ 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;
|
||||
import com.cappielloantonio.play.broadcast.receiver.ConnectivityStatusBroadcastReceiver;
|
||||
import com.cappielloantonio.play.databinding.ActivityMainBinding;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.base.BaseActivity;
|
||||
import com.cappielloantonio.play.ui.dialog.ConnectionAlertDialog;
|
||||
import com.cappielloantonio.play.ui.dialog.ServerUnreachableDialog;
|
||||
|
|
@ -76,6 +73,14 @@ public class MainActivity extends BaseActivity {
|
|||
bind = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED)
|
||||
collapseBottomSheet();
|
||||
else
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
public void init() {
|
||||
fragmentManager = getSupportFragmentManager();
|
||||
|
||||
|
|
@ -159,7 +164,7 @@ public class MainActivity extends BaseActivity {
|
|||
|
||||
switch (state) {
|
||||
case BottomSheetBehavior.STATE_HIDDEN:
|
||||
MusicPlayerRemote.quitPlaying();
|
||||
resetMusicSession();
|
||||
break;
|
||||
case BottomSheetBehavior.STATE_COLLAPSED:
|
||||
if (playerBottomSheetFragment != null) {
|
||||
|
|
@ -193,17 +198,6 @@ public class MainActivity extends BaseActivity {
|
|||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Scroll on top del bottom sheet quando chiudo
|
||||
* In questo modo non mi ritrovo al posto dell'header una parte centrale del player
|
||||
*/
|
||||
public void setBottomSheetMusicInfo(Song song) {
|
||||
PlayerBottomSheetFragment playerBottomSheetFragment = (PlayerBottomSheetFragment) getSupportFragmentManager().findFragmentByTag("PlayerBottomSheet");
|
||||
if (playerBottomSheetFragment == null) return;
|
||||
|
||||
playerBottomSheetFragment.setSongInfo(song);
|
||||
}
|
||||
|
||||
public void collapseBottomSheet() {
|
||||
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
|
||||
}
|
||||
|
|
@ -255,21 +249,13 @@ public class MainActivity extends BaseActivity {
|
|||
private void resetMusicSession() {
|
||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
queueRepository.deleteAll();
|
||||
MusicPlayerRemote.quitPlaying();
|
||||
// MusicPlayerRemote.quitPlaying();
|
||||
}
|
||||
|
||||
private void resetViewModel() {
|
||||
this.getViewModelStore().clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED)
|
||||
collapseBottomSheet();
|
||||
else
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
// CONNECTION
|
||||
private void connectivityStatusReceiverManager(boolean isActive) {
|
||||
if (isActive) {
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class StarredSyncDialog extends DialogFragment {
|
|||
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
|
||||
starredSyncViewModel.getStarredTracks(requireActivity()).observe(requireActivity(), songs -> {
|
||||
if (songs != null) {
|
||||
DownloadUtil.getDownloadTracker(context).download(songs, null, null);
|
||||
// DownloadUtil.getDownloadTracker(context).download(songs, null, null);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
|||
import com.cappielloantonio.play.databinding.FragmentAlbumPageBinding;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
|
|
@ -87,7 +86,7 @@ public class AlbumPageFragment extends Fragment {
|
|||
if (item.getItemId() == R.id.action_download_album) {
|
||||
albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
|
||||
if (isVisible() && getActivity() != null) {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
|
|
@ -139,9 +138,9 @@ public class AlbumPageFragment extends Fragment {
|
|||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
activity.setBottomSheetInPeek(true);
|
||||
activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
// activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
});
|
||||
|
||||
bind.albumPageShuffleButton.setOnClickListener(v -> {
|
||||
|
|
@ -151,9 +150,9 @@ public class AlbumPageFragment extends Fragment {
|
|||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
activity.setBottomSheetInPeek(true);
|
||||
activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
// activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ import com.cappielloantonio.play.interfaces.MediaCallback;
|
|||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.ArtistPageViewModel;
|
||||
|
|
@ -148,7 +147,7 @@ public class ArtistPageFragment extends Fragment {
|
|||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
activity.setBottomSheetInPeek(true);
|
||||
} else {
|
||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_tracks), Toast.LENGTH_SHORT).show();
|
||||
|
|
@ -171,9 +170,9 @@ public class ArtistPageFragment extends Fragment {
|
|||
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||
|
||||
activity.setBottomSheetInPeek(true);
|
||||
activity.setBottomSheetMusicInfo((Song) media.get(0));
|
||||
// activity.setBottomSheetMusicInfo((Song) media.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||
// MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||
} else {
|
||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,26 @@
|
|||
package com.cappielloantonio.play.ui.fragment;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.SeekBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.ToggleButton;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.cardview.widget.CardView;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.MediaMetadata;
|
||||
import androidx.media3.common.Player;
|
||||
import androidx.media3.session.MediaController;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
|
@ -22,40 +32,37 @@ import com.cappielloantonio.play.R;
|
|||
import com.cappielloantonio.play.adapter.PlayerNowPlayingSongAdapter;
|
||||
import com.cappielloantonio.play.adapter.PlayerSongQueueAdapter;
|
||||
import com.cappielloantonio.play.databinding.FragmentPlayerBottomSheetBinding;
|
||||
import com.cappielloantonio.play.databinding.PlayerBodyBottomSheetBinding;
|
||||
import com.cappielloantonio.play.databinding.PlayerHeaderBottomSheetBinding;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.helper.MusicProgressViewUpdateHelper;
|
||||
import com.cappielloantonio.play.interfaces.MusicServiceEventListener;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
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.viewmodel.PlayerBottomSheetViewModel;
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
|
||||
public class PlayerBottomSheetFragment extends Fragment implements MusicServiceEventListener, MusicProgressViewUpdateHelper.Callback {
|
||||
public class PlayerBottomSheetFragment extends Fragment {
|
||||
private static final String TAG = "PlayerBottomSheetFragment";
|
||||
|
||||
private FragmentPlayerBottomSheetBinding bind;
|
||||
private PlayerHeaderBottomSheetBinding headerBind;
|
||||
private PlayerBodyBottomSheetBinding bodyBind;
|
||||
private ImageView playerMoveDownBottomSheet;
|
||||
private ViewPager2 playerSongCoverViewPager;
|
||||
private RecyclerView playerQueueRecyclerView;
|
||||
private ToggleButton buttonFavorite;
|
||||
private ImageButton playerCommandUnfoldButton;
|
||||
private CardView playerCommandCardview;
|
||||
private TextView playerSongTitleLabel;
|
||||
private TextView playerArtistNameLabel;
|
||||
|
||||
private MainActivity activity;
|
||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||
|
||||
private PlayerSongQueueAdapter playerSongQueueAdapter;
|
||||
|
||||
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
progressViewUpdateHelper = new MusicProgressViewUpdateHelper(this);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
|
@ -66,9 +73,6 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
bind = FragmentPlayerBottomSheetBinding.inflate(inflater, container, false);
|
||||
View view = bind.getRoot();
|
||||
|
||||
headerBind = bind.playerHeaderLayout;
|
||||
bodyBind = bind.playerBodyLayout;
|
||||
|
||||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||
|
||||
init();
|
||||
|
|
@ -76,58 +80,131 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
initQueueRecyclerView();
|
||||
initFavoriteButtonClick();
|
||||
initMusicCommandUnfoldButton();
|
||||
initMusicCommandButton();
|
||||
initArtistLabelButton();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
activity.addMusicServiceEventListener(this);
|
||||
setUpMusicControllers();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
progressViewUpdateHelper.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
|
||||
progressViewUpdateHelper.stop();
|
||||
bindMediaController();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
activity.removeMusicServiceEventListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
headerBind = null;
|
||||
bodyBind = null;
|
||||
bind = null;
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
private void init() {
|
||||
bodyBind.playerMoveDownBottomSheet.setOnClickListener(view -> activity.collapseBottomSheet());
|
||||
playerMoveDownBottomSheet = bind.getRoot().findViewById(R.id.player_move_down_bottom_sheet);
|
||||
playerSongCoverViewPager = bind.getRoot().findViewById(R.id.player_song_cover_view_pager);
|
||||
playerQueueRecyclerView = bind.getRoot().findViewById(R.id.player_queue_recycler_view);
|
||||
buttonFavorite = bind.getRoot().findViewById(R.id.button_favorite);
|
||||
playerCommandUnfoldButton = bind.getRoot().findViewById(R.id.player_command_unfold_button);
|
||||
playerCommandCardview = bind.getRoot().findViewById(R.id.player_command_cardview);
|
||||
playerSongTitleLabel = bind.getRoot().findViewById(R.id.player_song_title_label);
|
||||
playerArtistNameLabel = bind.getRoot().findViewById(R.id.player_artist_name_label);
|
||||
|
||||
playerMoveDownBottomSheet.setOnClickListener(view -> activity.collapseBottomSheet());
|
||||
bind.playerBodyLayout.setProgressUpdateListener((position, bufferedPosition) -> bind.playerHeaderLayout.playerHeaderSeekBar.setProgress((int) (position / 1000), true));
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
private void bindMediaController() {
|
||||
activity.mediaControllerListenableFuture.addListener(() -> {
|
||||
try {
|
||||
MediaController mediaController = activity.mediaControllerListenableFuture.get();
|
||||
|
||||
bind.playerBodyLayout.setPlayer(mediaController);
|
||||
|
||||
setMediaControllerListener(mediaController);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
}
|
||||
}, MoreExecutors.directExecutor());
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
private void setMediaControllerListener(MediaController mediaController) {
|
||||
setMetadata(mediaController.getMediaMetadata());
|
||||
setContentDuration(mediaController.getContentDuration());
|
||||
setPlayingState(mediaController.isPlaying());
|
||||
setHeaderMediaController();
|
||||
setHeaderNextButtonState(mediaController.hasNextMediaItem());
|
||||
|
||||
mediaController.addListener(new Player.Listener() {
|
||||
@Override
|
||||
public void onMediaMetadataChanged(@NonNull MediaMetadata mediaMetadata) {
|
||||
setMetadata(mediaMetadata);
|
||||
setContentDuration(mediaController.getContentDuration());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIsPlayingChanged(boolean isPlaying) {
|
||||
setPlayingState(isPlaying);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaItemTransition(@Nullable MediaItem mediaItem, int reason) {
|
||||
setHeaderNextButtonState(mediaController.hasNextMediaItem());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setMetadata(MediaMetadata mediaMetadata) {
|
||||
bind.playerHeaderLayout.playerHeaderSongTitleLabel.setText(mediaMetadata.title);
|
||||
bind.playerHeaderLayout.playerHeaderSongArtistLabel.setText(mediaMetadata.artist);
|
||||
|
||||
playerSongTitleLabel.setText(mediaMetadata.title);
|
||||
playerArtistNameLabel.setText(mediaMetadata.artist);
|
||||
|
||||
CustomGlideRequest.Builder
|
||||
.from(requireContext(), mediaMetadata.extras != null ? mediaMetadata.extras.getString("id") : null, CustomGlideRequest.SONG_PIC, null)
|
||||
.build()
|
||||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||
.into(bind.playerHeaderLayout.playerHeaderSongCoverImage);
|
||||
}
|
||||
|
||||
private void setContentDuration(long duration) {
|
||||
bind.playerHeaderLayout.playerHeaderSeekBar.setMax((int) (duration / 1000));
|
||||
}
|
||||
|
||||
private void setPlayingState(boolean isPlaying) {
|
||||
bind.playerHeaderLayout.playerHeaderButton.setChecked(isPlaying);
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
private void setHeaderMediaController() {
|
||||
bind.playerHeaderLayout.playerHeaderButton.setOnClickListener(view -> {
|
||||
if (bind.playerHeaderLayout.playerHeaderButton.isChecked()) {
|
||||
bind.getRoot().findViewById(R.id.exo_play).performClick();
|
||||
} else {
|
||||
bind.getRoot().findViewById(R.id.exo_pause).performClick();
|
||||
}
|
||||
});
|
||||
|
||||
bind.playerHeaderLayout.playerHeaderNextSongButton.setOnClickListener(view -> bind.getRoot().findViewById(R.id.exo_next).performClick());
|
||||
}
|
||||
|
||||
private void setHeaderNextButtonState(boolean isEnabled) {
|
||||
bind.playerHeaderLayout.playerHeaderNextSongButton.setEnabled(isEnabled);
|
||||
bind.playerHeaderLayout.playerHeaderNextSongButton.setAlpha(isEnabled ? (float) 1.0 : (float) 0.3);
|
||||
}
|
||||
|
||||
private void initCoverLyricsSlideView() {
|
||||
bodyBind.playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
||||
bodyBind.playerSongCoverViewPager.setAdapter(new PlayerNowPlayingSongAdapter(this));
|
||||
playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
||||
playerSongCoverViewPager.setAdapter(new PlayerNowPlayingSongAdapter(this));
|
||||
|
||||
bodyBind.playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||
playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
super.onPageSelected(position);
|
||||
|
|
@ -142,11 +219,11 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
}
|
||||
|
||||
private void initQueueRecyclerView() {
|
||||
bodyBind.playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
bodyBind.playerQueueRecyclerView.setHasFixedSize(true);
|
||||
playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
playerQueueRecyclerView.setHasFixedSize(true);
|
||||
|
||||
playerSongQueueAdapter = new PlayerSongQueueAdapter(requireContext(), this);
|
||||
bodyBind.playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
||||
playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
||||
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerSongQueueAdapter.setItems(MappingUtil.mapQueue(queue)));
|
||||
|
||||
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) {
|
||||
|
|
@ -187,9 +264,9 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
* Qui vado a riscivere tutta la table Queue, quando teoricamente potrei solo swappare l'ordine degli elementi interessati
|
||||
* Nel caso la coda contenesse parecchi brani, potrebbero verificarsi rallentamenti pesanti
|
||||
*/
|
||||
playerBottomSheetViewModel.orderSongAfterSwap(playerSongQueueAdapter.getItems());
|
||||
MusicPlayerRemote.moveSong(originalPosition, toPosition);
|
||||
bodyBind.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||
// playerBottomSheetViewModel.orderSongAfterSwap(playerSongQueueAdapter.getItems());
|
||||
// MusicPlayerRemote.moveSong(originalPosition, toPosition);
|
||||
// playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||
|
||||
originalPosition = -1;
|
||||
fromPosition = -1;
|
||||
|
|
@ -198,22 +275,22 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
|
||||
@Override
|
||||
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
||||
if (!(viewHolder.getBindingAdapterPosition() == MusicPlayerRemote.getPosition()) && !(MusicPlayerRemote.getPlayingQueue().size() <= 1)) {
|
||||
/*if (!(viewHolder.getBindingAdapterPosition() == MusicPlayerRemote.getPosition()) && !(MusicPlayerRemote.getPlayingQueue().size() <= 1)) {
|
||||
MusicPlayerRemote.removeFromQueue(viewHolder.getBindingAdapterPosition());
|
||||
playerBottomSheetViewModel.removeSong(viewHolder.getBindingAdapterPosition());
|
||||
Objects.requireNonNull(bodyBind.playerQueueRecyclerView.getAdapter()).notifyItemRemoved(viewHolder.getBindingAdapterPosition());
|
||||
bodyBind.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||
Objects.requireNonNull(playerQueueRecyclerView.getAdapter()).notifyItemRemoved(viewHolder.getBindingAdapterPosition());
|
||||
playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||
} else {
|
||||
bodyBind.playerQueueRecyclerView.getAdapter().notifyDataSetChanged();
|
||||
}
|
||||
playerQueueRecyclerView.getAdapter().notifyDataSetChanged();
|
||||
}*/
|
||||
}
|
||||
}
|
||||
).attachToRecyclerView(bodyBind.playerQueueRecyclerView);
|
||||
).attachToRecyclerView(playerQueueRecyclerView);
|
||||
}
|
||||
|
||||
private void initFavoriteButtonClick() {
|
||||
bodyBind.buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext()));
|
||||
bodyBind.buttonFavorite.setOnLongClickListener(v -> {
|
||||
buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext()));
|
||||
buttonFavorite.setOnLongClickListener(v -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelable("song_object", playerBottomSheetViewModel.getCurrentSong());
|
||||
|
||||
|
|
@ -226,42 +303,17 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
}
|
||||
|
||||
private void initMusicCommandUnfoldButton() {
|
||||
bodyBind.playerCommandUnfoldButton.setOnClickListener(view -> {
|
||||
if (bodyBind.playerCommandCardview.getVisibility() == View.INVISIBLE || bodyBind.playerCommandCardview.getVisibility() == View.GONE) {
|
||||
bodyBind.playerCommandCardview.setVisibility(View.VISIBLE);
|
||||
playerCommandUnfoldButton.setOnClickListener(view -> {
|
||||
if (playerCommandCardview.getVisibility() == View.INVISIBLE || playerCommandCardview.getVisibility() == View.GONE) {
|
||||
playerCommandCardview.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
bodyBind.playerCommandCardview.setVisibility(View.GONE);
|
||||
playerCommandCardview.setVisibility(View.GONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initMusicCommandButton() {
|
||||
// Header
|
||||
headerBind.playerHeaderButton.setOnClickListener(v -> {
|
||||
if (MusicPlayerRemote.isPlaying()) {
|
||||
MusicPlayerRemote.pauseSong();
|
||||
} else {
|
||||
MusicPlayerRemote.resumePlaying();
|
||||
}
|
||||
});
|
||||
|
||||
headerBind.playerHeaderNextSongButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
|
||||
|
||||
// Body
|
||||
bodyBind.playerBigPlayPauseButton.setOnClickListener(v -> {
|
||||
if (MusicPlayerRemote.isPlaying()) {
|
||||
MusicPlayerRemote.pauseSong();
|
||||
} else {
|
||||
MusicPlayerRemote.resumePlaying();
|
||||
}
|
||||
});
|
||||
|
||||
bodyBind.playerBigNextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
|
||||
bodyBind.playerBigPreviousButton.setOnClickListener(v -> MusicPlayerRemote.playPreviousSong());
|
||||
}
|
||||
|
||||
private void initArtistLabelButton() {
|
||||
bodyBind.playerArtistNameLabel.setOnClickListener(view -> playerBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> {
|
||||
playerArtistNameLabel.setOnClickListener(view -> playerBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelable("artist_object", artist);
|
||||
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
|
||||
|
|
@ -269,55 +321,6 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
}));
|
||||
}
|
||||
|
||||
private void initSeekBar() {
|
||||
bodyBind.playerBigSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||
if (fromUser) {
|
||||
MusicPlayerRemote.seekTo(progress);
|
||||
onUpdateProgressViews(MusicPlayerRemote.getSongProgressMillis(), MusicPlayerRemote.getSongDurationMillis());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setSongInfo(Song song) {
|
||||
playerBottomSheetViewModel.refreshSongInfo(requireActivity(), song);
|
||||
|
||||
bodyBind.playerSongTitleLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||
bodyBind.playerArtistNameLabel.setText(MusicUtil.getReadableString(song.getArtistName()));
|
||||
|
||||
headerBind.playerHeaderSongTitleLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||
headerBind.playerHeaderSongArtistLabel.setText(MusicUtil.getReadableString(song.getArtistName()));
|
||||
|
||||
CustomGlideRequest.Builder
|
||||
.from(requireContext(), song.getPrimary(), CustomGlideRequest.SONG_PIC, null)
|
||||
.build()
|
||||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||
.into(headerBind.playerHeaderSongCoverImage);
|
||||
|
||||
bodyBind.buttonFavorite.setChecked(song.isFavorite());
|
||||
}
|
||||
|
||||
protected void updatePlayPauseState() {
|
||||
headerBind.playerHeaderButton.setChecked(!MusicPlayerRemote.isPlaying());
|
||||
bodyBind.playerBigPlayPauseButton.setChecked(!MusicPlayerRemote.isPlaying());
|
||||
}
|
||||
|
||||
private void setUpMusicControllers() {
|
||||
initSeekBar();
|
||||
}
|
||||
|
||||
public View getPlayerHeader() {
|
||||
return requireView().findViewById(R.id.player_header_layout);
|
||||
}
|
||||
|
|
@ -327,53 +330,10 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
|||
}
|
||||
|
||||
public void goBackToFirstPage() {
|
||||
bodyBind.playerSongCoverViewPager.setCurrentItem(0);
|
||||
playerSongCoverViewPager.setCurrentItem(0);
|
||||
}
|
||||
|
||||
public boolean isViewPagerInFirstPage() {
|
||||
return bodyBind.playerSongCoverViewPager.getCurrentItem() == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceConnected() {
|
||||
setSongInfo(Objects.requireNonNull(MusicPlayerRemote.getCurrentSong()));
|
||||
updatePlayPauseState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceDisconnected() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQueueChanged() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayMetadataChanged() {
|
||||
setSongInfo(Objects.requireNonNull(MusicPlayerRemote.getCurrentSong()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayStateChanged() {
|
||||
updatePlayPauseState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRepeatModeChanged() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdateProgressViews(int progress, int total) {
|
||||
headerBind.playerHeaderSeekBar.setMax(total);
|
||||
headerBind.playerHeaderSeekBar.setProgress(progress);
|
||||
|
||||
bodyBind.playerBigSeekBar.setMax(total);
|
||||
bodyBind.playerBigSeekBar.setProgress(progress);
|
||||
|
||||
bodyBind.playerBigSongTimeIn.setText(MusicUtil.getReadableDurationString(progress, true));
|
||||
bodyBind.playerBigSongDuration.setText(MusicUtil.getReadableDurationString(total, true));
|
||||
return playerSongCoverViewPager.getCurrentItem() == 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,25 @@
|
|||
package com.cappielloantonio.play.ui.fragment;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
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 androidx.media3.common.MediaMetadata;
|
||||
import androidx.media3.common.Player;
|
||||
import androidx.media3.session.MediaController;
|
||||
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.cappielloantonio.play.databinding.FragmentPlayerCoverBinding;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
|
||||
public class PlayerCoverFragment extends Fragment {
|
||||
private static final String TAG = "PlayerCoverFragment";
|
||||
|
|
@ -21,20 +27,25 @@ public class PlayerCoverFragment extends Fragment {
|
|||
private FragmentPlayerCoverBinding bind;
|
||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||
|
||||
private MainActivity activity;
|
||||
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
activity = (MainActivity) requireActivity();
|
||||
|
||||
bind = FragmentPlayerCoverBinding.inflate(inflater, container, false);
|
||||
View view = bind.getRoot();
|
||||
|
||||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
init();
|
||||
bindMediaController();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -43,15 +54,35 @@ public class PlayerCoverFragment extends Fragment {
|
|||
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);
|
||||
private void bindMediaController() {
|
||||
activity.mediaControllerListenableFuture.addListener(() -> {
|
||||
try {
|
||||
MediaController mediaController = activity.mediaControllerListenableFuture.get();
|
||||
|
||||
setMediaControllerListener(mediaController);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
}
|
||||
}, MoreExecutors.directExecutor());
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
private void setMediaControllerListener(MediaController mediaController) {
|
||||
setCover(mediaController.getMediaMetadata());
|
||||
|
||||
mediaController.addListener(new Player.Listener() {
|
||||
@Override
|
||||
public void onMediaMetadataChanged(@NonNull MediaMetadata mediaMetadata) {
|
||||
setCover(mediaMetadata);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setCover(MediaMetadata mediaMetadata) {
|
||||
CustomGlideRequest.Builder
|
||||
.from(requireContext(), mediaMetadata.extras != null ? mediaMetadata.extras.getString("id") : null, CustomGlideRequest.SONG_PIC, null)
|
||||
.build()
|
||||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||
.into(bind.nowPlayingSongCoverImageView);
|
||||
}
|
||||
}
|
||||
|
|
@ -21,7 +21,6 @@ import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
|||
import com.cappielloantonio.play.databinding.FragmentPlaylistPageBinding;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
|
|
@ -85,7 +84,7 @@ public class PlaylistPageFragment extends Fragment {
|
|||
if (item.getItemId() == R.id.action_download_playlist) {
|
||||
playlistPageViewModel.getPlaylistSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
|
||||
if (isVisible() && getActivity() != null) {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).download(songs, playlistPageViewModel.getPlaylist().getId(), playlistPageViewModel.getPlaylist().getName());
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, playlistPageViewModel.getPlaylist().getId(), playlistPageViewModel.getPlaylist().getName());
|
||||
}
|
||||
});
|
||||
return true;
|
||||
|
|
@ -144,9 +143,9 @@ public class PlaylistPageFragment extends Fragment {
|
|||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
activity.setBottomSheetInPeek(true);
|
||||
activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
// activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
});
|
||||
|
||||
bind.playlistPageShuffleButton.setOnClickListener(v -> {
|
||||
|
|
@ -156,9 +155,9 @@ public class PlaylistPageFragment extends Fragment {
|
|||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
activity.setBottomSheetInPeek(true);
|
||||
activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
// activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
|||
import com.cappielloantonio.play.databinding.FragmentSongListPageBinding;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.SongListPageViewModel;
|
||||
|
|
@ -139,9 +138,9 @@ public class SongListPageFragment extends Fragment {
|
|||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
activity.setBottomSheetInPeek(true);
|
||||
activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
// activity.setBottomSheetMusicInfo(songs.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ import com.cappielloantonio.play.model.Album;
|
|||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.AlbumRepository;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
|
|
@ -95,9 +94,9 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
((MainActivity) requireActivity()).setBottomSheetMusicInfo((Song) media.get(0));
|
||||
// ((MainActivity) requireActivity()).setBottomSheetMusicInfo((Song) media.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||
// MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||
} else {
|
||||
Toast.makeText(requireContext(), getString(R.string.album_error_retrieving_radio), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
|
@ -116,7 +115,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
|
||||
dismissBottomSheet();
|
||||
|
|
@ -125,14 +124,14 @@ 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);
|
||||
// MusicPlayerRemote.playNext(songs);
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
dismissBottomSheet();
|
||||
}));
|
||||
|
||||
TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
||||
addToQueue.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||
MusicPlayerRemote.enqueue(songs);
|
||||
// MusicPlayerRemote.enqueue(songs);
|
||||
dismissBottomSheet();
|
||||
}));
|
||||
|
||||
|
|
@ -141,18 +140,18 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
|
||||
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||
downloadAll.setOnClickListener(v -> {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(songs)) {
|
||||
/*if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(songs)) {
|
||||
removeAll.setOnClickListener(v -> {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).remove(songs);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
} else {
|
||||
removeAll.setVisibility(View.GONE);
|
||||
}
|
||||
}*/
|
||||
});
|
||||
|
||||
TextView goToArtist = view.findViewById(R.id.go_to_artist_text_view);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import com.cappielloantonio.play.model.Artist;
|
|||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.ArtistBottomSheetViewModel;
|
||||
|
|
@ -89,9 +88,9 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
|
|||
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
((MainActivity) requireActivity()).setBottomSheetMusicInfo((Song) media.get(0));
|
||||
// ((MainActivity) requireActivity()).setBottomSheetMusicInfo((Song) media.get(0));
|
||||
|
||||
MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||
// MusicPlayerRemote.openQueue((List<Song>) media, 0, true);
|
||||
} else {
|
||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
|
@ -109,7 +108,7 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
|
|||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
queueRepository.insertAllAndStartNew(songs);
|
||||
|
||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
} else {
|
||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_tracks), Toast.LENGTH_SHORT).show();
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import com.cappielloantonio.play.interfaces.MediaCallback;
|
|||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.repository.SongRepository;
|
||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog;
|
||||
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
||||
|
|
@ -94,13 +93,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
playRadio.setOnClickListener(v -> {
|
||||
List<Song> opener = new ArrayList<>();
|
||||
opener.add(song);
|
||||
MusicPlayerRemote.openQueue(opener, 0, true);
|
||||
// MusicPlayerRemote.openQueue(opener, 0, true);
|
||||
|
||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||
queueRepository.insertAllAndStartNew(opener);
|
||||
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
((MainActivity) requireActivity()).setBottomSheetMusicInfo(song);
|
||||
// ((MainActivity) requireActivity()).setBottomSheetMusicInfo(song);
|
||||
|
||||
SongRepository songRepository = new SongRepository(App.getInstance());
|
||||
songRepository.getInstantMix(song, 20, new MediaCallback() {
|
||||
|
|
@ -111,7 +110,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
|
||||
@Override
|
||||
public void onLoadMedia(List<?> media) {
|
||||
MusicPlayerRemote.enqueue((List<Song>) media);
|
||||
// MusicPlayerRemote.enqueue((List<Song>) media);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -120,14 +119,14 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
|
||||
TextView playNext = view.findViewById(R.id.play_next_text_view);
|
||||
playNext.setOnClickListener(v -> {
|
||||
MusicPlayerRemote.playNext(song);
|
||||
// MusicPlayerRemote.playNext(song);
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
||||
addToQueue.setOnClickListener(v -> {
|
||||
MusicPlayerRemote.enqueue(song);
|
||||
// MusicPlayerRemote.enqueue(song);
|
||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
|
@ -146,13 +145,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
|
||||
TextView download = view.findViewById(R.id.download_text_view);
|
||||
download.setOnClickListener(v -> {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).download(Collections.singletonList(song), null, null);
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).download(Collections.singletonList(song), null, null);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
TextView remove = view.findViewById(R.id.remove_text_view);
|
||||
remove.setOnClickListener(v -> {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).remove(Collections.singletonList(song));
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).remove(Collections.singletonList(song));
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
|
|
@ -205,12 +204,12 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
}
|
||||
|
||||
private void initDownloadUI(TextView download, TextView remove) {
|
||||
if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song)) {
|
||||
/*if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song)) {
|
||||
download.setVisibility(View.GONE);
|
||||
remove.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
download.setVisibility(View.VISIBLE);
|
||||
remove.setVisibility(View.GONE);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
|
@ -51,7 +51,7 @@ public class SongBottomSheetViewModel extends AndroidViewModel {
|
|||
song.setFavorite(true);
|
||||
|
||||
if(PreferenceUtil.getInstance(context).isStarredSyncEnabled()) {
|
||||
DownloadUtil.getDownloadTracker(context).download(Collections.singletonList(song), null, null);
|
||||
// DownloadUtil.getDownloadTracker(context).download(Collections.singletonList(song), null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue