package com.suno.android.media import androidx.media3.common.MediaItem import androidx.media3.common.MediaMetadata import androidx.media3.common.util.UnstableApi import androidx.media3.session.LibraryResult import androidx.media3.session.MediaLibraryService import androidx.media3.session.MediaLibraryService.MediaLibrarySession import androidx.media3.session.MediaSession import com.google.common.collect.ImmutableList import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.ListenableFuture class MediaLibrarySessionCallback : MediaLibrarySession.Callback { @UnstableApi override fun onGetLibraryRoot( session: MediaLibrarySession, browser: MediaSession.ControllerInfo, params: MediaLibraryService.LibraryParams?, ): ListenableFuture> { val metadata = MediaMetadata.Builder() .setIsBrowsable(true) .setTitle("All Songs") .setIsPlayable(true) .build() val rootMediaItem = MediaItem.Builder() .setMediaId("root") .setMediaMetadata(metadata) .build() return Futures.immediateFuture(LibraryResult.ofItem(rootMediaItem, params)) } override fun onGetChildren( session: MediaLibrarySession, browser: MediaSession.ControllerInfo, parentId: String, page: Int, pageSize: Int, params: MediaLibraryService.LibraryParams?, ): ListenableFuture>> { if (parentId == "root") { val mediaItems = (0 until session.player.mediaItemCount).map { index -> session.player.getMediaItemAt(index) } return Futures.immediateFuture(LibraryResult.ofItemList(mediaItems, null)) } else { // Handle other parentIds if necessary val mediaItems = (0 until session.player.mediaItemCount).map { index -> session.player.getMediaItemAt(index) } return Futures.immediateFuture(LibraryResult.ofItemList(mediaItems, null)) } } }