This repository was archived by the owner on Nov 19, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathRNOpenTokSubscriberView.java
More file actions
109 lines (85 loc) · 3.29 KB
/
RNOpenTokSubscriberView.java
File metadata and controls
109 lines (85 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package com.rnopentok;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.ThemedReactContext;
import com.opentok.android.BaseVideoRenderer;
import com.opentok.android.OpentokError;
import com.opentok.android.Session;
import com.opentok.android.Stream;
import com.opentok.android.Subscriber;
import com.opentok.android.SubscriberKit;
public class RNOpenTokSubscriberView extends RNOpenTokView implements SubscriberKit.SubscriberListener {
private Subscriber mSubscriber;
private Boolean mAudioEnabled;
private Boolean mVideoEnabled;
public RNOpenTokSubscriberView(ThemedReactContext context) {
super(context);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
RNOpenTokSessionManager.getSessionManager().setSubscriberListener(mSessionId, this);
}
public void setAudio(Boolean enabled) {
if (mSubscriber != null) {
mSubscriber.setSubscribeToAudio(enabled);
}
mAudioEnabled = enabled;
}
public void setVideo(Boolean enabled) {
if (mSubscriber != null) {
mSubscriber.setSubscribeToVideo(enabled);
}
mVideoEnabled = enabled;
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
RNOpenTokSessionManager.getSessionManager().removeSubscriberListener(mSessionId);
}
private void startSubscribing(Stream stream) {
mSubscriber = new Subscriber(getContext(), stream);
mSubscriber.setSubscriberListener(this);
mSubscriber.setSubscribeToAudio(mAudioEnabled);
mSubscriber.setSubscribeToVideo(mVideoEnabled);
mSubscriber.getRenderer().setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE,
BaseVideoRenderer.STYLE_VIDEO_FILL);
Session session = RNOpenTokSessionManager.getSessionManager().getSession(mSessionId);
session.subscribe(mSubscriber);
attachSubscriberView();
}
private void attachSubscriberView() {
addView(mSubscriber.getView(), new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
requestLayout();
}
private void cleanUpSubscriber() {
if ( mSubscriber != null ) {
removeView(mSubscriber.getView());
mSubscriber.destroy();
mSubscriber = null;
}
}
public void onStreamReceived(Session session, Stream stream) {
if (mSubscriber == null) {
startSubscribing(stream);
sendEvent(Events.EVENT_SUBSCRIBE_START, Arguments.createMap());
}
}
public void onStreamDropped(Session session, Stream stream) {
sendEvent(Events.EVENT_SUBSCRIBE_STOP, Arguments.createMap());
}
/** Subscribe listener **/
@Override
public void onConnected(SubscriberKit subscriberKit) {}
@Override
public void onDisconnected(SubscriberKit subscriberKit) {
cleanUpSubscriber();
}
@Override
public void onError(SubscriberKit subscriberKit, OpentokError opentokError) {
WritableMap payload = Arguments.createMap();
payload.putString("connectionId", opentokError.toString());
sendEvent(Events.EVENT_SUBSCRIBE_ERROR, payload);
cleanUpSubscriber();
}
}