package com.suno.android.media import android.app.PendingIntent import android.content.Intent import androidx.annotation.OptIn import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaLibraryService import androidx.media3.session.MediaSession import com.suno.android.MainActivity import com.suno.android.media.medialibrarysession.SharedMediaLibrarySession import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @AndroidEntryPoint class PlaybackMediaLibraryService : MediaLibraryService() { @Inject @CoreMediaPlayback lateinit var sharedMediaLibrarySession: SharedMediaLibrarySession private val mediaLibrarySession: MediaLibrarySession get() = sharedMediaLibrarySession.getInstance() @Inject lateinit var mediaManager: MediaManager @Inject lateinit var mediaAnalyticsManager: MediaAnalyticsManager @OptIn(UnstableApi::class) override fun onCreate() { super.onCreate() val notifyIntent = Intent(this, MainActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_SINGLE_TOP } mediaLibrarySession.setSessionActivity( PendingIntent.getActivity( this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ), ) // BIND SESSION PLAYER EVENTS TO MEDIA MANAGER! mediaLibrarySession.player.apply { addListener(mediaManager.providePlayerListenerInterceptor()) mediaAnalyticsManager.registerPlayer(this) } } override fun onGetSession( controllerInfo: MediaSession.ControllerInfo, ): MediaLibrarySession = mediaLibrarySession override fun onDestroy() { mediaAnalyticsManager.unregisterPlayer(mediaLibrarySession.player) sharedMediaLibrarySession.releaseInstanceAndPlayer() stopSelf() super.onDestroy() } }