Skip to content

Commit 8621ba9

Browse files
authored
Merge pull request #62 from GetStream/fix/reapply-autio-config
fix: reapply android audio config after audio changes to ensure custom configuration is maintained
2 parents 8a65d1c + c8ede8b commit 8621ba9

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

android/src/main/java/io/getstream/webrtc/flutter/FlutterWebRTCPlugin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,10 @@ public void onDetachedFromActivity() {
121121

122122
private void startListening(final Context context, BinaryMessenger messenger,
123123
TextureRegistry textureRegistry) {
124-
AudioSwitchManager.instance = new AudioSwitchManager(context);
124+
if (AudioSwitchManager.instance == null) {
125+
AudioSwitchManager.instance = new AudioSwitchManager(context);
126+
}
127+
125128
methodCallHandler = new MethodCallHandlerImpl(context, messenger, textureRegistry);
126129
methodChannel = new MethodChannel(messenger, "FlutterWebRTC.Method");
127130
methodChannel.setMethodCallHandler(methodCallHandler);

android/src/main/java/io/getstream/webrtc/flutter/audio/AudioSwitchManager.java

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,13 @@ public void start() {
159159
handler.removeCallbacksAndMessages(null);
160160
handler.postAtFrontOfQueue(() -> {
161161
if (!isActive) {
162+
applyAudioConfiguration();
163+
162164
audioSwitch.activate();
163165
isActive = true;
164-
}
166+
167+
applyAudioManagerSettings();
168+
}
165169
});
166170
}
167171
}
@@ -204,7 +208,9 @@ public void selectAudioOutput(@NonNull Class<? extends AudioDevice> audioDeviceC
204208
}
205209
if (audioDevice != null) {
206210
Objects.requireNonNull(audioSwitch).selectDevice(audioDevice);
207-
}
211+
applyAudioConfiguration();
212+
applyAudioManagerSettings();
213+
}
208214
});
209215
}
210216

@@ -248,6 +254,8 @@ public void enableSpeakerphone(boolean enable) {
248254
} else {
249255
handler.post(() -> {
250256
Objects.requireNonNull(audioSwitch).selectDevice(null);
257+
applyAudioConfiguration();
258+
applyAudioManagerSettings();
251259
});
252260
}
253261
}
@@ -407,6 +415,24 @@ private void applyAudioManagerSettings() {
407415
audioManager.setMode(audioMode);
408416
}
409417

418+
private void applyAudioConfiguration() {
419+
if (audioSwitch == null) {
420+
return;
421+
}
422+
423+
handler.post(() -> {
424+
Objects.requireNonNull(audioSwitch).setManageAudioFocus(manageAudioFocus);
425+
Objects.requireNonNull(audioSwitch).setFocusMode(focusMode);
426+
Objects.requireNonNull(audioSwitch).setAudioMode(audioMode);
427+
Objects.requireNonNull(audioSwitch).setAudioStreamType(audioStreamType);
428+
Objects.requireNonNull(audioSwitch).setAudioAttributeContentType(audioAttributeContentType);
429+
Objects.requireNonNull(audioSwitch).setAudioAttributeUsageType(audioAttributeUsageType);
430+
Objects.requireNonNull(audioSwitch).setForceHandleAudioRouting(forceHandleAudioRouting);
431+
432+
applyAudioManagerSettings();
433+
});
434+
}
435+
410436
public void clearCommunicationDevice() {
411437
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
412438
audioManager.clearCommunicationDevice();
@@ -420,12 +446,16 @@ public void setAudioFocusChangeListener(@Nullable AudioManager.OnAudioFocusChang
420446
public void requestAudioFocus() {
421447
handler.post(() -> {
422448
if (audioSwitch != null) {
449+
applyAudioConfiguration();
450+
423451
Objects.requireNonNull(audioSwitch).activate();
452+
453+
applyAudioManagerSettings();
424454
}
425455
});
426456
}
427457

428-
private static final class ForwardingAudioFocusChangeListener implements AudioManager.OnAudioFocusChangeListener {
458+
private final class ForwardingAudioFocusChangeListener implements AudioManager.OnAudioFocusChangeListener {
429459
@Nullable
430460
private volatile AudioManager.OnAudioFocusChangeListener delegate;
431461

@@ -435,6 +465,13 @@ public void onAudioFocusChange(int focusChange) {
435465
if (current != null) {
436466
current.onAudioFocusChange(focusChange);
437467
}
468+
469+
if (focusChange == AudioManager.AUDIOFOCUS_GAIN ||
470+
focusChange == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT ||
471+
focusChange == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) {
472+
applyAudioConfiguration();
473+
applyAudioManagerSettings();
474+
}
438475
}
439476

440477
void setDelegate(@Nullable AudioManager.OnAudioFocusChangeListener delegate) {

0 commit comments

Comments
 (0)