This only handles the controls portion of fullscreen. It doesn't make the video use the entire screen, that still needs to be done via styles. Will be implemented later
167 lines
6.5 KiB
Java
167 lines
6.5 KiB
Java
package com.brentvatne.react;
|
|
|
|
import com.brentvatne.react.ReactVideoView.Events;
|
|
import com.facebook.react.bridge.Arguments;
|
|
import com.facebook.react.bridge.ReadableMap;
|
|
import com.facebook.react.bridge.WritableMap;
|
|
import com.facebook.react.common.MapBuilder;
|
|
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
import com.facebook.react.uimanager.SimpleViewManager;
|
|
import com.facebook.react.uimanager.ThemedReactContext;
|
|
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
import com.yqritc.scalablevideoview.ScalableType;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.util.Map;
|
|
|
|
public class ReactVideoViewManager extends SimpleViewManager<ReactVideoView> {
|
|
|
|
public static final String REACT_CLASS = "RCTVideo";
|
|
|
|
public static final String PROP_SRC = "src";
|
|
public static final String PROP_SRC_URI = "uri";
|
|
public static final String PROP_SRC_TYPE = "type";
|
|
public static final String PROP_SRC_HEADERS = "requestHeaders";
|
|
public static final String PROP_SRC_IS_NETWORK = "isNetwork";
|
|
public static final String PROP_SRC_MAINVER = "mainVer";
|
|
public static final String PROP_SRC_PATCHVER = "patchVer";
|
|
public static final String PROP_SRC_IS_ASSET = "isAsset";
|
|
public static final String PROP_RESIZE_MODE = "resizeMode";
|
|
public static final String PROP_REPEAT = "repeat";
|
|
public static final String PROP_PAUSED = "paused";
|
|
public static final String PROP_MUTED = "muted";
|
|
public static final String PROP_VOLUME = "volume";
|
|
public static final String PROP_STEREO_PAN = "stereoPan";
|
|
public static final String PROP_PROGRESS_UPDATE_INTERVAL = "progressUpdateInterval";
|
|
public static final String PROP_SEEK = "seek";
|
|
public static final String PROP_RATE = "rate";
|
|
public static final String PROP_FULLSCREEN = "fullscreen";
|
|
public static final String PROP_PLAY_IN_BACKGROUND = "playInBackground";
|
|
public static final String PROP_CONTROLS = "controls";
|
|
|
|
@Override
|
|
public String getName() {
|
|
return REACT_CLASS;
|
|
}
|
|
|
|
@Override
|
|
protected ReactVideoView createViewInstance(ThemedReactContext themedReactContext) {
|
|
return new ReactVideoView(themedReactContext);
|
|
}
|
|
|
|
@Override
|
|
public void onDropViewInstance(ReactVideoView view) {
|
|
super.onDropViewInstance(view);
|
|
view.cleanupMediaPlayerResources();
|
|
}
|
|
|
|
@Override
|
|
@Nullable
|
|
public Map getExportedCustomDirectEventTypeConstants() {
|
|
MapBuilder.Builder builder = MapBuilder.builder();
|
|
for (Events event : Events.values()) {
|
|
builder.put(event.toString(), MapBuilder.of("registrationName", event.toString()));
|
|
}
|
|
return builder.build();
|
|
}
|
|
|
|
@Override
|
|
@Nullable
|
|
public Map getExportedViewConstants() {
|
|
return MapBuilder.of(
|
|
"ScaleNone", Integer.toString(ScalableType.LEFT_TOP.ordinal()),
|
|
"ScaleToFill", Integer.toString(ScalableType.FIT_XY.ordinal()),
|
|
"ScaleAspectFit", Integer.toString(ScalableType.FIT_CENTER.ordinal()),
|
|
"ScaleAspectFill", Integer.toString(ScalableType.CENTER_CROP.ordinal())
|
|
);
|
|
}
|
|
|
|
@ReactProp(name = PROP_SRC)
|
|
public void setSrc(final ReactVideoView videoView, @Nullable ReadableMap src) {
|
|
int mainVer = src.getInt(PROP_SRC_MAINVER);
|
|
int patchVer = src.getInt(PROP_SRC_PATCHVER);
|
|
if(mainVer<0) { mainVer = 0; }
|
|
if(patchVer<0) { patchVer = 0; }
|
|
if(mainVer>0) {
|
|
videoView.setSrc(
|
|
src.getString(PROP_SRC_URI),
|
|
src.getString(PROP_SRC_TYPE),
|
|
src.getBoolean(PROP_SRC_IS_NETWORK),
|
|
src.getBoolean(PROP_SRC_IS_ASSET),
|
|
src.getMap(PROP_SRC_HEADERS),
|
|
mainVer,
|
|
patchVer
|
|
);
|
|
}
|
|
else {
|
|
videoView.setSrc(
|
|
src.getString(PROP_SRC_URI),
|
|
src.getString(PROP_SRC_TYPE),
|
|
src.getBoolean(PROP_SRC_IS_NETWORK),
|
|
src.getBoolean(PROP_SRC_IS_ASSET),
|
|
src.getMap(PROP_SRC_HEADERS)
|
|
);
|
|
}
|
|
}
|
|
|
|
@ReactProp(name = PROP_RESIZE_MODE)
|
|
public void setResizeMode(final ReactVideoView videoView, final String resizeModeOrdinalString) {
|
|
videoView.setResizeModeModifier(ScalableType.values()[Integer.parseInt(resizeModeOrdinalString)]);
|
|
}
|
|
|
|
@ReactProp(name = PROP_REPEAT, defaultBoolean = false)
|
|
public void setRepeat(final ReactVideoView videoView, final boolean repeat) {
|
|
videoView.setRepeatModifier(repeat);
|
|
}
|
|
|
|
@ReactProp(name = PROP_PAUSED, defaultBoolean = false)
|
|
public void setPaused(final ReactVideoView videoView, final boolean paused) {
|
|
videoView.setPausedModifier(paused);
|
|
}
|
|
|
|
@ReactProp(name = PROP_MUTED, defaultBoolean = false)
|
|
public void setMuted(final ReactVideoView videoView, final boolean muted) {
|
|
videoView.setMutedModifier(muted);
|
|
}
|
|
|
|
@ReactProp(name = PROP_VOLUME, defaultFloat = 1.0f)
|
|
public void setVolume(final ReactVideoView videoView, final float volume) {
|
|
videoView.setVolumeModifier(volume);
|
|
}
|
|
|
|
@ReactProp(name = PROP_STEREO_PAN)
|
|
public void setStereoPan(final ReactVideoView videoView, final float stereoPan) {
|
|
videoView.setStereoPan(stereoPan);
|
|
}
|
|
|
|
@ReactProp(name = PROP_PROGRESS_UPDATE_INTERVAL, defaultFloat = 250.0f)
|
|
public void setProgressUpdateInterval(final ReactVideoView videoView, final float progressUpdateInterval) {
|
|
videoView.setProgressUpdateInterval(progressUpdateInterval);
|
|
}
|
|
|
|
@ReactProp(name = PROP_SEEK)
|
|
public void setSeek(final ReactVideoView videoView, final float seek) {
|
|
videoView.seekTo(Math.round(seek * 1000.0f));
|
|
}
|
|
|
|
@ReactProp(name = PROP_RATE)
|
|
public void setRate(final ReactVideoView videoView, final float rate) {
|
|
videoView.setRateModifier(rate);
|
|
}
|
|
|
|
@ReactProp(name = PROP_FULLSCREEN, defaultBoolean = false)
|
|
public void setFullscreen(final ReactVideoView videoView, final boolean fullscreen) {
|
|
videoView.setFullscreen(fullscreen);
|
|
}
|
|
|
|
@ReactProp(name = PROP_PLAY_IN_BACKGROUND, defaultBoolean = false)
|
|
public void setPlayInBackground(final ReactVideoView videoView, final boolean playInBackground) {
|
|
videoView.setPlayInBackground(playInBackground);
|
|
}
|
|
|
|
@ReactProp(name = PROP_CONTROLS, defaultBoolean = false)
|
|
public void setControls(final ReactVideoView videoView, final boolean controls) {
|
|
videoView.setControls(controls);
|
|
}
|
|
}
|