diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 223be5ae..61d5de71 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -10,37 +10,24 @@ assignees: ''
# Bug
## Platform
-
Which player are you experiencing the problem on:
* iOS
* Android
-* Windows UWP
-* Windows WPF
+* Windows
## Environment info
-
-
-React native info output:
-
-```bash
- // paste it here
-```
-
+
Library version: x.x.x
+Device:
## Steps To Reproduce
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0b1618db..246dbd66 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
### Version 6.0.0-alpha.7
- Android: Fix memory leaks from AudioManager [#3123](https://github.com/react-native-video/react-native-video/pull/3123)
+- Android: Fixed syntax error [#3182](https://github.com/react-native-video/react-native-video/issues/3182)
### Version 6.0.0-alpha.6
- Feature: Video range support [#3030](https://github.com/react-native-video/react-native-video/pull/3030)
diff --git a/Video.js b/Video.js
index 808c0a51..3db14237 100644
--- a/Video.js
+++ b/Video.js
@@ -77,7 +77,7 @@ export default class Video extends Component {
this.setNativeProps({ fullscreen: false });
};
- save = async (options?) => {
+ save = async (options) => {
return await NativeModules.VideoManager.save(options, findNodeHandle(this._root));
}
@@ -416,13 +416,6 @@ Video.propTypes = {
FilterType.SEPIA,
]),
filterEnabled: PropTypes.bool,
- /* Native only */
- src: PropTypes.object,
- seek: PropTypes.oneOfType([
- PropTypes.number,
- PropTypes.object,
- ]),
- fullscreen: PropTypes.bool,
onVideoLoadStart: PropTypes.func,
onVideoLoad: PropTypes.func,
onVideoBuffer: PropTypes.func,
@@ -566,10 +559,4 @@ Video.propTypes = {
...ViewPropTypes,
};
-const RCTVideo = requireNativeComponent('RCTVideo', Video, {
- nativeOnly: {
- src: true,
- seek: true,
- fullscreen: true,
- },
-});
+const RCTVideo = requireNativeComponent('RCTVideo');
diff --git a/android/build.gradle b/android/build.gradle
index 0c3969c9..de702f92 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -17,6 +17,7 @@ def configStringPath = (
).md5()
android {
+ namespace 'com.brentvatne.react'
compileSdkVersion safeExtGet('compileSdkVersion', 31)
buildToolsVersion safeExtGet('buildToolsVersion', '30.0.2')
diff --git a/android/src/main/res/layout/exo_player_control_view.xml b/android/src/main/res/layout/exo_player_control_view.xml
index 19440912..27d3883e 100644
--- a/android/src/main/res/layout/exo_player_control_view.xml
+++ b/android/src/main/res/layout/exo_player_control_view.xml
@@ -14,27 +14,27 @@
android:paddingTop="4dp"
android:orientation="horizontal">
-
-
-
-
-
-
@@ -46,7 +46,7 @@
android:gravity="center_vertical"
android:orientation="horizontal">
-
-
#import "RCTVideoSwiftLog.h"
+#import "RCTEventDispatcher.h"
#if __has_include()
#import "RCTVideoCache.h"
diff --git a/ios/Video/RCTVideo.swift b/ios/Video/RCTVideo.swift
index 264b1de3..baeac2bf 100644
--- a/ios/Video/RCTVideo.swift
+++ b/ios/Video/RCTVideo.swift
@@ -59,6 +59,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
private var _fullscreenAutorotate:Bool = true
private var _fullscreenOrientation:String! = "all"
private var _fullscreenPlayerPresented:Bool = false
+ private var _fullscreenUncontrolPlayerPresented:Bool = false // to call events switching full screen mode from player controls
private var _filterName:String!
private var _filterEnabled:Bool = false
private var _presentingViewController:UIViewController?
@@ -246,7 +247,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
// MARK: - Player and source
@objc
func setSrc(_ source:NSDictionary!) {
- DispatchQueue.global(qos: .default).async {
+ DispatchQueue.global(qos: .default).async { [weak self] in
+ guard let self = self else {return}
self._source = VideoSource(source)
if (self._source?.uri == nil || self._source?.uri == "") {
self._player?.replaceCurrentItem(with: nil)
@@ -662,7 +664,13 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
self.onVideoFullscreenPlayerWillPresent?(["target": reactTag as Any])
if let playerViewController = _playerViewController {
- viewController.present(playerViewController, animated:true, completion:{
+ if(_controls) {
+ // prevents crash https://github.com/react-native-video/react-native-video/issues/3040
+ self._playerViewController?.removeFromParent()
+ }
+
+ viewController.present(playerViewController, animated:true, completion:{ [weak self] in
+ guard let self = self else {return}
self._playerViewController?.showsPlaybackControls = self._controls
self._fullscreenPlayerPresented = fullscreen
self._playerViewController?.autorotate = self._fullscreenAutorotate
@@ -674,8 +682,8 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
}
} else if !fullscreen && _fullscreenPlayerPresented, let _playerViewController = _playerViewController {
self.videoPlayerViewControllerWillDismiss(playerViewController: _playerViewController)
- _presentingViewController?.dismiss(animated: true, completion:{
- self.videoPlayerViewControllerDidDismiss(playerViewController: _playerViewController)
+ _presentingViewController?.dismiss(animated: true, completion:{[weak self] in
+ self?.videoPlayerViewControllerDidDismiss(playerViewController: _playerViewController)
})
}
}
@@ -1103,12 +1111,27 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
let oldRect = change.oldValue
let newRect = change.newValue
if !oldRect!.equalTo(newRect!) {
+ // https://github.com/react-native-video/react-native-video/issues/3085#issuecomment-1557293391
if newRect!.equalTo(UIScreen.main.bounds) {
RCTLog("in fullscreen")
+ if (!_fullscreenUncontrolPlayerPresented) {
+ _fullscreenUncontrolPlayerPresented = true;
- self.reactViewController().view.frame = UIScreen.main.bounds
- self.reactViewController().view.setNeedsLayout()
- } else {NSLog("not fullscreen")}
+ self.onVideoFullscreenPlayerWillPresent?(["target": self.reactTag as Any])
+ self.onVideoFullscreenPlayerDidPresent?(["target": self.reactTag as Any])
+ }
+ } else {
+ NSLog("not fullscreen")
+ if (_fullscreenUncontrolPlayerPresented) {
+ _fullscreenUncontrolPlayerPresented = false;
+
+ self.onVideoFullscreenPlayerWillDismiss?(["target": self.reactTag as Any])
+ self.onVideoFullscreenPlayerDidDismiss?(["target": self.reactTag as Any])
+ }
+ }
+
+ self.reactViewController().view.frame = UIScreen.main.bounds
+ self.reactViewController().view.setNeedsLayout()
}
}
diff --git a/ios/Video/RCTVideoPlayerViewController.swift b/ios/Video/RCTVideoPlayerViewController.swift
index e398e62f..1abbc384 100644
--- a/ios/Video/RCTVideoPlayerViewController.swift
+++ b/ios/Video/RCTVideoPlayerViewController.swift
@@ -2,7 +2,7 @@ import AVKit
class RCTVideoPlayerViewController: AVPlayerViewController {
- var rctDelegate:RCTVideoPlayerViewControllerDelegate!
+ weak var rctDelegate: RCTVideoPlayerViewControllerDelegate?
// Optional paramters
var preferredOrientation:String?
@@ -19,11 +19,9 @@ class RCTVideoPlayerViewController: AVPlayerViewController {
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
-
- if rctDelegate != nil {
- rctDelegate.videoPlayerViewControllerWillDismiss(playerViewController: self)
- rctDelegate.videoPlayerViewControllerDidDismiss(playerViewController: self)
- }
+
+ rctDelegate?.videoPlayerViewControllerWillDismiss(playerViewController: self)
+ rctDelegate?.videoPlayerViewControllerDidDismiss(playerViewController: self)
}
#if !TARGET_OS_TV