From 7b5bbd7d53a822b6d2f977849ad4f7fc48fe582f Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Thu, 30 Dec 2021 20:25:51 +0100 Subject: [PATCH] Queue elements are now clickable and customized --- .../play/adapter/PlayerSongQueueAdapter.java | 23 ++++++++++++++----- .../play/interfaces/MediaIndexCallback.java | 5 ++++ .../play/service/MediaManager.java | 15 ++++++++++++ .../fragment/PlayerBottomSheetFragment.java | 9 ++++++++ 4 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/cappielloantonio/play/interfaces/MediaIndexCallback.java diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/PlayerSongQueueAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/PlayerSongQueueAdapter.java index cb5aed5e..585e323b 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/PlayerSongQueueAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/PlayerSongQueueAdapter.java @@ -8,14 +8,19 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.media3.common.MediaItem; +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.interfaces.MediaIndexCallback; import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.service.MediaManager; import com.cappielloantonio.play.ui.fragment.PlayerBottomSheetFragment; import com.cappielloantonio.play.util.MusicUtil; +import com.google.common.util.concurrent.ListenableFuture; import java.util.ArrayList; import java.util.List; @@ -27,6 +32,7 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter mediaBrowserListenableFuture; private List songs; public PlayerSongQueueAdapter(Context context, PlayerBottomSheetFragment playerBottomSheetFragment) { @@ -56,10 +62,12 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter { + if (position < index) { + holder.songTitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null)); + holder.songSubtitle.setTextColor(context.getResources().getColor(R.color.songToPlayTextColor, null)); + } + }); } @Override @@ -76,6 +84,10 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter mediaBrowserListenableFuture) { + this.mediaBrowserListenableFuture = mediaBrowserListenableFuture; + } + public Song getItem(int id) { return songs.get(id); } @@ -100,8 +112,7 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter mediaBrowserListenableFuture, MediaIndexCallback callback) { + if (mediaBrowserListenableFuture != null) { + mediaBrowserListenableFuture.addListener(() -> { + try { + if (mediaBrowserListenableFuture.isDone()) { + callback.onRecovery(mediaBrowserListenableFuture.get().getCurrentMediaItemIndex()); + } + } catch (ExecutionException | InterruptedException e) { + Log.e(TAG, e.getMessage()); + } + }, MoreExecutors.directExecutor()); + } + } + public static void timestamp(MediaItem mediaItem) { if (mediaItem != null) getQueueRepository().setTimestamp(mediaItem.mediaId); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java index f6bad61a..31bfcff2 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerBottomSheetFragment.java @@ -99,6 +99,12 @@ public class PlayerBottomSheetFragment extends Fragment { bindMediaController(); } + @Override + public void onResume() { + super.onResume(); + setMediaBrowserListenableFuture(); + } + @Override public void onStop() { releaseMediaBrowser(); @@ -135,6 +141,9 @@ public class PlayerBottomSheetFragment extends Fragment { MediaController.releaseFuture(mediaBrowserListenableFuture); } + private void setMediaBrowserListenableFuture() { + playerSongQueueAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture); + } @SuppressLint("UnsafeOptInUsageError") private void bindMediaController() {