diff --git a/app/src/main/java/com/cappielloantonio/tempo/repository/AutomotiveRepository.java b/app/src/main/java/com/cappielloantonio/tempo/repository/AutomotiveRepository.java index b509360e..8fd49fc7 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/repository/AutomotiveRepository.java +++ b/app/src/main/java/com/cappielloantonio/tempo/repository/AutomotiveRepository.java @@ -606,20 +606,7 @@ public class AutomotiveRepository { List mediaItems = new ArrayList<>(); for (InternetRadioStation radioStation : radioStations) { - MediaMetadata mediaMetadata = new MediaMetadata.Builder() - .setTitle(radioStation.getName()) - .setIsBrowsable(false) - .setIsPlayable(true) - .setMediaType(MediaMetadata.MEDIA_TYPE_RADIO_STATION) - .build(); - - MediaItem mediaItem = new MediaItem.Builder() - .setMediaId(radioStation.getId()) - .setMediaMetadata(mediaMetadata) - .setUri(radioStation.getStreamUrl()) - .build(); - - mediaItems.add(mediaItem); + mediaItems.add(MappingUtil.mapInternetRadioStation(radioStation)); } setInternetRadioStationsMetadata(radioStations); diff --git a/app/src/main/java/com/cappielloantonio/tempo/util/DynamicMediaSourceFactory.kt b/app/src/main/java/com/cappielloantonio/tempo/util/DynamicMediaSourceFactory.kt index e152dc0a..fe962121 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/util/DynamicMediaSourceFactory.kt +++ b/app/src/main/java/com/cappielloantonio/tempo/util/DynamicMediaSourceFactory.kt @@ -3,6 +3,7 @@ package com.cappielloantonio.tempo.util import android.content.Context import androidx.media3.common.C import androidx.media3.common.MediaItem +import androidx.media3.common.MediaMetadata import androidx.media3.common.MimeTypes import androidx.media3.common.util.UnstableApi import androidx.media3.datasource.DataSource @@ -20,10 +21,10 @@ class DynamicMediaSourceFactory( ) : MediaSource.Factory { override fun createMediaSource(mediaItem: MediaItem): MediaSource { - val mediaType: String? = mediaItem.mediaMetadata.extras?.getString("type", "") + val mediaId = mediaItem.mediaId val streamingCacheSize = Preferences.getStreamingCacheSize() - val bypassCache = mediaType == Constants.MEDIA_TYPE_RADIO + val bypassCache = mediaId.startsWith("ir-") val useUpstream = when { streamingCacheSize.toInt() == 0 -> true diff --git a/app/src/tempus/java/com/cappielloantonio/tempo/service/MediaLibraryServiceCallback.kt b/app/src/tempus/java/com/cappielloantonio/tempo/service/MediaLibraryServiceCallback.kt index 1bc0b15f..b551b20d 100644 --- a/app/src/tempus/java/com/cappielloantonio/tempo/service/MediaLibraryServiceCallback.kt +++ b/app/src/tempus/java/com/cappielloantonio/tempo/service/MediaLibraryServiceCallback.kt @@ -32,6 +32,7 @@ import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_REPEAT_MO import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_OFF import com.cappielloantonio.tempo.util.Constants.CUSTOM_COMMAND_TOGGLE_SHUFFLE_MODE_ON import com.google.common.collect.ImmutableList +import com.cappielloantonio.tempo.util.Constants import com.cappielloantonio.tempo.util.Preferences import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.ListenableFuture @@ -366,11 +367,31 @@ open class MediaLibrarySessionCallback( controller: MediaSession.ControllerInfo, mediaItems: List ): ListenableFuture> { - return super.onAddMediaItems( - mediaSession, - controller, - MediaBrowserTree.getItems(mediaItems) - ) + val firstItem = mediaItems.firstOrNull() + val isRadio = firstItem?.mediaId?.startsWith("ir-") == true + + if (isRadio) { + return Futures.transformAsync( + automotiveRepository.internetRadioStations, + { result -> + val stations = result?.value + val selected = stations?.find { it.mediaId == firstItem?.mediaId } + if (selected != null) { + val updatedSelected = selected.buildUpon() + .setMimeType(selected.localConfiguration?.mimeType) + .build() + + Futures.immediateFuture(listOf(updatedSelected)) + } else { + Futures.immediateFuture(emptyList()) + } + }, + androidx.core.content.ContextCompat.getMainExecutor(context) + ) + } + + val resolvedItems = MediaBrowserTree.getItems(mediaItems) + return super.onAddMediaItems(mediaSession, controller, resolvedItems) } override fun onSearch(