diff --git a/demos/session/src/main/AndroidManifest.xml b/demos/session/src/main/AndroidManifest.xml
index c3904595ac..f86bcd86bb 100644
--- a/demos/session/src/main/AndroidManifest.xml
+++ b/demos/session/src/main/AndroidManifest.xml
@@ -21,15 +21,14 @@
+ android:name=".MainActivity"
+ android:exported="true">
@@ -37,18 +36,16 @@
-
+ android:name=".PlayerActivity"
+ android:exported="true"/>
-
+ android:name=".PlayableFolderActivity"
+ android:exported="true"/>
+ android:name=".PlaybackService"
+ android:exported="true">
diff --git a/demos/surface/src/main/AndroidManifest.xml b/demos/surface/src/main/AndroidManifest.xml
index 60dd402836..2c009ed2cc 100644
--- a/demos/surface/src/main/AndroidManifest.xml
+++ b/demos/surface/src/main/AndroidManifest.xml
@@ -22,12 +22,14 @@
+ android:allowBackup="false"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/application_name"
+ android:exported="true">
-
+
diff --git a/libraries/cast/build.gradle b/libraries/cast/build.gradle
index 7695a09745..32dbee1e1e 100644
--- a/libraries/cast/build.gradle
+++ b/libraries/cast/build.gradle
@@ -14,7 +14,7 @@
apply from: "$gradle.ext.androidxMediaSettingsDir/common_library_config.gradle"
dependencies {
- api 'com.google.android.gms:play-services-cast-framework:20.1.0'
+ api 'com.google.android.gms:play-services-cast-framework:21.0.1'
implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion
implementation project(modulePrefix + 'lib-common')
compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion
diff --git a/libraries/common/src/main/java/androidx/media3/common/HeartRating.java b/libraries/common/src/main/java/androidx/media3/common/HeartRating.java
index 69798cde82..6f8b45e44a 100644
--- a/libraries/common/src/main/java/androidx/media3/common/HeartRating.java
+++ b/libraries/common/src/main/java/androidx/media3/common/HeartRating.java
@@ -102,7 +102,7 @@ public final class HeartRating extends Rating {
private static HeartRating fromBundle(Bundle bundle) {
checkArgument(
- bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_DEFAULT)
+ bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_UNSET)
== TYPE);
boolean isRated = bundle.getBoolean(keyForField(FIELD_RATED), /* defaultValue= */ false);
return isRated
diff --git a/libraries/common/src/main/java/androidx/media3/common/PercentageRating.java b/libraries/common/src/main/java/androidx/media3/common/PercentageRating.java
index c82c5bbc68..e14012f877 100644
--- a/libraries/common/src/main/java/androidx/media3/common/PercentageRating.java
+++ b/libraries/common/src/main/java/androidx/media3/common/PercentageRating.java
@@ -98,7 +98,7 @@ public final class PercentageRating extends Rating {
private static PercentageRating fromBundle(Bundle bundle) {
checkArgument(
- bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_DEFAULT)
+ bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_UNSET)
== TYPE);
float percent = bundle.getFloat(keyForField(FIELD_PERCENT), /* defaultValue= */ RATING_UNSET);
return percent == RATING_UNSET ? new PercentageRating() : new PercentageRating(percent);
diff --git a/libraries/common/src/main/java/androidx/media3/common/Rating.java b/libraries/common/src/main/java/androidx/media3/common/Rating.java
index a17e6e5ca4..1ff404aa35 100644
--- a/libraries/common/src/main/java/androidx/media3/common/Rating.java
+++ b/libraries/common/src/main/java/androidx/media3/common/Rating.java
@@ -42,7 +42,7 @@ public abstract class Rating implements Bundleable {
@Documented
@Retention(RetentionPolicy.SOURCE)
@IntDef({
- RATING_TYPE_DEFAULT,
+ RATING_TYPE_UNSET,
RATING_TYPE_HEART,
RATING_TYPE_PERCENTAGE,
RATING_TYPE_STAR,
@@ -50,7 +50,7 @@ public abstract class Rating implements Bundleable {
})
/* package */ @interface RatingType {}
- /* package */ static final int RATING_TYPE_DEFAULT = -1;
+ /* package */ static final int RATING_TYPE_UNSET = -1;
/* package */ static final int RATING_TYPE_HEART = 0;
/* package */ static final int RATING_TYPE_PERCENTAGE = 1;
/* package */ static final int RATING_TYPE_STAR = 2;
@@ -69,7 +69,7 @@ public abstract class Rating implements Bundleable {
private static Rating fromBundle(Bundle bundle) {
@RatingType
int ratingType =
- bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_DEFAULT);
+ bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_UNSET);
switch (ratingType) {
case RATING_TYPE_HEART:
return HeartRating.CREATOR.fromBundle(bundle);
@@ -79,8 +79,9 @@ public abstract class Rating implements Bundleable {
return StarRating.CREATOR.fromBundle(bundle);
case RATING_TYPE_THUMB:
return ThumbRating.CREATOR.fromBundle(bundle);
+ case RATING_TYPE_UNSET:
default:
- throw new IllegalArgumentException("Encountered unknown rating type: " + ratingType);
+ throw new IllegalArgumentException("Unknown RatingType: " + ratingType);
}
}
diff --git a/libraries/common/src/main/java/androidx/media3/common/StarRating.java b/libraries/common/src/main/java/androidx/media3/common/StarRating.java
index 147b736293..8ee113fc1f 100644
--- a/libraries/common/src/main/java/androidx/media3/common/StarRating.java
+++ b/libraries/common/src/main/java/androidx/media3/common/StarRating.java
@@ -127,7 +127,7 @@ public final class StarRating extends Rating {
private static StarRating fromBundle(Bundle bundle) {
checkArgument(
- bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_DEFAULT)
+ bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_UNSET)
== TYPE);
int maxStars =
bundle.getInt(keyForField(FIELD_MAX_STARS), /* defaultValue= */ MAX_STARS_DEFAULT);
diff --git a/libraries/common/src/main/java/androidx/media3/common/ThumbRating.java b/libraries/common/src/main/java/androidx/media3/common/ThumbRating.java
index 165ea90608..b73d3c4f83 100644
--- a/libraries/common/src/main/java/androidx/media3/common/ThumbRating.java
+++ b/libraries/common/src/main/java/androidx/media3/common/ThumbRating.java
@@ -99,7 +99,7 @@ public final class ThumbRating extends Rating {
private static ThumbRating fromBundle(Bundle bundle) {
checkArgument(
- bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_DEFAULT)
+ bundle.getInt(keyForField(FIELD_RATING_TYPE), /* defaultValue= */ RATING_TYPE_UNSET)
== TYPE);
boolean rated = bundle.getBoolean(keyForField(FIELD_RATED), /* defaultValue= */ false);
return rated
diff --git a/libraries/common/src/main/java/androidx/media3/common/util/Util.java b/libraries/common/src/main/java/androidx/media3/common/util/Util.java
index 84a9a570be..5e1976f65c 100644
--- a/libraries/common/src/main/java/androidx/media3/common/util/Util.java
+++ b/libraries/common/src/main/java/androidx/media3/common/util/Util.java
@@ -2407,6 +2407,8 @@ public final class Util {
return "camera motion";
case C.TRACK_TYPE_NONE:
return "none";
+ case C.TRACK_TYPE_UNKNOWN:
+ return "unknown";
default:
return trackType >= C.TRACK_TYPE_CUSTOM_BASE ? "custom (" + trackType + ")" : "?";
}
diff --git a/libraries/datasource_cronet/build.gradle b/libraries/datasource_cronet/build.gradle
index 055a603d62..2f7633d2d9 100644
--- a/libraries/datasource_cronet/build.gradle
+++ b/libraries/datasource_cronet/build.gradle
@@ -20,7 +20,7 @@ android {
}
dependencies {
- api "com.google.android.gms:play-services-cronet:17.0.1"
+ api "com.google.android.gms:play-services-cronet:18.0.1"
implementation project(modulePrefix + 'lib-common')
implementation project(modulePrefix + 'lib-datasource')
implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion
diff --git a/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadManagerDashTest.java b/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadManagerDashTest.java
index 6f6ce83145..b790a3cae3 100644
--- a/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadManagerDashTest.java
+++ b/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadManagerDashTest.java
@@ -109,8 +109,7 @@ public class DownloadManagerDashTest {
testThread.release();
}
- // Disabled due to flakiness.
- @Ignore
+ @Ignore("Disabled due to flakiness")
@Test
public void saveAndLoadActionFile() throws Throwable {
// Configure fakeDataSet to block until interrupted when TEST_MPD is read.
diff --git a/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadServiceDashTest.java b/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadServiceDashTest.java
index cef9a987bb..888f02178c 100644
--- a/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadServiceDashTest.java
+++ b/libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/offline/DownloadServiceDashTest.java
@@ -157,7 +157,7 @@ public class DownloadServiceDashTest {
testThread.release();
}
- @Ignore // b/78877092
+ @Ignore("Internal ref: b/78877092")
@Test
public void multipleDownloadRequest() throws Throwable {
downloadKeys(fakeStreamKey1);
@@ -168,7 +168,7 @@ public class DownloadServiceDashTest {
assertCachedData(cache, fakeDataSet);
}
- @Ignore // b/78877092
+ @Ignore("Internal ref: b/78877092")
@Test
public void removeAction() throws Throwable {
downloadKeys(fakeStreamKey1, fakeStreamKey2);
@@ -182,7 +182,7 @@ public class DownloadServiceDashTest {
assertCacheEmpty(cache);
}
- @Ignore // b/78877092
+ @Ignore("Internal ref: b/78877092")
@Test
public void removeBeforeDownloadComplete() throws Throwable {
pauseDownloadCondition = new ConditionVariable();
diff --git a/libraries/exoplayer_ima/build.gradle b/libraries/exoplayer_ima/build.gradle
index c0add470fa..70397d8c5c 100644
--- a/libraries/exoplayer_ima/build.gradle
+++ b/libraries/exoplayer_ima/build.gradle
@@ -25,7 +25,7 @@ android {
}
dependencies {
- api 'com.google.ads.interactivemedia.v3:interactivemedia:3.25.1'
+ api 'com.google.ads.interactivemedia.v3:interactivemedia:3.26.0'
implementation project(modulePrefix + 'lib-exoplayer')
implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion
compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion
diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java b/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java
index 20bbd01a44..13b0ccaf3b 100644
--- a/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java
+++ b/libraries/session/src/main/java/androidx/media3/session/MediaStyleNotificationHelper.java
@@ -251,9 +251,7 @@ public class MediaStyleNotificationHelper {
if (!tombstone) {
button.setOnClickPendingIntent(androidx.media.R.id.action0, action.getActionIntent());
}
- if (Build.VERSION.SDK_INT >= 15) {
- Api15Impl.setContentDescription(button, androidx.media.R.id.action0, action.getTitle());
- }
+ button.setContentDescription(androidx.media.R.id.action0, action.getTitle());
return button;
}
@@ -474,17 +472,6 @@ public class MediaStyleNotificationHelper {
}
}
- @RequiresApi(15)
- private static class Api15Impl {
- private Api15Impl() {}
-
- @DoNotInline
- public static void setContentDescription(
- RemoteViews remoteViews, int viewId, @Nullable CharSequence contentDescription) {
- remoteViews.setContentDescription(viewId, contentDescription);
- }
- }
-
@RequiresApi(21)
private static class Api21Impl {
private Api21Impl() {}
diff --git a/libraries/ui/src/main/java/androidx/media3/ui/PlayerNotificationManager.java b/libraries/ui/src/main/java/androidx/media3/ui/PlayerNotificationManager.java
index 8909d3d400..142b84cb88 100644
--- a/libraries/ui/src/main/java/androidx/media3/ui/PlayerNotificationManager.java
+++ b/libraries/ui/src/main/java/androidx/media3/ui/PlayerNotificationManager.java
@@ -1480,6 +1480,7 @@ public class PlayerNotificationManager {
return actions;
}
+ @SuppressWarnings("UnspecifiedImmutableFlag") // Warning is spurious.
private static PendingIntent createBroadcastIntent(
String action, Context context, int instanceId) {
Intent intent = new Intent(action).setPackage(context.getPackageName());