Move PlayerExtensions
into common-ktx module
For now, the only extension function on the `Player` has been used in a Compose demo. It can be promoted to a proper module where in the future other extension functions will reside. Given that `Player` is in `androidx.media3.common`, the corresponding KTX library for it is `androidx.media3.common-ktx` To start using the new `suspend fun listen`, one must add `androidx.media3:media3-common-ktx` as a Gradle dependency and `import androidx.media3.common.listen` PiperOrigin-RevId: 658771029
This commit is contained in:
parent
86bd1df632
commit
9ace81bf2f
@ -13,6 +13,10 @@
|
|||||||
instead of building a playlist structure.
|
instead of building a playlist structure.
|
||||||
* Increase `minSdk` to 21 (Android Lollipop). This is aligned with all
|
* Increase `minSdk` to 21 (Android Lollipop). This is aligned with all
|
||||||
other AndroidX libraries.
|
other AndroidX libraries.
|
||||||
|
* Add `androidx.media3:media3-common-ktx` artifact which provides
|
||||||
|
Kotlin-specific functionality built on top of the Common library
|
||||||
|
* Add `Player.listen` suspending extension function to spin a coroutine to
|
||||||
|
listen to `Player.Events` to the `media3-common-ktx` library.
|
||||||
* ExoPlayer:
|
* ExoPlayer:
|
||||||
* `MediaCodecRenderer.onProcessedStreamChange()` can now be called for
|
* `MediaCodecRenderer.onProcessedStreamChange()` can now be called for
|
||||||
every media item. Previously it was not called for the first one. Use
|
every media item. Previously it was not called for the first one. Use
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Copyright 2024 The Android Open Source Project
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<manifest package="androidx.media3.demo.compose.test">
|
|
||||||
<uses-sdk/>
|
|
||||||
</manifest>
|
|
@ -28,8 +28,24 @@ android {
|
|||||||
withSourcesJar()
|
withSourcesJar()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
testOptions {
|
||||||
|
unitTests {
|
||||||
|
includeAndroidResources = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api project(modulePrefix + 'lib-common')
|
||||||
|
implementation project(modulePrefix + 'lib-exoplayer')
|
||||||
|
implementation 'androidx.core:core:' + androidxCoreVersion
|
||||||
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:' + kotlinxCoroutinesVersion
|
||||||
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:' + kotlinxCoroutinesVersion
|
||||||
|
|
||||||
|
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:' + kotlinxCoroutinesVersion
|
||||||
|
testImplementation 'org.robolectric:robolectric:' + robolectricVersion
|
||||||
|
testImplementation project(modulePrefix + 'test-utils')}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
releaseArtifactId = 'media3-common-ktx'
|
releaseArtifactId = 'media3-common-ktx'
|
||||||
releaseName = 'Media3 common KTX module'
|
releaseName = 'Media3 common KTX module'
|
||||||
|
@ -14,12 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package androidx.media3.demo.compose
|
package androidx.media3.common
|
||||||
|
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import androidx.core.os.HandlerCompat
|
import androidx.core.os.HandlerCompat
|
||||||
import androidx.media3.common.Player
|
|
||||||
import androidx.media3.common.Player.Events
|
import androidx.media3.common.Player.Events
|
||||||
|
import androidx.media3.common.util.UnstableApi
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
import kotlin.coroutines.resumeWithException
|
import kotlin.coroutines.resumeWithException
|
||||||
import kotlinx.coroutines.CancellableContinuation
|
import kotlinx.coroutines.CancellableContinuation
|
||||||
@ -44,6 +44,7 @@ import kotlinx.coroutines.withContext
|
|||||||
* @return Nothing This function never returns normally. It will either continue indefinitely or
|
* @return Nothing This function never returns normally. It will either continue indefinitely or
|
||||||
* terminate due to an exception or cancellation.
|
* terminate due to an exception or cancellation.
|
||||||
*/
|
*/
|
||||||
|
@UnstableApi
|
||||||
suspend fun Player.listen(onEvents: Player.(Events) -> Unit): Nothing {
|
suspend fun Player.listen(onEvents: Player.(Events) -> Unit): Nothing {
|
||||||
if (Looper.myLooper() == applicationLooper) {
|
if (Looper.myLooper() == applicationLooper) {
|
||||||
listenImpl(onEvents)
|
listenImpl(onEvents)
|
@ -13,14 +13,12 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package androidx.media3.demo.compose
|
package androidx.media3.common
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.HandlerThread
|
import android.os.HandlerThread
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import androidx.media3.common.ForwardingPlayer
|
|
||||||
import androidx.media3.common.Player
|
|
||||||
import androidx.media3.exoplayer.ExoPlayer
|
import androidx.media3.exoplayer.ExoPlayer
|
||||||
import androidx.media3.test.utils.TestExoPlayerBuilder
|
import androidx.media3.test.utils.TestExoPlayerBuilder
|
||||||
import androidx.test.core.app.ApplicationProvider
|
import androidx.test.core.app.ApplicationProvider
|
Loading…
x
Reference in New Issue
Block a user