package com.cappielloantonio.play.viewmodel; import android.app.Application; import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.OptIn; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.media3.common.util.UnstableApi; import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Queue; import com.cappielloantonio.play.model.Media; import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.QueueRepository; import com.cappielloantonio.play.repository.SongRepository; import com.cappielloantonio.play.util.DownloadUtil; import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.PreferenceUtil; import java.util.Collections; import java.util.List; @OptIn(markerClass = UnstableApi.class) public class PlayerBottomSheetViewModel extends AndroidViewModel { private static final String TAG = "PlayerBottomSheetViewModel"; private final SongRepository songRepository; private final ArtistRepository artistRepository; private final QueueRepository queueRepository; private final MutableLiveData lyricsLiveData = new MutableLiveData<>(null); private final MutableLiveData liveMedia = new MutableLiveData<>(null); private final MutableLiveData liveArtist = new MutableLiveData<>(null); private final MutableLiveData> instantMix = new MutableLiveData<>(null); public PlayerBottomSheetViewModel(@NonNull Application application) { super(application); songRepository = new SongRepository(application); artistRepository = new ArtistRepository(application); queueRepository = new QueueRepository(application); } public LiveData> getQueueSong() { return queueRepository.getLiveQueue(); } public void setFavorite(Context context, Media media) { if (media != null) { if (Boolean.TRUE.equals(media.getStarred())) { songRepository.unstar(media.getId()); media.setStarred(false); } else { songRepository.star(media.getId()); media.setStarred(true); if (PreferenceUtil.getInstance(context).isStarredSyncEnabled()) { DownloadUtil.getDownloadTracker(context).download( MappingUtil.mapMediaItem(context, media, false), MappingUtil.mapDownload(media, null, null) ); } } } } public LiveData getLiveLyrics() { return lyricsLiveData; } public void refreshMediaInfo(LifecycleOwner owner, Media media) { songRepository.getSongLyrics(media).observe(owner, lyricsLiveData::postValue); } public LiveData getLiveMedia() { return liveMedia; } public void setLiveMedia(LifecycleOwner owner, String mediaType, String mediaId) { if(mediaType != null) { switch (mediaType) { case Media.MEDIA_TYPE_MUSIC: songRepository.getSong(mediaId).observe(owner, liveMedia::postValue); break; case Media.MEDIA_TYPE_PODCAST: liveMedia.postValue(null); break; } } } public LiveData getLiveArtist() { return liveArtist; } public void setLiveArtist(LifecycleOwner owner, String mediaType, String ArtistId) { if(mediaType != null) { switch (mediaType) { case Media.MEDIA_TYPE_MUSIC: artistRepository.getArtist(ArtistId).observe(owner, liveArtist::postValue); break; case Media.MEDIA_TYPE_PODCAST: liveArtist.postValue(null); break; } } } public LiveData> getMediaInstantMix(LifecycleOwner owner, Media media) { instantMix.setValue(Collections.emptyList()); songRepository.getInstantMix(media, 20).observe(owner, instantMix::postValue); return instantMix; } }