wip: artist logic squared away, seems to be working as expected, mostly. still need more testing

This commit is contained in:
eddyizm 2025-12-27 19:05:14 -08:00
parent c1b2ec09a4
commit 8140e80d61
No known key found for this signature in database
GPG key ID: CF5F671829E8158A
3 changed files with 19 additions and 22 deletions

View file

@ -14,6 +14,7 @@ import android.widget.ToggleButton;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.session.MediaBrowser; import androidx.media3.session.MediaBrowser;
@ -205,7 +206,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback {
} }
private void initPlayButtons() { private void initPlayButtons() {
bind.artistPageShuffleButton.setOnClickListener(v -> artistPageViewModel.getArtistShuffleList().observe(getViewLifecycleOwner(), new androidx.lifecycle.Observer<List<Child>>() { bind.artistPageShuffleButton.setOnClickListener(v -> artistPageViewModel.getArtistShuffleList().observe(getViewLifecycleOwner(), new Observer<List<Child>>() {
@Override @Override
public void onChanged(List<Child> songs) { public void onChanged(List<Child> songs) {
if (songs != null && !songs.isEmpty()) { if (songs != null && !songs.isEmpty()) {
@ -216,7 +217,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback {
} }
})); }));
bind.artistPageRadioButton.setOnClickListener(v -> artistPageViewModel.getArtistInstantMix().observe(getViewLifecycleOwner(), new androidx.lifecycle.Observer<List<Child>>() { bind.artistPageRadioButton.setOnClickListener(v -> artistPageViewModel.getArtistInstantMix().observe(getViewLifecycleOwner(), new Observer<List<Child>>() {
@Override @Override
public void onChanged(List<Child> songs) { public void onChanged(List<Child> songs) {
if (songs != null && !songs.isEmpty()) { if (songs != null && !songs.isEmpty()) {

View file

@ -7,10 +7,10 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton; import android.widget.ToggleButton;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.session.MediaBrowser; import androidx.media3.session.MediaBrowser;
@ -22,6 +22,7 @@ import com.cappielloantonio.tempo.repository.ArtistRepository;
import com.cappielloantonio.tempo.service.MediaManager; import com.cappielloantonio.tempo.service.MediaManager;
import com.cappielloantonio.tempo.service.MediaService; import com.cappielloantonio.tempo.service.MediaService;
import com.cappielloantonio.tempo.subsonic.models.ArtistID3; import com.cappielloantonio.tempo.subsonic.models.ArtistID3;
import com.cappielloantonio.tempo.subsonic.models.Child;
import com.cappielloantonio.tempo.ui.activity.MainActivity; import com.cappielloantonio.tempo.ui.activity.MainActivity;
import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.util.Constants;
import com.cappielloantonio.tempo.util.MusicUtil; import com.cappielloantonio.tempo.util.MusicUtil;
@ -29,6 +30,8 @@ import com.cappielloantonio.tempo.viewmodel.ArtistBottomSheetViewModel;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
@UnstableApi @UnstableApi
public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener { public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
private static final String TAG = "AlbumBottomSheetDialog"; private static final String TAG = "AlbumBottomSheetDialog";
@ -87,20 +90,20 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
TextView playRadio = view.findViewById(R.id.play_radio_text_view); TextView playRadio = view.findViewById(R.id.play_radio_text_view);
playRadio.setOnClickListener(v -> { playRadio.setOnClickListener(v -> {
ArtistRepository artistRepository = new ArtistRepository(); ArtistRepository artistRepository = new ArtistRepository();
Observer<List<Child>> observer = new Observer<List<Child>>() {
artistRepository.getInstantMix(artist, 20).observe(getViewLifecycleOwner(), songs -> { @Override
// navidrome may return null for this public void onChanged(List<Child> songs) {
if (songs == null) if (songs != null && !songs.isEmpty() && isAdded()) {
return; MusicUtil.ratingFilter(songs);
MusicUtil.ratingFilter(songs); MediaManager.startQueue(mediaBrowserListenableFuture, songs, 0);
((MainActivity) requireActivity()).setBottomSheetInPeek(true);
if (!songs.isEmpty()) { artistRepository.getInstantMix(artist, 20).removeObserver(this);
MediaManager.startQueue(mediaBrowserListenableFuture, songs, 0); dismissBottomSheet();
((MainActivity) requireActivity()).setBottomSheetInPeek(true); }
} }
};
dismissBottomSheet(); artistRepository.getInstantMix(artist, 20).observe(getViewLifecycleOwner(), observer);
});
}); });
TextView playRandom = view.findViewById(R.id.play_random_text_view); TextView playRandom = view.findViewById(R.id.play_random_text_view);
@ -108,16 +111,10 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
ArtistRepository artistRepository = new ArtistRepository(); ArtistRepository artistRepository = new ArtistRepository();
artistRepository.getRandomSong(artist, 50).observe(getViewLifecycleOwner(), songs -> { artistRepository.getRandomSong(artist, 50).observe(getViewLifecycleOwner(), songs -> {
MusicUtil.ratingFilter(songs); MusicUtil.ratingFilter(songs);
if (!songs.isEmpty()) { if (!songs.isEmpty()) {
MediaManager.startQueue(mediaBrowserListenableFuture, songs, 0); MediaManager.startQueue(mediaBrowserListenableFuture, songs, 0);
((MainActivity) requireActivity()).setBottomSheetInPeek(true); ((MainActivity) requireActivity()).setBottomSheetInPeek(true);
dismissBottomSheet();
} else {
Toast.makeText(requireContext(), getString(R.string.artist_error_retrieving_tracks), Toast.LENGTH_SHORT).show();
} }
dismissBottomSheet(); dismissBottomSheet();
}); });
}); });

View file

@ -128,7 +128,6 @@ public class ArtistPageViewModel extends AndroidViewModel {
MappingUtil.mapDownloads(songs), MappingUtil.mapDownloads(songs),
songs.stream().map(Download::new).collect(Collectors.toList()) songs.stream().map(Download::new).collect(Collectors.toList())
); );
} else {
} }
} }
}); });