Skip to content

Commit a6955ca

Browse files
author
Shahen Hovhannisyan
committed
feat(resizeMode): Added resizeMode prop for android
1 parent a5674d1 commit a6955ca

5 files changed

Lines changed: 74 additions & 26 deletions

File tree

android/react-native-video-processing.iml

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,6 @@
6666
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
6767
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
6868
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
69-
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
70-
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
71-
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
72-
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
73-
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
74-
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
75-
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
76-
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
7769
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
7870
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
7971
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -82,8 +74,14 @@
8274
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
8375
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
8476
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
85-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
86-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
77+
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
78+
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
79+
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
80+
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
81+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
82+
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
83+
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
84+
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
8785
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/jars" />
8886
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.0.1/jars" />
8987
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars" />
@@ -97,13 +95,6 @@
9795
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.yqritc/android-scalablevideoview/1.0.4/jars" />
9896
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/org.webkit/android-jsc/r174650/jars" />
9997
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
100-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
101-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
102-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
103-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
104-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
105-
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
106-
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
10798
</content>
10899
<orderEntry type="jdk" jdkName="Android API 23 Platform (1)" jdkType="Android SDK" />
109100
<orderEntry type="sourceFolder" forTests="false" />

android/src/main/java/com/shahenlibrary/VideoPlayer/VideoPlayerView.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public class VideoPlayerView extends ScalableVideoView implements
6262
private RCTEventEmitter eventEmitter;
6363
private String mediaSource;
6464
private boolean mPlay = true;
65+
private ScalableType mResizeMode = ScalableType.FIT_XY;
6566
private String LOG_TAG = "RNVideoProcessing";
6667
private Runnable progressRunnable = null;
6768
private Handler progressUpdateHandler = new Handler();
@@ -71,6 +72,7 @@ public class VideoPlayerView extends ScalableVideoView implements
7172
private int videoEndAt = -1;
7273
private boolean mLooping = false;
7374
private float mVolume = 10f;
75+
private ScalableType resizeMode;
7476

7577

7678
public VideoPlayerView(ThemedReactContext ctx) {
@@ -380,7 +382,7 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto
380382
@Override
381383
public void onPrepared(MediaPlayer mp) {
382384
videoEndAt = mp.getDuration();
383-
setScalableType(ScalableType.FIT_XY);
385+
setScalableType(mResizeMode);
384386
invalidate();
385387

386388
applyProps();
@@ -447,4 +449,18 @@ public boolean canSeekForward() {
447449
public int getAudioSessionId() {
448450
return 0;
449451
}
452+
453+
public void setResizeMode(@Nullable ScalableType resizeMode) {
454+
if (resizeMode == null) {
455+
return;
456+
}
457+
Log.d(LOG_TAG, "setResizeMode: " + resizeMode.toString());
458+
mResizeMode = resizeMode;
459+
460+
if (mMediaPlayer == null) {
461+
return;
462+
}
463+
setScalableType(mResizeMode);
464+
invalidate();
465+
}
450466
}

android/src/main/java/com/shahenlibrary/VideoPlayer/VideoPlayerViewManager.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.facebook.react.uimanager.ThemedReactContext;
3636
import com.shahenlibrary.Events.EventsEnum;
3737
import com.shahenlibrary.Events.Events;
38+
import com.yqritc.scalablevideoview.ScalableType;
3839

3940
import java.util.Map;
4041

@@ -50,6 +51,7 @@ public class VideoPlayerViewManager extends SimpleViewManager<VideoPlayerView> {
5051
private final String SET_PROGRESS_DELAY = "progressEventDelay";
5152
private final String SET_VIDEO_END_TIME = "endTime";
5253
private final String SET_VIDEO_START_TIME = "startTime";
54+
private final String SET_VIDEO_RESIZE_MODE = "resizeMode";
5355

5456
private final int COMMAND_GET_INFO = 1;
5557
private final int COMMAND_TRIM_MEDIA = 2;
@@ -102,6 +104,17 @@ public Map<String, Integer> getCommandsMap() {
102104
);
103105
}
104106

107+
@Nullable
108+
@Override
109+
public Map getExportedViewConstants() {
110+
return MapBuilder.of(
111+
"ScaleNone", Integer.toString(ScalableType.LEFT_TOP.ordinal()),
112+
"ScaleToFill", Integer.toString(ScalableType.FIT_XY.ordinal()),
113+
"ScaleAspectFit", Integer.toString(ScalableType.FIT_CENTER.ordinal()),
114+
"ScaleAspectFill", Integer.toString(ScalableType.CENTER_CROP.ordinal())
115+
);
116+
}
117+
105118
@Override
106119
public void receiveCommand(VideoPlayerView root, int commandId, @Nullable ReadableArray args) {
107120
assert args != null;
@@ -176,4 +189,9 @@ public void setVideoStartTime(final VideoPlayerView player, float startTime) {
176189
Log.d(VideoPlayerViewManager.REACT_PACKAGE, "setVideoStartTime: " + String.valueOf(startTime));
177190
player.setVideoStartAt(mStart);
178191
}
192+
193+
@ReactProp(name = SET_VIDEO_RESIZE_MODE)
194+
public void setResizeMode(final VideoPlayerView player, String resizeModeOrdinalString) {
195+
player.setResizeMode(ScalableType.values()[Integer.parseInt(resizeModeOrdinalString)]);
196+
}
179197
}

lib/VideoPlayer/VideoPlayer.android.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ import { getActualSource } from '../utils';
1515
const ProcessingUI = UIManager.RNVideoProcessing;
1616

1717
export class VideoPlayer extends Component {
18+
static Constants = {
19+
resizeMode: {
20+
CONTAIN: ProcessingUI.Constants.ScaleAspectFit,
21+
COVER: ProcessingUI.Constants.ScaleAspectFill,
22+
STRETCH: ProcessingUI.Constants.ScaleToFill,
23+
NONE: ProcessingUI.Constants.ScaleNone
24+
}
25+
};
1826
static propTypes = {
1927
...View.propTypes,
2028
play: PropTypes.bool,
@@ -25,10 +33,11 @@ export class VideoPlayer extends Component {
2533
endTime: PropTypes.number,
2634
startTime: PropTypes.number,
2735
progressEventDelay: PropTypes.number,
28-
source: PropTypes.string.isRequired
36+
source: PropTypes.string.isRequired,
37+
resizeMode: PropTypes.string
2938
};
3039
static defaultProps = {
31-
onChange: noop
40+
onChange: noop,
3241
};
3342

3443
constructor(props) {
@@ -124,9 +133,21 @@ export class VideoPlayer extends Component {
124133
replay,
125134
volume,
126135
style,
136+
resizeMode,
127137
...props
128138
} = this.props;
129139
const mSource = getActualSource(source);
140+
141+
if (__DEV__) {
142+
const isCompatible = Object
143+
.values(VideoPlayer.Constants.resizeMode)
144+
.includes(resizeMode);
145+
146+
if (!isCompatible) {
147+
console.warn('Wrong resizeMode property, please use VideoPlayer.Constants.resizeMode constants');
148+
}
149+
}
150+
130151
return (
131152
<RNVideoPlayer
132153
style={style}
@@ -140,6 +161,7 @@ export class VideoPlayer extends Component {
140161
endTime={endTime}
141162
startTime={startTime}
142163
replay={replay}
164+
resizeMode={resizeMode}
143165
volume={volume}
144166
{...props}
145167
/>

lib/VideoPlayer/VideoPlayer.ios.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,12 +175,13 @@ export class VideoPlayer extends Component {
175175
...viewProps
176176
} = this.props;
177177

178-
const isCompatible = Object
179-
.values(VideoPlayer.Constants.resizeMode)
180-
.includes(resizeMode);
181-
182-
if (!isCompatible) {
183-
console.warn('Wrong resizeMode property, please use VideoPlayer.Constants.resizeMode constants');
178+
if (__DEV__) {
179+
const isCompatible = Object
180+
.values(VideoPlayer.Constants.resizeMode)
181+
.includes(resizeMode);
182+
if (!isCompatible) {
183+
console.warn('Wrong resizeMode property, please use VideoPlayer.Constants.resizeMode constants');
184+
}
184185
}
185186

186187
const actualSource = getActualSource(source);

0 commit comments

Comments
 (0)