Skip to content

Commit f427c0c

Browse files
authored
Update to AndroidX Media3 1.4.0 (#618)
1 parent b19f959 commit f427c0c

File tree

13 files changed

+99
-81
lines changed

13 files changed

+99
-81
lines changed

build-logic/plugins/src/main/java/ch/srgssr/pillarbox/gradle/internal/ProjectExtensions.kt

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,9 @@ package ch.srgssr.pillarbox.gradle.internal
66

77
import com.android.build.api.dsl.CommonExtension
88
import org.gradle.api.Project
9-
import org.gradle.api.artifacts.VersionCatalog
10-
import org.gradle.api.artifacts.VersionCatalogsExtension
11-
import org.gradle.kotlin.dsl.dependencies
12-
import org.gradle.kotlin.dsl.getByType
139
import org.gradle.kotlin.dsl.withType
1410
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
1511

16-
internal val Project.libs: VersionCatalog
17-
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")
18-
1912
internal fun Project.configureAndroidModule(extension: CommonExtension<*, *, *, *, *, *>) = with(extension) {
2013
namespace = "ch.srgssr.pillarbox." + name.removePrefix("pillarbox-").replace('-', '.')
2114
compileSdk = AppConfig.compileSdk
@@ -27,18 +20,12 @@ internal fun Project.configureAndroidModule(extension: CommonExtension<*, *, *,
2720
compileOptions {
2821
sourceCompatibility = AppConfig.javaVersion
2922
targetCompatibility = AppConfig.javaVersion
30-
isCoreLibraryDesugaringEnabled = true
3123
}
3224

3325
buildFeatures {
3426
resValues = false
3527
shaders = false
3628
}
37-
38-
dependencies {
39-
// coreLibraryDesugaring(libs.findLibrary("android-desugar-jdk-libs").get())
40-
add("coreLibraryDesugaring", libs.findLibrary("android-desugar-jdk-libs").get())
41-
}
4229
}
4330

4431
internal fun Project.configureKotlinModule() {

docs/README.md

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -120,25 +120,6 @@ kotlinOptions {
120120
}
121121
```
122122

123-
### Support Android API < 24
124-
125-
A change in AndroidX Media3 1.3.0 requires applications to use library desugaring, as described in the corresponding [Android documentation](https://developer.android.com/studio/write/java8-support#library-desugaring):
126-
127-
```kotlin
128-
compileOptions {
129-
sourceCompatibility = JavaVersion.VERSION_17
130-
targetCompatibility = JavaVersion.VERSION_17
131-
isCoreLibraryDesugaringEnabled = true
132-
}
133-
134-
dependencies {
135-
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
136-
}
137-
```
138-
139-
> [!IMPORTANT]
140-
> This should be done even if your min SDK version is 24+.
141-
142123
### Integrate Pillarbox
143124

144125
To start using Pillarbox in your project, you can check each module's documentation:

gradle/libs.versions.toml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[versions]
22
accompanist = "0.34.0"
3-
android-desugar-jdk-libs = "2.0.4"
43
android-gradle-plugin = "8.5.1"
54
androidx-activity = "1.9.0"
65
androidx-annotation = "1.8.0"
@@ -9,8 +8,7 @@ androidx-core = "1.13.1"
98
androidx-fragment = "1.8.1"
109
androidx-leanback = "1.0.0"
1110
androidx-lifecycle = "2.8.3"
12-
androidx-media = "1.7.0"
13-
androidx-media3 = "1.3.1"
11+
androidx-media3 = "1.4.0"
1412
androidx-navigation = "2.7.7"
1513
androidx-paging = "3.3.0"
1614
androidx-test-core = "1.6.1"
@@ -24,7 +22,7 @@ comscore = "6.11.1"
2422
dependency-analysis-gradle-plugin = "1.32.0"
2523
detekt = "1.23.6"
2624
dokka = "1.9.20"
27-
guava = "32.1.3-android"
25+
guava = "33.0.0-android"
2826
json = "20240303"
2927
junit = "4.13.2"
3028
kotlin = "2.0.0"
@@ -42,7 +40,6 @@ turbine = "1.1.0"
4240

4341
[libraries]
4442
accompanist-navigation-material = { module = "com.google.accompanist:accompanist-navigation-material", version.ref = "accompanist" }
45-
android-desugar-jdk-libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "android-desugar-jdk-libs" }
4643
android-gradle-api = { module = "com.android.tools.build:gradle-api", version.ref = "android-gradle-plugin" }
4744
androidx-activity = { module = "androidx.activity:activity", version.ref = "androidx-activity" }
4845
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" }
@@ -108,7 +105,6 @@ androidx-media3-hls = { group = "androidx.media3", name = "media3-exoplayer-hls"
108105
androidx-media3-session = { group = "androidx.media3", name = "media3-session", version.ref = "androidx-media3" }
109106
androidx-media3-test-utils = { module = "androidx.media3:media3-test-utils", version.ref = "androidx-media3" }
110107
androidx-media3-test-utils-robolectric = { module = "androidx.media3:media3-test-utils-robolectric", version.ref = "androidx-media3" }
111-
androidx-media = { group = "androidx.media", name = "media", version.ref = "androidx-media" }
112108
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
113109
okhttp-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" }
114110
tagcommander-core = { group = "com.tagcommander.lib", name = "core", version.ref = "tag-commander-core" }

pillarbox-demo/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ dependencies {
7373
implementation(libs.androidx.lifecycle.runtime.compose)
7474
implementation(libs.androidx.lifecycle.viewmodel)
7575
implementation(libs.androidx.lifecycle.viewmodel.compose)
76-
implementation(libs.androidx.media)
7776
implementation(libs.androidx.media3.common)
7877
implementation(libs.androidx.media3.exoplayer)
7978
implementation(libs.androidx.media3.session)

pillarbox-demo/src/main/java/ch/srgssr/pillarbox/demo/ui/showcases/misc/UpdatableMediaItemViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class UpdatableMediaItemViewModel(application: Application) : AndroidViewModel(a
5050
.setMediaDescriptionAdapter(PillarboxMediaDescriptionAdapter(context = application, pendingIntent = null))
5151
.build()
5252
notificationManager.setPlayer(player)
53-
notificationManager.setMediaSessionToken(mediaSession.sessionCompatToken)
53+
notificationManager.setMediaSessionToken(mediaSession.platformToken)
5454

5555
timer = timer(name = "update-item", period = 3.seconds.inWholeMilliseconds) {
5656
viewModelScope.launch(Dispatchers.Main) {

pillarbox-player/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ android {
2929
dependencies {
3030
implementation(libs.androidx.annotation)
3131
implementation(libs.androidx.core)
32-
api(libs.androidx.media)
3332
api(libs.androidx.media3.common)
3433
implementation(libs.androidx.media3.dash)
3534
implementation(libs.androidx.media3.datasource)

pillarbox-player/src/main/java/ch/srgssr/pillarbox/player/PillarboxLoadControl.kt

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.media3.common.Timeline
99
import androidx.media3.exoplayer.DefaultLoadControl
1010
import androidx.media3.exoplayer.LoadControl
1111
import androidx.media3.exoplayer.Renderer
12+
import androidx.media3.exoplayer.analytics.PlayerId
1213
import androidx.media3.exoplayer.source.MediaSource
1314
import androidx.media3.exoplayer.source.TrackGroupArray
1415
import androidx.media3.exoplayer.trackselection.ExoTrackSelection
@@ -41,57 +42,47 @@ class PillarboxLoadControl(
4142
.setBackBuffer(BACK_BUFFER_DURATION_MS, true)
4243
.build()
4344

44-
override fun onPrepared() {
45-
defaultLoadControl.onPrepared()
45+
override fun onPrepared(playerId: PlayerId) {
46+
defaultLoadControl.onPrepared(playerId)
4647
}
4748

48-
override fun onStopped() {
49-
defaultLoadControl.onStopped()
49+
override fun onStopped(playerId: PlayerId) {
50+
defaultLoadControl.onStopped(playerId)
5051
}
5152

52-
override fun onReleased() {
53-
defaultLoadControl.onReleased()
53+
override fun onReleased(playerId: PlayerId) {
54+
defaultLoadControl.onReleased(playerId)
5455
}
5556

5657
override fun getAllocator(): Allocator {
5758
return allocator
5859
}
5960

60-
override fun getBackBufferDurationUs(): Long {
61-
return defaultLoadControl.backBufferDurationUs
61+
override fun getBackBufferDurationUs(playerId: PlayerId): Long {
62+
return defaultLoadControl.getBackBufferDurationUs(playerId)
6263
}
6364

64-
override fun retainBackBufferFromKeyframe(): Boolean {
65-
return defaultLoadControl.retainBackBufferFromKeyframe()
65+
override fun retainBackBufferFromKeyframe(playerId: PlayerId): Boolean {
66+
return defaultLoadControl.retainBackBufferFromKeyframe(playerId)
6667
}
6768

68-
override fun shouldContinueLoading(
69-
playbackPositionUs: Long,
70-
bufferedDurationUs: Long,
71-
playbackSpeed: Float
72-
): Boolean {
73-
return defaultLoadControl.shouldContinueLoading(playbackPositionUs, bufferedDurationUs, playbackSpeed)
69+
override fun shouldContinueLoading(parameters: LoadControl.Parameters): Boolean {
70+
return defaultLoadControl.shouldContinueLoading(parameters)
7471
}
7572

7673
override fun onTracksSelected(
74+
playerId: PlayerId,
7775
timeline: Timeline,
7876
mediaPeriodId: MediaSource.MediaPeriodId,
7977
renderers: Array<out Renderer>,
8078
trackGroups: TrackGroupArray,
8179
trackSelections: Array<out ExoTrackSelection>
8280
) {
83-
defaultLoadControl.onTracksSelected(timeline, mediaPeriodId, renderers, trackGroups, trackSelections)
81+
defaultLoadControl.onTracksSelected(playerId, timeline, mediaPeriodId, renderers, trackGroups, trackSelections)
8482
}
8583

86-
override fun shouldStartPlayback(
87-
timeline: Timeline,
88-
mediaPeriodId: MediaSource.MediaPeriodId,
89-
bufferedDurationUs: Long,
90-
playbackSpeed: Float,
91-
rebuffering: Boolean,
92-
targetLiveOffsetUs: Long
93-
): Boolean {
94-
return defaultLoadControl.shouldStartPlayback(timeline, mediaPeriodId, bufferedDurationUs, playbackSpeed, rebuffering, targetLiveOffsetUs)
84+
override fun shouldStartPlayback(parameters: LoadControl.Parameters): Boolean {
85+
return defaultLoadControl.shouldStartPlayback(parameters)
9586
}
9687

9788
/**

pillarbox-player/src/main/java/ch/srgssr/pillarbox/player/notification/PillarboxNotificationManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ object PillarboxNotificationManager {
4444
override fun build(): PlayerNotificationManager {
4545
val notificationManager = super.build()
4646
mediaSession?.let {
47-
notificationManager.setMediaSessionToken(it.sessionCompatToken)
47+
notificationManager.setMediaSessionToken(it.platformToken)
4848
}
4949
return notificationManager
5050
}

pillarbox-player/src/main/java/ch/srgssr/pillarbox/player/service/PlaybackService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ abstract class PlaybackService : Service() {
100100
}
101101
mediaSession?.let {
102102
it.player = player
103-
notificationManager.setMediaSessionToken(it.sessionCompatToken)
103+
notificationManager.setMediaSessionToken(it.platformToken)
104104
}
105105
}
106106

pillarbox-player/src/main/java/ch/srgssr/pillarbox/player/session/PillarboxMediaController.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import androidx.media3.session.MediaController
3838
import androidx.media3.session.MediaSessionService
3939
import androidx.media3.session.SessionCommand
4040
import androidx.media3.session.SessionCommands
41+
import androidx.media3.session.SessionError
4142
import androidx.media3.session.SessionResult
4243
import androidx.media3.session.SessionToken
4344
import ch.srgssr.pillarbox.player.PillarboxPlayer
@@ -113,7 +114,7 @@ open class PillarboxMediaController internal constructor() : PillarboxPlayer {
113114
command: SessionCommand,
114115
args: Bundle
115116
): ListenableFuture<SessionResult> {
116-
return Futures.immediateFuture(SessionResult(SessionResult.RESULT_ERROR_NOT_SUPPORTED))
117+
return Futures.immediateFuture(SessionResult(SessionError.ERROR_NOT_SUPPORTED))
117118
}
118119

119120
/**

0 commit comments

Comments
 (0)