TEST - MediaBrowserListenableFuture passed from activity to fragment to adapter

This commit is contained in:
CappielloAntonio 2021-12-29 19:10:55 +01:00
parent 279272a3af
commit 1926c7a696
4 changed files with 68 additions and 55 deletions

View file

@ -10,6 +10,7 @@ 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.cappielloantonio.play.App; import com.cappielloantonio.play.App;
@ -19,8 +20,10 @@ 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.MediaManager;
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.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -31,6 +34,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
private final LayoutInflater inflater; private final LayoutInflater inflater;
private final Context context; private final Context context;
private final MainActivity activity; private final MainActivity activity;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
private List<Song> songs; private List<Song> songs;
@ -77,6 +81,10 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
notifyDataSetChanged(); notifyDataSetChanged();
} }
public void setMediaBrowserListenableFuture(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
this.mediaBrowserListenableFuture = mediaBrowserListenableFuture;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textTitle; TextView textTitle;
TextView textAlbum; TextView textAlbum;
@ -94,15 +102,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
@Override @Override
public void onClick(View view) { public void onClick(View view) {
List<Song> opener = new ArrayList<>(); MediaManager.startQueue(mediaBrowserListenableFuture, context, songs.get(getBindingAdapterPosition()));
opener.add(songs.get(getBindingAdapterPosition()));
// MusicPlayerRemote.openQueue(opener, 0, true);
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.insertAllAndStartNew(opener);
activity.setBottomSheetInPeek(true);
// 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() {
@ -113,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); MediaManager.enqueue(mediaBrowserListenableFuture, context, (List<Song>) media, songs.size());
} }
}); });
} }

View file

@ -1,6 +1,5 @@
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;
@ -11,18 +10,20 @@ 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.media3.session.MediaBrowser;
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.ui.activity.MainActivity; import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.service.MediaManager;
import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.MusicUtil;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -30,14 +31,13 @@ import java.util.List;
public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapter.ViewHolder> { public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapter.ViewHolder> {
private static final String TAG = "SimilarTrackAdapter"; private static final String TAG = "SimilarTrackAdapter";
private final MainActivity mainActivity;
private final Context context; private final Context context;
private final LayoutInflater mInflater; private final LayoutInflater mInflater;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
private List<Song> songs; private List<Song> songs;
public SimilarTrackAdapter(MainActivity mainActivity, Context context) { public SimilarTrackAdapter(Context context) {
this.mainActivity = mainActivity;
this.context = context; this.context = context;
this.mInflater = LayoutInflater.from(context); this.mInflater = LayoutInflater.from(context);
this.songs = new ArrayList<>(); this.songs = new ArrayList<>();
@ -68,12 +68,19 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
return songs.size(); return songs.size();
} }
public Song getItem(int position) {
return songs.get(position);
}
public void setItems(List<Song> songs) { public void setItems(List<Song> songs) {
this.songs = songs; this.songs = songs;
notifyDataSetChanged(); notifyDataSetChanged();
} }
@SuppressLint("UnsafeOptInUsageError") public void setMediaBrowserListenableFuture(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
this.mediaBrowserListenableFuture = mediaBrowserListenableFuture;
}
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,31 +97,9 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
@Override @Override
public void onClick(View view) { public void onClick(View view) {
// List<Song> opener = new ArrayList<>(); MediaManager.startQueue(mediaBrowserListenableFuture, context, songs.get(getBindingAdapterPosition()));
// opener.add(songs.get(getBindingAdapterPosition()));
// MusicPlayerRemote.openQueue(opener, 0, true);
// MediaManager.startQueue(mainActivity.getMediaControllerInstance(), MappingUtil.mapMediaItem(context, opener), opener); SongRepository songRepository = new SongRepository(App.getInstance());
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()));
/*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) {
@ -123,10 +108,9 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
@Override @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
// MusicPlayerRemote.enqueue((List<Song>) media); MediaManager.enqueue(mediaBrowserListenableFuture, context, (List<Song>) media, songs.size());
MediaManager.enqueue(mainActivity.getMediaControllerInstance(), MappingUtil.mapMediaItem(context, (List<Song>) media), (List<Song>) media);
} }
});*/ });
} }
@Override @Override

View file

@ -9,6 +9,7 @@ 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.navigation.Navigation; import androidx.navigation.Navigation;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -18,9 +19,11 @@ 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.MediaManager;
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;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -33,6 +36,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
private final LayoutInflater mInflater; private final LayoutInflater mInflater;
private final boolean isCoverVisible; private final boolean isCoverVisible;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
private List<Song> songs; private List<Song> songs;
public SongHorizontalAdapter(MainActivity mainActivity, Context context, boolean isCoverVisible) { public SongHorizontalAdapter(MainActivity mainActivity, Context context, boolean isCoverVisible) {
@ -85,6 +89,10 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
notifyDataSetChanged(); notifyDataSetChanged();
} }
public void setMediaBrowserListenableFuture(ListenableFuture<MediaBrowser> mediaBrowserListenableFuture) {
this.mediaBrowserListenableFuture = mediaBrowserListenableFuture;
}
public Song getItem(int id) { public Song getItem(int id) {
return songs.get(id); return songs.get(id);
} }
@ -120,13 +128,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
@Override @Override
public void onClick(View view) { public void onClick(View view) {
QueueRepository queueRepository = new QueueRepository(App.getInstance()); MediaManager.startQueue(mediaBrowserListenableFuture, context, songs, getBindingAdapterPosition());
queueRepository.insertAllAndStartNew(songs);
mainActivity.setBottomSheetInPeek(true);
// mainActivity.setBottomSheetMusicInfo(songs.get(getBindingAdapterPosition()));
// MusicPlayerRemote.openQueue(songs, getBindingAdapterPosition(), true);
} }
@Override @Override

View file

@ -1,6 +1,7 @@
package com.cappielloantonio.play.ui.fragment; package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -44,7 +45,7 @@ import com.cappielloantonio.play.viewmodel.HomeViewModel;
import java.util.Objects; import java.util.Objects;
public class HomeFragment extends Fragment { public class HomeFragment extends Fragment {
private static final String TAG = "CategoriesFragment"; private static final String TAG = "HomeFragment";
private FragmentHomeBinding bind; private FragmentHomeBinding bind;
private MainActivity activity; private MainActivity activity;
@ -106,10 +107,23 @@ public class HomeFragment extends Fragment {
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
activity.setBottomNavigationBarVisibility(true); activity.setBottomNavigationBarVisibility(true);
activity.setBottomSheetVisibility(true); activity.setBottomSheetVisibility(true);
} }
@Override
public void onResume() {
super.onResume();
setMediaBrowserListenableFuture();
}
@Override
public void onPause() {
super.onPause();
}
@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
@ -212,6 +226,12 @@ public class HomeFragment extends Fragment {
Objects.requireNonNull(bind.toolbar.getOverflowIcon()).setTint(requireContext().getResources().getColor(R.color.titleTextColor, null)); Objects.requireNonNull(bind.toolbar.getOverflowIcon()).setTint(requireContext().getResources().getColor(R.color.titleTextColor, null));
} }
private void setMediaBrowserListenableFuture() {
discoverSongAdapter.setMediaBrowserListenableFuture(activity.getMediaBrowserListenableFuture());
similarMusicAdapter.setMediaBrowserListenableFuture(activity.getMediaBrowserListenableFuture());
starredSongAdapter.setMediaBrowserListenableFuture(activity.getMediaBrowserListenableFuture());
}
private void initDiscoverSongSlideView() { private void initDiscoverSongSlideView() {
bind.discoverSongViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); bind.discoverSongViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
@ -230,6 +250,13 @@ public class HomeFragment extends Fragment {
} }
}); });
bind.discoverSongViewPager.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: " + view.toString());
}
});
setDiscoverSongSlideViewOffset(20, 16); setDiscoverSongSlideViewOffset(20, 16);
} }
@ -237,7 +264,7 @@ public class HomeFragment extends Fragment {
bind.similarTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); bind.similarTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.similarTracksRecyclerView.setHasFixedSize(true); bind.similarTracksRecyclerView.setHasFixedSize(true);
similarMusicAdapter = new SimilarTrackAdapter(activity, requireContext()); similarMusicAdapter = new SimilarTrackAdapter(requireContext());
bind.similarTracksRecyclerView.setAdapter(similarMusicAdapter); bind.similarTracksRecyclerView.setAdapter(similarMusicAdapter);
homeViewModel.getStarredTracksSample().observe(requireActivity(), songs -> { homeViewModel.getStarredTracksSample().observe(requireActivity(), songs -> {
if (songs == null) { if (songs == null) {