diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b8d5314f770..558df202ff6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -9,7 +9,7 @@ * Extractors: * Support TS packets without PTS flag ([#9294](https://github.com/google/ExoPlayer/issues/9294)). -* Video +* Video: * Request smaller decoder input buffers for Dolby Vision. This fixes an issue that could cause UHD Dolby Vision playbacks to fail on some devices, including Amazon Fire TV 4K. @@ -18,6 +18,10 @@ thrown from `Requirements.isInternetConnectivityValidated` on devices running Android 11 ([#9002](https://github.com/google/ExoPlayer/issues/9002)). +* UI: + * Use `defStyleAttr` when obtaining styled attributes in + `StyledPlayerView`, `PlayerView` and `PlayerControlView` + ([#9024](https://github.com/google/ExoPlayer/issues/9024)). * Cast extension: * Implement `CastPlayer.setPlaybackParameters(PlaybackParameters)` to support setting the playback speed @@ -247,6 +251,11 @@ ([#9183](https://github.com/google/ExoPlayer/issues/9183)). * Allow the timeout to be customised via `RtspMediaSource.Factory.setTimeoutMs`. +* Downloads and caching: + * Workaround platform issue that can cause a `SecurityException` to be + thrown from `Requirements.isInternetConnectivityValidated` on devices + running Android 11 + ([#9002](https://github.com/google/ExoPlayer/issues/9002)). ### 2.14.1 (2021-06-11) diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java index dd8a6d212f8..02e7174d6d1 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java @@ -377,7 +377,8 @@ public PlayerControlView( TypedArray a = context .getTheme() - .obtainStyledAttributes(playbackAttrs, R.styleable.PlayerControlView, 0, 0); + .obtainStyledAttributes( + playbackAttrs, R.styleable.PlayerControlView, defStyleAttr, /* defStyleRes= */ 0); try { showTimeoutMs = a.getInt(R.styleable.PlayerControlView_show_timeout, showTimeoutMs); controllerLayoutId = @@ -424,8 +425,8 @@ public PlayerControlView( if (customTimeBar != null) { timeBar = customTimeBar; } else if (timeBarPlaceholder != null) { - // Propagate attrs as timebarAttrs so that DefaultTimeBar's custom attributes are transferred, - // but standard attributes (e.g. background) are not. + // Propagate playbackAttrs as timebarAttrs so that DefaultTimeBar's custom attributes are + // transferred, but standard attributes (e.g. background) are not. DefaultTimeBar defaultTimeBar = new DefaultTimeBar(context, null, 0, playbackAttrs); defaultTimeBar.setId(R.id.exo_progress); defaultTimeBar.setLayoutParams(timeBarPlaceholder.getLayoutParams()); diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java index 530b81e138c..2619e9d0304 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java @@ -367,7 +367,11 @@ public PlayerView(Context context, @Nullable AttributeSet attrs, int defStyleAtt boolean controllerHideDuringAds = true; int showBuffering = SHOW_BUFFERING_NEVER; if (attrs != null) { - TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PlayerView, 0, 0); + TypedArray a = + context + .getTheme() + .obtainStyledAttributes( + attrs, R.styleable.PlayerView, defStyleAttr, /* defStyleRes= */ 0); try { shutterColorSet = a.hasValue(R.styleable.PlayerView_shutter_background_color); shutterColor = a.getColor(R.styleable.PlayerView_shutter_background_color, shutterColor); diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java index 0edfdee634b..830c85ec282 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java @@ -491,7 +491,11 @@ public StyledPlayerControlView( TypedArray a = context .getTheme() - .obtainStyledAttributes(playbackAttrs, R.styleable.StyledPlayerControlView, 0, 0); + .obtainStyledAttributes( + playbackAttrs, + R.styleable.StyledPlayerControlView, + defStyleAttr, + /* defStyleRes= */ 0); try { controllerLayoutId = a.getResourceId( @@ -576,8 +580,8 @@ public StyledPlayerControlView( if (customTimeBar != null) { timeBar = customTimeBar; } else if (timeBarPlaceholder != null) { - // Propagate attrs as timebarAttrs so that DefaultTimeBar's custom attributes are transferred, - // but standard attributes (e.g. background) are not. + // Propagate playbackAttrs as timebarAttrs so that DefaultTimeBar's custom attributes are + // transferred, but standard attributes (e.g. background) are not. DefaultTimeBar defaultTimeBar = new DefaultTimeBar(context, null, 0, playbackAttrs, R.style.ExoStyledControls_TimeBar); defaultTimeBar.setId(R.id.exo_progress); diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java index b5a2822c8db..8784e75aa39 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java @@ -369,7 +369,10 @@ public StyledPlayerView(Context context, @Nullable AttributeSet attrs, int defSt int showBuffering = SHOW_BUFFERING_NEVER; if (attrs != null) { TypedArray a = - context.getTheme().obtainStyledAttributes(attrs, R.styleable.StyledPlayerView, 0, 0); + context + .getTheme() + .obtainStyledAttributes( + attrs, R.styleable.StyledPlayerView, defStyleAttr, /* defStyleRes= */ 0); try { shutterColorSet = a.hasValue(R.styleable.StyledPlayerView_shutter_background_color); shutterColor =