From c2cd7529fd9c9a3c8b1ae7b87d0b80e822ca400d Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:06:49 +0200 Subject: [PATCH] fix(android): fix null pointer exception at playback start with item metadata (#3879) * fix(android): fix null pointer exception at playback start with item metadata --- .../main/java/com/brentvatne/common/api/Source.kt | 3 +++ .../brentvatne/exoplayer/ReactExoplayerView.java | 15 ++------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/android/src/main/java/com/brentvatne/common/api/Source.kt b/android/src/main/java/com/brentvatne/common/api/Source.kt index 9f1a4190..75a8b85f 100644 --- a/android/src/main/java/com/brentvatne/common/api/Source.kt +++ b/android/src/main/java/com/brentvatne/common/api/Source.kt @@ -15,6 +15,7 @@ import com.brentvatne.common.toolbox.ReactBridgeUtils.safeGetMap import com.brentvatne.common.toolbox.ReactBridgeUtils.safeGetString import com.facebook.react.bridge.ReadableMap import java.util.Locale +import java.util.Objects /** * Class representing Source props for host. @@ -50,6 +51,8 @@ class Source { */ var textTracksAllowChuncklessPreparation: Boolean = false + override fun hashCode(): Int = Objects.hash(uriString, uri, startPositionMs, cropStartMs, cropEndMs, extension, metadata, headers) + /** return true if this and src are equals */ override fun equals(other: Any?): Boolean { if (other == null || other !is Source) return false diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 89da7163..41f5ada2 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -991,6 +991,8 @@ public class ReactExoplayerView extends FrameLayout implements MediaItem.Builder mediaItemBuilder = new MediaItem.Builder() .setUri(uri); + // refresh custom Metadata + customMetadata = ConfigurationUtils.buildCustomMetadata(source.getMetadata()); if (customMetadata != null) { mediaItemBuilder.setMediaMetadata(customMetadata); } @@ -1761,19 +1763,6 @@ public class ReactExoplayerView extends FrameLayout implements DataSourceUtil.getDefaultDataSourceFactory(this.themedReactContext, bandwidthMeter, source.getHeaders()); - // refresh custom Metadata - MediaMetadata newCustomMetadata = ConfigurationUtils.buildCustomMetadata(source.getMetadata()); - - // Apply custom metadata is possible - if (player != null && !Util.areEqual(newCustomMetadata, customMetadata)) { - customMetadata = newCustomMetadata; - MediaItem currentMediaItem = player.getCurrentMediaItem(); - if (currentMediaItem != null) { - MediaItem newMediaItem = currentMediaItem.buildUpon().setMediaMetadata(customMetadata).build(); - // This will cause video blink/reload but won't louse progress - player.setMediaItem(newMediaItem, false); - } - } if (!isSourceEqual) { reloadSource(); }