Add focusable prop
This commit is contained in:
parent
9501d43357
commit
1406b9ad08
9
API.md
9
API.md
@ -277,6 +277,7 @@ var styles = StyleSheet.create({
|
|||||||
|[disableDisconnectError](#disableDisconnectError)|Android|
|
|[disableDisconnectError](#disableDisconnectError)|Android|
|
||||||
|[filter](#filter)|iOS|
|
|[filter](#filter)|iOS|
|
||||||
|[filterEnabled](#filterEnabled)|iOS|
|
|[filterEnabled](#filterEnabled)|iOS|
|
||||||
|
|[focusable](#focusable)|Android|
|
||||||
|[fullscreen](#fullscreen)|iOS|
|
|[fullscreen](#fullscreen)|iOS|
|
||||||
|[fullscreenAutorotate](#fullscreenautorotate)|iOS|
|
|[fullscreenAutorotate](#fullscreenautorotate)|iOS|
|
||||||
|[fullscreenOrientation](#fullscreenorientation)|iOS|
|
|[fullscreenOrientation](#fullscreenorientation)|iOS|
|
||||||
@ -486,6 +487,14 @@ Enable video filter.
|
|||||||
|
|
||||||
Platforms: iOS
|
Platforms: iOS
|
||||||
|
|
||||||
|
#### Focusable
|
||||||
|
Whether this video view should be focusable with a non-touch input device, eg. receive focus with a hardware keyboard.
|
||||||
|
* **false** - Makes view unfocusable
|
||||||
|
* **true (default)** - Makes view focusable
|
||||||
|
|
||||||
|
Platforms: Android
|
||||||
|
|
||||||
|
|
||||||
#### fullscreen
|
#### fullscreen
|
||||||
Controls whether the player enters fullscreen on play.
|
Controls whether the player enters fullscreen on play.
|
||||||
* **false (default)** - Don't display the video in fullscreen
|
* **false (default)** - Don't display the video in fullscreen
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
## Changelog
|
## Changelog
|
||||||
### Version 6.0.0-alpha4
|
### Version 6.0.0-alpha4
|
||||||
- Android: Switch Google's maven repository to default `google()` [#2860](https://github.com/react-native-video/react-native-video/pull/2860)
|
- Android: Switch Google's maven repository to default `google()` [#2860](https://github.com/react-native-video/react-native-video/pull/2860)
|
||||||
|
- Android: Implement focusable prop so the video view can toggle whether it is focusable for non-touch devices [#2819](https://github.com/react-native-video/react-native-video/issues/2819)
|
||||||
|
|
||||||
### Version 6.0.0-alpha3
|
### Version 6.0.0-alpha3
|
||||||
- fix ios build [#2854](https://gthub.com/react-native-video/react-native-video/pull/2854)
|
- fix ios build [#2854](https://gthub.com/react-native-video/react-native-video/pull/2854)
|
||||||
|
1
Video.js
1
Video.js
@ -483,6 +483,7 @@ Video.propTypes = {
|
|||||||
reportBandwidth: PropTypes.bool,
|
reportBandwidth: PropTypes.bool,
|
||||||
contentStartTime: PropTypes.number,
|
contentStartTime: PropTypes.number,
|
||||||
disableFocus: PropTypes.bool,
|
disableFocus: PropTypes.bool,
|
||||||
|
focusable: PropTypes.bool,
|
||||||
disableBuffering: PropTypes.bool,
|
disableBuffering: PropTypes.bool,
|
||||||
controls: PropTypes.bool,
|
controls: PropTypes.bool,
|
||||||
audioOnly: PropTypes.bool,
|
audioOnly: PropTypes.bool,
|
||||||
|
@ -190,6 +190,7 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
private Dynamic textTrackValue;
|
private Dynamic textTrackValue;
|
||||||
private ReadableArray textTracks;
|
private ReadableArray textTracks;
|
||||||
private boolean disableFocus;
|
private boolean disableFocus;
|
||||||
|
private boolean focusable = true;
|
||||||
private boolean disableBuffering;
|
private boolean disableBuffering;
|
||||||
private long contentStartTime = -1L;
|
private long contentStartTime = -1L;
|
||||||
private boolean disableDisconnectError;
|
private boolean disableDisconnectError;
|
||||||
@ -284,6 +285,8 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
|
|
||||||
addView(exoPlayerView, 0, layoutParams);
|
addView(exoPlayerView, 0, layoutParams);
|
||||||
|
|
||||||
|
exoPlayerView.setFocusable(this.focusable);
|
||||||
|
|
||||||
mainHandler = new Handler();
|
mainHandler = new Handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,7 +574,7 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 1);
|
}, 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializePlayerCore(ReactExoplayerView self) {
|
private void initializePlayerCore(ReactExoplayerView self) {
|
||||||
@ -1119,7 +1122,7 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
WritableArray videoTracks = Arguments.createArray();
|
WritableArray videoTracks = Arguments.createArray();
|
||||||
|
|
||||||
MappingTrackSelector.MappedTrackInfo info = trackSelector.getCurrentMappedTrackInfo();
|
MappingTrackSelector.MappedTrackInfo info = trackSelector.getCurrentMappedTrackInfo();
|
||||||
|
|
||||||
if (info == null || trackRendererIndex == C.INDEX_UNSET) {
|
if (info == null || trackRendererIndex == C.INDEX_UNSET) {
|
||||||
return videoTracks;
|
return videoTracks;
|
||||||
}
|
}
|
||||||
@ -1578,7 +1581,7 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
for (int j = 0; j < group.length; j++) {
|
for (int j = 0; j < group.length; j++) {
|
||||||
allTracks.add(j);
|
allTracks.add(j);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valiate list of all tracks and add only supported formats
|
// Valiate list of all tracks and add only supported formats
|
||||||
int supportedFormatLength = 0;
|
int supportedFormatLength = 0;
|
||||||
ArrayList<Integer> supportedTrackList = new ArrayList<Integer>();
|
ArrayList<Integer> supportedTrackList = new ArrayList<Integer>();
|
||||||
@ -1737,13 +1740,18 @@ class ReactExoplayerView extends FrameLayout implements
|
|||||||
this.disableFocus = disableFocus;
|
this.disableFocus = disableFocus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setFocusable(boolean focusable) {
|
||||||
|
this.focusable = focusable;
|
||||||
|
exoPlayerView.setFocusable(this.focusable);
|
||||||
|
}
|
||||||
|
|
||||||
public void setBackBufferDurationMs(int backBufferDurationMs) {
|
public void setBackBufferDurationMs(int backBufferDurationMs) {
|
||||||
Runtime runtime = Runtime.getRuntime();
|
Runtime runtime = Runtime.getRuntime();
|
||||||
long usedMemory = runtime.totalMemory() - runtime.freeMemory();
|
long usedMemory = runtime.totalMemory() - runtime.freeMemory();
|
||||||
long freeMemory = runtime.maxMemory() - usedMemory;
|
long freeMemory = runtime.maxMemory() - usedMemory;
|
||||||
long reserveMemory = (long)minBackBufferMemoryReservePercent * runtime.maxMemory();
|
long reserveMemory = (long)minBackBufferMemoryReservePercent * runtime.maxMemory();
|
||||||
if (reserveMemory > freeMemory) {
|
if (reserveMemory > freeMemory) {
|
||||||
// We don't have enough memory in reserve so we will
|
// We don't have enough memory in reserve so we will
|
||||||
Log.w("ExoPlayer Warning", "Not enough reserve memory, setting back buffer to 0ms to reduce memory pressure!");
|
Log.w("ExoPlayer Warning", "Not enough reserve memory, setting back buffer to 0ms to reduce memory pressure!");
|
||||||
this.backBufferDurationMs = 0;
|
this.backBufferDurationMs = 0;
|
||||||
return;
|
return;
|
||||||
|
@ -70,6 +70,7 @@ public class ReactExoplayerViewManager extends ViewGroupManager<ReactExoplayerVi
|
|||||||
private static final String PROP_DISABLE_FOCUS = "disableFocus";
|
private static final String PROP_DISABLE_FOCUS = "disableFocus";
|
||||||
private static final String PROP_DISABLE_BUFFERING = "disableBuffering";
|
private static final String PROP_DISABLE_BUFFERING = "disableBuffering";
|
||||||
private static final String PROP_DISABLE_DISCONNECT_ERROR = "disableDisconnectError";
|
private static final String PROP_DISABLE_DISCONNECT_ERROR = "disableDisconnectError";
|
||||||
|
private static final String PROP_FOCUSABLE = "focusable";
|
||||||
private static final String PROP_FULLSCREEN = "fullscreen";
|
private static final String PROP_FULLSCREEN = "fullscreen";
|
||||||
private static final String PROP_USE_TEXTURE_VIEW = "useTextureView";
|
private static final String PROP_USE_TEXTURE_VIEW = "useTextureView";
|
||||||
private static final String PROP_SECURE_VIEW = "useSecureView";
|
private static final String PROP_SECURE_VIEW = "useSecureView";
|
||||||
@ -304,6 +305,11 @@ public class ReactExoplayerViewManager extends ViewGroupManager<ReactExoplayerVi
|
|||||||
videoView.setDisableFocus(disableFocus);
|
videoView.setDisableFocus(disableFocus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ReactProp(name = PROP_FOCUSABLE, defaultBoolean = true)
|
||||||
|
public void setFocusable(final ReactExoplayerView videoView, final boolean focusable) {
|
||||||
|
videoView.setFocusable(focusable);
|
||||||
|
}
|
||||||
|
|
||||||
@ReactProp(name = PROP_BACK_BUFFER_DURATION_MS, defaultInt = 0)
|
@ReactProp(name = PROP_BACK_BUFFER_DURATION_MS, defaultInt = 0)
|
||||||
public void setBackBufferDurationMs(final ReactExoplayerView videoView, final int backBufferDurationMs) {
|
public void setBackBufferDurationMs(final ReactExoplayerView videoView, final int backBufferDurationMs) {
|
||||||
videoView.setBackBufferDurationMs(backBufferDurationMs);
|
videoView.setBackBufferDurationMs(backBufferDurationMs);
|
||||||
|
Loading…
Reference in New Issue
Block a user