|
20 | 20 | import android.view.SurfaceHolder;
|
21 | 21 | import android.view.SurfaceView;
|
22 | 22 | import android.view.TextureView;
|
| 23 | +import androidx.annotation.CallSuper; |
23 | 24 | import androidx.annotation.Nullable;
|
24 | 25 | import androidx.media3.common.text.Cue;
|
25 | 26 | import androidx.media3.common.text.CueGroup;
|
@@ -47,14 +48,29 @@ public Looper getApplicationLooper() {
|
47 | 48 | return player.getApplicationLooper();
|
48 | 49 | }
|
49 | 50 |
|
50 |
| - /** Calls {@link Player#addListener(Listener)} on the delegate. */ |
| 51 | + /** |
| 52 | + * Calls {@link Player#addListener(Listener)} on the delegate. |
| 53 | + * |
| 54 | + * <p>Overrides of this method must delegate to {@code super.addListener} and not {@code |
| 55 | + * delegate.addListener}, in order to ensure the correct {@link Player} instance is passed to |
| 56 | + * {@link Player.Listener#onEvents(Player, Events)} (i.e. this forwarding instance, and not the |
| 57 | + * underlying {@code delegate} instance). |
| 58 | + */ |
51 | 59 | @Override
|
| 60 | + @CallSuper |
52 | 61 | public void addListener(Listener listener) {
|
53 | 62 | player.addListener(new ForwardingListener(this, listener));
|
54 | 63 | }
|
55 | 64 |
|
56 |
| - /** Calls {@link Player#removeListener(Listener)} on the delegate. */ |
| 65 | + /** |
| 66 | + * Calls {@link Player#removeListener(Listener)} on the delegate. |
| 67 | + * |
| 68 | + * <p>Overrides of this method must delegate to {@code super.removeListener} and not {@code |
| 69 | + * delegate.removeListener}, in order to ensure the listener 'matches' the listener added via |
| 70 | + * {@link #addListener} (otherwise the listener registered on the delegate won't be removed). |
| 71 | + */ |
57 | 72 | @Override
|
| 73 | + @CallSuper |
58 | 74 | public void removeListener(Listener listener) {
|
59 | 75 | player.removeListener(new ForwardingListener(this, listener));
|
60 | 76 | }
|
|
0 commit comments