mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 09:53:33 +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.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.repository.SongRepository;
|
import com.cappielloantonio.play.repository.SongRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
||||||
|
|
@ -97,13 +96,13 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
List<Song> opener = new ArrayList<>();
|
List<Song> opener = new ArrayList<>();
|
||||||
opener.add(songs.get(getBindingAdapterPosition()));
|
opener.add(songs.get(getBindingAdapterPosition()));
|
||||||
MusicPlayerRemote.openQueue(opener, 0, true);
|
// MusicPlayerRemote.openQueue(opener, 0, true);
|
||||||
|
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
queueRepository.insertAllAndStartNew(opener);
|
queueRepository.insertAllAndStartNew(opener);
|
||||||
|
|
||||||
activity.setBottomSheetInPeek(true);
|
activity.setBottomSheetInPeek(true);
|
||||||
activity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
// activity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||||
|
|
||||||
SongRepository songRepository = new SongRepository(App.getInstance());
|
SongRepository songRepository = new SongRepository(App.getInstance());
|
||||||
songRepository.getInstantMix(songs.get(getBindingAdapterPosition()), 20, new MediaCallback() {
|
songRepository.getInstantMix(songs.get(getBindingAdapterPosition()), 20, new MediaCallback() {
|
||||||
|
|
@ -114,7 +113,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
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 android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.media3.session.MediaBrowser;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.fragment.PlayerBottomSheetFragment;
|
import com.cappielloantonio.play.ui.fragment.PlayerBottomSheetFragment;
|
||||||
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueueAdapter.ViewHolder> {
|
public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueueAdapter.ViewHolder> {
|
||||||
private static final String TAG = "SongResultSearchAdapter";
|
private static final String TAG = "SongResultSearchAdapter";
|
||||||
|
|
@ -57,10 +61,10 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
|
||||||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.cover);
|
||||||
|
|
||||||
if (position < MusicPlayerRemote.getPosition()) {
|
/* if (position < MusicPlayerRemote.getPosition()) {
|
||||||
holder.songTitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null));
|
holder.songTitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null));
|
||||||
holder.songSubtitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null));
|
holder.songSubtitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null));
|
||||||
}
|
} */
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -101,8 +105,8 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
playerBottomSheetFragment.setSongInfo(songs.get(getBindingAdapterPosition()));
|
// playerBottomSheetFragment.setSongInfo(songs.get(getBindingAdapterPosition()));
|
||||||
MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
// MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
@ -10,20 +11,18 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.media3.session.MediaController;
|
||||||
import androidx.navigation.Navigation;
|
import androidx.navigation.Navigation;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.App;
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
|
||||||
import com.cappielloantonio.play.model.Song;
|
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.activity.MainActivity;
|
||||||
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -74,6 +73,7 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
|
||||||
TextView textTitle;
|
TextView textTitle;
|
||||||
ImageView cover;
|
ImageView cover;
|
||||||
|
|
@ -90,17 +90,31 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
List<Song> opener = new ArrayList<>();
|
// List<Song> opener = new ArrayList<>();
|
||||||
opener.add(songs.get(getBindingAdapterPosition()));
|
// opener.add(songs.get(getBindingAdapterPosition()));
|
||||||
MusicPlayerRemote.openQueue(opener, 0, true);
|
// MusicPlayerRemote.openQueue(opener, 0, true);
|
||||||
|
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
// MediaManager.startQueue(mainActivity.getMediaControllerInstance(), MappingUtil.mapMediaItem(context, opener), opener);
|
||||||
queueRepository.insertAllAndStartNew(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.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() {
|
songRepository.getInstantMix(songs.get(getBindingAdapterPosition()), 20, new MediaCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
|
|
@ -109,9 +123,10 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
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
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.DownloadUtil;
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
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.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()));
|
holder.trackNumber.setText(String.valueOf(song.getTrackNumber()));
|
||||||
|
|
||||||
if (DownloadUtil.getDownloadTracker(context).isDownloaded(song)) {
|
/*if (DownloadUtil.getDownloadTracker(context).isDownloaded(song)) {
|
||||||
holder.downloadIndicator.setVisibility(View.VISIBLE);
|
holder.downloadIndicator.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
holder.downloadIndicator.setVisibility(View.GONE);
|
holder.downloadIndicator.setVisibility(View.GONE);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if (isCoverVisible) CustomGlideRequest.Builder
|
if (isCoverVisible) CustomGlideRequest.Builder
|
||||||
.from(context, song.getPrimary(), CustomGlideRequest.SONG_PIC, null)
|
.from(context, song.getPrimary(), CustomGlideRequest.SONG_PIC, null)
|
||||||
|
|
@ -125,9 +124,9 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
mainActivity.setBottomSheetInPeek(true);
|
mainActivity.setBottomSheetInPeek(true);
|
||||||
mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
// mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
// MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
||||||
|
|
@ -97,9 +96,9 @@ public class TrackAdapter extends RecyclerView.Adapter<TrackAdapter.ViewHolder>
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
mainActivity.setBottomSheetInPeek(true);
|
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 androidx.lifecycle.LiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.database.AppDatabase;
|
import com.cappielloantonio.play.database.AppDatabase;
|
||||||
|
import com.cappielloantonio.play.database.dao.DownloadDao;
|
||||||
import com.cappielloantonio.play.database.dao.QueueDao;
|
import com.cappielloantonio.play.database.dao.QueueDao;
|
||||||
|
import com.cappielloantonio.play.model.Download;
|
||||||
import com.cappielloantonio.play.model.Queue;
|
import com.cappielloantonio.play.model.Queue;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.util.MappingUtil;
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
|
|
@ -46,6 +48,12 @@ public class QueueRepository {
|
||||||
return songs;
|
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) {
|
public void insertAllAndStartNew(List<Song> songs) {
|
||||||
try {
|
try {
|
||||||
final Thread delete = new Thread(new DeleteAllThreadSafe(queueDao));
|
final Thread delete = new Thread(new DeleteAllThreadSafe(queueDao));
|
||||||
|
|
|
||||||
|
|
@ -12,15 +12,12 @@ import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.navigation.NavController;
|
import androidx.navigation.NavController;
|
||||||
import androidx.navigation.fragment.NavHostFragment;
|
import androidx.navigation.fragment.NavHostFragment;
|
||||||
import androidx.navigation.ui.NavigationUI;
|
import androidx.navigation.ui.NavigationUI;
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.broadcast.receiver.ConnectivityStatusBroadcastReceiver;
|
import com.cappielloantonio.play.broadcast.receiver.ConnectivityStatusBroadcastReceiver;
|
||||||
import com.cappielloantonio.play.databinding.ActivityMainBinding;
|
import com.cappielloantonio.play.databinding.ActivityMainBinding;
|
||||||
import com.cappielloantonio.play.model.Song;
|
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
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.activity.base.BaseActivity;
|
||||||
import com.cappielloantonio.play.ui.dialog.ConnectionAlertDialog;
|
import com.cappielloantonio.play.ui.dialog.ConnectionAlertDialog;
|
||||||
import com.cappielloantonio.play.ui.dialog.ServerUnreachableDialog;
|
import com.cappielloantonio.play.ui.dialog.ServerUnreachableDialog;
|
||||||
|
|
@ -76,6 +73,14 @@ public class MainActivity extends BaseActivity {
|
||||||
bind = null;
|
bind = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED)
|
||||||
|
collapseBottomSheet();
|
||||||
|
else
|
||||||
|
super.onBackPressed();
|
||||||
|
}
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
fragmentManager = getSupportFragmentManager();
|
fragmentManager = getSupportFragmentManager();
|
||||||
|
|
||||||
|
|
@ -159,7 +164,7 @@ public class MainActivity extends BaseActivity {
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case BottomSheetBehavior.STATE_HIDDEN:
|
case BottomSheetBehavior.STATE_HIDDEN:
|
||||||
MusicPlayerRemote.quitPlaying();
|
resetMusicSession();
|
||||||
break;
|
break;
|
||||||
case BottomSheetBehavior.STATE_COLLAPSED:
|
case BottomSheetBehavior.STATE_COLLAPSED:
|
||||||
if (playerBottomSheetFragment != null) {
|
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() {
|
public void collapseBottomSheet() {
|
||||||
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
|
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
|
||||||
}
|
}
|
||||||
|
|
@ -255,21 +249,13 @@ public class MainActivity extends BaseActivity {
|
||||||
private void resetMusicSession() {
|
private void resetMusicSession() {
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
queueRepository.deleteAll();
|
queueRepository.deleteAll();
|
||||||
MusicPlayerRemote.quitPlaying();
|
// MusicPlayerRemote.quitPlaying();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetViewModel() {
|
private void resetViewModel() {
|
||||||
this.getViewModelStore().clear();
|
this.getViewModelStore().clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED)
|
|
||||||
collapseBottomSheet();
|
|
||||||
else
|
|
||||||
super.onBackPressed();
|
|
||||||
}
|
|
||||||
|
|
||||||
// CONNECTION
|
// CONNECTION
|
||||||
private void connectivityStatusReceiverManager(boolean isActive) {
|
private void connectivityStatusReceiverManager(boolean isActive) {
|
||||||
if (isActive) {
|
if (isActive) {
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ public class StarredSyncDialog extends DialogFragment {
|
||||||
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
|
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
|
||||||
starredSyncViewModel.getStarredTracks(requireActivity()).observe(requireActivity(), songs -> {
|
starredSyncViewModel.getStarredTracks(requireActivity()).observe(requireActivity(), songs -> {
|
||||||
if (songs != null) {
|
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.databinding.FragmentAlbumPageBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.DownloadUtil;
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
@ -87,7 +86,7 @@ public class AlbumPageFragment extends Fragment {
|
||||||
if (item.getItemId() == R.id.action_download_album) {
|
if (item.getItemId() == R.id.action_download_album) {
|
||||||
albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
|
albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
|
||||||
if (isVisible() && getActivity() != null) {
|
if (isVisible() && getActivity() != null) {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -139,9 +138,9 @@ public class AlbumPageFragment extends Fragment {
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
activity.setBottomSheetInPeek(true);
|
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 -> {
|
bind.albumPageShuffleButton.setOnClickListener(v -> {
|
||||||
|
|
@ -151,9 +150,9 @@ public class AlbumPageFragment extends Fragment {
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
activity.setBottomSheetInPeek(true);
|
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.model.Song;
|
||||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
import com.cappielloantonio.play.viewmodel.ArtistPageViewModel;
|
import com.cappielloantonio.play.viewmodel.ArtistPageViewModel;
|
||||||
|
|
@ -148,7 +147,7 @@ public class ArtistPageFragment extends Fragment {
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||||
activity.setBottomSheetInPeek(true);
|
activity.setBottomSheetInPeek(true);
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_tracks), Toast.LENGTH_SHORT).show();
|
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);
|
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||||
|
|
||||||
activity.setBottomSheetInPeek(true);
|
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 {
|
} else {
|
||||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();
|
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,26 @@
|
||||||
package com.cappielloantonio.play.ui.fragment;
|
package com.cappielloantonio.play.ui.fragment;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageButton;
|
||||||
|
import android.widget.ImageView;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.SeekBar;
|
import android.widget.TextView;
|
||||||
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.cardview.widget.CardView;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
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.navigation.fragment.NavHostFragment;
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
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.PlayerNowPlayingSongAdapter;
|
||||||
import com.cappielloantonio.play.adapter.PlayerSongQueueAdapter;
|
import com.cappielloantonio.play.adapter.PlayerSongQueueAdapter;
|
||||||
import com.cappielloantonio.play.databinding.FragmentPlayerBottomSheetBinding;
|
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.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.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
||||||
import com.cappielloantonio.play.util.MappingUtil;
|
import com.cappielloantonio.play.util.MappingUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
|
||||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||||
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Objects;
|
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 static final String TAG = "PlayerBottomSheetFragment";
|
||||||
|
|
||||||
private FragmentPlayerBottomSheetBinding bind;
|
private FragmentPlayerBottomSheetBinding bind;
|
||||||
private PlayerHeaderBottomSheetBinding headerBind;
|
private ImageView playerMoveDownBottomSheet;
|
||||||
private PlayerBodyBottomSheetBinding bodyBind;
|
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 MainActivity activity;
|
||||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||||
|
|
||||||
private PlayerSongQueueAdapter playerSongQueueAdapter;
|
private PlayerSongQueueAdapter playerSongQueueAdapter;
|
||||||
|
|
||||||
private MusicProgressViewUpdateHelper progressViewUpdateHelper;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
progressViewUpdateHelper = new MusicProgressViewUpdateHelper(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -66,9 +73,6 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
bind = FragmentPlayerBottomSheetBinding.inflate(inflater, container, false);
|
bind = FragmentPlayerBottomSheetBinding.inflate(inflater, container, false);
|
||||||
View view = bind.getRoot();
|
View view = bind.getRoot();
|
||||||
|
|
||||||
headerBind = bind.playerHeaderLayout;
|
|
||||||
bodyBind = bind.playerBodyLayout;
|
|
||||||
|
|
||||||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
|
@ -76,58 +80,131 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
initQueueRecyclerView();
|
initQueueRecyclerView();
|
||||||
initFavoriteButtonClick();
|
initFavoriteButtonClick();
|
||||||
initMusicCommandUnfoldButton();
|
initMusicCommandUnfoldButton();
|
||||||
initMusicCommandButton();
|
|
||||||
initArtistLabelButton();
|
initArtistLabelButton();
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
||||||
super.onViewCreated(view, savedInstanceState);
|
|
||||||
|
|
||||||
activity.addMusicServiceEventListener(this);
|
|
||||||
setUpMusicControllers();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
progressViewUpdateHelper.start();
|
bindMediaController();
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
|
|
||||||
progressViewUpdateHelper.stop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
|
||||||
activity.removeMusicServiceEventListener(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
headerBind = null;
|
|
||||||
bodyBind = null;
|
|
||||||
bind = null;
|
bind = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
private void init() {
|
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() {
|
private void initCoverLyricsSlideView() {
|
||||||
bodyBind.playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
playerSongCoverViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
||||||
bodyBind.playerSongCoverViewPager.setAdapter(new PlayerNowPlayingSongAdapter(this));
|
playerSongCoverViewPager.setAdapter(new PlayerNowPlayingSongAdapter(this));
|
||||||
|
|
||||||
bodyBind.playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
playerSongCoverViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onPageSelected(int position) {
|
public void onPageSelected(int position) {
|
||||||
super.onPageSelected(position);
|
super.onPageSelected(position);
|
||||||
|
|
@ -142,11 +219,11 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initQueueRecyclerView() {
|
private void initQueueRecyclerView() {
|
||||||
bodyBind.playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bodyBind.playerQueueRecyclerView.setHasFixedSize(true);
|
playerQueueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
playerSongQueueAdapter = new PlayerSongQueueAdapter(requireContext(), this);
|
playerSongQueueAdapter = new PlayerSongQueueAdapter(requireContext(), this);
|
||||||
bodyBind.playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
||||||
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerSongQueueAdapter.setItems(MappingUtil.mapQueue(queue)));
|
playerBottomSheetViewModel.getQueueSong().observe(requireActivity(), queue -> playerSongQueueAdapter.setItems(MappingUtil.mapQueue(queue)));
|
||||||
|
|
||||||
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) {
|
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
|
* 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
|
* Nel caso la coda contenesse parecchi brani, potrebbero verificarsi rallentamenti pesanti
|
||||||
*/
|
*/
|
||||||
playerBottomSheetViewModel.orderSongAfterSwap(playerSongQueueAdapter.getItems());
|
// playerBottomSheetViewModel.orderSongAfterSwap(playerSongQueueAdapter.getItems());
|
||||||
MusicPlayerRemote.moveSong(originalPosition, toPosition);
|
// MusicPlayerRemote.moveSong(originalPosition, toPosition);
|
||||||
bodyBind.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
// playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||||
|
|
||||||
originalPosition = -1;
|
originalPosition = -1;
|
||||||
fromPosition = -1;
|
fromPosition = -1;
|
||||||
|
|
@ -198,22 +275,22 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
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());
|
MusicPlayerRemote.removeFromQueue(viewHolder.getBindingAdapterPosition());
|
||||||
playerBottomSheetViewModel.removeSong(viewHolder.getBindingAdapterPosition());
|
playerBottomSheetViewModel.removeSong(viewHolder.getBindingAdapterPosition());
|
||||||
Objects.requireNonNull(bodyBind.playerQueueRecyclerView.getAdapter()).notifyItemRemoved(viewHolder.getBindingAdapterPosition());
|
Objects.requireNonNull(playerQueueRecyclerView.getAdapter()).notifyItemRemoved(viewHolder.getBindingAdapterPosition());
|
||||||
bodyBind.playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
playerSongCoverViewPager.setCurrentItem(MusicPlayerRemote.getPosition(), false);
|
||||||
} else {
|
} else {
|
||||||
bodyBind.playerQueueRecyclerView.getAdapter().notifyDataSetChanged();
|
playerQueueRecyclerView.getAdapter().notifyDataSetChanged();
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
).attachToRecyclerView(bodyBind.playerQueueRecyclerView);
|
).attachToRecyclerView(playerQueueRecyclerView);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initFavoriteButtonClick() {
|
private void initFavoriteButtonClick() {
|
||||||
bodyBind.buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext()));
|
buttonFavorite.setOnClickListener(v -> playerBottomSheetViewModel.setFavorite(requireContext()));
|
||||||
bodyBind.buttonFavorite.setOnLongClickListener(v -> {
|
buttonFavorite.setOnLongClickListener(v -> {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putParcelable("song_object", playerBottomSheetViewModel.getCurrentSong());
|
bundle.putParcelable("song_object", playerBottomSheetViewModel.getCurrentSong());
|
||||||
|
|
||||||
|
|
@ -226,42 +303,17 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initMusicCommandUnfoldButton() {
|
private void initMusicCommandUnfoldButton() {
|
||||||
bodyBind.playerCommandUnfoldButton.setOnClickListener(view -> {
|
playerCommandUnfoldButton.setOnClickListener(view -> {
|
||||||
if (bodyBind.playerCommandCardview.getVisibility() == View.INVISIBLE || bodyBind.playerCommandCardview.getVisibility() == View.GONE) {
|
if (playerCommandCardview.getVisibility() == View.INVISIBLE || playerCommandCardview.getVisibility() == View.GONE) {
|
||||||
bodyBind.playerCommandCardview.setVisibility(View.VISIBLE);
|
playerCommandCardview.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} 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() {
|
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 bundle = new Bundle();
|
||||||
bundle.putParcelable("artist_object", artist);
|
bundle.putParcelable("artist_object", artist);
|
||||||
NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle);
|
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() {
|
public View getPlayerHeader() {
|
||||||
return requireView().findViewById(R.id.player_header_layout);
|
return requireView().findViewById(R.id.player_header_layout);
|
||||||
}
|
}
|
||||||
|
|
@ -327,53 +330,10 @@ public class PlayerBottomSheetFragment extends Fragment implements MusicServiceE
|
||||||
}
|
}
|
||||||
|
|
||||||
public void goBackToFirstPage() {
|
public void goBackToFirstPage() {
|
||||||
bodyBind.playerSongCoverViewPager.setCurrentItem(0);
|
playerSongCoverViewPager.setCurrentItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isViewPagerInFirstPage() {
|
public boolean isViewPagerInFirstPage() {
|
||||||
return bodyBind.playerSongCoverViewPager.getCurrentItem() == 0;
|
return 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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,25 @@
|
||||||
package com.cappielloantonio.play.ui.fragment;
|
package com.cappielloantonio.play.ui.fragment;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
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.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.databinding.FragmentPlayerCoverBinding;
|
import com.cappielloantonio.play.databinding.FragmentPlayerCoverBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||||
|
import com.google.common.util.concurrent.MoreExecutors;
|
||||||
|
|
||||||
public class PlayerCoverFragment extends Fragment {
|
public class PlayerCoverFragment extends Fragment {
|
||||||
private static final String TAG = "PlayerCoverFragment";
|
private static final String TAG = "PlayerCoverFragment";
|
||||||
|
|
@ -21,20 +27,25 @@ public class PlayerCoverFragment extends Fragment {
|
||||||
private FragmentPlayerCoverBinding bind;
|
private FragmentPlayerCoverBinding bind;
|
||||||
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
private PlayerBottomSheetViewModel playerBottomSheetViewModel;
|
||||||
|
|
||||||
|
private MainActivity activity;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
activity = (MainActivity) requireActivity();
|
||||||
|
|
||||||
bind = FragmentPlayerCoverBinding.inflate(inflater, container, false);
|
bind = FragmentPlayerCoverBinding.inflate(inflater, container, false);
|
||||||
View view = bind.getRoot();
|
View view = bind.getRoot();
|
||||||
|
|
||||||
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
playerBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PlayerBottomSheetViewModel.class);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onResume() {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onResume();
|
||||||
|
|
||||||
init();
|
bindMediaController();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -43,15 +54,35 @@ public class PlayerCoverFragment extends Fragment {
|
||||||
bind = null;
|
bind = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init() {
|
private void bindMediaController() {
|
||||||
playerBottomSheetViewModel.getLiveSong().observe(requireActivity(), song -> {
|
activity.mediaControllerListenableFuture.addListener(() -> {
|
||||||
if (song != null) {
|
try {
|
||||||
CustomGlideRequest.Builder
|
MediaController mediaController = activity.mediaControllerListenableFuture.get();
|
||||||
.from(requireContext(), song.getId(), CustomGlideRequest.SONG_PIC, null)
|
|
||||||
.build()
|
setMediaControllerListener(mediaController);
|
||||||
.transform(new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
} catch (Exception e) {
|
||||||
.into(bind.nowPlayingSongCoverImageView);
|
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.databinding.FragmentPlaylistPageBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.DownloadUtil;
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
@ -85,7 +84,7 @@ public class PlaylistPageFragment extends Fragment {
|
||||||
if (item.getItemId() == R.id.action_download_playlist) {
|
if (item.getItemId() == R.id.action_download_playlist) {
|
||||||
playlistPageViewModel.getPlaylistSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
|
playlistPageViewModel.getPlaylistSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
|
||||||
if (isVisible() && getActivity() != null) {
|
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;
|
return true;
|
||||||
|
|
@ -144,9 +143,9 @@ public class PlaylistPageFragment extends Fragment {
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
activity.setBottomSheetInPeek(true);
|
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 -> {
|
bind.playlistPageShuffleButton.setOnClickListener(v -> {
|
||||||
|
|
@ -156,9 +155,9 @@ public class PlaylistPageFragment extends Fragment {
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
activity.setBottomSheetInPeek(true);
|
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.databinding.FragmentSongListPageBinding;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
import com.cappielloantonio.play.viewmodel.SongListPageViewModel;
|
import com.cappielloantonio.play.viewmodel.SongListPageViewModel;
|
||||||
|
|
@ -139,9 +138,9 @@ public class SongListPageFragment extends Fragment {
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
activity.setBottomSheetInPeek(true);
|
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.model.Song;
|
||||||
import com.cappielloantonio.play.repository.AlbumRepository;
|
import com.cappielloantonio.play.repository.AlbumRepository;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.DownloadUtil;
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
@ -95,9 +94,9 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||||
|
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((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 {
|
} else {
|
||||||
Toast.makeText(requireContext(), getString(R.string.album_error_retrieving_radio), Toast.LENGTH_SHORT).show();
|
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 queueRepository = new QueueRepository(App.getInstance());
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||||
|
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
|
|
@ -125,14 +124,14 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
TextView playNext = view.findViewById(R.id.play_next_text_view);
|
TextView playNext = view.findViewById(R.id.play_next_text_view);
|
||||||
playNext.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
playNext.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||||
MusicPlayerRemote.playNext(songs);
|
// MusicPlayerRemote.playNext(songs);
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
||||||
addToQueue.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
addToQueue.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||||
MusicPlayerRemote.enqueue(songs);
|
// MusicPlayerRemote.enqueue(songs);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
@ -141,18 +140,18 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||||
downloadAll.setOnClickListener(v -> {
|
downloadAll.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(songs)) {
|
/*if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(songs)) {
|
||||||
removeAll.setOnClickListener(v -> {
|
removeAll.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).remove(songs);
|
DownloadUtil.getDownloadTracker(requireContext()).remove(songs);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
removeAll.setVisibility(View.GONE);
|
removeAll.setVisibility(View.GONE);
|
||||||
}
|
}*/
|
||||||
});
|
});
|
||||||
|
|
||||||
TextView goToArtist = view.findViewById(R.id.go_to_artist_text_view);
|
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.model.Song;
|
||||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
import com.cappielloantonio.play.viewmodel.ArtistBottomSheetViewModel;
|
import com.cappielloantonio.play.viewmodel.ArtistBottomSheetViewModel;
|
||||||
|
|
@ -89,9 +88,9 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
|
||||||
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
queueRepository.insertAllAndStartNew((ArrayList<Song>) media);
|
||||||
|
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((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 {
|
} else {
|
||||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_radio), Toast.LENGTH_SHORT).show();
|
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 queueRepository = new QueueRepository(App.getInstance());
|
||||||
queueRepository.insertAllAndStartNew(songs);
|
queueRepository.insertAllAndStartNew(songs);
|
||||||
|
|
||||||
MusicPlayerRemote.openQueue(songs, 0, true);
|
// MusicPlayerRemote.openQueue(songs, 0, true);
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_tracks), Toast.LENGTH_SHORT).show();
|
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.model.Song;
|
||||||
import com.cappielloantonio.play.repository.QueueRepository;
|
import com.cappielloantonio.play.repository.QueueRepository;
|
||||||
import com.cappielloantonio.play.repository.SongRepository;
|
import com.cappielloantonio.play.repository.SongRepository;
|
||||||
import com.cappielloantonio.play.service.MusicPlayerRemote;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog;
|
import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog;
|
||||||
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
||||||
|
|
@ -94,13 +93,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
playRadio.setOnClickListener(v -> {
|
playRadio.setOnClickListener(v -> {
|
||||||
List<Song> opener = new ArrayList<>();
|
List<Song> opener = new ArrayList<>();
|
||||||
opener.add(song);
|
opener.add(song);
|
||||||
MusicPlayerRemote.openQueue(opener, 0, true);
|
// MusicPlayerRemote.openQueue(opener, 0, true);
|
||||||
|
|
||||||
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
QueueRepository queueRepository = new QueueRepository(App.getInstance());
|
||||||
queueRepository.insertAllAndStartNew(opener);
|
queueRepository.insertAllAndStartNew(opener);
|
||||||
|
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||||
((MainActivity) requireActivity()).setBottomSheetMusicInfo(song);
|
// ((MainActivity) requireActivity()).setBottomSheetMusicInfo(song);
|
||||||
|
|
||||||
SongRepository songRepository = new SongRepository(App.getInstance());
|
SongRepository songRepository = new SongRepository(App.getInstance());
|
||||||
songRepository.getInstantMix(song, 20, new MediaCallback() {
|
songRepository.getInstantMix(song, 20, new MediaCallback() {
|
||||||
|
|
@ -111,7 +110,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
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);
|
TextView playNext = view.findViewById(R.id.play_next_text_view);
|
||||||
playNext.setOnClickListener(v -> {
|
playNext.setOnClickListener(v -> {
|
||||||
MusicPlayerRemote.playNext(song);
|
// MusicPlayerRemote.playNext(song);
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
||||||
TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view);
|
||||||
addToQueue.setOnClickListener(v -> {
|
addToQueue.setOnClickListener(v -> {
|
||||||
MusicPlayerRemote.enqueue(song);
|
// MusicPlayerRemote.enqueue(song);
|
||||||
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
@ -146,13 +145,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
TextView download = view.findViewById(R.id.download_text_view);
|
TextView download = view.findViewById(R.id.download_text_view);
|
||||||
download.setOnClickListener(v -> {
|
download.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(Collections.singletonList(song), null, null);
|
// DownloadUtil.getDownloadTracker(requireContext()).download(Collections.singletonList(song), null, null);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
||||||
TextView remove = view.findViewById(R.id.remove_text_view);
|
TextView remove = view.findViewById(R.id.remove_text_view);
|
||||||
remove.setOnClickListener(v -> {
|
remove.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).remove(Collections.singletonList(song));
|
// DownloadUtil.getDownloadTracker(requireContext()).remove(Collections.singletonList(song));
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -205,12 +204,12 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initDownloadUI(TextView download, TextView remove) {
|
private void initDownloadUI(TextView download, TextView remove) {
|
||||||
if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song)) {
|
/*if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song)) {
|
||||||
download.setVisibility(View.GONE);
|
download.setVisibility(View.GONE);
|
||||||
remove.setVisibility(View.VISIBLE);
|
remove.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
download.setVisibility(View.VISIBLE);
|
download.setVisibility(View.VISIBLE);
|
||||||
remove.setVisibility(View.GONE);
|
remove.setVisibility(View.GONE);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -51,7 +51,7 @@ public class SongBottomSheetViewModel extends AndroidViewModel {
|
||||||
song.setFavorite(true);
|
song.setFavorite(true);
|
||||||
|
|
||||||
if(PreferenceUtil.getInstance(context).isStarredSyncEnabled()) {
|
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