Use defStyleAttr when obtaining styled attributes in player views

Issue #9024

PiperOrigin-RevId: 395224661
This commit is contained in:
olly 2021-09-07 13:14:54 +01:00 committed by Christos Tsilopoulos
parent ced4232fd8
commit 28d5b35723
5 changed files with 30 additions and 9 deletions

View file

@ -9,7 +9,7 @@
* Extractors: * Extractors:
* Support TS packets without PTS flag * Support TS packets without PTS flag
([#9294](https://github.com/google/ExoPlayer/issues/9294)). ([#9294](https://github.com/google/ExoPlayer/issues/9294)).
* Video * Video:
* Request smaller decoder input buffers for Dolby Vision. This fixes an * Request smaller decoder input buffers for Dolby Vision. This fixes an
issue that could cause UHD Dolby Vision playbacks to fail on some issue that could cause UHD Dolby Vision playbacks to fail on some
devices, including Amazon Fire TV 4K. devices, including Amazon Fire TV 4K.
@ -18,6 +18,10 @@
thrown from `Requirements.isInternetConnectivityValidated` on devices thrown from `Requirements.isInternetConnectivityValidated` on devices
running Android 11 running Android 11
([#9002](https://github.com/google/ExoPlayer/issues/9002)). ([#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: * Cast extension:
* Implement `CastPlayer.setPlaybackParameters(PlaybackParameters)` to * Implement `CastPlayer.setPlaybackParameters(PlaybackParameters)` to
support setting the playback speed support setting the playback speed
@ -247,6 +251,11 @@
([#9183](https://github.com/google/ExoPlayer/issues/9183)). ([#9183](https://github.com/google/ExoPlayer/issues/9183)).
* Allow the timeout to be customised via * Allow the timeout to be customised via
`RtspMediaSource.Factory.setTimeoutMs`. `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) ### 2.14.1 (2021-06-11)

View file

@ -377,7 +377,8 @@ public class PlayerControlView extends FrameLayout {
TypedArray a = TypedArray a =
context context
.getTheme() .getTheme()
.obtainStyledAttributes(playbackAttrs, R.styleable.PlayerControlView, 0, 0); .obtainStyledAttributes(
playbackAttrs, R.styleable.PlayerControlView, defStyleAttr, /* defStyleRes= */ 0);
try { try {
showTimeoutMs = a.getInt(R.styleable.PlayerControlView_show_timeout, showTimeoutMs); showTimeoutMs = a.getInt(R.styleable.PlayerControlView_show_timeout, showTimeoutMs);
controllerLayoutId = controllerLayoutId =
@ -424,8 +425,8 @@ public class PlayerControlView extends FrameLayout {
if (customTimeBar != null) { if (customTimeBar != null) {
timeBar = customTimeBar; timeBar = customTimeBar;
} else if (timeBarPlaceholder != null) { } else if (timeBarPlaceholder != null) {
// Propagate attrs as timebarAttrs so that DefaultTimeBar's custom attributes are transferred, // Propagate playbackAttrs as timebarAttrs so that DefaultTimeBar's custom attributes are
// but standard attributes (e.g. background) are not. // transferred, but standard attributes (e.g. background) are not.
DefaultTimeBar defaultTimeBar = new DefaultTimeBar(context, null, 0, playbackAttrs); DefaultTimeBar defaultTimeBar = new DefaultTimeBar(context, null, 0, playbackAttrs);
defaultTimeBar.setId(R.id.exo_progress); defaultTimeBar.setId(R.id.exo_progress);
defaultTimeBar.setLayoutParams(timeBarPlaceholder.getLayoutParams()); defaultTimeBar.setLayoutParams(timeBarPlaceholder.getLayoutParams());

View file

@ -367,7 +367,11 @@ public class PlayerView extends FrameLayout implements AdViewProvider {
boolean controllerHideDuringAds = true; boolean controllerHideDuringAds = true;
int showBuffering = SHOW_BUFFERING_NEVER; int showBuffering = SHOW_BUFFERING_NEVER;
if (attrs != null) { 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 { try {
shutterColorSet = a.hasValue(R.styleable.PlayerView_shutter_background_color); shutterColorSet = a.hasValue(R.styleable.PlayerView_shutter_background_color);
shutterColor = a.getColor(R.styleable.PlayerView_shutter_background_color, shutterColor); shutterColor = a.getColor(R.styleable.PlayerView_shutter_background_color, shutterColor);

View file

@ -491,7 +491,11 @@ public class StyledPlayerControlView extends FrameLayout {
TypedArray a = TypedArray a =
context context
.getTheme() .getTheme()
.obtainStyledAttributes(playbackAttrs, R.styleable.StyledPlayerControlView, 0, 0); .obtainStyledAttributes(
playbackAttrs,
R.styleable.StyledPlayerControlView,
defStyleAttr,
/* defStyleRes= */ 0);
try { try {
controllerLayoutId = controllerLayoutId =
a.getResourceId( a.getResourceId(
@ -576,8 +580,8 @@ public class StyledPlayerControlView extends FrameLayout {
if (customTimeBar != null) { if (customTimeBar != null) {
timeBar = customTimeBar; timeBar = customTimeBar;
} else if (timeBarPlaceholder != null) { } else if (timeBarPlaceholder != null) {
// Propagate attrs as timebarAttrs so that DefaultTimeBar's custom attributes are transferred, // Propagate playbackAttrs as timebarAttrs so that DefaultTimeBar's custom attributes are
// but standard attributes (e.g. background) are not. // transferred, but standard attributes (e.g. background) are not.
DefaultTimeBar defaultTimeBar = DefaultTimeBar defaultTimeBar =
new DefaultTimeBar(context, null, 0, playbackAttrs, R.style.ExoStyledControls_TimeBar); new DefaultTimeBar(context, null, 0, playbackAttrs, R.style.ExoStyledControls_TimeBar);
defaultTimeBar.setId(R.id.exo_progress); defaultTimeBar.setId(R.id.exo_progress);

View file

@ -369,7 +369,10 @@ public class StyledPlayerView extends FrameLayout implements AdViewProvider {
int showBuffering = SHOW_BUFFERING_NEVER; int showBuffering = SHOW_BUFFERING_NEVER;
if (attrs != null) { if (attrs != null) {
TypedArray a = TypedArray a =
context.getTheme().obtainStyledAttributes(attrs, R.styleable.StyledPlayerView, 0, 0); context
.getTheme()
.obtainStyledAttributes(
attrs, R.styleable.StyledPlayerView, defStyleAttr, /* defStyleRes= */ 0);
try { try {
shutterColorSet = a.hasValue(R.styleable.StyledPlayerView_shutter_background_color); shutterColorSet = a.hasValue(R.styleable.StyledPlayerView_shutter_background_color);
shutterColor = shutterColor =