1
1
package jp .manse ;
2
2
3
3
import android .graphics .Color ;
4
+ import android .os .Handler ;
4
5
import android .support .v4 .view .ViewCompat ;
5
6
import android .util .AttributeSet ;
6
7
import android .util .Log ;
7
8
import android .view .SurfaceView ;
8
- import android .view .ViewGroup ;
9
- import android .widget .FrameLayout ;
9
+ import android .view .View ;
10
10
import android .widget .RelativeLayout ;
11
11
12
12
import com .brightcove .player .edge .Catalog ;
25
25
import com .facebook .react .uimanager .ThemedReactContext ;
26
26
import com .facebook .react .uimanager .events .RCTEventEmitter ;
27
27
28
+ import java .util .Map ;
29
+
28
30
public class BrightcovePlayerView extends RelativeLayout {
31
+ private ThemedReactContext context ;
29
32
private BrightcoveExoPlayerVideoView playerVideoView ;
33
+ private BrightcoveMediaController mediaController ;
30
34
private String policyKey ;
31
35
private String accountId ;
32
36
private String videoId ;
33
37
private String referenceId ;
34
38
private Catalog catalog ;
35
- private Boolean autoPlay = true ;
36
- private Boolean playing = false ;
39
+ private boolean autoPlay = true ;
40
+ private boolean playing = false ;
41
+ private boolean fullscreen = false ;
37
42
38
43
public BrightcovePlayerView (ThemedReactContext context ) {
39
44
this (context , null );
40
45
}
41
46
42
47
public BrightcovePlayerView (ThemedReactContext context , AttributeSet attrs ) {
43
48
super (context , attrs );
49
+ this .context = context ;
44
50
this .setBackgroundColor (Color .BLACK );
45
- this .playerVideoView = new BrightcoveExoPlayerVideoView (context );
51
+
52
+ this .playerVideoView = new BrightcoveExoPlayerVideoView (this .context );
46
53
this .addView (this .playerVideoView );
47
54
this .playerVideoView .setLayoutParams (new RelativeLayout .LayoutParams (LayoutParams .MATCH_PARENT , LayoutParams .MATCH_PARENT ));
48
55
this .playerVideoView .finishInitialization ();
49
- this .playerVideoView .setMediaController (new BrightcoveMediaController (this .playerVideoView ));
56
+ this .mediaController = new BrightcoveMediaController (this .playerVideoView );
57
+ this .playerVideoView .setMediaController (this .mediaController );
58
+ this .requestLayout ();
50
59
ViewCompat .setTranslationZ (this , 9999 );
51
60
52
61
EventEmitter eventEmitter = this .playerVideoView .getEventEmitter ();
@@ -103,17 +112,39 @@ public void processEvent(Event e) {
103
112
eventEmitter .on (EventType .ENTER_FULL_SCREEN , new EventListener () {
104
113
@ Override
105
114
public void processEvent (Event e ) {
115
+ mediaController .show ();
106
116
WritableMap event = Arguments .createMap ();
107
117
ReactContext reactContext = (ReactContext ) BrightcovePlayerView .this .getContext ();
108
- reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (BrightcovePlayerView .this .getId (), BrightcovePlayerManager .EVENT_FULLSCREEN , event );
118
+ reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (BrightcovePlayerView .this .getId (), BrightcovePlayerManager .EVENT_TOGGLE_ANDROID_FULLSCREEN , event );
109
119
}
110
120
});
111
121
eventEmitter .on (EventType .EXIT_FULL_SCREEN , new EventListener () {
112
122
@ Override
113
123
public void processEvent (Event e ) {
124
+ mediaController .show ();
114
125
WritableMap event = Arguments .createMap ();
115
126
ReactContext reactContext = (ReactContext ) BrightcovePlayerView .this .getContext ();
116
- reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (BrightcovePlayerView .this .getId (), BrightcovePlayerManager .EVENT_FULLSCREEN , event );
127
+ reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (BrightcovePlayerView .this .getId (), BrightcovePlayerManager .EVENT_TOGGLE_ANDROID_FULLSCREEN , event );
128
+ }
129
+ });
130
+ eventEmitter .on (EventType .VIDEO_DURATION_CHANGED , new EventListener () {
131
+ @ Override
132
+ public void processEvent (Event e ) {
133
+ Integer duration = (Integer )e .properties .get (Event .VIDEO_DURATION );
134
+ WritableMap event = Arguments .createMap ();
135
+ event .putDouble ("duration" , duration / 1000d );
136
+ ReactContext reactContext = (ReactContext ) BrightcovePlayerView .this .getContext ();
137
+ reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (BrightcovePlayerView .this .getId (), BrightcovePlayerManager .EVENT_CHANGE_DURATION , event );
138
+ }
139
+ });
140
+ eventEmitter .on (EventType .BUFFERED_UPDATE , new EventListener () {
141
+ @ Override
142
+ public void processEvent (Event e ) {
143
+ Integer percentComplete = (Integer )e .properties .get (Event .PERCENT_COMPLETE );
144
+ WritableMap event = Arguments .createMap ();
145
+ event .putDouble ("bufferProgress" , percentComplete / 100d );
146
+ ReactContext reactContext = (ReactContext ) BrightcovePlayerView .this .getContext ();
147
+ reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (BrightcovePlayerView .this .getId (), BrightcovePlayerManager .EVENT_UPDATE_BUFFER_PROGRESS , event );
117
148
}
118
149
});
119
150
}
@@ -144,11 +175,11 @@ public void setReferenceId(String referenceId) {
144
175
this .loadMovie ();
145
176
}
146
177
147
- public void setAutoPlay (Boolean autoPlay ) {
178
+ public void setAutoPlay (boolean autoPlay ) {
148
179
this .autoPlay = autoPlay ;
149
180
}
150
181
151
- public void setPlay (Boolean play ) {
182
+ public void setPlay (boolean play ) {
152
183
if (this .playing == play ) return ;
153
184
if (play ) {
154
185
this .playerVideoView .start ();
@@ -157,6 +188,19 @@ public void setPlay(Boolean play) {
157
188
}
158
189
}
159
190
191
+ public void setDefaultControlDisabled (boolean disabled ) {
192
+ this .mediaController .hide ();
193
+ this .mediaController .setShowHideTimeout (disabled ? 1 : 4000 );
194
+ }
195
+
196
+ public void setFullscreen (boolean fullscreen ) {
197
+ this .mediaController .show ();
198
+ WritableMap event = Arguments .createMap ();
199
+ event .putBoolean ("fullscreen" , fullscreen );
200
+ ReactContext reactContext = (ReactContext ) BrightcovePlayerView .this .getContext ();
201
+ reactContext .getJSModule (RCTEventEmitter .class ).receiveEvent (BrightcovePlayerView .this .getId (), BrightcovePlayerManager .EVENT_TOGGLE_ANDROID_FULLSCREEN , event );
202
+ }
203
+
160
204
public void seekTo (int time ) {
161
205
this .playerVideoView .seekTo (time );
162
206
}
@@ -197,4 +241,11 @@ private void fixVideoLayout() {
197
241
int topOffset = (viewHeight - surfaceHeight ) / 2 ;
198
242
surfaceView .layout (leftOffset , topOffset , leftOffset + surfaceWidth , topOffset + surfaceHeight );
199
243
}
244
+
245
+ private void printKeys (Map <String , Object > map ) {
246
+ Log .d ("debug" , "-----------" );
247
+ for (Map .Entry <String , Object > entry : map .entrySet ()) {
248
+ Log .d ("debug" , entry .getKey ());
249
+ }
250
+ }
200
251
}
0 commit comments