@@ -2320,10 +2320,7 @@ void onCustomCommand(int seq, SessionCommand command, Bundle args) {
2320
2320
}
2321
2321
2322
2322
@ SuppressWarnings ("deprecation" ) // Implementing and calling deprecated listener method.
2323
- void onPlayerInfoChanged (
2324
- PlayerInfo newPlayerInfo ,
2325
- @ Player .TimelineChangeReason int timelineChangedReason ,
2326
- boolean isTimelineExcluded ) {
2323
+ void onPlayerInfoChanged (PlayerInfo newPlayerInfo , boolean isTimelineExcluded ) {
2327
2324
if (!isConnected ()) {
2328
2325
return ;
2329
2326
}
@@ -2335,169 +2332,178 @@ void onPlayerInfoChanged(
2335
2332
return ;
2336
2333
}
2337
2334
PlayerInfo oldPlayerInfo = playerInfo ;
2338
- playerInfo = newPlayerInfo ;
2339
2335
if (isTimelineExcluded ) {
2340
- playerInfo =
2341
- playerInfo .copyWithTimeline (
2336
+ newPlayerInfo =
2337
+ newPlayerInfo .copyWithTimeline (
2342
2338
pendingPlayerInfoUpdateTimeline != null
2343
2339
? pendingPlayerInfoUpdateTimeline
2344
2340
: oldPlayerInfo .timeline );
2345
2341
}
2342
+ // Assigning class variable now so that all getters called from listeners see the updated value.
2343
+ // But we need to use a local final variable to ensure listeners get consistent parameters.
2344
+ playerInfo = newPlayerInfo ;
2345
+ PlayerInfo finalPlayerInfo = newPlayerInfo ;
2346
2346
pendingPlayerInfoUpdateTimeline = null ;
2347
2347
PlaybackException oldPlayerError = oldPlayerInfo .playerError ;
2348
- PlaybackException playerError = playerInfo .playerError ;
2348
+ PlaybackException playerError = finalPlayerInfo .playerError ;
2349
2349
boolean errorsMatch =
2350
2350
oldPlayerError == playerError
2351
2351
|| (oldPlayerError != null && oldPlayerError .errorInfoEquals (playerError ));
2352
2352
if (!errorsMatch ) {
2353
2353
listeners .queueEvent (
2354
2354
/* eventFlag= */ Player .EVENT_PLAYER_ERROR ,
2355
- listener -> listener .onPlayerErrorChanged (playerInfo .playerError ));
2356
- if (playerInfo .playerError != null ) {
2355
+ listener -> listener .onPlayerErrorChanged (finalPlayerInfo .playerError ));
2356
+ if (finalPlayerInfo .playerError != null ) {
2357
2357
listeners .queueEvent (
2358
2358
/* eventFlag= */ Player .EVENT_PLAYER_ERROR ,
2359
- listener -> listener .onPlayerError (playerInfo .playerError ));
2359
+ listener -> listener .onPlayerError (finalPlayerInfo .playerError ));
2360
2360
}
2361
2361
}
2362
2362
MediaItem oldCurrentMediaItem = oldPlayerInfo .getCurrentMediaItem ();
2363
- MediaItem currentMediaItem = playerInfo .getCurrentMediaItem ();
2363
+ MediaItem currentMediaItem = finalPlayerInfo .getCurrentMediaItem ();
2364
2364
if (!Util .areEqual (oldCurrentMediaItem , currentMediaItem )) {
2365
2365
listeners .queueEvent (
2366
2366
/* eventFlag= */ Player .EVENT_MEDIA_ITEM_TRANSITION ,
2367
2367
listener ->
2368
2368
listener .onMediaItemTransition (
2369
- currentMediaItem , playerInfo .mediaItemTransitionReason ));
2369
+ currentMediaItem , finalPlayerInfo .mediaItemTransitionReason ));
2370
2370
}
2371
- if (!Util .areEqual (oldPlayerInfo .currentTracks , playerInfo .currentTracks )) {
2371
+ if (!Util .areEqual (oldPlayerInfo .currentTracks , finalPlayerInfo .currentTracks )) {
2372
2372
listeners .queueEvent (
2373
2373
/* eventFlag= */ Player .EVENT_TRACKS_CHANGED ,
2374
- listener -> listener .onTracksChanged (playerInfo .currentTracks ));
2374
+ listener -> listener .onTracksChanged (finalPlayerInfo .currentTracks ));
2375
2375
}
2376
- if (!Util .areEqual (oldPlayerInfo .playbackParameters , playerInfo .playbackParameters )) {
2376
+ if (!Util .areEqual (oldPlayerInfo .playbackParameters , finalPlayerInfo .playbackParameters )) {
2377
2377
listeners .queueEvent (
2378
2378
/* eventFlag= */ Player .EVENT_PLAYBACK_PARAMETERS_CHANGED ,
2379
- listener -> listener .onPlaybackParametersChanged (playerInfo .playbackParameters ));
2379
+ listener -> listener .onPlaybackParametersChanged (finalPlayerInfo .playbackParameters ));
2380
2380
}
2381
- if (oldPlayerInfo .repeatMode != playerInfo .repeatMode ) {
2381
+ if (oldPlayerInfo .repeatMode != finalPlayerInfo .repeatMode ) {
2382
2382
listeners .queueEvent (
2383
2383
/* eventFlag= */ Player .EVENT_REPEAT_MODE_CHANGED ,
2384
- listener -> listener .onRepeatModeChanged (playerInfo .repeatMode ));
2384
+ listener -> listener .onRepeatModeChanged (finalPlayerInfo .repeatMode ));
2385
2385
}
2386
- if (oldPlayerInfo .shuffleModeEnabled != playerInfo .shuffleModeEnabled ) {
2386
+ if (oldPlayerInfo .shuffleModeEnabled != finalPlayerInfo .shuffleModeEnabled ) {
2387
2387
listeners .queueEvent (
2388
2388
/* eventFlag= */ Player .EVENT_SHUFFLE_MODE_ENABLED_CHANGED ,
2389
- listener -> listener .onShuffleModeEnabledChanged (playerInfo .shuffleModeEnabled ));
2389
+ listener -> listener .onShuffleModeEnabledChanged (finalPlayerInfo .shuffleModeEnabled ));
2390
2390
}
2391
- if (!isTimelineExcluded && !Util .areEqual (oldPlayerInfo .timeline , playerInfo .timeline )) {
2391
+ if (!isTimelineExcluded && !Util .areEqual (oldPlayerInfo .timeline , finalPlayerInfo .timeline )) {
2392
2392
listeners .queueEvent (
2393
2393
/* eventFlag= */ Player .EVENT_TIMELINE_CHANGED ,
2394
- listener -> listener .onTimelineChanged (playerInfo .timeline , timelineChangedReason ));
2394
+ listener ->
2395
+ listener .onTimelineChanged (
2396
+ finalPlayerInfo .timeline , Player .TIMELINE_CHANGE_REASON_SOURCE_UPDATE ));
2395
2397
}
2396
- if (!Util .areEqual (oldPlayerInfo .playlistMetadata , playerInfo .playlistMetadata )) {
2398
+ if (!Util .areEqual (oldPlayerInfo .playlistMetadata , finalPlayerInfo .playlistMetadata )) {
2397
2399
listeners .queueEvent (
2398
2400
/* eventFlag= */ Player .EVENT_PLAYLIST_METADATA_CHANGED ,
2399
- listener -> listener .onPlaylistMetadataChanged (playerInfo .playlistMetadata ));
2401
+ listener -> listener .onPlaylistMetadataChanged (finalPlayerInfo .playlistMetadata ));
2400
2402
}
2401
- if (oldPlayerInfo .volume != playerInfo .volume ) {
2403
+ if (oldPlayerInfo .volume != finalPlayerInfo .volume ) {
2402
2404
listeners .queueEvent (
2403
2405
/* eventFlag= */ Player .EVENT_VOLUME_CHANGED ,
2404
- listener -> listener .onVolumeChanged (playerInfo .volume ));
2406
+ listener -> listener .onVolumeChanged (finalPlayerInfo .volume ));
2405
2407
}
2406
- if (!Util .areEqual (oldPlayerInfo .audioAttributes , playerInfo .audioAttributes )) {
2408
+ if (!Util .areEqual (oldPlayerInfo .audioAttributes , finalPlayerInfo .audioAttributes )) {
2407
2409
listeners .queueEvent (
2408
2410
/* eventFlag= */ Player .EVENT_AUDIO_ATTRIBUTES_CHANGED ,
2409
- listener -> listener .onAudioAttributesChanged (playerInfo .audioAttributes ));
2411
+ listener -> listener .onAudioAttributesChanged (finalPlayerInfo .audioAttributes ));
2410
2412
}
2411
- if (!oldPlayerInfo .cueGroup .cues .equals (playerInfo .cueGroup .cues )) {
2413
+ if (!oldPlayerInfo .cueGroup .cues .equals (finalPlayerInfo .cueGroup .cues )) {
2412
2414
listeners .queueEvent (
2413
2415
/* eventFlag= */ Player .EVENT_CUES ,
2414
- listener -> listener .onCues (playerInfo .cueGroup .cues ));
2416
+ listener -> listener .onCues (finalPlayerInfo .cueGroup .cues ));
2415
2417
listeners .queueEvent (
2416
- /* eventFlag= */ Player .EVENT_CUES , listener -> listener .onCues (playerInfo .cueGroup ));
2418
+ /* eventFlag= */ Player .EVENT_CUES ,
2419
+ listener -> listener .onCues (finalPlayerInfo .cueGroup ));
2417
2420
}
2418
- if (!Util .areEqual (oldPlayerInfo .deviceInfo , playerInfo .deviceInfo )) {
2421
+ if (!Util .areEqual (oldPlayerInfo .deviceInfo , finalPlayerInfo .deviceInfo )) {
2419
2422
listeners .queueEvent (
2420
2423
/* eventFlag= */ Player .EVENT_DEVICE_INFO_CHANGED ,
2421
- listener -> listener .onDeviceInfoChanged (playerInfo .deviceInfo ));
2424
+ listener -> listener .onDeviceInfoChanged (finalPlayerInfo .deviceInfo ));
2422
2425
}
2423
- if (oldPlayerInfo .deviceVolume != playerInfo .deviceVolume
2424
- || oldPlayerInfo .deviceMuted != playerInfo .deviceMuted ) {
2426
+ if (oldPlayerInfo .deviceVolume != finalPlayerInfo .deviceVolume
2427
+ || oldPlayerInfo .deviceMuted != finalPlayerInfo .deviceMuted ) {
2425
2428
listeners .queueEvent (
2426
2429
/* eventFlag= */ Player .EVENT_DEVICE_VOLUME_CHANGED ,
2427
2430
listener ->
2428
- listener .onDeviceVolumeChanged (playerInfo .deviceVolume , playerInfo .deviceMuted ));
2431
+ listener .onDeviceVolumeChanged (
2432
+ finalPlayerInfo .deviceVolume , finalPlayerInfo .deviceMuted ));
2429
2433
}
2430
- if (oldPlayerInfo .playWhenReady != playerInfo .playWhenReady ) {
2434
+ if (oldPlayerInfo .playWhenReady != finalPlayerInfo .playWhenReady ) {
2431
2435
listeners .queueEvent (
2432
2436
/* eventFlag= */ Player .EVENT_PLAY_WHEN_READY_CHANGED ,
2433
2437
listener ->
2434
2438
listener .onPlayWhenReadyChanged (
2435
- playerInfo .playWhenReady , playerInfo .playWhenReadyChangedReason ));
2439
+ finalPlayerInfo .playWhenReady , finalPlayerInfo .playWhenReadyChangedReason ));
2436
2440
}
2437
- if (oldPlayerInfo .playbackSuppressionReason != playerInfo .playbackSuppressionReason ) {
2441
+ if (oldPlayerInfo .playbackSuppressionReason != finalPlayerInfo .playbackSuppressionReason ) {
2438
2442
listeners .queueEvent (
2439
2443
/* eventFlag= */ Player .EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED ,
2440
2444
listener ->
2441
- listener .onPlaybackSuppressionReasonChanged (playerInfo .playbackSuppressionReason ));
2445
+ listener .onPlaybackSuppressionReasonChanged (
2446
+ finalPlayerInfo .playbackSuppressionReason ));
2442
2447
}
2443
- if (oldPlayerInfo .playbackState != playerInfo .playbackState ) {
2448
+ if (oldPlayerInfo .playbackState != finalPlayerInfo .playbackState ) {
2444
2449
listeners .queueEvent (
2445
2450
/* eventFlag= */ Player .EVENT_PLAYBACK_STATE_CHANGED ,
2446
- listener -> listener .onPlaybackStateChanged (playerInfo .playbackState ));
2451
+ listener -> listener .onPlaybackStateChanged (finalPlayerInfo .playbackState ));
2447
2452
}
2448
- if (oldPlayerInfo .isPlaying != playerInfo .isPlaying ) {
2453
+ if (oldPlayerInfo .isPlaying != finalPlayerInfo .isPlaying ) {
2449
2454
listeners .queueEvent (
2450
2455
/* eventFlag= */ Player .EVENT_IS_PLAYING_CHANGED ,
2451
- listener -> listener .onIsPlayingChanged (playerInfo .isPlaying ));
2456
+ listener -> listener .onIsPlayingChanged (finalPlayerInfo .isPlaying ));
2452
2457
}
2453
- if (oldPlayerInfo .isLoading != playerInfo .isLoading ) {
2458
+ if (oldPlayerInfo .isLoading != finalPlayerInfo .isLoading ) {
2454
2459
listeners .queueEvent (
2455
2460
/* eventFlag= */ Player .EVENT_IS_LOADING_CHANGED ,
2456
- listener -> listener .onIsLoadingChanged (playerInfo .isLoading ));
2461
+ listener -> listener .onIsLoadingChanged (finalPlayerInfo .isLoading ));
2457
2462
}
2458
- if (!Util .areEqual (oldPlayerInfo .videoSize , playerInfo .videoSize )) {
2463
+ if (!Util .areEqual (oldPlayerInfo .videoSize , finalPlayerInfo .videoSize )) {
2459
2464
listeners .queueEvent (
2460
2465
/* eventFlag= */ Player .EVENT_VIDEO_SIZE_CHANGED ,
2461
- listener -> listener .onVideoSizeChanged (playerInfo .videoSize ));
2466
+ listener -> listener .onVideoSizeChanged (finalPlayerInfo .videoSize ));
2462
2467
}
2463
- if (!Util .areEqual (oldPlayerInfo .oldPositionInfo , playerInfo .oldPositionInfo )
2464
- || !Util .areEqual (oldPlayerInfo .newPositionInfo , playerInfo .newPositionInfo )) {
2468
+ if (!Util .areEqual (oldPlayerInfo .oldPositionInfo , finalPlayerInfo .oldPositionInfo )
2469
+ || !Util .areEqual (oldPlayerInfo .newPositionInfo , finalPlayerInfo .newPositionInfo )) {
2465
2470
listeners .queueEvent (
2466
2471
/* eventFlag= */ Player .EVENT_POSITION_DISCONTINUITY ,
2467
2472
listener ->
2468
2473
listener .onPositionDiscontinuity (
2469
- playerInfo .oldPositionInfo ,
2470
- playerInfo .newPositionInfo ,
2471
- playerInfo .discontinuityReason ));
2474
+ finalPlayerInfo .oldPositionInfo ,
2475
+ finalPlayerInfo .newPositionInfo ,
2476
+ finalPlayerInfo .discontinuityReason ));
2472
2477
}
2473
- if (!Util .areEqual (oldPlayerInfo .mediaMetadata , playerInfo .mediaMetadata )) {
2478
+ if (!Util .areEqual (oldPlayerInfo .mediaMetadata , finalPlayerInfo .mediaMetadata )) {
2474
2479
listeners .queueEvent (
2475
2480
/* eventFlag= */ Player .EVENT_MEDIA_METADATA_CHANGED ,
2476
- listener -> listener .onMediaMetadataChanged (playerInfo .mediaMetadata ));
2481
+ listener -> listener .onMediaMetadataChanged (finalPlayerInfo .mediaMetadata ));
2477
2482
}
2478
- if (oldPlayerInfo .seekBackIncrementMs != playerInfo .seekBackIncrementMs ) {
2483
+ if (oldPlayerInfo .seekBackIncrementMs != finalPlayerInfo .seekBackIncrementMs ) {
2479
2484
listeners .queueEvent (
2480
2485
/* eventFlag= */ Player .EVENT_SEEK_BACK_INCREMENT_CHANGED ,
2481
- listener -> listener .onSeekBackIncrementChanged (playerInfo .seekBackIncrementMs ));
2486
+ listener -> listener .onSeekBackIncrementChanged (finalPlayerInfo .seekBackIncrementMs ));
2482
2487
}
2483
- if (oldPlayerInfo .seekForwardIncrementMs != playerInfo .seekForwardIncrementMs ) {
2488
+ if (oldPlayerInfo .seekForwardIncrementMs != finalPlayerInfo .seekForwardIncrementMs ) {
2484
2489
listeners .queueEvent (
2485
2490
/* eventFlag= */ Player .EVENT_SEEK_FORWARD_INCREMENT_CHANGED ,
2486
- listener -> listener .onSeekForwardIncrementChanged (playerInfo .seekForwardIncrementMs ));
2491
+ listener ->
2492
+ listener .onSeekForwardIncrementChanged (finalPlayerInfo .seekForwardIncrementMs ));
2487
2493
}
2488
- if (oldPlayerInfo .maxSeekToPreviousPositionMs != newPlayerInfo .maxSeekToPreviousPositionMs ) {
2494
+ if (oldPlayerInfo .maxSeekToPreviousPositionMs != finalPlayerInfo .maxSeekToPreviousPositionMs ) {
2489
2495
listeners .queueEvent (
2490
2496
/* eventFlag= */ Player .EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED ,
2491
2497
listener ->
2492
2498
listener .onMaxSeekToPreviousPositionChanged (
2493
- newPlayerInfo .maxSeekToPreviousPositionMs ));
2499
+ finalPlayerInfo .maxSeekToPreviousPositionMs ));
2494
2500
}
2495
2501
if (!Util .areEqual (
2496
- oldPlayerInfo .trackSelectionParameters , newPlayerInfo .trackSelectionParameters )) {
2502
+ oldPlayerInfo .trackSelectionParameters , finalPlayerInfo .trackSelectionParameters )) {
2497
2503
listeners .queueEvent (
2498
2504
/* eventFlag= */ Player .EVENT_TRACK_SELECTION_PARAMETERS_CHANGED ,
2499
2505
listener ->
2500
- listener .onTrackSelectionParametersChanged (newPlayerInfo .trackSelectionParameters ));
2506
+ listener .onTrackSelectionParametersChanged (finalPlayerInfo .trackSelectionParameters ));
2501
2507
}
2502
2508
listeners .flushEvents ();
2503
2509
}
0 commit comments