Fix race condition NPE on media session change

If the music session changes and then stops quickly, the getMetadata
call will not be null the 1st call, but would on the 2nd, which would
result in an NPE and subsequent crash in the device service.
This commit is contained in:
José Rebelo 2025-02-05 23:05:00 +00:00
parent 63f5b2a025
commit 0a38a7a880

View File

@ -34,8 +34,10 @@ import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.media.MediaMetadata;
import android.media.session.MediaController;
import android.media.session.MediaSession;
import android.media.session.PlaybackState;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@ -807,12 +809,14 @@ public class NotificationListener extends NotificationListenerService {
public boolean handleMediaSessionNotification(MediaSession.Token mediaSession) {
try {
final MediaController c = new MediaController(getApplicationContext(), mediaSession);
if (c.getMetadata() == null) {
final PlaybackState playbackState = c.getPlaybackState();
final MediaMetadata metadata = c.getMetadata();
if (metadata == null) {
return false;
}
final MusicStateSpec stateSpec = MediaManager.extractMusicStateSpec(c.getPlaybackState());
final MusicSpec musicSpec = MediaManager.extractMusicSpec(c.getMetadata());
final MusicStateSpec stateSpec = MediaManager.extractMusicStateSpec(playbackState);
final MusicSpec musicSpec = MediaManager.extractMusicSpec(metadata);
// finally, tell the device about it
if (mSetMusicInfoRunnable != null) {