diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 24cbd866b9..1db04963df 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -13,6 +13,10 @@ instead of building a playlist structure. * Increase `minSdk` to 21 (Android Lollipop). This is aligned with all 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: * `MediaCodecRenderer.onProcessedStreamChange()` can now be called for every media item. Previously it was not called for the first one. Use diff --git a/demos/compose/src/test/AndroidManifest.xml b/demos/compose/src/test/AndroidManifest.xml deleted file mode 100644 index 13feebb89d..0000000000 --- a/demos/compose/src/test/AndroidManifest.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/libraries/common_ktx/build.gradle b/libraries/common_ktx/build.gradle index dbf92dd68e..a3758f9475 100644 --- a/libraries/common_ktx/build.gradle +++ b/libraries/common_ktx/build.gradle @@ -28,8 +28,24 @@ android { 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 { releaseArtifactId = 'media3-common-ktx' releaseName = 'Media3 common KTX module' diff --git a/demos/compose/src/main/java/androidx/media3/demo/compose/PlayerExtensions.kt b/libraries/common_ktx/src/main/java/androidx/media3/common/PlayerExtensions.kt similarity index 98% rename from demos/compose/src/main/java/androidx/media3/demo/compose/PlayerExtensions.kt rename to libraries/common_ktx/src/main/java/androidx/media3/common/PlayerExtensions.kt index 4a91d4fda0..21a90c0523 100644 --- a/demos/compose/src/main/java/androidx/media3/demo/compose/PlayerExtensions.kt +++ b/libraries/common_ktx/src/main/java/androidx/media3/common/PlayerExtensions.kt @@ -14,12 +14,12 @@ * limitations under the License. */ -package androidx.media3.demo.compose +package androidx.media3.common import android.os.Looper import androidx.core.os.HandlerCompat -import androidx.media3.common.Player import androidx.media3.common.Player.Events +import androidx.media3.common.util.UnstableApi import java.util.concurrent.atomic.AtomicBoolean import kotlin.coroutines.resumeWithException 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 * terminate due to an exception or cancellation. */ +@UnstableApi suspend fun Player.listen(onEvents: Player.(Events) -> Unit): Nothing { if (Looper.myLooper() == applicationLooper) { listenImpl(onEvents) diff --git a/demos/compose/src/test/java/androidx/media3/demo/compose/PlayerExtensionsTest.kt b/libraries/common_ktx/src/test/java/androidx/media3/common/PlayerExtensionsTest.kt similarity index 98% rename from demos/compose/src/test/java/androidx/media3/demo/compose/PlayerExtensionsTest.kt rename to libraries/common_ktx/src/test/java/androidx/media3/common/PlayerExtensionsTest.kt index ed87caff11..63b4da0888 100644 --- a/demos/compose/src/test/java/androidx/media3/demo/compose/PlayerExtensionsTest.kt +++ b/libraries/common_ktx/src/test/java/androidx/media3/common/PlayerExtensionsTest.kt @@ -13,14 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package androidx.media3.demo.compose +package androidx.media3.common import android.content.Context import android.os.Handler import android.os.HandlerThread import android.os.Looper -import androidx.media3.common.ForwardingPlayer -import androidx.media3.common.Player import androidx.media3.exoplayer.ExoPlayer import androidx.media3.test.utils.TestExoPlayerBuilder import androidx.test.core.app.ApplicationProvider