Enable @UnstableApi lint in session demo app and add needed @OptIn

PiperOrigin-RevId: 556779020
This commit is contained in:
ibaker 2023-08-14 15:11:18 +01:00 committed by oceanjules
parent 08067eff14
commit a48b99214e
3 changed files with 23 additions and 5 deletions

View File

@ -24,11 +24,12 @@ import android.app.TaskStackBuilder
import android.content.Intent import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.annotation.OptIn
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import androidx.media3.common.AudioAttributes import androidx.media3.common.AudioAttributes
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.media3.common.util.Util import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.DataSourceBitmapLoader import androidx.media3.datasource.DataSourceBitmapLoader
import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.session.* import androidx.media3.session.*
@ -58,6 +59,7 @@ class PlaybackService : MediaLibraryService() {
private val immutableFlag = if (Build.VERSION.SDK_INT >= 23) FLAG_IMMUTABLE else 0 private val immutableFlag = if (Build.VERSION.SDK_INT >= 23) FLAG_IMMUTABLE else 0
} }
@OptIn(UnstableApi::class) // MediaSessionService.setListener
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
customCommands = customCommands =
@ -83,6 +85,9 @@ class PlaybackService : MediaLibraryService() {
} }
} }
// MediaSession.setSessionActivity
// MediaSessionService.clearListener
@OptIn(UnstableApi::class)
override fun onDestroy() { override fun onDestroy() {
mediaLibrarySession.setSessionActivity(getBackStackedActivity()) mediaLibrarySession.setSessionActivity(getBackStackedActivity())
mediaLibrarySession.release() mediaLibrarySession.release()
@ -93,6 +98,9 @@ class PlaybackService : MediaLibraryService() {
private inner class CustomMediaLibrarySessionCallback : MediaLibrarySession.Callback { private inner class CustomMediaLibrarySessionCallback : MediaLibrarySession.Callback {
// ConnectionResult.DEFAULT_SESSION_AND_LIBRARY_COMMANDS
// ConnectionResult.AcceptedResultBuilder
@OptIn(UnstableApi::class)
override fun onConnect(session: MediaSession, controller: ControllerInfo): ConnectionResult { override fun onConnect(session: MediaSession, controller: ControllerInfo): ConnectionResult {
val availableSessionCommands = val availableSessionCommands =
ConnectionResult.DEFAULT_SESSION_AND_LIBRARY_COMMANDS.buildUpon() ConnectionResult.DEFAULT_SESSION_AND_LIBRARY_COMMANDS.buildUpon()
@ -220,6 +228,11 @@ class PlaybackService : MediaLibraryService() {
.build() .build()
MediaItemTree.initialize(assets) MediaItemTree.initialize(assets)
// MediaLibrarySession.Builder.setCustomLayout
// MediaLibrarySession.Builder.setBitmapLoader
// CacheBitmapLoader
// DataSourceBitmapLoader
@OptIn(UnstableApi::class)
mediaLibrarySession = mediaLibrarySession =
MediaLibrarySession.Builder(this, player, librarySessionCallback) MediaLibrarySession.Builder(this, player, librarySessionCallback)
.setSessionActivity(getSingleTopActivity()) .setSessionActivity(getSingleTopActivity())
@ -263,6 +276,7 @@ class PlaybackService : MediaLibraryService() {
/* Do nothing. */ /* Do nothing. */
} }
@OptIn(UnstableApi::class) // MediaSessionService.Listener
private inner class MediaSessionServiceListener : Listener { private inner class MediaSessionServiceListener : Listener {
/** /**
@ -294,7 +308,10 @@ class PlaybackService : MediaLibraryService() {
} }
private fun ensureNotificationChannel(notificationManagerCompat: NotificationManagerCompat) { private fun ensureNotificationChannel(notificationManagerCompat: NotificationManagerCompat) {
if (Util.SDK_INT < 26 || notificationManagerCompat.getNotificationChannel(CHANNEL_ID) != null) { if (
Build.VERSION.SDK_INT < 26 ||
notificationManagerCompat.getNotificationChannel(CHANNEL_ID) != null
) {
return return
} }

View File

@ -23,9 +23,9 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.Button import android.widget.Button
import android.widget.ImageView
import android.widget.ListView import android.widget.ListView
import android.widget.TextView import android.widget.TextView
import androidx.annotation.OptIn
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.media3.common.C.TRACK_TYPE_TEXT import androidx.media3.common.C.TRACK_TYPE_TEXT
@ -33,6 +33,7 @@ import androidx.media3.common.MediaItem
import androidx.media3.common.MediaMetadata import androidx.media3.common.MediaMetadata
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.common.Tracks import androidx.media3.common.Tracks
import androidx.media3.common.util.UnstableApi
import androidx.media3.session.MediaController import androidx.media3.session.MediaController
import androidx.media3.session.SessionToken import androidx.media3.session.SessionToken
import androidx.media3.ui.PlayerView import androidx.media3.ui.PlayerView
@ -63,6 +64,7 @@ class PlayerActivity : AppCompatActivity() {
val controller = this.controller ?: return@run val controller = this.controller ?: return@run
if (controller.currentMediaItemIndex == position) { if (controller.currentMediaItemIndex == position) {
controller.playWhenReady = !controller.playWhenReady controller.playWhenReady = !controller.playWhenReady
@OptIn(UnstableApi::class) // PlayerView.hideController
if (controller.playWhenReady) { if (controller.playWhenReady) {
playerView.hideController() playerView.hideController()
} }
@ -99,6 +101,7 @@ class PlayerActivity : AppCompatActivity() {
MediaController.releaseFuture(controllerFuture) MediaController.releaseFuture(controllerFuture)
} }
@OptIn(UnstableApi::class) // PlayerView.setShowSubtitleButton
private fun setController() { private fun setController() {
val controller = this.controller ?: return val controller = this.controller ?: return

View File

@ -21,8 +21,6 @@
regexp='\(markerClass = androidx\.media3\.common\.util\.UnstableApi\.class\)' /> regexp='\(markerClass = androidx\.media3\.common\.util\.UnstableApi\.class\)' />
<ignore path='demos/gl/' <ignore path='demos/gl/'
regexp='\(markerClass = androidx\.media3\.common\.util\.UnstableApi\.class\)' /> regexp='\(markerClass = androidx\.media3\.common\.util\.UnstableApi\.class\)' />
<ignore path='demos/session/'
regexp='\(markerClass = androidx\.media3\.common\.util\.UnstableApi\.class\)' />
<ignore path='demos/surface/' <ignore path='demos/surface/'
regexp='\(markerClass = androidx\.media3\.common\.util\.UnstableApi\.class\)' /> regexp='\(markerClass = androidx\.media3\.common\.util\.UnstableApi\.class\)' />
<ignore path='demos/transformer/' <ignore path='demos/transformer/'