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(androidx.media3.ui.R.id.exo_fullscreen) + val fullscreenButton = + findViewById(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() val onPictureInPictureStop by EventDispatcher() + 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; }