diff --git a/react/features/base/media/components/native/VideoTrack.js b/react/features/base/media/components/native/VideoTrack.js
index f9248ac9d..57d862504 100644
--- a/react/features/base/media/components/native/VideoTrack.js
+++ b/react/features/base/media/components/native/VideoTrack.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { Animated } from 'react-native';
+import { Animated, View } from 'react-native';
import { connect } from 'react-redux';
import AbstractVideoTrack from '../AbstractVideoTrack';
@@ -41,8 +41,7 @@ class VideoTrack extends AbstractVideoTrack {
*/
this.state = {
...this.state,
- fade: new Animated.Value(1),
- flip: new Animated.Value(1)
+ fade: new Animated.Value(0)
};
}
@@ -53,11 +52,14 @@ class VideoTrack extends AbstractVideoTrack {
* @returns {ReactElement}
*/
render() {
+ const animatedStyles
+ = [ styles.videoCover, this._getAnimationStyles() ];
+
return (
-
+
{ super.render() }
-
+
+
);
}
@@ -76,23 +78,14 @@ class VideoTrack extends AbstractVideoTrack {
if (this._animation) {
this._animation.stop();
this._animation = null;
- this.state.fade.setValue(1);
- this.state.flip.setValue(1);
+ this.state.fade.setValue(0);
}
- // If we're switching between two local video tracks, that actually
- // means we're switching local cameras, so we'll use a flip animation.
- // Otherwise, we'll use fade animation.
- const animation
- = oldValue && newValue && oldValue.local && newValue.local
- ? 'flip'
- : 'fade';
-
- return this._animateVideoTrack(animation, 0)
+ return this._animateVideoTrack(1)
.then(() => {
super._setVideoTrack(newValue);
- return this._animateVideoTrack(animation, 1);
+ return this._animateVideoTrack(0);
})
.catch(() => {
console.log('Animation was stopped');
@@ -102,17 +95,15 @@ class VideoTrack extends AbstractVideoTrack {
/**
* Animates the display of the state videoTrack.
*
- * @param {string} animatedValue - The name of the state property which
- * specifies the Animated.Value to be animated.
* @param {number} toValue - The value to which the specified animatedValue
* is to be animated.
* @private
* @returns {Promise}
*/
- _animateVideoTrack(animatedValue, toValue) {
+ _animateVideoTrack(toValue) {
return new Promise((resolve, reject) => {
this._animation
- = Animated.timing(this.state[animatedValue], { toValue });
+ = Animated.timing(this.state.fade, { toValue });
this._animation.start(result => {
this._animation = null;
result.finished ? resolve() : reject();
@@ -128,13 +119,7 @@ class VideoTrack extends AbstractVideoTrack {
*/
_getAnimationStyles() {
return {
- opacity: this.state.fade,
- transform: [ {
- rotateY: this.state.flip.interpolate({
- inputRange: [ 0, 1 ],
- outputRange: [ '90deg', '0deg' ]
- })
- } ]
+ opacity: this.state.fade
};
}
diff --git a/react/features/base/media/components/native/styles.js b/react/features/base/media/components/native/styles.js
index 274c03edc..94ea3409d 100644
--- a/react/features/base/media/components/native/styles.js
+++ b/react/features/base/media/components/native/styles.js
@@ -1,15 +1,27 @@
import { StyleSheet } from 'react-native';
-
-/**
- * Make {@code Video} fill its container.
- */
-const video = {
- flex: 1
-};
+import { ColorPalette } from '../../../styles';
/**
* The styles of the feature base/media.
*/
export default StyleSheet.create({
- video
+ /**
+ * Make {@code Video} fill its container.
+ */
+ video: {
+ flex: 1
+ },
+
+ /**
+ * Black cover for the video, which will be animated by reducing its opacity
+ * and create a fade-in effect.
+ */
+ videoCover: {
+ backgroundColor: ColorPalette.black,
+ height: '100%',
+ left: 0,
+ position: 'absolute',
+ top: 0,
+ width: '100%'
+ }
});