Skip to content

Commit

Permalink
Fix recursive loop when registering controller visibility listeners
Browse files Browse the repository at this point in the history
There are two overloads of this method due to a type 'rename' from
`PlayerControlView.VisibilityListener` to
`PlayerView.ControllerVisibilityListener`. Currently when you call one
overload it passes `null` to the other one (to clear the other listener).
Unfortunately this results in it clearing itself, because it receives
a null call back!

This change tweaks the documentation to clarify that the 'other'
listener is only cleared if you pass a non-null listener in. This solves
the recursive problem, and allows the 'legacy' visibility listener to be
successfully registered.

Issue: androidx/media#229

#minor-release

PiperOrigin-RevId: 496876397
(cherry picked from commit 37fd65a)
  • Loading branch information
icbaker authored and christosts committed Jan 25, 2023
1 parent 7afdc9e commit 3cb0195
Showing 1 changed file with 8 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -868,23 +868,25 @@ public void setControllerHideDuringAds(boolean controllerHideDuringAds) {
/**
* Sets the {@link StyledPlayerControlView.VisibilityListener}.
*
* <p>Removes any listener set by {@link
* #setControllerVisibilityListener(StyledPlayerControlView.VisibilityListener)}.
* <p>If {@code listener} is non-null then any listener set by {@link
* #setControllerVisibilityListener(StyledPlayerControlView.VisibilityListener)} is removed.
*
* @param listener The listener to be notified about visibility changes, or null to remove the
* current listener.
*/
@SuppressWarnings("deprecation") // Clearing the legacy listener.
public void setControllerVisibilityListener(@Nullable ControllerVisibilityListener listener) {
this.controllerVisibilityListener = listener;
setControllerVisibilityListener((StyledPlayerControlView.VisibilityListener) null);
if (listener != null) {
setControllerVisibilityListener((StyledPlayerControlView.VisibilityListener) null);
}
}

/**
* Sets the {@link StyledPlayerControlView.VisibilityListener}.
*
* <p>Removes any listener set by {@link
* #setControllerVisibilityListener(ControllerVisibilityListener)}.
* <p>If {@code listener} is non-null then any listener set by {@link
* #setControllerVisibilityListener(ControllerVisibilityListener)} is removed.
*
* @deprecated Use {@link #setControllerVisibilityListener(ControllerVisibilityListener)} instead.
*/
Expand All @@ -903,8 +905,8 @@ public void setControllerVisibilityListener(
this.legacyControllerVisibilityListener = listener;
if (listener != null) {
controller.addVisibilityListener(listener);
setControllerVisibilityListener((ControllerVisibilityListener) null);
}
setControllerVisibilityListener((ControllerVisibilityListener) null);
}

/**
Expand Down

0 comments on commit 3cb0195

Please sign in to comment.