8000 Merge pull request #2 from p-miyamoto/add/focus-change-listener · develoat/flutter-webrtc@71205ed · GitHub
[go: up one dir, main page]

Skip to content

Commit 71205ed

Browse files
authored
Merge pull request #2 from p-miyamoto/add/focus-change-listener
Add/focus change listener
2 parents 6eab664 + 4673ae7 commit 71205ed

File tree

5 files changed

+95
-7
lines changed

5 files changed

+95
-7
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/FlutterWebRTCPlugin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,15 @@ private void startListening(final Context context, BinaryMessenger messenger,
109109
methodCallHandler = new MethodCallHandlerImpl(context, messenger, textureRegistry);
110110
methodChannel = new MethodChannel(messenger, "FlutterWebRTC.Method");
111111
methodChannel.setMethodCallHandler(methodCallHandler);
112-
eventChannel = new EventChannel( messenger,"FlutterWebRTC.Event");
113-
eventChannel.setStreamHandler(this);
112+
// eventChannel = new EventChannel( messenger,"FlutterWebRTC.Event");
113+
// eventChannel.setStreamHandler(this);
114114
}
115115

116116
private void stopListening() {
117117
methodCallHandler.dispose();
118118
methodCallHandler = null;
119119
methodChannel.setMethodCallHandler(null);
120-
eventChannel.setStreamHandler(null);
120+
// eventChannel.setStreamHandler(null);
121121
}
122122

123123
@Override

android/src/main/java/com/cloudwebrtc/webrtc/MethodCallHandlerImpl.java

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.cloudwebrtc.webrtc.record.AudioChannel;
2424
import com.cloudwebrtc.webrtc.record.FrameCapturer;
2525
import com.cloudwebrtc.webrtc.utils.AnyThreadResult;
26+
import com.cloudwebrtc.webrtc.utils.AnyThreadSink;
2627
import com.cloudwebrtc.webrtc.utils.Callback;
2728
import com.cloudwebrtc.webrtc.utils.ConstraintsArray;
2829
import com.cloudwebrtc.webrtc.utils.ConstraintsMap;
@@ -86,7 +87,7 @@
8687
import io.flutter.view.TextureRegistry;
8788
import io.flutter.view.TextureRegistry.SurfaceTextureEntry;
8889

89-
public class MethodCallHandlerImpl implements MethodCallHandler, StateProvider {
90+
public class MethodCallHandlerImpl implements MethodCallHandler, StateProvider, EventChannel.StreamHandler {
9091
static public final String TAG = "FlutterWebRTCPlugin";
9192
static public final String NEXTAG = "NexWebRTCPlugin";
9293

@@ -111,10 +112,16 @@ public class MethodCallHandlerImpl implements MethodCallHandler, StateProvider {
111112

112113
private Activity activity;
113114

115+
private EventChannel eventChannel;
116+
private EventChannel.EventSink eventSink;
117+
114118
MethodCallHandlerImpl(Context context, BinaryMessenger messenger, TextureRegistry textureRegistry) {
115119
this.context = context;
116120
this.textures = textureRegistry;
117121
this.messenger = messenger;
122+
123+
eventChannel = new EventChannel( messenger,"FlutterWebRTC.Event");
124+
eventChannel.setStreamHandler(this);
118125
}
119126

120127
static private void resultError(String method, String error, Result result) {
@@ -137,6 +144,18 @@ void dispose() {
137144
peerConnectionDispose(connection);
138145
}
139146
mPeerConnectionObservers.clear();
147+
148+
eventChannel.setStreamHandler(null);
149+
}
150+
151+
@Override
152+
public void onListen(Object arguments, EventChannel.EventSink events) {
153+
eventSink = new AnyThreadSink(events);
154+
}
155+
156+
@Override
157+
public void onCancel(Object arguments) {
158+
eventSink = null;
140159
}
141160

142161
private void ensureInitialized() {
@@ -2008,9 +2027,9 @@ private void initAudioSwitch(){
20082027
AudioSwitchManager.instance.audioDeviceChangeListener = (devices, currentDevice) -> {
20092028
Log.w(TAG, "audioFocusChangeListener " + devices+ " " + currentDevice);
20102029
sendLog("audioDeviceChangeListener devices" + devices.toString() + " currentDevice" + currentDevice.toString());
2011-
// ConstraintsMap params = new ConstraintsMap();
2012-
// params.putString("event", "onDeviceChange");
2013-
// sendEvent(params.toMap());
2030+
ConstraintsMap params = new ConstraintsMap();
2031+
params.putString("event", "onDeviceChange");
2032+
sendEvent(params.toMap());
20142033
return null;
20152034
};
20162035
AudioSwitchManager.instance.audioFocusChangeListener = (focusChange) -> {
@@ -2026,10 +2045,32 @@ private void initAudioSwitch(){
20262045
//AUDIOFOCUS_LOSS (非フォーカス時)
20272046
sendLog("AUDIOFOCUS_LOSS availableAudioDevices" + AudioSwitchManager.instance.availableAudioDevices().toString() + " selectedAudioDevice" + AudioSwitchManager.instance.selectedAudioDevice().toString());
20282047
}
2048+
onAudioFocusChange(Integer.toString(focusChange));
20292049
};
20302050
}
20312051

2052+
public void sendEvent(Object event) {
2053+
if(eventSink != null) {
2054+
eventSink.success(event);
2055+
}
2056+
}
2057+
20322058
private void sendLog(String value){
20332059
Log.d(NEXTAG, value);
2060+
if(eventSink != null) {
2061+
ConstraintsMap params = new ConstraintsMap();
2062+
params.putString("event", "onLogger");
2063+
params.putString("value", value);
2064+
eventSink.success(params.toMap());
2065+
}
2066+
}
2067+
2068+
private void onAudioFocusChange(String value){
2069+
if(eventSink != null) {
2070+
ConstraintsMap params = new ConstraintsMap();
2071+
params.putString("event", "onAudioFocusChange");
2072+
params.putString("value", value);
2073+
eventSink.success(params.toMap());
2074+
}
20342075
}
20352076
}

lib/src/native/factory_impl.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,7 @@ Navigator get navigator => RTCFactoryNative.instance.navigator;
113113
DesktopCapturer get desktopCapturer => DesktopCapturerNative.instance;
114114

115115
MediaDevices get mediaDevices => MediaDeviceNative.instance;
116+
117+
StreamController<String> get logger => MediaDeviceNative.instance.logger;
118+
119+
StreamController<AndroidAudioFocusType?> get onAudioFocusChange => MediaDeviceNative.instance.onAudioFocusChange;

lib/src/native/mediadevices_impl.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,23 @@ class MediaDeviceNative extends MediaDevices {
1919

2020
static final MediaDeviceNative instance = MediaDeviceNative._internal();
2121

22+
final StreamController<String> logger =
23+
StreamController.broadcast();
24+
25+
final StreamController<AndroidAudioFocusType?> onAudioFocusChange =
26+
StreamController.broadcast();
27+
2228
void handleEvent(String event, final Map<dynamic, dynamic> map) async {
2329
switch (map['event']) {
2430
case 'onDeviceChange':
2531
ondevicechange?.call(null);
2632
break;
33+
case 'onAudioFocusChange':
34+
onAudioFocusChange.add(getFocusType(map['value']));
35+
break;
36+
case 'onLogger':
37+
logger.add(map['value']);
38+
break;
2739
}
2840
}
2941

@@ -108,4 +120,26 @@ class MediaDeviceNative extends MediaDevices {
108120
// TODO(cloudwebrtc): return the selected device
109121
return MediaDeviceInfo(label: 'label', deviceId: options!.deviceId);
110122
}
123+
124+
AndroidAudioFocusType? getFocusType(String? value){
125+
if(value != null){
126+
switch(int.tryParse(value)){
127+
case 1:
128+
return AndroidAudioFocusType.AUDIOFOCUS_GAIN;
129+
case 2:
130+
return AndroidAudioFocusType.AUDIOFOCUS_GAIN_TRANSIENT;
131+
case 3:
132+
return AndroidAudioFocusType.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
133+
case -1:
134+
return AndroidAudioFocusType.AUDIOFOCUS_LOSS;
135+
case -2:
136+
return AndroidAudioFocusType.AUDIOFOCUS_LOSS_TRANSIENT;
137+
case -3:
138+
return AndroidAudioFocusType.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK;
139+
default:
140+
return null;
141+
}
142+
}
143+
return null;
144+
}
111145
}

lib/src/native/utils.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,12 @@ class WebRTC {
2929
param,
3030
);
3131
}
32+
33+
enum AndroidAudioFocusType {
34+
AUDIOFOCUS_GAIN, //有効
35+
AUDIOFOCUS_GAIN_TRANSIENT, //一時有効
36+
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, //有効・ダッキング可能
37+
AUDIOFOCUS_LOSS, //無効
38+
AUDIOFOCUS_LOSS_TRANSIENT, //一時無効
39+
AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK, //無効・ダッキング可能
40+
}

0 commit comments

Comments
 (0)
0