Handle bluetooth permission crash during calls.

This commit is contained in:
Cody Henthorne
2022-05-13 12:39:23 -04:00
committed by GitHub
parent 97d41fdd1e
commit a3bbf944e5
10 changed files with 65 additions and 2 deletions

View File

@@ -309,6 +309,10 @@ private void processStateless(@NonNull Function1<WebRtcEphemeralState, WebRtcEph
process((s, p) -> p.handleAudioDeviceChanged(s, activeDevice, availableDevices));
}
public void onBluetoothPermissionDenied() {
process((s, p) -> p.handleBluetoothPermissionDenied(s));
}
public void selectAudioDevice(@NonNull SignalAudioManager.AudioDevice desiredDevice) {
process((s, p) -> p.handleSetUserAudioDevice(s, desiredDevice));
}

View File

@@ -457,6 +457,13 @@ public abstract class WebRtcActionProcessor {
return currentState;
}
public @NonNull WebRtcServiceState handleBluetoothPermissionDenied(@NonNull WebRtcServiceState currentState) {
return currentState.builder()
.changeLocalDeviceState()
.setBluetoothPermissionDenied(true)
.build();
}
protected @NonNull WebRtcServiceState handleSetUserAudioDevice(@NonNull WebRtcServiceState currentState, @NonNull SignalAudioManager.AudioDevice userDevice) {
Log.i(tag, "handleSetUserAudioDevice not processed");
return currentState;

View File

@@ -267,6 +267,11 @@ public final class WebRtcCallService extends Service implements SignalAudioManag
callManager.onAudioDeviceChanged(activeDevice, availableDevices);
}
@Override
public void onBluetoothPermissionDenied() {
callManager.onBluetoothPermissionDenied();
}
private class HangUpRtcOnPstnCallAnsweredListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, @NonNull String phoneNumber) {

View File

@@ -14,7 +14,8 @@ data class LocalDeviceState constructor(
var isLandscapeEnabled: Boolean = false,
var deviceOrientation: Orientation = Orientation.PORTRAIT_BOTTOM_EDGE,
var activeDevice: SignalAudioManager.AudioDevice = SignalAudioManager.AudioDevice.NONE,
var availableDevices: Set<SignalAudioManager.AudioDevice> = emptySet()
var availableDevices: Set<SignalAudioManager.AudioDevice> = emptySet(),
var bluetoothPermissionDenied: Boolean = false
) {
fun duplicate(): LocalDeviceState {

View File

@@ -125,6 +125,11 @@ public class WebRtcServiceStateBuilder {
toBuild.setAvailableDevices(availableDevices);
return this;
}
public @NonNull LocalDeviceStateBuilder setBluetoothPermissionDenied(boolean bluetoothPermissionDenied) {
toBuild.setBluetoothPermissionDenied(bluetoothPermissionDenied);
return this;
}
}
public class CallSetupStateBuilder {