From 01b3322e03a6191ee5c1761e766dd79bc81a0594 Mon Sep 17 00:00:00 2001 From: Kat Huang Date: Sat, 17 Aug 2024 17:19:10 -0600 Subject: [PATCH] Log in seek --- .../brentvatne/common/react/VideoEventEmitter.kt | 7 +++++++ .../brentvatne/exoplayer/ReactExoplayerView.java | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.kt b/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.kt index b227bfc1..fa6dd107 100644 --- a/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.kt +++ b/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.kt @@ -22,6 +22,7 @@ enum class EventTypes(val eventName: String) { EVENT_BANDWIDTH("onVideoBandwidthUpdate"), EVENT_CONTROLS_VISIBILITY_CHANGE("onControlsVisibilityChange"), EVENT_SEEK("onVideoSeek"), + EVENT_SEEK_COMPLETE("onVideoSeekComplete"), EVENT_END("onVideoEnd"), EVENT_FULLSCREEN_WILL_PRESENT("onVideoFullscreenPlayerWillPresent"), EVENT_FULLSCREEN_DID_PRESENT("onVideoFullscreenPlayerDidPresent"), @@ -71,6 +72,7 @@ class VideoEventEmitter { lateinit var onVideoBandwidthUpdate: (bitRateEstimate: Long, height: Int, width: Int, trackId: String) -> Unit lateinit var onVideoPlaybackStateChanged: (isPlaying: Boolean, isSeeking: Boolean) -> Unit lateinit var onVideoSeek: (currentPosition: Long, seekTime: Long) -> Unit + lateinit var onVideoSeekComplete: (currentPosition: Long) -> Unit lateinit var onVideoEnd: () -> Unit lateinit var onVideoFullscreenPlayerWillPresent: () -> Unit lateinit var onVideoFullscreenPlayerDidPresent: () -> Unit @@ -170,6 +172,11 @@ class VideoEventEmitter { putDouble("seekTime", seekTime / 1000.0) } } + onVideoSeekComplete = { currentPosition -> + event.dispatch(EventTypes.EVENT_SEEK_COMPLETE) { + putDouble("currentTime", currentPosition / 1000.0) + } + } onVideoEnd = { event.dispatch(EventTypes.EVENT_END) } diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 6f854efb..52757b32 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -23,6 +23,7 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.view.Window; import android.view.accessibility.CaptioningManager; @@ -303,6 +304,15 @@ public class ReactExoplayerView extends FrameLayout implements } }; + private void handleSeekCompletion() { + if (player != null && player.getPlaybackState() == Player.STATE_READY) { + Log.d("ReactExoplayerView", "onSeekComplete triggered. Current position: " + player.getCurrentPosition()); + eventEmitter.onSeekComplete.invoke(player.getCurrentPosition()); + isSeeking = false; + seekPosition = -1; + } + } + public double getPositionInFirstPeriodMsForCurrentWindow(long currentPosition) { Timeline.Window window = new Timeline.Window(); if(!player.getCurrentTimeline().isEmpty()) { @@ -761,7 +771,8 @@ public class ReactExoplayerView extends FrameLayout implements .setBandwidthMeter(bandwidthMeter) .setLoadControl(loadControl) .setMediaSourceFactory(mediaSourceFactory) - .build(); + .build(); + player.addListener(self); ReactNativeVideoManager.Companion.getInstance().onInstanceCreated(instanceId, player); refreshDebugState(); player.addListener(self); @@ -1371,6 +1382,7 @@ public class ReactExoplayerView extends FrameLayout implements playerControlView.show(); } setKeepScreenOn(preventsDisplaySleepDuringVideoPlayback); + handleSeekCompletion(); break; case Player.STATE_ENDED: text += "ended"; @@ -2137,6 +2149,8 @@ public class ReactExoplayerView extends FrameLayout implements public void seekTo(long positionMs) { if (player != null) { + isSeeking = true; + seekPosition = positionMs; player.seekTo(positionMs); } }