Skip to content

Commit e6dd52a

Browse files
VEX-6540: Disable recording when playing local videos (#18)
This PR adds core actions to enable or disable screenshots Jira: VEX-6540 https://jira.tenkasu.net/browse/VEX-6540 velocity PR: crunchyroll/velocity#2248 New core actions were added to control the player surface and mark it as secure. Sending the prop to react-native-video will recreate the surface of the player changing it to a SurfaceView and enabling security Reviews Major reviewer (domain expert): @nickfujita Minor reviewer: @armadilio3
2 parents 2ab0299 + 2af360a commit e6dd52a

5 files changed

Lines changed: 41 additions & 1 deletion

File tree

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ var styles = StyleSheet.create({
316316
* [textTracks](#texttracks)
317317
* [trackId](#trackId)
318318
* [useTextureView](#usetextureview)
319+
* [useSecureView](#useSecureView)
319320
* [volume](#volume)
320321
* [localSourceEncryptionKeyScheme](#localSourceEncryptionKeyScheme)
321322

@@ -911,6 +912,18 @@ useTextureView can only be set at same time you're setting the source.
911912

912913
Platforms: Android ExoPlayer
913914

915+
#### useSecureView
916+
Force the output to a SurfaceView and enables the secure surface.
917+
918+
This will override useTextureView flag.
919+
920+
SurfaceView is is the only one that can be labeled as secure.
921+
922+
* **true** - Use security
923+
* **false (default)** - Do not use security
924+
925+
Platforms: Android ExoPlayer
926+
914927
#### volume
915928
Adjust the volume.
916929
* **1.0 (default)** - Play at full volume

Video.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ Video.propTypes = {
488488
fullscreenOrientation: PropTypes.oneOf(['all', 'landscape', 'portrait']),
489489
progressUpdateInterval: PropTypes.number,
490490
useTextureView: PropTypes.bool,
491+
useSecureView: PropTypes.bool,
491492
hideShutterView: PropTypes.bool,
492493
onLoadStart: PropTypes.func,
493494
onLoad: PropTypes.func,

android-exoplayer/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public final class ExoPlayerView extends FrameLayout {
4141
private ViewGroup.LayoutParams layoutParams;
4242

4343
private boolean useTextureView = true;
44+
private boolean useSecureView = false;
4445
private boolean hideShutterView = false;
4546

4647
public ExoPlayerView(Context context) {
@@ -103,7 +104,15 @@ private void setVideoView() {
103104
}
104105

105106
private void updateSurfaceView() {
106-
View view = useTextureView ? new TextureView(context) : new SurfaceView(context);
107+
View view;
108+
if (!useTextureView || useSecureView) {
109+
view = new SurfaceView(context);
110+
if (useSecureView) {
111+
((SurfaceView)view).setSecure(true);
112+
}
113+
} else {
114+
view = new TextureView(context);
115+
}
107116
view.setLayoutParams(layoutParams);
108117

109118
surfaceView = view;
@@ -178,6 +187,13 @@ public void setUseTextureView(boolean useTextureView) {
178187
}
179188
}
180189

190+
public void useSecureView(boolean useSecureView) {
191+
if (useSecureView != this.useSecureView) {
192+
this.useSecureView = useSecureView;
193+
updateSurfaceView();
194+
}
195+
}
196+
181197
public void setHideShutterView(boolean hideShutterView) {
182198
this.hideShutterView = hideShutterView;
183199
updateShutterViewVisibility();

android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,6 +1696,10 @@ public void setUseTextureView(boolean useTextureView) {
16961696
exoPlayerView.setUseTextureView(finallyUseTextureView);
16971697
}
16981698

1699+
public void useSecureView(boolean useSecureView) {
1700+
exoPlayerView.useSecureView(useSecureView);
1701+
}
1702+
16991703
public void setHideShutterView(boolean hideShutterView) {
17001704
exoPlayerView.setHideShutterView(hideShutterView);
17011705
}

android-exoplayer/src/main/java/com/brentvatne/exoplayer/ReactExoplayerViewManager.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public class ReactExoplayerViewManager extends ViewGroupManager<ReactExoplayerVi
7272
private static final String PROP_DISABLE_DISCONNECT_ERROR = "disableDisconnectError";
7373
private static final String PROP_FULLSCREEN = "fullscreen";
7474
private static final String PROP_USE_TEXTURE_VIEW = "useTextureView";
75+
private static final String PROP_SECURE_VIEW = "useSecureView";
7576
private static final String PROP_SELECTED_VIDEO_TRACK = "selectedVideoTrack";
7677
private static final String PROP_SELECTED_VIDEO_TRACK_TYPE = "type";
7778
private static final String PROP_SELECTED_VIDEO_TRACK_VALUE = "value";
@@ -331,6 +332,11 @@ public void setUseTextureView(final ReactExoplayerView videoView, final boolean
331332
videoView.setUseTextureView(useTextureView);
332333
}
333334

335+
@ReactProp(name = PROP_SECURE_VIEW, defaultBoolean = true)
336+
public void useSecureView(final ReactExoplayerView videoView, final boolean useSecureView) {
337+
videoView.useSecureView(useSecureView);
338+
}
339+
334340
@ReactProp(name = PROP_HIDE_SHUTTER_VIEW, defaultBoolean = false)
335341
public void setHideShutterView(final ReactExoplayerView videoView, final boolean hideShutterView) {
336342
videoView.setHideShutterView(hideShutterView);

0 commit comments

Comments
 (0)