Merge branch 'master' into master
This commit is contained in:
commit
eef8f2cecc
@ -9,7 +9,9 @@
|
|||||||
- Android: fix linter warning [#2891] (https://github.com/react-native-video/react-native-video/pull/2891)
|
- Android: fix linter warning [#2891] (https://github.com/react-native-video/react-native-video/pull/2891)
|
||||||
- Fix iOS RCTSwiftLog naming collision [#2868](https://github.com/react-native-video/react-native-video/issues/2868)
|
- Fix iOS RCTSwiftLog naming collision [#2868](https://github.com/react-native-video/react-native-video/issues/2868)
|
||||||
- Added "homepage" to package.json [#2882](https://github.com/react-native-video/react-native-video/pull/2882)
|
- Added "homepage" to package.json [#2882](https://github.com/react-native-video/react-native-video/pull/2882)
|
||||||
|
- Fix regression when fullscreen prop is used combined with controls [#2911](https://github.com/react-native-video/react-native-video/pull/2911)
|
||||||
- Fix: memory leak issue on iOS [#2907](https://github.com/react-native-video/react-native-video/pull/2907)
|
- Fix: memory leak issue on iOS [#2907](https://github.com/react-native-video/react-native-video/pull/2907)
|
||||||
|
- Fix setting text tracks before player is initialized on iOS [#2935](https://github.com/react-native-video/react-native-video/pull/2935)
|
||||||
- Feature: Add VAST support for AVOD [#2923](https://github.com/react-native-video/react-native-video/pull/2923)
|
- Feature: Add VAST support for AVOD [#2923](https://github.com/react-native-video/react-native-video/pull/2923)
|
||||||
|
|
||||||
### Version 6.0.0-alpha.3
|
### Version 6.0.0-alpha.3
|
||||||
|
@ -387,6 +387,15 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
playerControlView = new PlayerControlView(getContext());
|
playerControlView = new PlayerControlView(getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fullScreenPlayerView == null) {
|
||||||
|
fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) {
|
||||||
|
@Override
|
||||||
|
public void handleOnBackPressed() {
|
||||||
|
setFullscreen(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Setting the player for the playerControlView
|
// Setting the player for the playerControlView
|
||||||
playerControlView.setPlayer(player);
|
playerControlView.setPlayer(player);
|
||||||
playPauseControlContainer = playerControlView.findViewById(R.id.exo_play_pause_container);
|
playPauseControlContainer = playerControlView.findViewById(R.id.exo_play_pause_container);
|
||||||
@ -423,8 +432,9 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Handling the fullScreenButton click event
|
//Handling the fullScreenButton click event
|
||||||
ImageButton fullScreenButton = playerControlView.findViewById(R.id.exo_fullscreen);
|
final ImageButton fullScreenButton = playerControlView.findViewById(R.id.exo_fullscreen);
|
||||||
fullScreenButton.setOnClickListener(v -> setFullscreen(!isFullscreen));
|
fullScreenButton.setOnClickListener(v -> setFullscreen(!isFullscreen));
|
||||||
|
updateFullScreenButtonVisbility();
|
||||||
|
|
||||||
// Invoking onPlaybackStateChanged and onPlayWhenReadyChanged events for Player
|
// Invoking onPlaybackStateChanged and onPlayWhenReadyChanged events for Player
|
||||||
eventListener = new Player.Listener() {
|
eventListener = new Player.Listener() {
|
||||||
@ -438,7 +448,6 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
if (pauseButton != null && pauseButton.getVisibility() == GONE) {
|
if (pauseButton != null && pauseButton.getVisibility() == GONE) {
|
||||||
pauseButton.setVisibility(INVISIBLE);
|
pauseButton.setVisibility(INVISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
reLayout(playPauseControlContainer);
|
reLayout(playPauseControlContainer);
|
||||||
//Remove this eventListener once its executed. since UI will work fine once after the reLayout is done
|
//Remove this eventListener once its executed. since UI will work fine once after the reLayout is done
|
||||||
player.removeListener(eventListener);
|
player.removeListener(eventListener);
|
||||||
@ -458,7 +467,7 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
* Adding Player control to the frame layout
|
* Adding Player control to the frame layout
|
||||||
*/
|
*/
|
||||||
private void addPlayerControl() {
|
private void addPlayerControl() {
|
||||||
if(player == null) return;
|
if(playerControlView == null) return;
|
||||||
LayoutParams layoutParams = new LayoutParams(
|
LayoutParams layoutParams = new LayoutParams(
|
||||||
LayoutParams.MATCH_PARENT,
|
LayoutParams.MATCH_PARENT,
|
||||||
LayoutParams.MATCH_PARENT);
|
LayoutParams.MATCH_PARENT);
|
||||||
@ -716,12 +725,6 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
setControls(controls);
|
setControls(controls);
|
||||||
applyModifiers();
|
applyModifiers();
|
||||||
startBufferCheckTimer();
|
startBufferCheckTimer();
|
||||||
fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) {
|
|
||||||
@Override
|
|
||||||
public void handleOnBackPressed() {
|
|
||||||
setFullscreen(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray) throws UnsupportedDrmException {
|
private DrmSessionManager buildDrmSessionManager(UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray) throws UnsupportedDrmException {
|
||||||
@ -1825,6 +1828,22 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
this.disableBuffering = disableBuffering;
|
this.disableBuffering = disableBuffering;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateFullScreenButtonVisbility() {
|
||||||
|
if (playerControlView != null) {
|
||||||
|
final ImageButton fullScreenButton = playerControlView.findViewById(R.id.exo_fullscreen);
|
||||||
|
if (controls) {
|
||||||
|
//Handling the fullScreenButton click event
|
||||||
|
if (isFullscreen && fullScreenPlayerView != null && !fullScreenPlayerView.isShowing()) {
|
||||||
|
fullScreenButton.setVisibility(GONE);
|
||||||
|
} else {
|
||||||
|
fullScreenButton.setVisibility(VISIBLE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fullScreenButton.setVisibility(GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setDisableDisconnectError(boolean disableDisconnectError) {
|
public void setDisableDisconnectError(boolean disableDisconnectError) {
|
||||||
this.disableDisconnectError = disableDisconnectError;
|
this.disableDisconnectError = disableDisconnectError;
|
||||||
}
|
}
|
||||||
@ -1840,15 +1859,6 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fullScreenPlayerView == null) {
|
|
||||||
fullScreenPlayerView = new FullScreenPlayerView(getContext(), exoPlayerView, playerControlView, new OnBackPressedCallback(true) {
|
|
||||||
@Override
|
|
||||||
public void handleOnBackPressed() {
|
|
||||||
setFullscreen(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Window window = activity.getWindow();
|
Window window = activity.getWindow();
|
||||||
View decorView = window.getDecorView();
|
View decorView = window.getDecorView();
|
||||||
int uiOptions;
|
int uiOptions;
|
||||||
@ -1862,7 +1872,7 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
| SYSTEM_UI_FLAG_FULLSCREEN;
|
| SYSTEM_UI_FLAG_FULLSCREEN;
|
||||||
}
|
}
|
||||||
eventEmitter.fullscreenWillPresent();
|
eventEmitter.fullscreenWillPresent();
|
||||||
if (controls) {
|
if (controls && fullScreenPlayerView != null) {
|
||||||
fullScreenPlayerView.show();
|
fullScreenPlayerView.show();
|
||||||
}
|
}
|
||||||
post(() -> {
|
post(() -> {
|
||||||
@ -1872,7 +1882,7 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
} else {
|
} else {
|
||||||
uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
|
uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
|
||||||
eventEmitter.fullscreenWillDismiss();
|
eventEmitter.fullscreenWillDismiss();
|
||||||
if (controls) {
|
if (controls && fullScreenPlayerView != null) {
|
||||||
fullScreenPlayerView.dismiss();
|
fullScreenPlayerView.dismiss();
|
||||||
reLayout(exoPlayerView);
|
reLayout(exoPlayerView);
|
||||||
}
|
}
|
||||||
@ -1881,6 +1891,8 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
eventEmitter.fullscreenDidDismiss();
|
eventEmitter.fullscreenDidDismiss();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// need to be done at the end to avoid hiding fullscreen control button when fullScreenPlayerView is shown
|
||||||
|
updateFullScreenButtonVisbility();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUseTextureView(boolean useTextureView) {
|
public void setUseTextureView(boolean useTextureView) {
|
||||||
@ -1949,9 +1961,9 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
*/
|
*/
|
||||||
public void setControls(boolean controls) {
|
public void setControls(boolean controls) {
|
||||||
this.controls = controls;
|
this.controls = controls;
|
||||||
if (player == null || exoPlayerView == null) return;
|
|
||||||
if (controls) {
|
if (controls) {
|
||||||
addPlayerControl();
|
addPlayerControl();
|
||||||
|
updateFullScreenButtonVisbility();
|
||||||
} else {
|
} else {
|
||||||
int indexOfPC = indexOfChild(playerControlView);
|
int indexOfPC = indexOfChild(playerControlView);
|
||||||
if (indexOfPC != -1) {
|
if (indexOfPC != -1) {
|
||||||
|
@ -715,6 +715,7 @@ class VideoPlayer extends Component {
|
|||||||
paused={this.state.paused}
|
paused={this.state.paused}
|
||||||
volume={this.state.volume}
|
volume={this.state.volume}
|
||||||
muted={this.state.muted}
|
muted={this.state.muted}
|
||||||
|
fullscreen={this.state.fullscreen}
|
||||||
controls={this.state.showRNVControls}
|
controls={this.state.showRNVControls}
|
||||||
resizeMode={this.state.resizeMode}
|
resizeMode={this.state.resizeMode}
|
||||||
onLoad={this.onLoad}
|
onLoad={this.onLoad}
|
||||||
|
@ -132,6 +132,8 @@ enum RCTPlayerOperations {
|
|||||||
let type = criteria?.type
|
let type = criteria?.type
|
||||||
let group:AVMediaSelectionGroup! = player?.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: characteristic)
|
let group:AVMediaSelectionGroup! = player?.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: characteristic)
|
||||||
var mediaOption:AVMediaSelectionOption!
|
var mediaOption:AVMediaSelectionOption!
|
||||||
|
|
||||||
|
guard group != nil else { return }
|
||||||
|
|
||||||
if (type == "disabled") {
|
if (type == "disabled") {
|
||||||
// Do nothing. We want to ensure option is nil
|
// Do nothing. We want to ensure option is nil
|
||||||
|
Loading…
Reference in New Issue
Block a user