From 408cfb2c1c927359b6784605b5dd5cb267f6089f Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Thu, 21 Mar 2024 14:07:53 +0100 Subject: [PATCH 01/23] chore: various code clean (#3591) * chore: remove media3 dependancy from common * chore: remove unused * chore: fix linter change --------- Co-authored-by: Olivier Bouillet --- .../media3/exoplayer/ima/ImaAdsLoader.java | 2 - .../common/react/VideoEventEmitter.java | 10 ++-- .../common/toolbox/ReactBridgeUtils.kt | 58 ++++++------------- .../exoplayer/ReactExoplayerView.java | 4 +- 4 files changed, 26 insertions(+), 48 deletions(-) diff --git a/android/src/main/java/androidx/media3/exoplayer/ima/ImaAdsLoader.java b/android/src/main/java/androidx/media3/exoplayer/ima/ImaAdsLoader.java index 3119d09a1d..8d30b2b193 100644 --- a/android/src/main/java/androidx/media3/exoplayer/ima/ImaAdsLoader.java +++ b/android/src/main/java/androidx/media3/exoplayer/ima/ImaAdsLoader.java @@ -11,8 +11,6 @@ import androidx.media3.exoplayer.source.ads.AdsLoader; import androidx.media3.exoplayer.source.ads.AdsMediaSource; -import com.facebook.react.uimanager.ThemedReactContext; - import java.io.IOException; public class ImaAdsLoader implements AdsLoader { diff --git a/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java b/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java index d87b6d84b4..8010bf6500 100644 --- a/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java +++ b/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java @@ -14,8 +14,6 @@ import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.UIManagerHelper; import com.facebook.react.uimanager.common.ViewUtil; -import com.facebook.react.uimanager.events.RCTEventEmitter; -import com.google.ads.interactivemedia.v3.api.AdError; import java.io.PrintWriter; import java.io.StringWriter; @@ -449,14 +447,14 @@ public void receiveAdEvent(String event) { receiveEvent(EVENT_ON_RECEIVE_AD_EVENT, map); } - public void receiveAdErrorEvent(AdError error) { + public void receiveAdErrorEvent(String message, String code, String type) { WritableMap map = Arguments.createMap(); map.putString("event", "ERROR"); WritableMap dataMap = Arguments.createMap(); - dataMap.putString("message", error.getMessage()); - dataMap.putString("code", String.valueOf(error.getErrorCode())); - dataMap.putString("type", String.valueOf(error.getErrorType())); + dataMap.putString("message", message); + dataMap.putString("code", code); + dataMap.putString("type", type); map.putMap("data", dataMap); receiveEvent(EVENT_ON_RECEIVE_AD_EVENT, map); diff --git a/android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt b/android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt index c2ee24921a..10f4752aee 100644 --- a/android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt +++ b/android/src/main/java/com/brentvatne/common/toolbox/ReactBridgeUtils.kt @@ -12,67 +12,47 @@ import java.util.HashMap object ReactBridgeUtils { @JvmStatic - fun safeGetString(map: ReadableMap?, key: String?, fallback: String?): String? { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getString(key) else fallback - } + fun safeGetString(map: ReadableMap?, key: String?, fallback: String?): String? = + if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getString(key) else fallback @JvmStatic - fun safeGetString(map: ReadableMap?, key: String?): String? { - return safeGetString(map, key, null) - } + fun safeGetString(map: ReadableMap?, key: String?): String? = safeGetString(map, key, null) @JvmStatic - fun safeGetDynamic(map: ReadableMap?, key: String?, fallback: Dynamic?): Dynamic? { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getDynamic(key) else fallback - } + fun safeGetDynamic(map: ReadableMap?, key: String?, fallback: Dynamic?): Dynamic? = + if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getDynamic(key) else fallback @JvmStatic - fun safeGetDynamic(map: ReadableMap?, key: String?): Dynamic? { - return safeGetDynamic(map, key, null) - } + fun safeGetDynamic(map: ReadableMap?, key: String?): Dynamic? = safeGetDynamic(map, key, null) @JvmStatic - fun safeGetBool(map: ReadableMap?, key: String?, fallback: Boolean): Boolean { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getBoolean(key) else fallback - } + fun safeGetBool(map: ReadableMap?, key: String?, fallback: Boolean): Boolean = + if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getBoolean(key) else fallback @JvmStatic - fun safeGetMap(map: ReadableMap?, key: String?): ReadableMap? { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getMap(key) else null - } + fun safeGetMap(map: ReadableMap?, key: String?): ReadableMap? = if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getMap(key) else null @JvmStatic - fun safeGetArray(map: ReadableMap?, key: String?): ReadableArray? { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getArray(key) else null - } + fun safeGetArray(map: ReadableMap?, key: String?): ReadableArray? = if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getArray(key) else null @JvmStatic - fun safeGetInt(map: ReadableMap?, key: String?, fallback: Int): Int { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getInt(key) else fallback - } + fun safeGetInt(map: ReadableMap?, key: String?, fallback: Int): Int = + if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getInt(key) else fallback @JvmStatic - fun safeGetInt(map: ReadableMap?, key: String?): Int { - return safeGetInt(map, key, 0) - } + fun safeGetInt(map: ReadableMap?, key: String?): Int = safeGetInt(map, key, 0) @JvmStatic - fun safeGetDouble(map: ReadableMap?, key: String?, fallback: Double): Double { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getDouble(key) else fallback - } + fun safeGetDouble(map: ReadableMap?, key: String?, fallback: Double): Double = + if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getDouble(key) else fallback @JvmStatic - fun safeGetDouble(map: ReadableMap?, key: String?): Double { - return safeGetDouble(map, key, 0.0) - } + fun safeGetDouble(map: ReadableMap?, key: String?): Double = safeGetDouble(map, key, 0.0) - @JvmStatic fun safeGetFloat(map: ReadableMap?, key: String?, fallback: Float): Float { - return if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getDouble(key).toFloat() else fallback - } + @JvmStatic fun safeGetFloat(map: ReadableMap?, key: String?, fallback: Float): Float = + if (map != null && map.hasKey(key!!) && !map.isNull(key)) map.getDouble(key).toFloat() else fallback - @JvmStatic fun safeGetFloat(map: ReadableMap?, key: String?): Float { - return safeGetFloat(map, key, 0.0f) - } + @JvmStatic fun safeGetFloat(map: ReadableMap?, key: String?): Float = safeGetFloat(map, key, 0.0f) /** * toStringMap converts a [ReadableMap] into a HashMap. diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index bb09f1a25d..7d5bba1a8b 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -108,6 +108,7 @@ import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.uimanager.ThemedReactContext; +import com.google.ads.interactivemedia.v3.api.AdError; import com.google.ads.interactivemedia.v3.api.AdEvent; import com.google.ads.interactivemedia.v3.api.AdErrorEvent; import com.google.common.collect.ImmutableList; @@ -2124,6 +2125,7 @@ public void onAdEvent(AdEvent adEvent) { @Override public void onAdError(AdErrorEvent adErrorEvent) { - eventEmitter.receiveAdErrorEvent(adErrorEvent.getError()); + AdError error = adErrorEvent.getError(); + eventEmitter.receiveAdErrorEvent(error.getMessage(), String.valueOf(error.getErrorCode()), String.valueOf(error.getErrorType())); } } From 3d7444ab25c365b36e0e8d2672b74f474bba12eb Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Thu, 21 Mar 2024 15:40:25 +0100 Subject: [PATCH 02/23] fix(android): ensure rate is never set to 0 (#3593) * fix(android): ensure rate is never set to 0 --------- Co-authored-by: Olivier Bouillet --- .../java/com/brentvatne/exoplayer/ReactExoplayerView.java | 5 +++++ docs/pages/component/props.mdx | 4 ++-- examples/basic/src/VideoPlayer.tsx | 4 +++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 7d5bba1a8b..508a1a1879 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -1903,6 +1903,11 @@ public void seekTo(long positionMs) { } public void setRateModifier(float newRate) { + if (newRate <= 0) { + DebugLog.w(TAG, "cannot set rate <= 0"); + return; + } + rate = newRate; if (player != null) { diff --git a/docs/pages/component/props.mdx b/docs/pages/component/props.mdx index e3c7986d63..c6fca6781f 100644 --- a/docs/pages/component/props.mdx +++ b/docs/pages/component/props.mdx @@ -434,8 +434,8 @@ Default: 250.0 Speed at which the media should play. -- **0.0** - Pauses the video -- **1.0** - Play at normal speed +- **0.0** - Pauses the video (iOS only) +- **1.0** - Play at normal speed (default) - **Other values** - Slow down or speed up playback ### `repeat` diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index 4b657c1b22..c4866e97bf 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -638,11 +638,13 @@ class VideoPlayer extends Component { /> + {/* shall be replaced by slider */} + {/* shall be replaced by slider */} Date: Fri, 22 Mar 2024 07:58:09 +0100 Subject: [PATCH 03/23] fix(android): track selection parameter has change in last release. (#3594) Move all setSelectedTrack to String instead of Dynamic Co-authored-by: Olivier Bouillet --- .../exoplayer/ReactExoplayerView.java | 25 ++++++++++--------- .../exoplayer/ReactExoplayerViewManager.java | 12 ++++----- examples/basic/src/VideoPlayer.tsx | 17 +++++++------ 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 508a1a1879..4343698e3c 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -206,11 +206,11 @@ public class ReactExoplayerView extends FrameLayout implements private String extension; private boolean repeat; private String audioTrackType; - private Dynamic audioTrackValue; + private String audioTrackValue; private String videoTrackType; - private Dynamic videoTrackValue; + private String videoTrackValue; private String textTrackType; - private Dynamic textTrackValue; + private String textTrackValue; private ReadableArray textTracks; private boolean disableFocus; private boolean focusable = true; @@ -1635,7 +1635,7 @@ public void disableTrack(int rendererIndex) { trackSelector.setParameters(disableParameters); } - public void setSelectedTrack(int trackType, String type, Dynamic value) { + public void setSelectedTrack(int trackType, String type, String value) { if (player == null) return; int rendererIndex = getTrackRendererIndex(trackType); if (rendererIndex == C.INDEX_UNSET) { @@ -1661,7 +1661,7 @@ public void setSelectedTrack(int trackType, String type, Dynamic value) { } else if (type.equals("language")) { for (int i = 0; i < groups.length; ++i) { Format format = groups.get(i).getFormat(0); - if (format.language != null && format.language.equals(value.asString())) { + if (format.language != null && format.language.equals(value)) { groupIndex = i; break; } @@ -1669,17 +1669,18 @@ public void setSelectedTrack(int trackType, String type, Dynamic value) { } else if (type.equals("title")) { for (int i = 0; i < groups.length; ++i) { Format format = groups.get(i).getFormat(0); - if (format.id != null && format.id.equals(value.asString())) { + if (format.id != null && format.id.equals(value)) { groupIndex = i; break; } } } else if (type.equals("index")) { - if (value.asInt() < groups.length) { - groupIndex = value.asInt(); + int iValue = Integer.parseInt(value); + if (iValue < groups.length) { + groupIndex = iValue; } } else if (type.equals("resolution")) { - int height = value.asInt(); + int height = Integer.parseInt(value); for (int i = 0; i < groups.length; ++i) { // Search for the exact height TrackGroup group = groups.get(i); Format closestFormat = null; @@ -1827,19 +1828,19 @@ private int getGroupIndexForDefaultLocale(TrackGroupArray groups) { return groupIndex; } - public void setSelectedVideoTrack(String type, Dynamic value) { + public void setSelectedVideoTrack(String type, String value) { videoTrackType = type; videoTrackValue = value; setSelectedTrack(C.TRACK_TYPE_VIDEO, videoTrackType, videoTrackValue); } - public void setSelectedAudioTrack(String type, Dynamic value) { + public void setSelectedAudioTrack(String type, String value) { audioTrackType = type; audioTrackValue = value; setSelectedTrack(C.TRACK_TYPE_AUDIO, audioTrackType, audioTrackValue); } - public void setSelectedTextTrack(String type, Dynamic value) { + public void setSelectedTextTrack(String type, String value) { textTrackType = type; textTrackValue = value; setSelectedTrack(C.TRACK_TYPE_TEXT, textTrackType, textTrackValue); diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java index ee69b28d45..3b2e8c5fa9 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -253,10 +253,10 @@ public void setPreventsDisplaySleepDuringVideoPlayback(final ReactExoplayerView public void setSelectedVideoTrack(final ReactExoplayerView videoView, @Nullable ReadableMap selectedVideoTrack) { String typeString = null; - Dynamic value = null; + String value = null; if (selectedVideoTrack != null) { typeString = ReactBridgeUtils.safeGetString(selectedVideoTrack, PROP_SELECTED_VIDEO_TRACK_TYPE); - value = ReactBridgeUtils.safeGetDynamic(selectedVideoTrack, PROP_SELECTED_VIDEO_TRACK_VALUE); + value = ReactBridgeUtils.safeGetString(selectedVideoTrack, PROP_SELECTED_VIDEO_TRACK_VALUE); } videoView.setSelectedVideoTrack(typeString, value); } @@ -265,10 +265,10 @@ public void setSelectedVideoTrack(final ReactExoplayerView videoView, public void setSelectedAudioTrack(final ReactExoplayerView videoView, @Nullable ReadableMap selectedAudioTrack) { String typeString = null; - Dynamic value = null; + String value = null; if (selectedAudioTrack != null) { typeString = ReactBridgeUtils.safeGetString(selectedAudioTrack, PROP_SELECTED_AUDIO_TRACK_TYPE); - value = ReactBridgeUtils.safeGetDynamic(selectedAudioTrack, PROP_SELECTED_AUDIO_TRACK_VALUE); + value = ReactBridgeUtils.safeGetString(selectedAudioTrack, PROP_SELECTED_AUDIO_TRACK_VALUE); } videoView.setSelectedAudioTrack(typeString, value); } @@ -277,10 +277,10 @@ public void setSelectedAudioTrack(final ReactExoplayerView videoView, public void setSelectedTextTrack(final ReactExoplayerView videoView, @Nullable ReadableMap selectedTextTrack) { String typeString = null; - Dynamic value = null; + String value = null; if (selectedTextTrack != null) { typeString = ReactBridgeUtils.safeGetString(selectedTextTrack, PROP_SELECTED_TEXT_TRACK_TYPE); - value = ReactBridgeUtils.safeGetDynamic(selectedTextTrack, PROP_SELECTED_TEXT_TRACK_VALUE); + value = ReactBridgeUtils.safeGetString(selectedTextTrack, PROP_SELECTED_TEXT_TRACK_VALUE); } videoView.setSelectedTextTrack(typeString, value); } diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index c4866e97bf..a92d71bc3a 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -225,16 +225,18 @@ class VideoPlayer extends Component { const selectedTrack = data.audioTracks?.find((x: AudioTrack) => { return x.selected; }); - this.setState({ - audioTracks: data.audioTracks, - }); if (selectedTrack?.language) { this.setState({ + audioTracks: data.audioTracks, selectedAudioTrack: { type: 'language', value: selectedTrack?.language, }, }); + } else { + this.setState({ + audioTracks: data.audioTracks, + }); } }; @@ -243,17 +245,18 @@ class VideoPlayer extends Component { return x?.selected; }); - this.setState({ - textTracks: data.textTracks, - }); if (selectedTrack?.language) { this.setState({ - textTracks: data, + textTracks: data.textTracks, selectedTextTrack: { type: 'language', value: selectedTrack?.language, }, }); + } else { + this.setState({ + textTracks: data.textTracks, + }); } }; From bfb76e6d15f88a7dc50c63958486375e142a26bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Kueny?= Date: Fri, 22 Mar 2024 09:17:00 +0100 Subject: [PATCH 04/23] fix(android): keep screen on on fullscreen (#3563) add KEEP_SCREEN_ON flag when video is fullscreen & playing to avoid phone to go off. inspired by https://github.com/expo/expo/commit/2d8466128da3a047066fa2f36ce885da6c0c7685 --- .../brentvatne/exoplayer/ExoPlayerView.java | 4 ++ .../exoplayer/FullScreenPlayerView.java | 57 ++++++++++++++++++- .../exoplayer/ReactExoplayerView.java | 6 +- examples/basic/src/VideoPlayer.tsx | 1 + 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java index ebe05d16a9..db56f65659 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java @@ -108,6 +108,10 @@ private void setVideoView() { } } + public boolean isPlaying() { + return player != null && player.isPlaying(); + } + public void setSubtitleStyle(SubtitleStyle style) { // ensure we reset subtile style before reapplying it subtitleLayout.setUserDefaultStyle(); diff --git a/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.java b/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.java index f207ce8f5a..b5d170a06b 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/FullScreenPlayerView.java @@ -3,28 +3,73 @@ import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; +import android.os.Handler; import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageButton; import androidx.activity.OnBackPressedCallback; import androidx.media3.ui.LegacyPlayerControlView; +import com.brentvatne.common.toolbox.DebugLog; + +import java.lang.ref.WeakReference; + @SuppressLint("PrivateResource") public class FullScreenPlayerView extends Dialog { private final LegacyPlayerControlView playerControlView; private final ExoPlayerView exoPlayerView; + private final ReactExoplayerView reactExoplayerView; private ViewGroup parent; private final FrameLayout containerView; private final OnBackPressedCallback onBackPressedCallback; + private final Handler mKeepScreenOnHandler; + private final Runnable mKeepScreenOnUpdater; + + private static class KeepScreenOnUpdater implements Runnable { + private final static long UPDATE_KEEP_SCREEN_ON_FLAG_MS = 200; + private final WeakReference mFullscreenPlayer; + + KeepScreenOnUpdater(FullScreenPlayerView player) { + mFullscreenPlayer = new WeakReference<>(player); + } + + @Override + public void run() { + try { + FullScreenPlayerView fullscreenVideoPlayer = mFullscreenPlayer.get(); + if (fullscreenVideoPlayer != null) { + final Window window = fullscreenVideoPlayer.getWindow(); + if (window != null) { + boolean isPlaying = fullscreenVideoPlayer.exoPlayerView.isPlaying(); + if (isPlaying) { + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + } + fullscreenVideoPlayer.mKeepScreenOnHandler.postDelayed(this, UPDATE_KEEP_SCREEN_ON_FLAG_MS); + } + } catch (Exception ex) { + DebugLog.e("ExoPlayer Exception", "Failed to flag FLAG_KEEP_SCREEN_ON on fullscreeen."); + DebugLog.e("ExoPlayer Exception", ex.toString()); + } + } + } - public FullScreenPlayerView(Context context, ExoPlayerView exoPlayerView, LegacyPlayerControlView playerControlView, OnBackPressedCallback onBackPressedCallback) { + public FullScreenPlayerView(Context context, ExoPlayerView exoPlayerView, ReactExoplayerView reactExoplayerView, LegacyPlayerControlView playerControlView, OnBackPressedCallback onBackPressedCallback) { super(context, android.R.style.Theme_Black_NoTitleBar_Fullscreen); this.playerControlView = playerControlView; this.exoPlayerView = exoPlayerView; + this.reactExoplayerView = reactExoplayerView; this.onBackPressedCallback = onBackPressedCallback; containerView = new FrameLayout(context); setContentView(containerView, generateDefaultLayoutParams()); + + mKeepScreenOnUpdater = new KeepScreenOnUpdater(this); + mKeepScreenOnHandler = new Handler(); } @Override @@ -53,6 +98,7 @@ protected void onStart() { @Override protected void onStop() { + mKeepScreenOnHandler.removeCallbacks(mKeepScreenOnUpdater); containerView.removeView(exoPlayerView); parent.addView(exoPlayerView, generateDefaultLayoutParams()); @@ -70,6 +116,15 @@ protected void onStop() { super.onStop(); } + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + + if (reactExoplayerView.getPreventsDisplaySleepDuringVideoPlayback()) { + mKeepScreenOnHandler.post(mKeepScreenOnUpdater); + } + } + private FrameLayout.LayoutParams generateDefaultLayoutParams() { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 4343698e3c..c13118aade 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -406,7 +406,7 @@ private void initializePlayerControl() { } if (fullScreenPlayerView == null) { - fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) { + fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, this, playerControlView, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { setFullscreen(false); @@ -1966,6 +1966,10 @@ public void setDisableBuffering(boolean disableBuffering) { this.disableBuffering = disableBuffering; } + public boolean getPreventsDisplaySleepDuringVideoPlayback() { + return preventsDisplaySleepDuringVideoPlayback; + } + private void updateFullScreenButtonVisbility() { if (playerControlView != null) { final ImageButton fullScreenButton = playerControlView.findViewById(R.id.exo_fullscreen); diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index a92d71bc3a..2f69b21b14 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -790,6 +790,7 @@ class VideoPlayer extends Component { selectedTextTrack={this.state.selectedTextTrack} selectedAudioTrack={this.state.selectedAudioTrack} playInBackground={false} + preventsDisplaySleepDuringVideoPlayback={true} /> ); From 36bd2e2d71dc6879d74b154ecc39ea7b27f4b565 Mon Sep 17 00:00:00 2001 From: YangJH Date: Fri, 22 Mar 2024 21:43:46 +0900 Subject: [PATCH 05/23] fix(ios): fix startPosition, cropStart and cropEnd to handle float values correctly (#3589) * refactor(ios): refactor setPlaybackRange function * fix(ios): fix props to handle float values correctly - fix startPosition, cropStart, cropEnd * refactor(ios): apply lint --- ios/Video/DataStructures/VideoSource.swift | 8 ++++---- ios/Video/RCTVideo.swift | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ios/Video/DataStructures/VideoSource.swift b/ios/Video/DataStructures/VideoSource.swift index e2b83bb8e6..792214ba39 100644 --- a/ios/Video/DataStructures/VideoSource.swift +++ b/ios/Video/DataStructures/VideoSource.swift @@ -5,7 +5,7 @@ struct VideoSource { let isAsset: Bool let shouldCache: Bool let requestHeaders: [String: Any]? - let startPosition: Int64? + let startPosition: Float64? let cropStart: Int64? let cropEnd: Int64? // Custom Metadata @@ -51,9 +51,9 @@ struct VideoSource { } else { self.requestHeaders = nil } - self.startPosition = json["startPosition"] as? Int64 - self.cropStart = json["cropStart"] as? Int64 - self.cropEnd = json["cropEnd"] as? Int64 + self.startPosition = json["startPosition"] as? Float64 + self.cropStart = (json["cropStart"] as? Float64).flatMap { Int64(round($0)) } + self.cropEnd = (json["cropEnd"] as? Float64).flatMap { Int64(round($0)) } self.title = json["title"] as? String self.subtitle = json["subtitle"] as? String self.description = json["description"] as? String diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index a1d34063fa..efad295fca 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -367,7 +367,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } if let startPosition = self._source?.startPosition { - self._startPosition = Float64(startPosition) / 1000 + self._startPosition = startPosition / 1000 } #if USE_VIDEO_CACHING @@ -398,7 +398,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH self._playerItem = playerItem self._playerObserver.playerItem = self._playerItem self.setPreferredForwardBufferDuration(self._preferredForwardBufferDuration) - self.setPlaybackRange(playerItem, withVideoStart: self._source?.cropStart, withVideoEnd: self._source?.cropEnd) + self.setPlaybackRange(playerItem, withCropStart: self._source?.cropStart, withCropEnd: self._source?.cropEnd) self.setFilter(self._filterName) if let maxBitRate = self._maxBitRate { self._playerItem?.preferredPeakBitRate = Double(maxBitRate) @@ -740,15 +740,15 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH } } - func setPlaybackRange(_ item: AVPlayerItem!, withVideoStart videoStart: Int64?, withVideoEnd videoEnd: Int64?) { - if videoStart != nil { - let start = CMTimeMake(value: videoStart!, timescale: 1000) + func setPlaybackRange(_ item: AVPlayerItem!, withCropStart cropStart: Int64?, withCropEnd cropEnd: Int64?) { + if let cropStart { + let start = CMTimeMake(value: cropStart, timescale: 1000) item.reversePlaybackEndTime = start _pendingSeekTime = Float(CMTimeGetSeconds(start)) _pendingSeek = true } - if videoEnd != nil { - item.forwardPlaybackEndTime = CMTimeMake(value: videoEnd!, timescale: 1000) + if let cropEnd { + item.forwardPlaybackEndTime = CMTimeMake(value: cropEnd, timescale: 1000) } } From baafda4b26b62fbe05cd6099dbeba915ef5939fb Mon Sep 17 00:00:00 2001 From: Krzysztof Moch Date: Fri, 22 Mar 2024 14:08:55 +0100 Subject: [PATCH 06/23] bump react native version (#3597) chore(example): bump react native version --- examples/basic/ios/Podfile.lock | 474 +++++++++--------- .../ios/videoplayer.xcodeproj/project.pbxproj | 114 +++-- examples/basic/ios/videoplayer/Info.plist | 4 + examples/basic/package.json | 10 +- examples/basic/yarn.lock | 320 ++++++------ 5 files changed, 466 insertions(+), 456 deletions(-) diff --git a/examples/basic/ios/Podfile.lock b/examples/basic/ios/Podfile.lock index 68e85c7390..8c26296392 100644 --- a/examples/basic/ios/Podfile.lock +++ b/examples/basic/ios/Podfile.lock @@ -1,12 +1,12 @@ PODS: - boost (1.83.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.74.0-rc.2) + - FBLazyVector (0.74.0-rc.4) - fmt (9.1.0) - glog (0.3.5) - - hermes-engine (0.74.0-rc.2): - - hermes-engine/Pre-built (= 0.74.0-rc.2) - - hermes-engine/Pre-built (0.74.0-rc.2) + - hermes-engine (0.74.0-rc.4): + - hermes-engine/Pre-built (= 0.74.0-rc.4) + - hermes-engine/Pre-built (0.74.0-rc.4) - PromisesObjC (2.4.0) - PromisesSwift (2.4.0): - PromisesObjC (= 2.4.0) @@ -26,27 +26,27 @@ PODS: - DoubleConversion - fmt (= 9.1.0) - glog - - RCTDeprecation (0.74.0-rc.2) - - RCTRequired (0.74.0-rc.2) - - RCTTypeSafety (0.74.0-rc.2): - - FBLazyVector (= 0.74.0-rc.2) - - RCTRequired (= 0.74.0-rc.2) - - React-Core (= 0.74.0-rc.2) - - React (0.74.0-rc.2): - - React-Core (= 0.74.0-rc.2) - - React-Core/DevSupport (= 0.74.0-rc.2) - - React-Core/RCTWebSocket (= 0.74.0-rc.2) - - React-RCTActionSheet (= 0.74.0-rc.2) - - React-RCTAnimation (= 0.74.0-rc.2) - - React-RCTBlob (= 0.74.0-rc.2) - - React-RCTImage (= 0.74.0-rc.2) - - React-RCTLinking (= 0.74.0-rc.2) - - React-RCTNetwork (= 0.74.0-rc.2) - - React-RCTSettings (= 0.74.0-rc.2) - - React-RCTText (= 0.74.0-rc.2) - - React-RCTVibration (= 0.74.0-rc.2) - - React-callinvoker (0.74.0-rc.2) - - React-Codegen (0.74.0-rc.2): + - RCTDeprecation (0.74.0-rc.4) + - RCTRequired (0.74.0-rc.4) + - RCTTypeSafety (0.74.0-rc.4): + - FBLazyVector (= 0.74.0-rc.4) + - RCTRequired (= 0.74.0-rc.4) + - React-Core (= 0.74.0-rc.4) + - React (0.74.0-rc.4): + - React-Core (= 0.74.0-rc.4) + - React-Core/DevSupport (= 0.74.0-rc.4) + - React-Core/RCTWebSocket (= 0.74.0-rc.4) + - React-RCTActionSheet (= 0.74.0-rc.4) + - React-RCTAnimation (= 0.74.0-rc.4) + - React-RCTBlob (= 0.74.0-rc.4) + - React-RCTImage (= 0.74.0-rc.4) + - React-RCTLinking (= 0.74.0-rc.4) + - React-RCTNetwork (= 0.74.0-rc.4) + - React-RCTSettings (= 0.74.0-rc.4) + - React-RCTText (= 0.74.0-rc.4) + - React-RCTVibration (= 0.74.0-rc.4) + - React-callinvoker (0.74.0-rc.4) + - React-Codegen (0.74.0-rc.4): - DoubleConversion - glog - hermes-engine @@ -66,12 +66,12 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.74.0-rc.2): + - React-Core (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.0-rc.2) + - React-Core/Default (= 0.74.0-rc.4) - React-cxxreact - React-featureflags - React-hermes @@ -83,7 +83,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/CoreModulesHeaders (0.74.0-rc.2): + - React-Core/CoreModulesHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -100,7 +100,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/Default (0.74.0-rc.2): + - React-Core/Default (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -116,13 +116,13 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/DevSupport (0.74.0-rc.2): + - React-Core/DevSupport (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.0-rc.2) - - React-Core/RCTWebSocket (= 0.74.0-rc.2) + - React-Core/Default (= 0.74.0-rc.4) + - React-Core/RCTWebSocket (= 0.74.0-rc.4) - React-cxxreact - React-featureflags - React-hermes @@ -134,7 +134,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTActionSheetHeaders (0.74.0-rc.2): + - React-Core/RCTActionSheetHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -151,7 +151,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTAnimationHeaders (0.74.0-rc.2): + - React-Core/RCTAnimationHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -168,7 +168,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTBlobHeaders (0.74.0-rc.2): + - React-Core/RCTBlobHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -185,7 +185,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTImageHeaders (0.74.0-rc.2): + - React-Core/RCTImageHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -202,7 +202,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTLinkingHeaders (0.74.0-rc.2): + - React-Core/RCTLinkingHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -219,7 +219,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTNetworkHeaders (0.74.0-rc.2): + - React-Core/RCTNetworkHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -236,7 +236,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTSettingsHeaders (0.74.0-rc.2): + - React-Core/RCTSettingsHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -253,7 +253,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTTextHeaders (0.74.0-rc.2): + - React-Core/RCTTextHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -270,7 +270,7 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTVibrationHeaders (0.74.0-rc.2): + - React-Core/RCTVibrationHeaders (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -287,12 +287,12 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-Core/RCTWebSocket (0.74.0-rc.2): + - React-Core/RCTWebSocket (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - RCTDeprecation - - React-Core/Default (= 0.74.0-rc.2) + - React-Core/Default (= 0.74.0-rc.4) - React-cxxreact - React-featureflags - React-hermes @@ -304,36 +304,36 @@ PODS: - React-utils - SocketRocket (= 0.7.0) - Yoga - - React-CoreModules (0.74.0-rc.2): + - React-CoreModules (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.74.0-rc.2) + - RCTTypeSafety (= 0.74.0-rc.4) - React-Codegen - - React-Core/CoreModulesHeaders (= 0.74.0-rc.2) - - React-jsi (= 0.74.0-rc.2) + - React-Core/CoreModulesHeaders (= 0.74.0-rc.4) + - React-jsi (= 0.74.0-rc.4) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.74.0-rc.2) + - React-RCTImage (= 0.74.0-rc.4) - ReactCommon - SocketRocket (= 0.7.0) - - React-cxxreact (0.74.0-rc.2): + - React-cxxreact (0.74.0-rc.4): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.0-rc.2) - - React-debug (= 0.74.0-rc.2) - - React-jsi (= 0.74.0-rc.2) + - React-callinvoker (= 0.74.0-rc.4) + - React-debug (= 0.74.0-rc.4) + - React-jsi (= 0.74.0-rc.4) - React-jsinspector - - React-logger (= 0.74.0-rc.2) - - React-perflogger (= 0.74.0-rc.2) - - React-runtimeexecutor (= 0.74.0-rc.2) - - React-debug (0.74.0-rc.2) - - React-Fabric (0.74.0-rc.2): + - React-logger (= 0.74.0-rc.4) + - React-perflogger (= 0.74.0-rc.4) + - React-runtimeexecutor (= 0.74.0-rc.4) + - React-debug (0.74.0-rc.4) + - React-Fabric (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -344,20 +344,20 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.74.0-rc.2) - - React-Fabric/attributedstring (= 0.74.0-rc.2) - - React-Fabric/componentregistry (= 0.74.0-rc.2) - - React-Fabric/componentregistrynative (= 0.74.0-rc.2) - - React-Fabric/components (= 0.74.0-rc.2) - - React-Fabric/core (= 0.74.0-rc.2) - - React-Fabric/imagemanager (= 0.74.0-rc.2) - - React-Fabric/leakchecker (= 0.74.0-rc.2) - - React-Fabric/mounting (= 0.74.0-rc.2) - - React-Fabric/scheduler (= 0.74.0-rc.2) - - React-Fabric/telemetry (= 0.74.0-rc.2) - - React-Fabric/templateprocessor (= 0.74.0-rc.2) - - React-Fabric/textlayoutmanager (= 0.74.0-rc.2) - - React-Fabric/uimanager (= 0.74.0-rc.2) + - React-Fabric/animations (= 0.74.0-rc.4) + - React-Fabric/attributedstring (= 0.74.0-rc.4) + - React-Fabric/componentregistry (= 0.74.0-rc.4) + - React-Fabric/componentregistrynative (= 0.74.0-rc.4) + - React-Fabric/components (= 0.74.0-rc.4) + - React-Fabric/core (= 0.74.0-rc.4) + - React-Fabric/imagemanager (= 0.74.0-rc.4) + - React-Fabric/leakchecker (= 0.74.0-rc.4) + - React-Fabric/mounting (= 0.74.0-rc.4) + - React-Fabric/scheduler (= 0.74.0-rc.4) + - React-Fabric/telemetry (= 0.74.0-rc.4) + - React-Fabric/templateprocessor (= 0.74.0-rc.4) + - React-Fabric/textlayoutmanager (= 0.74.0-rc.4) + - React-Fabric/uimanager (= 0.74.0-rc.4) - React-graphics - React-jsi - React-jsiexecutor @@ -366,7 +366,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.74.0-rc.2): + - React-Fabric/animations (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -385,7 +385,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.74.0-rc.2): + - React-Fabric/attributedstring (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -404,7 +404,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.74.0-rc.2): + - React-Fabric/componentregistry (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -423,7 +423,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.74.0-rc.2): + - React-Fabric/componentregistrynative (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -442,7 +442,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.74.0-rc.2): + - React-Fabric/components (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -453,17 +453,17 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/inputaccessory (= 0.74.0-rc.2) - - React-Fabric/components/legacyviewmanagerinterop (= 0.74.0-rc.2) - - React-Fabric/components/modal (= 0.74.0-rc.2) - - React-Fabric/components/rncore (= 0.74.0-rc.2) - - React-Fabric/components/root (= 0.74.0-rc.2) - - React-Fabric/components/safeareaview (= 0.74.0-rc.2) - - React-Fabric/components/scrollview (= 0.74.0-rc.2) - - React-Fabric/components/text (= 0.74.0-rc.2) - - React-Fabric/components/textinput (= 0.74.0-rc.2) - - React-Fabric/components/unimplementedview (= 0.74.0-rc.2) - - React-Fabric/components/view (= 0.74.0-rc.2) + - React-Fabric/components/inputaccessory (= 0.74.0-rc.4) + - React-Fabric/components/legacyviewmanagerinterop (= 0.74.0-rc.4) + - React-Fabric/components/modal (= 0.74.0-rc.4) + - React-Fabric/components/rncore (= 0.74.0-rc.4) + - React-Fabric/components/root (= 0.74.0-rc.4) + - React-Fabric/components/safeareaview (= 0.74.0-rc.4) + - React-Fabric/components/scrollview (= 0.74.0-rc.4) + - React-Fabric/components/text (= 0.74.0-rc.4) + - React-Fabric/components/textinput (= 0.74.0-rc.4) + - React-Fabric/components/unimplementedview (= 0.74.0-rc.4) + - React-Fabric/components/view (= 0.74.0-rc.4) - React-graphics - React-jsi - React-jsiexecutor @@ -472,7 +472,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/inputaccessory (0.74.0-rc.2): + - React-Fabric/components/inputaccessory (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -491,7 +491,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.74.0-rc.2): + - React-Fabric/components/legacyviewmanagerinterop (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -510,7 +510,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/modal (0.74.0-rc.2): + - React-Fabric/components/modal (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -529,7 +529,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/rncore (0.74.0-rc.2): + - React-Fabric/components/rncore (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -548,7 +548,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.74.0-rc.2): + - React-Fabric/components/root (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -567,7 +567,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/safeareaview (0.74.0-rc.2): + - React-Fabric/components/safeareaview (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -586,7 +586,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/scrollview (0.74.0-rc.2): + - React-Fabric/components/scrollview (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -605,7 +605,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/text (0.74.0-rc.2): + - React-Fabric/components/text (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -624,7 +624,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/textinput (0.74.0-rc.2): + - React-Fabric/components/textinput (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -643,7 +643,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/unimplementedview (0.74.0-rc.2): + - React-Fabric/components/unimplementedview (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -662,7 +662,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.74.0-rc.2): + - React-Fabric/components/view (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -682,7 +682,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.74.0-rc.2): + - React-Fabric/core (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -701,7 +701,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.74.0-rc.2): + - React-Fabric/imagemanager (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -720,7 +720,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.74.0-rc.2): + - React-Fabric/leakchecker (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -739,7 +739,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.74.0-rc.2): + - React-Fabric/mounting (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -758,7 +758,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.74.0-rc.2): + - React-Fabric/scheduler (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -777,7 +777,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.74.0-rc.2): + - React-Fabric/telemetry (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -796,7 +796,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.74.0-rc.2): + - React-Fabric/templateprocessor (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -815,7 +815,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/textlayoutmanager (0.74.0-rc.2): + - React-Fabric/textlayoutmanager (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -835,7 +835,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.74.0-rc.2): + - React-Fabric/uimanager (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog @@ -854,45 +854,45 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricImage (0.74.0-rc.2): + - React-FabricImage (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.74.0-rc.2) - - RCTTypeSafety (= 0.74.0-rc.2) + - RCTRequired (= 0.74.0-rc.4) + - RCTTypeSafety (= 0.74.0-rc.4) - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.74.0-rc.2) + - React-jsiexecutor (= 0.74.0-rc.4) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.74.0-rc.2) - - React-graphics (0.74.0-rc.2): + - React-featureflags (0.74.0-rc.4) + - React-graphics (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog - RCT-Folly/Fabric (= 2024.01.01.00) - - React-Core/Default (= 0.74.0-rc.2) + - React-Core/Default (= 0.74.0-rc.4) - React-utils - - React-hermes (0.74.0-rc.2): + - React-hermes (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.74.0-rc.2) + - React-cxxreact (= 0.74.0-rc.4) - React-jsi - - React-jsiexecutor (= 0.74.0-rc.2) + - React-jsiexecutor (= 0.74.0-rc.4) - React-jsinspector - - React-perflogger (= 0.74.0-rc.2) + - React-perflogger (= 0.74.0-rc.4) - React-runtimeexecutor - - React-ImageManager (0.74.0-rc.2): + - React-ImageManager (0.74.0-rc.4): - glog - RCT-Folly/Fabric - React-Core/Default @@ -901,51 +901,51 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.74.0-rc.2): + - React-jserrorhandler (0.74.0-rc.4): - RCT-Folly/Fabric (= 2024.01.01.00) - React-debug - React-jsi - React-Mapbuffer - - React-jsi (0.74.0-rc.2): + - React-jsi (0.74.0-rc.4): - boost (= 1.83.0) - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.74.0-rc.2): + - React-jsiexecutor (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.74.0-rc.2) - - React-jsi (= 0.74.0-rc.2) + - React-cxxreact (= 0.74.0-rc.4) + - React-jsi (= 0.74.0-rc.4) - React-jsinspector - - React-perflogger (= 0.74.0-rc.2) - - React-jsinspector (0.74.0-rc.2): + - React-perflogger (= 0.74.0-rc.4) + - React-jsinspector (0.74.0-rc.4): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-featureflags - React-jsi - - React-runtimeexecutor (= 0.74.0-rc.2) - - React-jsitracing (0.74.0-rc.2): + - React-runtimeexecutor (= 0.74.0-rc.4) + - React-jsitracing (0.74.0-rc.4): - React-jsi - - React-logger (0.74.0-rc.2): + - React-logger (0.74.0-rc.4): - glog - - React-Mapbuffer (0.74.0-rc.2): + - React-Mapbuffer (0.74.0-rc.4): - glog - React-debug - - react-native-video (6.0.0-beta.5): + - react-native-video (6.0.0-beta.6): - React-Core - - react-native-video/Video (= 6.0.0-beta.5) - - react-native-video/Video (6.0.0-beta.5): + - react-native-video/Video (= 6.0.0-beta.6) + - react-native-video/Video (6.0.0-beta.6): - PromisesSwift - React-Core - - React-nativeconfig (0.74.0-rc.2) - - React-NativeModulesApple (0.74.0-rc.2): + - React-nativeconfig (0.74.0-rc.4) + - React-NativeModulesApple (0.74.0-rc.4): - glog - hermes-engine - React-callinvoker @@ -956,10 +956,10 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.74.0-rc.2) - - React-RCTActionSheet (0.74.0-rc.2): - - React-Core/RCTActionSheetHeaders (= 0.74.0-rc.2) - - React-RCTAnimation (0.74.0-rc.2): + - React-perflogger (0.74.0-rc.4) + - React-RCTActionSheet (0.74.0-rc.4): + - React-Core/RCTActionSheetHeaders (= 0.74.0-rc.4) + - React-RCTAnimation (0.74.0-rc.4): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -967,7 +967,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTAppDelegate (0.74.0-rc.2): + - React-RCTAppDelegate (0.74.0-rc.4): - RCT-Folly (= 2024.01.01.00) - RCTRequired - RCTTypeSafety @@ -990,7 +990,7 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - React-RCTBlob (0.74.0-rc.2): + - React-RCTBlob (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - hermes-engine @@ -1003,7 +1003,7 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTFabric (0.74.0-rc.2): + - React-RCTFabric (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1023,7 +1023,7 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.74.0-rc.2): + - React-RCTImage (0.74.0-rc.4): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1032,14 +1032,14 @@ PODS: - React-NativeModulesApple - React-RCTNetwork - ReactCommon - - React-RCTLinking (0.74.0-rc.2): + - React-RCTLinking (0.74.0-rc.4): - React-Codegen - - React-Core/RCTLinkingHeaders (= 0.74.0-rc.2) - - React-jsi (= 0.74.0-rc.2) + - React-Core/RCTLinkingHeaders (= 0.74.0-rc.4) + - React-jsi (= 0.74.0-rc.4) - React-NativeModulesApple - ReactCommon - - ReactCommon/turbomodule/core (= 0.74.0-rc.2) - - React-RCTNetwork (0.74.0-rc.2): + - ReactCommon/turbomodule/core (= 0.74.0-rc.4) + - React-RCTNetwork (0.74.0-rc.4): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1047,7 +1047,7 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTSettings (0.74.0-rc.2): + - React-RCTSettings (0.74.0-rc.4): - RCT-Folly (= 2024.01.01.00) - RCTTypeSafety - React-Codegen @@ -1055,23 +1055,23 @@ PODS: - React-jsi - React-NativeModulesApple - ReactCommon - - React-RCTText (0.74.0-rc.2): - - React-Core/RCTTextHeaders (= 0.74.0-rc.2) + - React-RCTText (0.74.0-rc.4): + - React-Core/RCTTextHeaders (= 0.74.0-rc.4) - Yoga - - React-RCTVibration (0.74.0-rc.2): + - React-RCTVibration (0.74.0-rc.4): - RCT-Folly (= 2024.01.01.00) - React-Codegen - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCommon - - React-rendererdebug (0.74.0-rc.2): + - React-rendererdebug (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - RCT-Folly (= 2024.01.01.00) - React-debug - - React-rncore (0.74.0-rc.2) - - React-RuntimeApple (0.74.0-rc.2): + - React-rncore (0.74.0-rc.4) + - React-RuntimeApple (0.74.0-rc.4): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-callinvoker @@ -1089,7 +1089,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - React-utils - - React-RuntimeCore (0.74.0-rc.2): + - React-RuntimeCore (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) @@ -1102,9 +1102,9 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.74.0-rc.2): - - React-jsi (= 0.74.0-rc.2) - - React-RuntimeHermes (0.74.0-rc.2): + - React-runtimeexecutor (0.74.0-rc.4): + - React-jsi (= 0.74.0-rc.4) + - React-RuntimeHermes (0.74.0-rc.4): - hermes-engine - RCT-Folly/Fabric (= 2024.01.01.00) - React-featureflags @@ -1115,7 +1115,7 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.74.0-rc.2): + - React-runtimescheduler (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) @@ -1127,51 +1127,51 @@ PODS: - React-rendererdebug - React-runtimeexecutor - React-utils - - React-utils (0.74.0-rc.2): + - React-utils (0.74.0-rc.4): - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - React-debug - - React-jsi (= 0.74.0-rc.2) - - ReactCommon (0.74.0-rc.2): - - ReactCommon/turbomodule (= 0.74.0-rc.2) - - ReactCommon/turbomodule (0.74.0-rc.2): + - React-jsi (= 0.74.0-rc.4) + - ReactCommon (0.74.0-rc.4): + - ReactCommon/turbomodule (= 0.74.0-rc.4) + - ReactCommon/turbomodule (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.0-rc.2) - - React-cxxreact (= 0.74.0-rc.2) - - React-jsi (= 0.74.0-rc.2) - - React-logger (= 0.74.0-rc.2) - - React-perflogger (= 0.74.0-rc.2) - - ReactCommon/turbomodule/bridging (= 0.74.0-rc.2) - - ReactCommon/turbomodule/core (= 0.74.0-rc.2) - - ReactCommon/turbomodule/bridging (0.74.0-rc.2): + - React-callinvoker (= 0.74.0-rc.4) + - React-cxxreact (= 0.74.0-rc.4) + - React-jsi (= 0.74.0-rc.4) + - React-logger (= 0.74.0-rc.4) + - React-perflogger (= 0.74.0-rc.4) + - ReactCommon/turbomodule/bridging (= 0.74.0-rc.4) + - ReactCommon/turbomodule/core (= 0.74.0-rc.4) + - ReactCommon/turbomodule/bridging (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.0-rc.2) - - React-cxxreact (= 0.74.0-rc.2) - - React-jsi (= 0.74.0-rc.2) - - React-logger (= 0.74.0-rc.2) - - React-perflogger (= 0.74.0-rc.2) - - ReactCommon/turbomodule/core (0.74.0-rc.2): + - React-callinvoker (= 0.74.0-rc.4) + - React-cxxreact (= 0.74.0-rc.4) + - React-jsi (= 0.74.0-rc.4) + - React-logger (= 0.74.0-rc.4) + - React-perflogger (= 0.74.0-rc.4) + - ReactCommon/turbomodule/core (0.74.0-rc.4): - DoubleConversion - fmt (= 9.1.0) - glog - hermes-engine - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.74.0-rc.2) - - React-cxxreact (= 0.74.0-rc.2) - - React-debug (= 0.74.0-rc.2) - - React-jsi (= 0.74.0-rc.2) - - React-logger (= 0.74.0-rc.2) - - React-perflogger (= 0.74.0-rc.2) - - React-utils (= 0.74.0-rc.2) + - React-callinvoker (= 0.74.0-rc.4) + - React-cxxreact (= 0.74.0-rc.4) + - React-debug (= 0.74.0-rc.4) + - React-jsi (= 0.74.0-rc.4) + - React-logger (= 0.74.0-rc.4) + - React-perflogger (= 0.74.0-rc.4) + - React-utils (= 0.74.0-rc.4) - RNCPicker (1.16.8): - React-Core - SocketRocket (0.7.0) @@ -1361,64 +1361,64 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: d3f49c53809116a5d38da093a8aa78bf551aed09 DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 - FBLazyVector: fa59cfcc9893760f58a0af6f5c25d5736c6d0b14 + FBLazyVector: 2a48dc257abbee54cc5c9a2895654bad4246fcaa fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 - hermes-engine: 563fc2ee6a71d0768170d4b72176ebe13f7477eb + hermes-engine: dfdcadd89a22aa872ef552b07e415d88df68af55 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 RCT-Folly: 045d6ecaa59d826c5736dfba0b2f4083ff8d79df - RCTDeprecation: a6392cb4842ae80e6f13ea460517170be529c301 - RCTRequired: 1c308285f5125d3e65fd864d1ffbd51c84f19be0 - RCTTypeSafety: c66cf0ffe89d4c3a6f74c38a8b1396d9a06bd5f2 - React: 525ec60174ace50c7cc60fe92982e580b0b26cfb - React-callinvoker: 38f05fc7eb5c7871c1492a738c3c5030dccb5ab5 - React-Codegen: f0beb440c19074de241f9df066badb2209723df1 - React-Core: a86958b70355c2fa2b959ceb6a9e68feb1dabe60 - React-CoreModules: 158d38fb11abd70117c61567815ab1e9718966f0 - React-cxxreact: 6d319bcf5f41f7b5330fbe8c27049793a08dba6f - React-debug: 5a5ebf724f516c1c8a18890b79aa9c6f0d561df5 - React-Fabric: 5fce69ebc857d2e4a504ca0ba6c835841eaa3d05 - React-FabricImage: a9fc43fdf54953551db0ee3be1c9e9c7361e95eb - React-featureflags: d03e0e1d8a24e5a964e3719aeeba151f92429a45 - React-graphics: a12c50bed55919e35f2b5e0e9eccdbbf45257b9c - React-hermes: 077ba60b78db135eebcac68939ed8ec9a1edfba8 - React-ImageManager: 099b1a0650725df9e724dddf15d4bc6bec088008 - React-jserrorhandler: 7cc44924f78046b20d4e2c909779705467217768 - React-jsi: 2f418a12887ba5de80f89fbf5630cfc67f81660e - React-jsiexecutor: 88ba7d9919658a39601312298b09a557226971f3 - React-jsinspector: 7b69f0543369e5fba5d08f1bb1d875f9a00c5f72 - React-jsitracing: 448ac078345e37621216585708e63c2e0e36e572 - React-logger: 216e56f4326f6c48202d62a7f5b44e4c360ce1a2 - React-Mapbuffer: baefb3e335d9754eee3d3c4447b238f909c6dd0a - react-native-video: df7d8a4c8568ed4a31b28e6cd2bfa4a98b186e36 - React-nativeconfig: e5f55ffb15706df191142002a0a9e039f28d3056 - React-NativeModulesApple: 3ee6c709bdef19265b6c68aa47b194e2f980231f - React-perflogger: bc4cdc9440a5ba3b462813447a5a6633010b1cc8 - React-RCTActionSheet: 8b27811da488f196167ca1756453cc1feacbed8f - React-RCTAnimation: aba9dcc5c6c0213cd1e747076300261aa8d23845 - React-RCTAppDelegate: f8d6afca137f95bac028b631c89c9648ae2e864d - React-RCTBlob: 843bb240adc3bc28cf8893a5fad4b4d41c0b89ad - React-RCTFabric: 176ba2d8c621a38090b7759eafc046e8f76d081f - React-RCTImage: 67ea59e43e222cde321675e49416e21b5adc52e6 - React-RCTLinking: 73f14ccf9ce161d5f7b61c4d18eb01876897fe17 - React-RCTNetwork: 157786ee39743278756977b8161631646bcf9770 - React-RCTSettings: e3b41387f9b00dd2c27633516d3910c9b599dd20 - React-RCTText: 03f0530b5c16d420458295121cf47ecaad63dad6 - React-RCTVibration: 7c3592b2a785e6c2538376c21224d30da099e06e - React-rendererdebug: c36a5b6a9e49802cf8a6c2f73d4b4039bff72389 - React-rncore: 37ff98195821724edaad58d020de8acb91f22895 - React-RuntimeApple: c5f07140064ad13da4a15011d054d6c01925c2bb - React-RuntimeCore: 1156e435c15b8da61be24e85602fffe53b75d4e1 - React-runtimeexecutor: 9ea6854962deb2841e4ea6706ee77155c0d0e986 - React-RuntimeHermes: a44aae96fd3a01a09b3d9af171edbaf32fe18816 - React-runtimescheduler: dc5302fa9d8213a30a8bbc11ce49515bf94d2bd3 - React-utils: 38b4c9d90c345bdb9599d905fdacca363e83ce60 - ReactCommon: 084645bd2b69ca23243cc184d9f5bc926d9b1a44 + RCTDeprecation: 1c5ab5895f9fc7e8ae9fcde04859f0d246283209 + RCTRequired: 79e2e81174db06336f470c49aea7603ff29817a7 + RCTTypeSafety: d6ccaa59a5b6f75c34d047e9cf5c7747be938e46 + React: d605e940cf4dbc9e3f0dbb62168ff0bd262eebec + React-callinvoker: ca0cd77dd0e304e653eab57caaf1e3840f314e8d + React-Codegen: b6db1d23cc9e39a664bee3753f769f199f41df8f + React-Core: 41c45f7602babf6af91375adcf5e7965defb7d78 + React-CoreModules: 5a00319c393d6244903264884ba3f28edd5dc1e4 + React-cxxreact: 4314215fafddd150f4820cb29f269e7832709359 + React-debug: 09ef81dfc26beedce04d23ec551caac8b03690cf + React-Fabric: b4df98e117346daf6d7a5f3d495f1b28c8d7402e + React-FabricImage: 60717023239bc6506762c855f9fae5f440990df0 + React-featureflags: 7508fb8753c9cb01425f28266578fafb2d9ef197 + React-graphics: bab17e7a82e5545b4f40d525a07df9f37b582122 + React-hermes: f11f57dd637ec1c266f66caf1bcf6add8b0bd2c3 + React-ImageManager: 2c2fc88732211c8fa631221818911a00838d6097 + React-jserrorhandler: 2cd04e514bcc9a911e37f62cd3aa4fad2d0a2d0e + React-jsi: cec2e26a99e4ba448b4489892cfadaae9d033760 + React-jsiexecutor: 354cfa360e05e7968ca36e6614a85f78a6a69c8f + React-jsinspector: b0bc36a2ee108ab68ac58dba7c36dab4fa2278a3 + React-jsitracing: 50e3ea936a199a2a7fcab922f156507c97f0b88c + React-logger: 6004e0cf41b7e9714ca26b1648e5d76fcfd638b5 + React-Mapbuffer: 9b163fa28e549d5f36f89a39a1145fcaf262d0d0 + react-native-video: dc3118548cf8864a83f57df4345cf6c692402e8f + React-nativeconfig: 3948d6fb6acfec364625cffbb1cf420346fb37c0 + React-NativeModulesApple: 46745aba687c1019983d56b6d5fa39265152f64f + React-perflogger: 0d62c0261b6fd3920605850de91abc8135dd3ee9 + React-RCTActionSheet: 655c691cd152938b9760c16a857d6726ea33a7b5 + React-RCTAnimation: 2a98c119ff97fea009b52af56eecca20acb402ec + React-RCTAppDelegate: 0bfc33b90a8dc575eeeafe1edd43d761b487fcdc + React-RCTBlob: 350708eed43ff6b8a3e957c6da166afaacba1390 + React-RCTFabric: 6964a54db2721c1bb8115e49bb2234316925f76c + React-RCTImage: 8de3e14205074299b6fecd90af9f3162759c71f6 + React-RCTLinking: a2931793dd576a15ce42a8ebb49b85e46bbd0e31 + React-RCTNetwork: 894a51d330071304fe402b18dc21ac6a95a3c111 + React-RCTSettings: 1f077416efac57d7ef55226e18a7a80e223b27a2 + React-RCTText: 418b7ec4ddb541e8b79d0bb5c08717adf9a6a281 + React-RCTVibration: 6a886e048b563b5a4750fc729880e0affbd4f870 + React-rendererdebug: 862078751b313d507940e9fa7e4e89a879e48c5d + React-rncore: dd6587917e1329c3f42cf8204f03c7c80d712a80 + React-RuntimeApple: ab9c7257960ece57a1771f2a4bba74c8f52821cd + React-RuntimeCore: c8889aa7ab11de2a3bf9949e6fc9f7735faf95af + React-runtimeexecutor: d8a97c799dd75bae0d2721e4c4d010a8046eaa42 + React-RuntimeHermes: e6c01d000e257abbe25956a203692ccdb4d59a61 + React-runtimescheduler: a20849ec0efb183ebb921e66693b4c34cb118b54 + React-utils: 25187ca38759c3702644408f3c031024a516e85b + ReactCommon: 7dcfe361142057b6411ca1e86e5dae900dda59ba RNCPicker: 0991c56da7815c0cf946d6f63cf920b25296e5f6 SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - Yoga: f78d50661f1d9906929cddb3641febd14068f090 + Yoga: e08111794822bc315de88571845a3dd6fa5f2183 PODFILE CHECKSUM: bbe1bd5f521b6b9366288dbaf8af1cec85c0a95a -COCOAPODS: 1.12.0 +COCOAPODS: 1.13.0 diff --git a/examples/basic/ios/videoplayer.xcodeproj/project.pbxproj b/examples/basic/ios/videoplayer.xcodeproj/project.pbxproj index 65de7e2a6d..b3956a3ca1 100644 --- a/examples/basic/ios/videoplayer.xcodeproj/project.pbxproj +++ b/examples/basic/ios/videoplayer.xcodeproj/project.pbxproj @@ -588,33 +588,36 @@ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios", "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", ); IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( @@ -695,33 +698,36 @@ "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios", "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", - " ${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Fabric/React_Fabric.framework/Headers/react/renderer/components/view/platform/cxx", + "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers", ); IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/examples/basic/ios/videoplayer/Info.plist b/examples/basic/ios/videoplayer/Info.plist index ee2703ea4b..de3bc7935d 100644 --- a/examples/basic/ios/videoplayer/Info.plist +++ b/examples/basic/ios/videoplayer/Info.plist @@ -33,6 +33,10 @@ NSLocationWhenInUseUsageDescription + UIBackgroundModes + + audio + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities diff --git a/examples/basic/package.json b/examples/basic/package.json index dc850cd1e8..323f54780a 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -15,23 +15,23 @@ "dependencies": { "@react-native-picker/picker": "^1.9.11", "react": "18.2.0", - "react-native": "0.74.0-rc.2", + "react-native": "0.74.0-rc.4", "react-native-windows": "0.63.41" }, "devDependencies": { "@babel/core": "^7.22.10", "@babel/preset-env": "^7.22.10", "@babel/runtime": "^7.22.10", - "@react-native/eslint-config": "^0.74.1", - "@react-native/metro-config": "^0.74.2", - "@react-native/typescript-config": "^0.74.1", + "@react-native/babel-preset": "0.74.75", + "@react-native/eslint-config": "0.74.75", + "@react-native/metro-config": "0.74.75", + "@react-native/typescript-config": "0.74.75", "@types/react": "^18.2.6", "@types/react-test-renderer": "^18.0.0", "babel-jest": "^29.6.3", "babel-plugin-module-resolver": "5.0.0", "eslint": "^8.19.0", "jest": "^29.6.3", - "@react-native/babel-preset": "0.74.2", "prettier": "^2.8.8", "typescript": "5.0.4" }, diff --git a/examples/basic/yarn.lock b/examples/basic/yarn.lock index 37d20824fe..2406b628f3 100644 --- a/examples/basic/yarn.lock +++ b/examples/basic/yarn.lock @@ -1548,45 +1548,45 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@react-native-community/cli-clean@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.1.tgz#e4dce2aa8ea5a2fbdbfe8074e0c285bf4796d7be" - integrity sha512-HV0kTegCMbq9INOLUVzPFl/FDjZ2uX6kOa7cFYezkRhgApJo0a/KYTvqwQVlmdHXAjDiWLARGTUPqYQGwIef0A== +"@react-native-community/cli-clean@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.2.tgz#073a9921392c0072691e29ef83f4e1b6d52d41ce" + integrity sha512-F05U//+DdsGUrFz3LOwNlaiVxv7W3jK38algZxHux/nQj4395LMQTtUMvTlk5CpptlJX3gJZRkjYJbpXSJbJag== dependencies: - "@react-native-community/cli-tools" "13.6.1" + "@react-native-community/cli-tools" "13.6.2" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" -"@react-native-community/cli-config@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.1.tgz#b1f83fc1572d2500fb9e8d5b1a38ba417acb6eec" - integrity sha512-ljqwH04RNkwv8Y67TjmJ60qgvAdS2aCCUszaD7ZPXmfqBBxkvLg5QFtja9y+1QuTGPmBuTtC55JqmCHg/UDAsg== +"@react-native-community/cli-config@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.2.tgz#fb5a840293f8c175456a986c14e2fad22e551b74" + integrity sha512-a+mGYjAd5GuKHnaYjnJ03tXbo8pRCoWyzAGIfD5gZ2JOUuQu+d0JL6TRTXX0Vt31p9HhfUB3cSuS+cTNjNT49A== dependencies: - "@react-native-community/cli-tools" "13.6.1" + "@react-native-community/cli-tools" "13.6.2" chalk "^4.1.2" cosmiconfig "^5.1.0" deepmerge "^4.3.0" fast-glob "^3.3.2" joi "^17.2.1" -"@react-native-community/cli-debugger-ui@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.1.tgz#7bb56be33d3ee2289bfbab7efa59a16a7554cd1a" - integrity sha512-3z1io3AsT1NqlJZOlqNFcrzlavBb7R+Vy5Orzruc3m/OIjc4TrGNtyzQmOfCC3peF8J3So3d6dH1a11YYUDfFw== +"@react-native-community/cli-debugger-ui@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.2.tgz#e35d33a74183a224cfb360c7f69512a9fec5e734" + integrity sha512-TQuTDauHyUIwn2f9dTnHnlVE26f8DWEw4reOrKWA7fZ4mqJ4MA3Ks424RD78aIcxkTqC4E3Z9nVsJfM42EMyyg== dependencies: serve-static "^1.13.1" -"@react-native-community/cli-doctor@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.1.tgz#64b6e64c13cf8d318fe631ebc84834fa5650adf1" - integrity sha512-jP5otBbvcItuIy8WJT8UAA0lLB+0kKtCmcfQFmcs0/NlBy04cpTtGp7w2N3F1r2Qy9sdQWGRa20IFZn8eenieQ== +"@react-native-community/cli-doctor@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.2.tgz#77381bb2839bd4fd110a4c4f5ff86359520e81ec" + integrity sha512-5T2LC4Cvg/aJCLrh0FPKIjTnxc8GXwGYBBfQ8hAdXK3j2OgNRwwlii5NGDuvd4Gj1qdiEMgaZMm50R0kY2Qv+w== dependencies: - "@react-native-community/cli-config" "13.6.1" - "@react-native-community/cli-platform-android" "13.6.1" - "@react-native-community/cli-platform-apple" "13.6.1" - "@react-native-community/cli-platform-ios" "13.6.1" - "@react-native-community/cli-tools" "13.6.1" + "@react-native-community/cli-config" "13.6.2" + "@react-native-community/cli-platform-android" "13.6.2" + "@react-native-community/cli-platform-apple" "13.6.2" + "@react-native-community/cli-platform-ios" "13.6.2" + "@react-native-community/cli-tools" "13.6.2" chalk "^4.1.2" command-exists "^1.2.8" deepmerge "^4.3.0" @@ -1600,54 +1600,54 @@ wcwidth "^1.0.1" yaml "^2.2.1" -"@react-native-community/cli-hermes@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.1.tgz#2d4de930ffbe30e02150031d33108059d51e7e17" - integrity sha512-uGzmpg3DCqXiVLArTw6LMCGoGPkdMBKUllnlvgl1Yjne6LL7NPnQ971lMVGqTX9/p3CaW5TcqYYJjnI7sxlVcA== +"@react-native-community/cli-hermes@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.2.tgz#980aa8895129dac51a68e25b1390219ff4e0875c" + integrity sha512-NEjyoUwlz/gsOmFkXYVm7glpc8tiJEPqNNRQhZzeTybcI9CSaBXcPpPj9ubuGwM3rzx+4hnwZGULrn1CQUYOfg== dependencies: - "@react-native-community/cli-platform-android" "13.6.1" - "@react-native-community/cli-tools" "13.6.1" + "@react-native-community/cli-platform-android" "13.6.2" + "@react-native-community/cli-tools" "13.6.2" chalk "^4.1.2" hermes-profile-transformer "^0.0.6" -"@react-native-community/cli-platform-android@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.1.tgz#7ddac2b257425de54ea62b6e215c06a9bfc77e53" - integrity sha512-HkrV8kCbHUdWH2LMEeSsuvl0ULI+JLmBZ2eQNEyyYOT8h+tM90OwaPLRpBFtD+yvp2/DpIKo97yCVJT5cLjBzA== +"@react-native-community/cli-platform-android@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.2.tgz#b4bcf4e1af5a9633d49f9c735e33667d65ece32c" + integrity sha512-PYECUZACr25XDRngPtCfHLeiKBz+bV/P4xmLuUJHoS/8AjX8DTepi4dANVQ5kBsHueHayNYi7cLUG6Wuv/nf3Q== dependencies: - "@react-native-community/cli-tools" "13.6.1" + "@react-native-community/cli-tools" "13.6.2" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" fast-xml-parser "^4.2.4" logkitty "^0.7.1" -"@react-native-community/cli-platform-apple@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.1.tgz#cd0d393e8328f439f453bf90fcfec48b350e2f3a" - integrity sha512-yv4iPewUwhy3uGg4uJwA03wSV/1bnEnAJNs7CQ0zl7DQZhqrhfJLhzPURtu34sMUN+Wt6S3KaBmny5kHRKTuwA== +"@react-native-community/cli-platform-apple@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.2.tgz#b7e53451c50ad3ac2e14352194281480f6b9d0ca" + integrity sha512-rzYNoo3f2hf6XksUCD2fC3DMchD01bXTekmsUscuB2UX6dIF0cDpn1mUYlOt4G2sppHNQTh8LIKsRd581k9H0g== dependencies: - "@react-native-community/cli-tools" "13.6.1" + "@react-native-community/cli-tools" "13.6.2" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" fast-xml-parser "^4.0.12" ora "^5.4.1" -"@react-native-community/cli-platform-ios@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.1.tgz#fa3e3a6494a09538f369709a376f7d6d5c7f5ae5" - integrity sha512-JwXV9qMpqJWduoEcK3pbAjkOaTqg+o0IzZz/LP7EkFCfJyg5hnDRAUZhP5ffs5/zukZIGHHPY1ZEW8jl5T2j6Q== +"@react-native-community/cli-platform-ios@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.2.tgz#90ba76abb4cd5518495f25de13d4062dffb28eaa" + integrity sha512-DSL0HISKYTtyr9M2wdMQT89ZCWGfi7UbKYMXY7/B+PEcOXEUuOwcANqfNsO0nHLX9TGpoYYI9djk9YIsDDGqZQ== dependencies: - "@react-native-community/cli-platform-apple" "13.6.1" + "@react-native-community/cli-platform-apple" "13.6.2" -"@react-native-community/cli-server-api@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.1.tgz#6be357c07339856620b0881f000bfcf72f3af68c" - integrity sha512-64eC7NuCLenYr237LyJ1H6jf+6L4NA2eXuy+634q0CeIZsAqOe7B5VCJyy2CsWWaeeUbAsC0Oy9/2o2y8/muIw== +"@react-native-community/cli-server-api@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.2.tgz#27ba135d90435c5af2af6c951b54acea61412e33" + integrity sha512-RKFx1s4vo+lLVQ7afiryCBfebLjvxF1HygcTchtWk0ttZQuT62/aMAf/LTxyHfBUNcqrYr+DAfD/Sd7VAfDO6Q== dependencies: - "@react-native-community/cli-debugger-ui" "13.6.1" - "@react-native-community/cli-tools" "13.6.1" + "@react-native-community/cli-debugger-ui" "13.6.2" + "@react-native-community/cli-tools" "13.6.2" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.1" @@ -1656,10 +1656,10 @@ serve-static "^1.13.1" ws "^7.5.1" -"@react-native-community/cli-tools@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.1.tgz#f453a3e8ef13d114c05d77dafe411bc2a82f0279" - integrity sha512-mRJmI5c/Mfi/pESUPjqElv8+t81qfi0pUr1UrIX38nS1o5Ki1D8vC9vAMkPbLaIu2RuhUuzSCfs6zW8AwakUoA== +"@react-native-community/cli-tools@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.2.tgz#dec0351c381e33157b80aa59c842c465e0102476" + integrity sha512-wOU6Us3un3chrbkDzaREF/fGysVe8fJYwB8YJXUy+HfMDS9bpxHoxp9C7IXt3QmI/OZdKrEJSgauFYSpkYnKkQ== dependencies: appdirsjs "^1.2.4" chalk "^4.1.2" @@ -1673,26 +1673,26 @@ shell-quote "^1.7.3" sudo-prompt "^9.0.0" -"@react-native-community/cli-types@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.1.tgz#565e3dec401c86e5abb436f70b3f491d0e8cb919" - integrity sha512-+ue0eaEnGTKsTpX7F/DVspGDVZz7OgN7uaanaGKJuG9+pJiIgVIXnVu546Ycq8XbWAbZuWR1PL4+SNbf6Ebqqw== +"@react-native-community/cli-types@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.2.tgz#0ef977d5f032500a8f671da9683592871c0dc74a" + integrity sha512-kxbFqTW9+xOhzLZyl+zV6KW5vmHPKoYg3LPrt9sLv7/EqyTk/30PZeI8QlHjboj8r28idOrcCxR1raaSV2qkAA== dependencies: joi "^17.2.1" -"@react-native-community/cli@13.6.1": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.1.tgz#38a250422f172559bdbaa8f6f70a75a1cb9a14d2" - integrity sha512-Q3eA7xw42o8NAkztJvjVZT9WWxtRDnYYoRkv8IEIi9m2ya3p/4ZJBNlsQO6kDjasQTERkAoGQc1CveEHEv2QsA== - dependencies: - "@react-native-community/cli-clean" "13.6.1" - "@react-native-community/cli-config" "13.6.1" - "@react-native-community/cli-debugger-ui" "13.6.1" - "@react-native-community/cli-doctor" "13.6.1" - "@react-native-community/cli-hermes" "13.6.1" - "@react-native-community/cli-server-api" "13.6.1" - "@react-native-community/cli-tools" "13.6.1" - "@react-native-community/cli-types" "13.6.1" +"@react-native-community/cli@13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.2.tgz#3a44aa38a87a35f3b5933d8bad8e08e939405fd4" + integrity sha512-ghOJ4WqKb4+Q4Yqk2YagZVZGP2UbCsIB5fPaYUKp5Cc1ExoS517LmizZNKbBQJKSFz1Zu09lRHFTd7r6Ex32HA== + dependencies: + "@react-native-community/cli-clean" "13.6.2" + "@react-native-community/cli-config" "13.6.2" + "@react-native-community/cli-debugger-ui" "13.6.2" + "@react-native-community/cli-doctor" "13.6.2" + "@react-native-community/cli-hermes" "13.6.2" + "@react-native-community/cli-server-api" "13.6.2" + "@react-native-community/cli-tools" "13.6.2" + "@react-native-community/cli-types" "13.6.2" chalk "^4.1.2" commander "^9.4.1" deepmerge "^4.3.0" @@ -1738,22 +1738,22 @@ dependencies: applicationinsights "^1.8.8" -"@react-native/assets-registry@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.0.tgz#560bec29b2699c4d4cbfecfb4c2c5025397aac23" - integrity sha512-I8Yy6bCKU5R4qZX4jfXsAPsHyuGHlulbnbG3NqO9JgZ3T2DJxJiZE39rHORP0trLnRh0rIeRcs4Mc14fAE6hrw== +"@react-native/assets-registry@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.75.tgz#58779e2a2dd0f012ad4286ef4cd5f59c53cf7cf6" + integrity sha512-1TQNmRmX0F0vhYrjqyJstmPtewFEgy9HOuE8cssuqltWbHlAqqTt2hXVYMZW5wyUL7fRdKcM0FvZJKGsT1yf+A== -"@react-native/babel-plugin-codegen@0.74.2": - version "0.74.2" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.2.tgz#ed00979923c14bba847271a690641cce67588caf" - integrity sha512-hIdPub4hOFvIRORRlKtt5FCzdl7Avl4KJ4M5sr2Iq8oOJhMl+4Gh4Kjr7t6DO5ctvFXI4IzB0Wz7FcgDOTFIbA== +"@react-native/babel-plugin-codegen@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.75.tgz#09234596c096ab0b74a28d1e71f2ec0597bb7bea" + integrity sha512-/nB19R22ywXlrP1wTtg4xXUT1ecQbDN1rD14JM0UM5ugBi9MRf/kiDm846P5/qs28fXKRWNKZ3W5SSemFiWZ6w== dependencies: - "@react-native/codegen" "0.74.2" + "@react-native/codegen" "0.74.75" -"@react-native/babel-preset@0.74.2": - version "0.74.2" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.2.tgz#25c377ed4f747baea5adeaeba3be3110c6a43093" - integrity sha512-xux1qblfc/XuJib0k5jV5Ro+XGkvwfNYrsvAD7FY+WKn8CBpovwxOvHuqk3HDYpjnIVw7zy5VgyIx+ArlBi6Wg== +"@react-native/babel-preset@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.75.tgz#8c0afa71170a6182205cc1f8d94cc7459e73ecd3" + integrity sha512-wi8Y94rjR/WYywoj/sA9zSW4vysyL6PGaBxp6eiDUtq/xrEXmxWPELZfCSC5Bcvn1fQ3NXFWJ9yFURVJ0t1ZdA== dependencies: "@babel/core" "^7.20.0" "@babel/plugin-proposal-async-generator-functions" "^7.0.0" @@ -1795,14 +1795,14 @@ "@babel/plugin-transform-typescript" "^7.5.0" "@babel/plugin-transform-unicode-regex" "^7.0.0" "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.2" + "@react-native/babel-plugin-codegen" "0.74.75" babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.14.0" -"@react-native/codegen@0.74.2": - version "0.74.2" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.2.tgz#70036e7a4f4fb83a72f74c5e25d8caaba12d8445" - integrity sha512-Es4pZtU7fHuYq9cfBhbBOCoyikga3tYKFJ++cZRJmLzt6u4zgRiKIG11WBJYT3v2F3CC/DPtOzB8XaHqLkQMBw== +"@react-native/codegen@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.75.tgz#5888f9834b3fe2c7ac5aa4a9dd478be0fd62ceb7" + integrity sha512-kkX0IA+qbqf4lyCigC8y/rQdk0GbhiCkc4MUBtX9Y5M0+Q6cb28JqWxUQ232YDT2jcwGU8rXp4ghQb9AtAS99g== dependencies: "@babel/parser" "^7.20.0" glob "^7.1.1" @@ -1812,15 +1812,15 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.74.4": - version "0.74.4" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.4.tgz#ddc397fd14691e8cc4c10612aadd77f852169af3" - integrity sha512-7soEv3NFD4BW8p10nrJdM09EUhhtM9Y17JLk8VD0NvhkysRvIjtI2XLq2KvSqTvIq+jYzjpmCK9FsV3nOlHvNQ== +"@react-native/community-cli-plugin@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.75.tgz#73eb932ba340d263b7f4556ac08015382111f274" + integrity sha512-dr/kysyJi8XP/bfYxmNi2YaBLylF38lVSIuDx4X3IX2WeZ6yNbVqU4F09vuzIdQ3BsYuALCwhF1MQyVnb+Bolw== dependencies: - "@react-native-community/cli-server-api" "13.6.1" - "@react-native-community/cli-tools" "13.6.1" - "@react-native/dev-middleware" "0.74.2" - "@react-native/metro-babel-transformer" "0.74.2" + "@react-native-community/cli-server-api" "13.6.2" + "@react-native-community/cli-tools" "13.6.2" + "@react-native/dev-middleware" "0.74.75" + "@react-native/metro-babel-transformer" "0.74.75" chalk "^4.0.0" execa "^5.1.1" metro "^0.80.3" @@ -1830,18 +1830,18 @@ querystring "^0.2.1" readline "^1.3.0" -"@react-native/debugger-frontend@0.74.1": - version "0.74.1" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.1.tgz#fc512b916830cfeffb0413f0d343282dddd66720" - integrity sha512-XgJmnnCkuifquEGqGhYSwM7jqXfU7oaP/k7YZBMyknj1QI8sW4pXKHjWW9bM0wKeAC/CptN+0+r4v8C4Qdp36g== +"@react-native/debugger-frontend@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.75.tgz#092bb666f89fa4b29ef3c149b30c98290e4893e7" + integrity sha512-beW3B8gXrXyeD1SfGAUf+5NIN0tIn5ayOKRNYaiOhXndY/3PrGD4SXphIFpOL/j7yBD/8z40qGZWGR74r9Xp+w== -"@react-native/dev-middleware@0.74.2": - version "0.74.2" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.2.tgz#c03bfdffe91afb725e7a80ae21622be7addc1c79" - integrity sha512-r0NsyHpb4K/andsF6t3FABvO/6Q5QvPxrPXZP+xfcvicftUS9jOrAHBkBo9xr/D0hy/k1A8KcoibrPcM4l/2zw== +"@react-native/dev-middleware@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.75.tgz#0e42fd0f56343b106077add59f6606b760895d61" + integrity sha512-OfqrKHmVh3CH/XaHj7R8TJUCOj3XkCdP31pBzeO/Eab3mh6sJ7rsf8d89rqKjnqn01g6Yhgpg6nL/8LNBMYsLw== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.1" + "@react-native/debugger-frontend" "0.74.75" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -1854,14 +1854,14 @@ temp-dir "^2.0.0" ws "^6.2.2" -"@react-native/eslint-config@^0.74.1": - version "0.74.1" - resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.74.1.tgz#4b2c2ba933b1a007f0359e807a85ccf7eae649de" - integrity sha512-l3+nodpdPh6JdilxZa0fje6+wOeI3eCbWoZ/gduJk2+FYNT93GbG39s66ui8YHhA43NbCYxp0+Xd+HVDB9HmVQ== +"@react-native/eslint-config@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/eslint-config/-/eslint-config-0.74.75.tgz#57b8be14065aa1d3b131425485e7064b6fd80594" + integrity sha512-7b8SLODGGRwWuSLr5LXkqh07ImC/wFPuVGJ2MaGF/GTD+SfsyUOVM3nE8BuxCdaY2vTpxfLQ4Z/nd6ESePGyxA== dependencies: "@babel/core" "^7.20.0" "@babel/eslint-parser" "^7.20.0" - "@react-native/eslint-plugin" "0.74.1" + "@react-native/eslint-plugin" "0.74.75" "@typescript-eslint/eslint-plugin" "^6.7.4" "@typescript-eslint/parser" "^6.7.4" eslint-config-prettier "^8.5.0" @@ -1873,55 +1873,55 @@ eslint-plugin-react-hooks "^4.6.0" eslint-plugin-react-native "^4.0.0" -"@react-native/eslint-plugin@0.74.1": - version "0.74.1" - resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.1.tgz#b7f419d42999641e681924cb1c03164433675ec3" - integrity sha512-+9RWKyyVmDY4neXx6Z5OtxxYco4OGXpkzNDayAJtYi7A0zcKjb1VZC25+SVRkRt+/39lYMT7WtWA4dsHEPsdng== +"@react-native/eslint-plugin@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.74.75.tgz#e491e8db44728440d6d2ea5b3cc06e4063daf828" + integrity sha512-UbypjVr2WqXx0XHaKSyx+vt5bOeloJK1TjJVfsn6b7M5jP+YZtIpEbQEFnR56FYo3TSk/6MrZjnu9hC0n4OmfA== -"@react-native/gradle-plugin@0.74.1": - version "0.74.1" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.1.tgz#b4479b16e75e1798b6acbc035f352a0ab940804e" - integrity sha512-RJCuq9bSmWv0MUWsLhtanZzyZ/asntThfq9qbYjQilN4B6oVWG0K/n+iLRfPmFuuZUineBGMG/NUkQeFDmmmYw== +"@react-native/gradle-plugin@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.75.tgz#c11deb0f4cfc891b672050bbccd6dd373944f0fb" + integrity sha512-Un1RSvuPj/4nkQnaYA/EOtUyTlaIRzBzRxobC9ONHvHgmQVBA4JkUFbSfNQutajYu3sEwG16huLokEHeZICRHw== -"@react-native/js-polyfills@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.0.tgz#54f7d728b6c8ea52d29993d86d2a9d4be08072d2" - integrity sha512-DMpn5l1TVkIBFe9kE54pwOI2fQYbQNZ6cto0IuCUxQVUFJBcFMJ6Gbk8jhz8tvcWuDW3xVK9AWq9DJTkuchWsQ== +"@react-native/js-polyfills@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.75.tgz#87edbb37d1d6f72d6767d59a53b6f49b61982550" + integrity sha512-PxoeNwqxeIMPOK1od0y3ZkvL/xq1WBjJeyqar/jkJRKYcK9SWtpXEA1pc4RdIhqbd0QZOg+8X0eGSxetLF8F4w== -"@react-native/metro-babel-transformer@0.74.2": - version "0.74.2" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.2.tgz#8a412cc8e964b1262a5098038dbb0a98cef770f2" - integrity sha512-lxYYz/FkPR0ByDgzAhVpMWRvwaRTSohKZll9+dgYEy5MeRP0RkzJto4Y2ISL60R6DmP2daC/xmKktIx9RoLdKw== +"@react-native/metro-babel-transformer@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.75.tgz#34d34f50039103efc1830d3b0b935b7a1b9ef1c3" + integrity sha512-4P4gvSd5I+Pl9cHKbAbo9W1VPqe1ZE4jbuhzBmks6ZibuXB2C5crNQGhLOuos8cExsobCJ3nEiNogfzBKPSahQ== dependencies: "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.74.2" + "@react-native/babel-preset" "0.74.75" hermes-parser "0.19.1" nullthrows "^1.1.1" -"@react-native/metro-config@^0.74.2": - version "0.74.2" - resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.74.2.tgz#234053da15de5da51f31a596970ab17ec34a4519" - integrity sha512-Ix0Q3dakJl3TKpOrxIYshvEBpFjhY05zNyyNAsRMSm7TKy0aEECTgic5VOK0CdhgY0vmOlVuyFazWHiNj8imIw== +"@react-native/metro-config@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/metro-config/-/metro-config-0.74.75.tgz#7cc2fe66450a6ba1e9dfeb7c1fe1b28140c321f0" + integrity sha512-BT0F4HZ6WUUGk/6HLOpiBOihpowsmDE+efAB1ZlsANVEmQy8WJCZzXzDOlZuFXEVZeSGmY6OM0optIxgs40QzA== dependencies: - "@react-native/js-polyfills" "0.74.0" - "@react-native/metro-babel-transformer" "0.74.2" + "@react-native/js-polyfills" "0.74.75" + "@react-native/metro-babel-transformer" "0.74.75" metro-config "^0.80.3" metro-runtime "^0.80.3" -"@react-native/normalize-colors@0.74.1": - version "0.74.1" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.1.tgz#6e8ccf99954728dcd3cfe0d56e758ee5050a7bea" - integrity sha512-r+bTRs6pImqE3fx4h7bPzH2sOWSrnSHF/RJ7d00pNUj2P6ws3DdhS7WV+/7YosZkloYQfkiIkK3pIHvcYn665w== +"@react-native/normalize-colors@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.75.tgz#7144e0a423fa508e9b644d79bf7b198deb4ea147" + integrity sha512-KB+md76UwZ32vuZbvjOXeuxHVIc8hAOTJGqvAiNhIxUUBx3w7/0mQzIHBVql5eKPlBOtklwvef/99TuFmN9dqA== -"@react-native/typescript-config@^0.74.1": - version "0.74.1" - resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.74.1.tgz#bf7c0c31743dc24ed4dbedf0d3b7c4664aa80cfb" - integrity sha512-CMHWXa7363T78MiKsszhbovctFy2SzSrSuG0Ejol8QcGbSpt7WWR/FzK43036wK2eOagzCGHNNqyhzOml/ZutA== +"@react-native/typescript-config@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.74.75.tgz#165e64ad35ec3262679e79d4d101ba9cc021b953" + integrity sha512-p6mVKSDYi9vZtuJ/kG9UmpGhKb6NGkJOTjuGGToCY6bCdS5pwLqFWR1Qo++CFbwx37w2TEiotRvSBEa3CJwEUA== -"@react-native/virtualized-lists@0.74.1": - version "0.74.1" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.1.tgz#ef9263be8885223b39dc6b03c6488a761ff60372" - integrity sha512-ZZCZ/F1g6vcTIoqfgYxxMvITV6Jg5GMLg5D0wrJoPLkF/+tEM4sXbHqlquqhGHdbmZRW6C4u4AvB4NvpQpR3mQ== +"@react-native/virtualized-lists@0.74.75": + version "0.74.75" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.75.tgz#7c3d33c172eca6ceabe2e20cb178dd7c0d6095d3" + integrity sha512-o8ggn0bUBplyQoLuvrSjmkAyaQfSBjam2ZuvxJ3CGdJ8fyOiNGTcKVq0ZdyRsiJo1eTIZOMj3XegfkDeZMcVdA== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" @@ -6249,22 +6249,22 @@ react-native-windows@0.63.41: use-subscription "^1.0.0" whatwg-fetch "^3.0.0" -react-native@0.74.0-rc.2: - version "0.74.0-rc.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.0-rc.2.tgz#cac4400d0842ab2061cfa37fd364249eb24706ca" - integrity sha512-0fo2/JFMyZY/rgfy/Ld1W+71zd0qKRD6d+hQVNSnmknkMNlKreWns+XTFO8qcUJrPox8dcUKH+lTCad+rd4uUA== +react-native@0.74.0-rc.4: + version "0.74.0-rc.4" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.0-rc.4.tgz#8983862b0b66d00606a343c0ea4cf59e82545cc1" + integrity sha512-uptd+VdE9mS00Gatzh1f2ZEcHk8e4DYeiHg8TsQGoAP7PRlQUlt11WexBOBLztSo+n/K4v6NpE6iikR6JCapnA== dependencies: "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "13.6.1" - "@react-native-community/cli-platform-android" "13.6.1" - "@react-native-community/cli-platform-ios" "13.6.1" - "@react-native/assets-registry" "0.74.0" - "@react-native/codegen" "0.74.2" - "@react-native/community-cli-plugin" "0.74.4" - "@react-native/gradle-plugin" "0.74.1" - "@react-native/js-polyfills" "0.74.0" - "@react-native/normalize-colors" "0.74.1" - "@react-native/virtualized-lists" "0.74.1" + "@react-native-community/cli" "13.6.2" + "@react-native-community/cli-platform-android" "13.6.2" + "@react-native-community/cli-platform-ios" "13.6.2" + "@react-native/assets-registry" "0.74.75" + "@react-native/codegen" "0.74.75" + "@react-native/community-cli-plugin" "0.74.75" + "@react-native/gradle-plugin" "0.74.75" + "@react-native/js-polyfills" "0.74.75" + "@react-native/normalize-colors" "0.74.75" + "@react-native/virtualized-lists" "0.74.75" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" From 098358076ddaba387284c1757a80bfcc5d82191f Mon Sep 17 00:00:00 2001 From: YangJH Date: Tue, 26 Mar 2024 21:55:11 +0900 Subject: [PATCH 07/23] fix(iOS): throw when content id defined with empty string (#3612) --- ios/Video/Features/RCTVideoDRM.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ios/Video/Features/RCTVideoDRM.swift b/ios/Video/Features/RCTVideoDRM.swift index cea37a1afd..d3cf2ec60b 100644 --- a/ios/Video/Features/RCTVideoDRM.swift +++ b/ios/Video/Features/RCTVideoDRM.swift @@ -149,7 +149,9 @@ enum RCTVideoDRM { ) -> Promise { let url = loadingRequest.request.url - guard let contentId = contentId ?? url?.absoluteString.replacingOccurrences(of: "skd://", with: "") else { + let parsedContentId = contentId != nil && !contentId!.isEmpty ? contentId : nil + + guard let contentId = parsedContentId ?? url?.absoluteString.replacingOccurrences(of: "skd://", with: "") else { return Promise(RCTVideoError.invalidContentId as! Error) } From c9a75f3cde82f55e612b9e2c30ca06db3093b283 Mon Sep 17 00:00:00 2001 From: YangJH Date: Tue, 26 Mar 2024 21:56:22 +0900 Subject: [PATCH 08/23] fix(iOS): fix iOS DRM header parser (#3609) --- ios/Video/DataStructures/DRMParams.swift | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ios/Video/DataStructures/DRMParams.swift b/ios/Video/DataStructures/DRMParams.swift index b0baba49e5..ce91d4dc34 100644 --- a/ios/Video/DataStructures/DRMParams.swift +++ b/ios/Video/DataStructures/DRMParams.swift @@ -25,6 +25,16 @@ struct DRMParams { self.contentId = json["contentId"] as? String self.certificateUrl = json["certificateUrl"] as? String self.base64Certificate = json["base64Certificate"] as? Bool - self.headers = json["headers"] as? [String: Any] + if let headers = json["headers"] as? [[String: Any]] { + var _headers: [String: Any] = [:] + for header in headers { + if let key = header["key"] as? String, let value = header["value"] { + _headers[key] = value + } + } + self.headers = _headers + } else { + self.headers = nil + } } } From bb9e7eb5a5d68de1d8945be2f3fa089ca6ce2465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Kueny?= Date: Tue, 26 Mar 2024 14:10:31 +0100 Subject: [PATCH 09/23] fix(ios): fix PiP callback (#3601) --- ios/Video/Features/RCTPictureInPicture.swift | 20 +++++++++++++------- ios/Video/RCTVideo.swift | 10 ++++++---- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/ios/Video/Features/RCTPictureInPicture.swift b/ios/Video/Features/RCTPictureInPicture.swift index 0ecc37b37b..6f5ef79ece 100644 --- a/ios/Video/Features/RCTPictureInPicture.swift +++ b/ios/Video/Features/RCTPictureInPicture.swift @@ -6,27 +6,33 @@ import React #if os(iOS) class RCTPictureInPicture: NSObject, AVPictureInPictureControllerDelegate { - private var _onPictureInPictureStatusChanged: (() -> Void)? + private var _onPictureInPictureEnter: (() -> Void)? + private var _onPictureInPictureExit: (() -> Void)? private var _onRestoreUserInterfaceForPictureInPictureStop: (() -> Void)? private var _restoreUserInterfaceForPIPStopCompletionHandler: ((Bool) -> Void)? private var _pipController: AVPictureInPictureController? private var _isActive = false - init(_ onPictureInPictureStatusChanged: (() -> Void)? = nil, _ onRestoreUserInterfaceForPictureInPictureStop: (() -> Void)? = nil) { - _onPictureInPictureStatusChanged = onPictureInPictureStatusChanged + init( + _ onPictureInPictureEnter: (() -> Void)? = nil, + _ onPictureInPictureExit: (() -> Void)? = nil, + _ onRestoreUserInterfaceForPictureInPictureStop: (() -> Void)? = nil + ) { + _onPictureInPictureEnter = onPictureInPictureEnter + _onPictureInPictureExit = onPictureInPictureExit _onRestoreUserInterfaceForPictureInPictureStop = onRestoreUserInterfaceForPictureInPictureStop } func pictureInPictureControllerDidStartPictureInPicture(_: AVPictureInPictureController) { - guard let _onPictureInPictureStatusChanged else { return } + guard let _onPictureInPictureEnter else { return } - _onPictureInPictureStatusChanged() + _onPictureInPictureEnter() } func pictureInPictureControllerDidStopPictureInPicture(_: AVPictureInPictureController) { - guard let _onPictureInPictureStatusChanged else { return } + guard let _onPictureInPictureExit else { return } - _onPictureInPictureStatusChanged() + _onPictureInPictureExit() } func pictureInPictureController( diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index efad295fca..4738103c98 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -120,12 +120,12 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH @objc var onTextTrackDataChanged: RCTDirectEventBlock? @objc - func _onPictureInPictureStatusChanged() { + func _onPictureInPictureEnter() { onPictureInPictureStatusChanged?(["isActive": NSNumber(value: true)]) } @objc - func _onRestoreUserInterfaceForPictureInPictureStop() { + func _onPictureInPictureExit() { onPictureInPictureStatusChanged?(["isActive": NSNumber(value: false)]) } @@ -143,9 +143,11 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH #if os(iOS) _pip = RCTPictureInPicture({ [weak self] in - self?._onPictureInPictureStatusChanged() + self?._onPictureInPictureEnter() }, { [weak self] in - self?._onRestoreUserInterfaceForPictureInPictureStop() + self?._onPictureInPictureExit() + }, { [weak self] in + self?.onRestoreUserInterfaceForPictureInPictureStop?([:]) }) #endif From 89ae8438fa1d90700a462b117aa9af42780c6268 Mon Sep 17 00:00:00 2001 From: YangJH Date: Wed, 27 Mar 2024 07:41:49 +0900 Subject: [PATCH 10/23] fix: fix getLicense function's type definition (#3606) * fix(type): fix getLicense type definition --- src/types/video.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/types/video.ts b/src/types/video.ts index 5f505118b0..010be36ee8 100644 --- a/src/types/video.ts +++ b/src/types/video.ts @@ -55,10 +55,10 @@ export type Drm = Readonly<{ base64Certificate?: boolean; // ios default: false /* eslint-disable @typescript-eslint/no-unused-vars */ getLicense?: ( + spcBase64: string, + contentId: string, licenseUrl: string, loadedLicenseUrl: string, - contentId: string, - spcBase64: string, ) => void; // ios /* eslint-enable @typescript-eslint/no-unused-vars */ }>; From 38746ff2bacfcb5a25ef0c671014d5c071cc9455 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Thu, 28 Mar 2024 10:40:13 +0100 Subject: [PATCH 11/23] doc: improve network tracing description (#3618) --- docs/pages/other/debug.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/pages/other/debug.md b/docs/pages/other/debug.md index 0e2c7417e3..6b54df7584 100644 --- a/docs/pages/other/debug.md +++ b/docs/pages/other/debug.md @@ -34,11 +34,12 @@ Usually clear playback can be read with all Video player. Then you should ensure If content is protected with an access token or any other http header, ensure you can access to you data with a wget call or a rest client app. You need to provide all needed access token / authentication parameters. -## Everything seems correct but content cannot be accessed +## I need to debug network calls but I don't see them in react native debugging tools -You need to record network trace to ensure communications with server is correct. -[Charles proxy](https://www.charlesproxy.com/) is a simple and useful tool to sniff all http/https calls. -With this tool you should be able to analyze what is going on with network. You will see all access to content and DRM, audio / video chunks, ... +This is a react native limitation. React native tools can only see network calls done in JS. +To achieve that, you need to record network trace to ensure communications with server is correct. +[Charles proxy](https://www.charlesproxy.com/) or [Fiddler](https://www.telerik.com/fiddler) are a simple and useful tool to sniff all http/https calls. +With these tool you should be able to analyze what is going on with network. You will see all access to content and DRM, audio / video chunks, ... Then try to compare exchanges with previous tests you made. From 0312afc8ea27f8c82ef7ba9fecbde23174e68671 Mon Sep 17 00:00:00 2001 From: Krzysztof Moch Date: Thu, 28 Mar 2024 11:22:04 +0100 Subject: [PATCH 12/23] fix: remove `setNativeProps` usage (#3605) * fix: remove `setNativeProps` usage * code review --- .../exoplayer/ReactExoplayerViewManager.java | 6 -- .../brentvatne/react/VideoManagerModule.java | 38 -------- .../brentvatne/react/VideoManagerModule.kt | 59 ++++++++++++ ios/Video/RCTVideoManager.m | 3 +- ios/Video/RCTVideoManager.swift | 91 +++++++++---------- src/Video.tsx | 25 ++--- src/specs/VideoNativeComponent.ts | 1 + 7 files changed, 118 insertions(+), 105 deletions(-) delete mode 100644 android/src/main/java/com/brentvatne/react/VideoManagerModule.java create mode 100644 android/src/main/java/com/brentvatne/react/VideoManagerModule.kt diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java index 3b2e8c5fa9..27b3f99dfc 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -70,7 +70,6 @@ public class ReactExoplayerViewManager extends ViewGroupManager { - View view = manager.resolveView(reactTag); - - if (view instanceof ReactExoplayerView) { - ReactExoplayerView videoView = (ReactExoplayerView) view; - videoView.setPausedModifier(paused); - } - }); - } -} diff --git a/android/src/main/java/com/brentvatne/react/VideoManagerModule.kt b/android/src/main/java/com/brentvatne/react/VideoManagerModule.kt new file mode 100644 index 0000000000..2680756b68 --- /dev/null +++ b/android/src/main/java/com/brentvatne/react/VideoManagerModule.kt @@ -0,0 +1,59 @@ +package com.brentvatne.react + +import com.brentvatne.common.toolbox.ReactBridgeUtils +import com.brentvatne.exoplayer.ReactExoplayerView +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.UiThreadUtil +import com.facebook.react.uimanager.UIManagerModule +import kotlin.math.roundToInt + +class VideoManagerModule(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext) { + override fun getName(): String { + return REACT_CLASS + } + + private fun performOnPlayerView(reactTag: Int, callback: (ReactExoplayerView?) -> Unit) { + UiThreadUtil.runOnUiThread { + val view = if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + reactApplicationContext.fabricUIManager?.resolveView( + reactTag + ) + } else { + val uiManager = reactApplicationContext.getNativeModule(UIManagerModule::class.java) + uiManager?.resolveView(reactTag) + } + + if (view is ReactExoplayerView) { + callback(view) + } else { + callback(null) + } + } + } + + @ReactMethod + fun setPlayerPauseState(paused: Boolean?, reactTag: Int) { + performOnPlayerView(reactTag) { + it?.setPausedModifier(paused!!) + } + } + + @ReactMethod + fun seek(info: ReadableMap, reactTag: Int) { + if (!info.hasKey("time")) { + return + } + + val time = ReactBridgeUtils.safeGetInt(info, "time") + performOnPlayerView(reactTag) { + it?.seekTo((time * 1000f).roundToInt().toLong()) + } + } + + companion object { + private const val REACT_CLASS = "VideoManager" + } +} diff --git a/ios/Video/RCTVideoManager.m b/ios/Video/RCTVideoManager.m index de1140ef16..b5856b22d6 100644 --- a/ios/Video/RCTVideoManager.m +++ b/ios/Video/RCTVideoManager.m @@ -28,7 +28,6 @@ @interface RCT_EXTERN_MODULE (RCTVideoManager, RCTViewManager) RCT_EXPORT_VIEW_PROPERTY(ignoreSilentSwitch, NSString); RCT_EXPORT_VIEW_PROPERTY(mixWithOthers, NSString); RCT_EXPORT_VIEW_PROPERTY(rate, float); -RCT_EXPORT_VIEW_PROPERTY(seek, NSDictionary); RCT_EXPORT_VIEW_PROPERTY(fullscreen, BOOL); RCT_EXPORT_VIEW_PROPERTY(fullscreenAutorotate, BOOL); RCT_EXPORT_VIEW_PROPERTY(fullscreenOrientation, NSString); @@ -74,6 +73,8 @@ @interface RCT_EXTERN_MODULE (RCTVideoManager, RCTViewManager) : (RCTPromiseResolveBlock)resolve rejecter : (RCTPromiseRejectBlock)reject) +RCT_EXTERN_METHOD(seek : (NSDictionary*)info reactTag : (nonnull NSNumber*)reactTag) + RCT_EXTERN_METHOD(setLicenseResult : (NSString*)license licenseUrl : (NSString*)licenseUrl reactTag : (nonnull NSNumber*)reactTag) RCT_EXTERN_METHOD(setLicenseResultError : (NSString*)error licenseUrl : (NSString*)licenseUrl reactTag : (nonnull NSNumber*)reactTag) diff --git a/ios/Video/RCTVideoManager.swift b/ios/Video/RCTVideoManager.swift index e2055c022d..94dfcc4c1b 100644 --- a/ios/Video/RCTVideoManager.swift +++ b/ios/Video/RCTVideoManager.swift @@ -11,77 +11,70 @@ class RCTVideoManager: RCTViewManager { return bridge.uiManager.methodQueue } - @objc(save:reactTag:resolver:rejecter:) - func save(options: NSDictionary, reactTag: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { - bridge.uiManager.prependUIBlock { _, viewRegistry in - let view = viewRegistry?[reactTag] - if !(view is RCTVideo) { - RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view)) - } else if let view = view as? RCTVideo { - view.save(options: options, resolve: resolve, reject: reject) + func performOnVideoView(withReactTag reactTag: NSNumber, callback: @escaping (RCTVideo?) -> Void) { + DispatchQueue.main.async { [weak self] in + guard let self else { + callback(nil) + return + } + + guard let view = self.bridge.uiManager.view(forReactTag: reactTag) as? RCTVideo else { + RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: \(String(describing: view))") + callback(nil) + return } + + callback(view) } } + @objc(save:reactTag:resolver:rejecter:) + func save(options: NSDictionary, reactTag: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + performOnVideoView(withReactTag: reactTag, callback: { videoView in + videoView?.save(options: options, resolve: resolve, reject: reject) + }) + } + + @objc(seek:reactTag:) + func seek(info: NSDictionary, reactTag: NSNumber) { + performOnVideoView(withReactTag: reactTag, callback: { videoView in + videoView?.setSeek(info) + }) + } + @objc(setLicenseResult:licenseUrl:reactTag:) func setLicenseResult(license: NSString, licenseUrl: NSString, reactTag: NSNumber) { - bridge.uiManager.prependUIBlock { _, viewRegistry in - let view = viewRegistry?[reactTag] - if !(view is RCTVideo) { - RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view)) - } else if let view = view as? RCTVideo { - view.setLicenseResult(license as String, licenseUrl as String) - } - } + performOnVideoView(withReactTag: reactTag, callback: { videoView in + videoView?.setLicenseResult(license as String, licenseUrl as String) + }) } @objc(setLicenseResultError:licenseUrl:reactTag:) func setLicenseResultError(error: NSString, licenseUrl: NSString, reactTag: NSNumber) { - bridge.uiManager.prependUIBlock { _, viewRegistry in - let view = viewRegistry?[reactTag] - if !(view is RCTVideo) { - RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view)) - } else if let view = view as? RCTVideo { - view.setLicenseResultError(error as String, licenseUrl as String) - } - } + performOnVideoView(withReactTag: reactTag, callback: { videoView in + videoView?.setLicenseResultError(error as String, licenseUrl as String) + }) } @objc(dismissFullscreenPlayer:) func dismissFullscreenPlayer(_ reactTag: NSNumber) { - bridge.uiManager.prependUIBlock { _, viewRegistry in - let view = viewRegistry?[reactTag] - if !(view is RCTVideo) { - RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view)) - } else if let view = view as? RCTVideo { - view.dismissFullscreenPlayer() - } - } + performOnVideoView(withReactTag: reactTag, callback: { videoView in + videoView?.dismissFullscreenPlayer() + }) } @objc(presentFullscreenPlayer:) func presentFullscreenPlayer(_ reactTag: NSNumber) { - bridge.uiManager.prependUIBlock { _, viewRegistry in - let view = viewRegistry?[reactTag] - if !(view is RCTVideo) { - RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view)) - } else if let view = view as? RCTVideo { - view.presentFullscreenPlayer() - } - } + performOnVideoView(withReactTag: reactTag, callback: { videoView in + videoView?.presentFullscreenPlayer() + }) } @objc(setPlayerPauseState:reactTag:) func setPlayerPauseState(paused: NSNumber, reactTag: NSNumber) { - bridge.uiManager.prependUIBlock { _, viewRegistry in - let view = viewRegistry?[reactTag] - if !(view is RCTVideo) { - RCTLogError("Invalid view returned from registry, expecting RCTVideo, got: %@", String(describing: view)) - } else if let view = view as? RCTVideo { - let paused = paused.boolValue - view.setPaused(paused) - } - } + performOnVideoView(withReactTag: reactTag, callback: { videoView in + videoView?.setPaused(paused.boolValue) + }) } override class func requiresMainQueueSetup() -> Bool { diff --git a/src/Video.tsx b/src/Video.tsx index e496efc26e..fac54d25a8 100644 --- a/src/Video.tsx +++ b/src/Video.tsx @@ -227,19 +227,22 @@ const Video = forwardRef( return; } + const callSeekFunction = () => { + VideoManager.seek( + { + time, + tolerance: tolerance || 0, + }, + getReactTag(nativeRef), + ); + }; + Platform.select({ - ios: () => { - nativeRef.current?.setNativeProps({ - seek: { - time, - tolerance: tolerance || 0, - }, - }); - }, + ios: callSeekFunction, + android: callSeekFunction, default: () => { - nativeRef.current?.setNativeProps({ - seek: time, - }); + // TODO: Implement VideoManager.seek for windows + nativeRef.current?.setNativeProps({seek: time}); }, })(); }, []); diff --git a/src/specs/VideoNativeComponent.ts b/src/specs/VideoNativeComponent.ts index 6d718b8d28..fd53d328f7 100644 --- a/src/specs/VideoNativeComponent.ts +++ b/src/specs/VideoNativeComponent.ts @@ -537,6 +537,7 @@ export type VideoSaveData = { export interface VideoManagerType { save: (option: object, reactTag: number) => Promise; + seek: (option: Seek, reactTag: number) => Promise; setPlayerPauseState: (paused: boolean, reactTag: number) => Promise; setLicenseResult: ( result: string, From 24c1aab3f5ab6d2d753199ea16e01c993cc3ef7d Mon Sep 17 00:00:00 2001 From: YangJH Date: Thu, 28 Mar 2024 19:22:52 +0900 Subject: [PATCH 13/23] fix: inject onGetLicense prop properly for detect user defined or not (#3608) * fix: inject onGetLicense prop properly for detect user defined or not * fix: fix lint error --- src/Video.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Video.tsx b/src/Video.tsx index fac54d25a8..490f76785b 100644 --- a/src/Video.tsx +++ b/src/Video.tsx @@ -432,9 +432,11 @@ const Video = forwardRef( [onAspectRatio], ); + const useExternalGetLicense = drm?.getLicense instanceof Function; + const onGetLicense = useCallback( (event: NativeSyntheticEvent) => { - if (drm && drm.getLicense instanceof Function) { + if (useExternalGetLicense) { const data = event.nativeEvent; if (data && data.spcBase64) { const getLicenseOverride = drm.getLicense( @@ -479,7 +481,7 @@ const Video = forwardRef( } } }, - [drm], + [drm, useExternalGetLicense], ); useImperativeHandle( @@ -521,7 +523,7 @@ const Video = forwardRef( selectedTextTrack={_selectedTextTrack} selectedAudioTrack={_selectedAudioTrack} selectedVideoTrack={_selectedVideoTrack} - onGetLicense={onGetLicense} + onGetLicense={useExternalGetLicense ? onGetLicense : undefined} onVideoLoad={onVideoLoad} onVideoLoadStart={onVideoLoadStart} onVideoError={onVideoError} From f10511d9534257a8fc9a4a47978d9c844428f1f7 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Thu, 28 Mar 2024 21:33:17 +0100 Subject: [PATCH 14/23] fix(android): improve and backBufferDurationMs. mainly let exoplayer manage the prop (#3619) BREAKING CHANGE: move backBufferDurationMs from root props to bufferConfig --- .../exoplayer/ReactExoplayerView.java | 19 +++---------------- .../exoplayer/ReactExoplayerViewManager.java | 11 ++++------- docs/pages/component/props.mdx | 11 +++-------- src/specs/VideoNativeComponent.ts | 2 +- src/types/video.ts | 2 +- 5 files changed, 12 insertions(+), 33 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index c13118aade..41eb06e8e3 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -191,6 +191,7 @@ public class ReactExoplayerView extends FrameLayout implements private int maxBufferMs = DefaultLoadControl.DEFAULT_MAX_BUFFER_MS; private int bufferForPlaybackMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS; private int bufferForPlaybackAfterRebufferMs = DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS; + private int backBufferDurationMs = DefaultLoadControl.DEFAULT_BACK_BUFFER_DURATION_MS; private double maxHeapAllocationPercent = ReactExoplayerView.DEFAULT_MAX_HEAP_ALLOCATION_PERCENT; private double minBackBufferMemoryReservePercent = ReactExoplayerView.DEFAULT_MIN_BACK_BUFFER_MEMORY_RESERVE; private double minBufferMemoryReservePercent = ReactExoplayerView.DEFAULT_MIN_BUFFER_MEMORY_RESERVE; @@ -198,7 +199,6 @@ public class ReactExoplayerView extends FrameLayout implements private Runnable mainRunnable; // Props from React - private int backBufferDurationMs = DefaultLoadControl.DEFAULT_BACK_BUFFER_DURATION_MS; private Uri srcUri; private long startPositionMs = -1; private long cropStartMs = -1; @@ -1944,20 +1944,6 @@ public void setFocusable(boolean focusable) { exoPlayerView.setFocusable(this.focusable); } - public void setBackBufferDurationMs(int backBufferDurationMs) { - Runtime runtime = Runtime.getRuntime(); - long usedMemory = runtime.totalMemory() - runtime.freeMemory(); - long freeMemory = runtime.maxMemory() - usedMemory; - long reserveMemory = (long)minBackBufferMemoryReservePercent * runtime.maxMemory(); - if (reserveMemory > freeMemory) { - // We don't have enough memory in reserve so we will - DebugLog.w("ExoPlayer Warning", "Not enough reserve memory, setting back buffer to 0ms to reduce memory pressure!"); - this.backBufferDurationMs = 0; - return; - } - this.backBufferDurationMs = backBufferDurationMs; - } - public void setContentStartTime(int contentStartTime) { this.contentStartTime = contentStartTime; } @@ -2043,7 +2029,7 @@ public void setHideShutterView(boolean hideShutterView) { exoPlayerView.setHideShutterView(hideShutterView); } - public void setBufferConfig(int newMinBufferMs, int newMaxBufferMs, int newBufferForPlaybackMs, int newBufferForPlaybackAfterRebufferMs, double newMaxHeapAllocationPercent, double newMinBackBufferMemoryReservePercent, double newMinBufferMemoryReservePercent) { + public void setBufferConfig(int newMinBufferMs, int newMaxBufferMs, int newBufferForPlaybackMs, int newBufferForPlaybackAfterRebufferMs, double newMaxHeapAllocationPercent, double newMinBackBufferMemoryReservePercent, double newMinBufferMemoryReservePercent, int newBackBufferDurationMs) { minBufferMs = newMinBufferMs; maxBufferMs = newMaxBufferMs; bufferForPlaybackMs = newBufferForPlaybackMs; @@ -2051,6 +2037,7 @@ public void setBufferConfig(int newMinBufferMs, int newMaxBufferMs, int newBuffe maxHeapAllocationPercent = newMaxHeapAllocationPercent; minBackBufferMemoryReservePercent = newMinBackBufferMemoryReservePercent; minBufferMemoryReservePercent = newMinBufferMemoryReservePercent; + backBufferDurationMs = newBackBufferDurationMs; releasePlayer(); initializePlayer(); } diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java index 27b3f99dfc..a6993c3215 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java @@ -58,7 +58,6 @@ public class ReactExoplayerViewManager extends ViewGroupManager - -The number of milliseconds of buffer to keep before the current position. This allows rewinding without rebuffering within that duration. - ### `bufferConfig` @@ -76,11 +70,11 @@ Adjust the buffer settings. This prop takes an object with one or more of the pr | maxBufferMs | number | The default maximum duration of media that the player will attempt to buffer, in milliseconds. | | bufferForPlaybackMs | number | The default duration of media that must be buffered for playback to start or resume following a user action such as a seek, in milliseconds. | | bufferForPlaybackAfterRebufferMs | number | The default duration of media that must be buffered for playback to resume after a rebuffer, in milliseconds. A rebuffer is defined to be caused by buffer depletion rather than a user action. | +| backBufferDurationMs | number | The number of milliseconds of buffer to keep before the current position. This allows rewinding without rebuffering within that duration. | | maxHeapAllocationPercent | number | The percentage of available heap that the video can use to buffer, between 0 and 1 | | minBackBufferMemoryReservePercent | number | The percentage of available app memory at which during startup the back buffer will be disabled, between 0 and 1 | | minBufferMemoryReservePercent | number | The percentage of available app memory to keep in reserve that prevents buffer from using it, between 0 and 1 | -This prop should only be set when you are setting the source, changing it after the media is loaded will cause it to be reloaded. Example with default values: @@ -89,7 +83,8 @@ bufferConfig={{ minBufferMs: 15000, maxBufferMs: 50000, bufferForPlaybackMs: 2500, - bufferForPlaybackAfterRebufferMs: 5000 + bufferForPlaybackAfterRebufferMs: 5000, + backBufferDurationMs: 120000, }} ``` diff --git a/src/specs/VideoNativeComponent.ts b/src/specs/VideoNativeComponent.ts index fd53d328f7..53e65bd288 100644 --- a/src/specs/VideoNativeComponent.ts +++ b/src/specs/VideoNativeComponent.ts @@ -108,6 +108,7 @@ type BufferConfig = Readonly<{ bufferForPlaybackMs?: Float; bufferForPlaybackAfterRebufferMs?: Float; maxHeapAllocationPercent?: Float; + backBufferDurationMs?: Float; // Android minBackBufferMemoryReservePercent?: Float; minBufferMemoryReservePercent?: Float; }>; @@ -484,7 +485,6 @@ export interface VideoNativeProps extends ViewProps { localSourceEncryptionKeyScheme?: string; debug?: DebugConfig; - backBufferDurationMs?: Int32; // Android bufferConfig?: BufferConfig; // Android contentStartTime?: Int32; // Android currentPlaybackTime?: Double; // Android diff --git a/src/types/video.ts b/src/types/video.ts index 010be36ee8..e34892244c 100644 --- a/src/types/video.ts +++ b/src/types/video.ts @@ -68,6 +68,7 @@ export type BufferConfig = { maxBufferMs?: number; bufferForPlaybackMs?: number; bufferForPlaybackAfterRebufferMs?: number; + backBufferDurationMs?: number; // Android maxHeapAllocationPercent?: number; minBackBufferMemoryReservePercent?: number; minBufferMemoryReservePercent?: number; @@ -188,7 +189,6 @@ export interface ReactVideoProps extends ReactVideoEvents, ViewProps { audioOnly?: boolean; audioOutput?: AudioOutput; // Mobile automaticallyWaitsToMinimizeStalling?: boolean; // iOS - backBufferDurationMs?: number; // Android bufferConfig?: BufferConfig; // Android chapters?: Chapters[]; // iOS contentStartTime?: number; // Android From 75d370742b95ddf0eb114ef48620e188e6fdfad1 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Fri, 29 Mar 2024 19:47:04 +0100 Subject: [PATCH 15/23] fix(ios): fix regression when playing source starting with ph:// (#3630) --- ios/Video/RCTVideo.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift index 4738103c98..760ec1353a 100644 --- a/ios/Video/RCTVideo.swift +++ b/ios/Video/RCTVideo.swift @@ -351,8 +351,6 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH throw NSError(domain: "", code: 0, userInfo: nil) } if let uri = source.uri, uri.starts(with: "ph://") { - self.isSetSourceOngoing = false - self.applyNextSource() return Promise { RCTVideoUtils.preparePHAsset(uri: uri).then { asset in return self.playerItemPrepareText(asset: asset, assetOptions: nil, uri: source.uri ?? "") From dd3a4006896ef8b01733bf1ba00597c023240e9c Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Fri, 29 Mar 2024 20:59:58 +0100 Subject: [PATCH 16/23] Chore/fix strange management of resume (#3629) * fix(android): rename startPlayback to resumePlayback and fix implementation I cannot understand why this implementation has been done. I guess this is to workaround some issue... now resume only resume playback and don't start a new playback during bufffering... * chore: simplify duplicated code --- .../exoplayer/ReactExoplayerView.java | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 41eb06e8e3..007a39e485 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -357,8 +357,7 @@ public void onHostPause() { @Override public void onHostDestroy() { - stopPlayback(); - themedReactContext.removeLifecycleEventListener(this); + cleanUpResources(); } public void cleanUpResources() { @@ -998,26 +997,13 @@ private void setPlayWhenReady(boolean playWhenReady) { } } - private void startPlayback() { + private void resumePlayback() { if (player != null) { - switch (player.getPlaybackState()) { - case Player.STATE_IDLE: - case Player.STATE_ENDED: - initializePlayer(); - break; - case Player.STATE_BUFFERING: - case Player.STATE_READY: - if (!player.getPlayWhenReady()) { - setPlayWhenReady(true); - } - break; - default: - break; + if (!player.getPlayWhenReady()) { + setPlayWhenReady(true); } - } else { - initializePlayer(); + setKeepScreenOn(preventsDisplaySleepDuringVideoPlayback); } - setKeepScreenOn(preventsDisplaySleepDuringVideoPlayback); } private void pausePlayback() { @@ -1850,7 +1836,7 @@ public void setPausedModifier(boolean paused) { isPaused = paused; if (player != null) { if (!paused) { - startPlayback(); + resumePlayback(); } else { pausePlayback(); } From 182c953597aa2e7d33a2699c12ce70de8a9741e6 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet <62574056+freeboub@users.noreply.github.com> Date: Sat, 30 Mar 2024 12:22:37 +0100 Subject: [PATCH 17/23] chore(typescript): fix external loaded textTracks typing and add one in sample (#3626) --- examples/basic/src/VideoPlayer.tsx | 16 +++++++++++++++- src/types/TextTrackType.ts | 2 +- src/types/video.ts | 12 ++++++------ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index 2f69b21b14..e719279dbe 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -34,7 +34,8 @@ import Video, { SelectedTrack, DRMType, OnTextTrackDataChangedData, - SelectedTrackType, + TextTrackType, + ISO639_1, } from 'react-native-video'; import ToggleControl from './ToggleControl'; import MultiValueControl, { @@ -127,6 +128,18 @@ class VideoPlayer extends Component { description: 'sintel with subtitles', uri: 'https://bitmovin-a.akamaihd.net/content/sintel/hls/playlist.m3u8', }, + { + description: 'sintel with sideLoaded subtitles', + uri: 'https://demo.unified-streaming.com/k8s/features/stable/video/tears-of-steel/tears-of-steel.ism/.m3u8', // this is sample video, my actual video file is MP4 + textTracks: [ + { + title: 'test', + language: 'en' as ISO639_1, + type: TextTrackType.VTT, + uri: 'https://bitdash-a.akamaihd.net/content/sintel/subtitles/subtitles_en.vtt', + }, + ] + }, ]; srcIosList = []; @@ -762,6 +775,7 @@ class VideoPlayer extends Component { this.video = ref; }} source={this.srcList[this.state.srcListId]} + textTracks={this.srcList[this.state.srcListId]?.textTracks} adTagUrl={this.srcList[this.state.srcListId]?.adTagUrl} drm={this.srcList[this.state.srcListId]?.drm} style={viewStyle} diff --git a/src/types/TextTrackType.ts b/src/types/TextTrackType.ts index 2053a3c85e..e0938a718f 100644 --- a/src/types/TextTrackType.ts +++ b/src/types/TextTrackType.ts @@ -1,5 +1,5 @@ enum TextTrackType { - SRT = 'application/x-subrip', + SUBRIP = 'application/x-subrip', TTML = 'application/ttml+xml', VTT = 'text/vtt', } diff --git a/src/types/video.ts b/src/types/video.ts index e34892244c..77c0f4db36 100644 --- a/src/types/video.ts +++ b/src/types/video.ts @@ -108,7 +108,7 @@ export type SubtitleStyle = { opacity?: number; }; -export enum TextTracksType { +export enum TextTrackType { SUBRIP = 'application/x-subrip', TTML = 'application/ttml+xml', VTT = 'text/vtt', @@ -117,11 +117,11 @@ export enum TextTracksType { export type TextTracks = { title: string; language: ISO639_1; - type: TextTracksType; + type: TextTrackType; uri: string; }[]; -export type TextTrackType = +export type TextTrackSelectionType = | 'system' | 'disabled' | 'title' @@ -129,11 +129,11 @@ export type TextTrackType = | 'index'; export type SelectedTextTrack = Readonly<{ - type: TextTrackType; + type: TextTrackSelectionType; value?: string | number; }>; -export type AudioTrackType = +export type AudioTrackSelectionType = | 'system' | 'disabled' | 'title' @@ -141,7 +141,7 @@ export type AudioTrackType = | 'index'; export type SelectedAudioTrack = Readonly<{ - type: AudioTrackType; + type: AudioTrackSelectionType; value?: string | number; }>; From 0fa0086a390dc57f07d9b76f6aee7dcaff071773 Mon Sep 17 00:00:00 2001 From: Olivier Bouillet Date: Sat, 30 Mar 2024 12:28:47 +0100 Subject: [PATCH 18/23] chore: release v6.0.0-beta.7 --- CHANGELOG.md | 23 +++++++++++++++++++++++ package.json | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fd931c422..9f192a391a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ +# [6.0.0-beta.7](https://github.com/react-native-video/react-native-video/compare/v6.0.0-beta.6...v6.0.0-beta.7) (2024-03-30) + + +### Bug Fixes + +* **android:** ensure rate is never set to 0 ([#3593](https://github.com/react-native-video/react-native-video/issues/3593)) ([3d7444a](https://github.com/react-native-video/react-native-video/commit/3d7444ab25c365b36e0e8d2672b74f474bba12eb)) +* **android:** improve and backBufferDurationMs. mainly let exoplayer manage the prop ([#3619](https://github.com/react-native-video/react-native-video/issues/3619)) ([f10511d](https://github.com/react-native-video/react-native-video/commit/f10511d9534257a8fc9a4a47978d9c844428f1f7)) +* **android:** keep screen on on fullscreen ([#3563](https://github.com/react-native-video/react-native-video/issues/3563)) ([bfb76e6](https://github.com/react-native-video/react-native-video/commit/bfb76e6d15f88a7dc50c63958486375e142a26bd)) +* **android:** track selection parameter has change in last release. ([#3594](https://github.com/react-native-video/react-native-video/issues/3594)) ([d5c8b51](https://github.com/react-native-video/react-native-video/commit/d5c8b514a1af23fa473f32b434612feac46fd321)) +* fix getLicense function's type definition ([#3606](https://github.com/react-native-video/react-native-video/issues/3606)) ([89ae843](https://github.com/react-native-video/react-native-video/commit/89ae8438fa1d90700a462b117aa9af42780c6268)) +* inject onGetLicense prop properly for detect user defined or not ([#3608](https://github.com/react-native-video/react-native-video/issues/3608)) ([24c1aab](https://github.com/react-native-video/react-native-video/commit/24c1aab3f5ab6d2d753199ea16e01c993cc3ef7d)) +* **iOS:** fix iOS DRM header parser ([#3609](https://github.com/react-native-video/react-native-video/issues/3609)) ([c9a75f3](https://github.com/react-native-video/react-native-video/commit/c9a75f3cde82f55e612b9e2c30ca06db3093b283)) +* **ios:** fix PiP callback ([#3601](https://github.com/react-native-video/react-native-video/issues/3601)) ([bb9e7eb](https://github.com/react-native-video/react-native-video/commit/bb9e7eb5a5d68de1d8945be2f3fa089ca6ce2465)) +* **ios:** fix regression when playing source starting with ph:// ([#3630](https://github.com/react-native-video/react-native-video/issues/3630)) ([75d3707](https://github.com/react-native-video/react-native-video/commit/75d370742b95ddf0eb114ef48620e188e6fdfad1)) +* **ios:** fix startPosition, cropStart and cropEnd to handle float values correctly ([#3589](https://github.com/react-native-video/react-native-video/issues/3589)) ([36bd2e2](https://github.com/react-native-video/react-native-video/commit/36bd2e2d71dc6879d74b154ecc39ea7b27f4b565)) +* **iOS:** throw when content id defined with empty string ([#3612](https://github.com/react-native-video/react-native-video/issues/3612)) ([0983580](https://github.com/react-native-video/react-native-video/commit/098358076ddaba387284c1757a80bfcc5d82191f)) +* remove `setNativeProps` usage ([#3605](https://github.com/react-native-video/react-native-video/issues/3605)) ([0312afc](https://github.com/react-native-video/react-native-video/commit/0312afc8ea27f8c82ef7ba9fecbde23174e68671)) + + +### BREAKING CHANGES + +* **android:** move backBufferDurationMs from root props to bufferConfig + # [6.0.0-beta.6](https://github.com/react-native-video/react-native-video/compare/v6.0.0-beta.5...v6.0.0-beta.6) (2024-03-18) diff --git a/package.json b/package.json index ff0ae78dc6..f1386d6296 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-video", - "version": "6.0.0-beta.6", + "version": "6.0.0-beta.7", "description": "A