[Video] Add `onEnterFullscreen` and `onExitFullscreen` to `VideoView` (#4907)
* patch expo video to add enter/exit fullscreen events * rm logs * Update expo-video+1.2.4.patch.mdzio/stable
parent
cb574b7be3
commit
0f993a09c2
|
@ -1,20 +0,0 @@
|
||||||
--- a/node_modules/expo-video/android/src/main/java/expo/modules/video/PlayerViewExtension.kt
|
|
||||||
+++ b/node_modules/expo-video/android/src/main/java/expo/modules/video/PlayerViewExtension.kt
|
|
||||||
@@ -11,6 +11,7 @@ internal fun PlayerView.applyRequiresLinearPlayback(requireLinearPlayback: Boole
|
|
||||||
setShowPreviousButton(!requireLinearPlayback)
|
|
||||||
setShowNextButton(!requireLinearPlayback)
|
|
||||||
setTimeBarInteractive(requireLinearPlayback)
|
|
||||||
+ setShowSubtitleButton(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
|
||||||
@@ -27,7 +28,8 @@ internal fun PlayerView.setTimeBarInteractive(interactive: Boolean) {
|
|
||||||
|
|
||||||
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
|
||||||
internal fun PlayerView.setFullscreenButtonVisibility(visible: Boolean) {
|
|
||||||
- val fullscreenButton = findViewById<android.widget.ImageButton>(androidx.media3.ui.R.id.exo_fullscreen)
|
|
||||||
+ val fullscreenButton =
|
|
||||||
+ findViewById<android.widget.ImageButton>(androidx.media3.ui.R.id.exo_fullscreen)
|
|
||||||
fullscreenButton?.visibility = if (visible) {
|
|
||||||
android.view.View.VISIBLE
|
|
||||||
} else {
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
diff --git a/node_modules/expo-video/android/src/main/java/expo/modules/video/PlayerViewExtension.kt b/node_modules/expo-video/android/src/main/java/expo/modules/video/PlayerViewExtension.kt
|
||||||
|
index 9905e13..47342ff 100644
|
||||||
|
--- a/node_modules/expo-video/android/src/main/java/expo/modules/video/PlayerViewExtension.kt
|
||||||
|
+++ b/node_modules/expo-video/android/src/main/java/expo/modules/video/PlayerViewExtension.kt
|
||||||
|
@@ -11,6 +11,7 @@ internal fun PlayerView.applyRequiresLinearPlayback(requireLinearPlayback: Boole
|
||||||
|
setShowPreviousButton(!requireLinearPlayback)
|
||||||
|
setShowNextButton(!requireLinearPlayback)
|
||||||
|
setTimeBarInteractive(requireLinearPlayback)
|
||||||
|
+ setShowSubtitleButton(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
||||||
|
@@ -27,7 +28,8 @@ internal fun PlayerView.setTimeBarInteractive(interactive: Boolean) {
|
||||||
|
|
||||||
|
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
|
||||||
|
internal fun PlayerView.setFullscreenButtonVisibility(visible: Boolean) {
|
||||||
|
- val fullscreenButton = findViewById<android.widget.ImageButton>(androidx.media3.ui.R.id.exo_fullscreen)
|
||||||
|
+ val fullscreenButton =
|
||||||
|
+ findViewById<android.widget.ImageButton>(androidx.media3.ui.R.id.exo_fullscreen)
|
||||||
|
fullscreenButton?.visibility = if (visible) {
|
||||||
|
android.view.View.VISIBLE
|
||||||
|
} else {
|
||||||
|
diff --git a/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoModule.kt b/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoModule.kt
|
||||||
|
index ec3da2a..5a1397a 100644
|
||||||
|
--- a/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoModule.kt
|
||||||
|
+++ b/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoModule.kt
|
||||||
|
@@ -43,7 +43,9 @@ class VideoModule : Module() {
|
||||||
|
View(VideoView::class) {
|
||||||
|
Events(
|
||||||
|
"onPictureInPictureStart",
|
||||||
|
- "onPictureInPictureStop"
|
||||||
|
+ "onPictureInPictureStop",
|
||||||
|
+ "onEnterFullscreen",
|
||||||
|
+ "onExitFullscreen"
|
||||||
|
)
|
||||||
|
|
||||||
|
Prop("player") { view: VideoView, player: VideoPlayer ->
|
||||||
|
diff --git a/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoView.kt b/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoView.kt
|
||||||
|
index a951d80..3932535 100644
|
||||||
|
--- a/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoView.kt
|
||||||
|
+++ b/node_modules/expo-video/android/src/main/java/expo/modules/video/VideoView.kt
|
||||||
|
@@ -36,6 +36,8 @@ class VideoView(context: Context, appContext: AppContext) : ExpoView(context, ap
|
||||||
|
val playerView: PlayerView = PlayerView(context.applicationContext)
|
||||||
|
val onPictureInPictureStart by EventDispatcher<Unit>()
|
||||||
|
val onPictureInPictureStop by EventDispatcher<Unit>()
|
||||||
|
+ val onEnterFullscreen by EventDispatcher()
|
||||||
|
+ val onExitFullscreen by EventDispatcher()
|
||||||
|
|
||||||
|
var willEnterPiP: Boolean = false
|
||||||
|
var isInFullscreen: Boolean = false
|
||||||
|
@@ -154,6 +156,7 @@ class VideoView(context: Context, appContext: AppContext) : ExpoView(context, ap
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
currentActivity.overridePendingTransition(0, 0)
|
||||||
|
}
|
||||||
|
+ onEnterFullscreen(mapOf())
|
||||||
|
isInFullscreen = true
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -162,6 +165,7 @@ class VideoView(context: Context, appContext: AppContext) : ExpoView(context, ap
|
||||||
|
val fullScreenButton: ImageButton = playerView.findViewById(androidx.media3.ui.R.id.exo_fullscreen)
|
||||||
|
fullScreenButton.setImageResource(androidx.media3.ui.R.drawable.exo_icon_fullscreen_enter)
|
||||||
|
videoPlayer?.changePlayerView(playerView)
|
||||||
|
+ this.onExitFullscreen(mapOf())
|
||||||
|
isInFullscreen = false
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/node_modules/expo-video/build/VideoView.types.d.ts b/node_modules/expo-video/build/VideoView.types.d.ts
|
||||||
|
index cb9ca6d..60e9f4e 100644
|
||||||
|
--- a/node_modules/expo-video/build/VideoView.types.d.ts
|
||||||
|
+++ b/node_modules/expo-video/build/VideoView.types.d.ts
|
||||||
|
@@ -89,5 +89,8 @@ export interface VideoViewProps extends ViewProps {
|
||||||
|
* @platform ios 16.0+
|
||||||
|
*/
|
||||||
|
allowsVideoFrameAnalysis?: boolean;
|
||||||
|
+
|
||||||
|
+ onEnterFullscreen?: () => void;
|
||||||
|
+ onExitFullscreen?: () => void;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=VideoView.types.d.ts.map
|
||||||
|
diff --git a/node_modules/expo-video/ios/VideoModule.swift b/node_modules/expo-video/ios/VideoModule.swift
|
||||||
|
index c537a12..e4a918f 100644
|
||||||
|
--- a/node_modules/expo-video/ios/VideoModule.swift
|
||||||
|
+++ b/node_modules/expo-video/ios/VideoModule.swift
|
||||||
|
@@ -16,7 +16,9 @@ public final class VideoModule: Module {
|
||||||
|
View(VideoView.self) {
|
||||||
|
Events(
|
||||||
|
"onPictureInPictureStart",
|
||||||
|
- "onPictureInPictureStop"
|
||||||
|
+ "onPictureInPictureStop",
|
||||||
|
+ "onEnterFullscreen",
|
||||||
|
+ "onExitFullscreen"
|
||||||
|
)
|
||||||
|
|
||||||
|
Prop("player") { (view, player: VideoPlayer?) in
|
||||||
|
diff --git a/node_modules/expo-video/ios/VideoView.swift b/node_modules/expo-video/ios/VideoView.swift
|
||||||
|
index f4579e4..10c5908 100644
|
||||||
|
--- a/node_modules/expo-video/ios/VideoView.swift
|
||||||
|
+++ b/node_modules/expo-video/ios/VideoView.swift
|
||||||
|
@@ -41,6 +41,8 @@ public final class VideoView: ExpoView, AVPlayerViewControllerDelegate {
|
||||||
|
|
||||||
|
let onPictureInPictureStart = EventDispatcher()
|
||||||
|
let onPictureInPictureStop = EventDispatcher()
|
||||||
|
+ let onEnterFullscreen = EventDispatcher()
|
||||||
|
+ let onExitFullscreen = EventDispatcher()
|
||||||
|
|
||||||
|
public override var bounds: CGRect {
|
||||||
|
didSet {
|
||||||
|
@@ -163,6 +165,7 @@ public final class VideoView: ExpoView, AVPlayerViewControllerDelegate {
|
||||||
|
_ playerViewController: AVPlayerViewController,
|
||||||
|
willBeginFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator
|
||||||
|
) {
|
||||||
|
+ onEnterFullscreen()
|
||||||
|
isFullscreen = true
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -179,6 +182,7 @@ public final class VideoView: ExpoView, AVPlayerViewControllerDelegate {
|
||||||
|
if wasPlaying {
|
||||||
|
self.player?.pointer.play()
|
||||||
|
}
|
||||||
|
+ self.onExitFullscreen()
|
||||||
|
self.isFullscreen = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/node_modules/expo-video/src/VideoView.types.ts b/node_modules/expo-video/src/VideoView.types.ts
|
||||||
|
index 29fe5db..e1fbf59 100644
|
||||||
|
--- a/node_modules/expo-video/src/VideoView.types.ts
|
||||||
|
+++ b/node_modules/expo-video/src/VideoView.types.ts
|
||||||
|
@@ -100,4 +100,7 @@ export interface VideoViewProps extends ViewProps {
|
||||||
|
* @platform ios 16.0+
|
||||||
|
*/
|
||||||
|
allowsVideoFrameAnalysis?: boolean;
|
||||||
|
+
|
||||||
|
+ onEnterFullscreen?: () => void;
|
||||||
|
+ onExitFullscreen?: () => void;
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
## uwu woad beawing, do not wemove
|
||||||
|
|
||||||
|
## `expo-video` Patch
|
||||||
|
|
||||||
|
This patch adds two props to `VideoView`: `onEnterFullscreen` and `onExitFullscreen` which do exactly what they say on
|
||||||
|
the tin.
|
Loading…
Reference in New Issue