diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java index bf8849acb..3659c56cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/CallSetupActionProcessorDelegate.java @@ -54,6 +54,9 @@ public class CallSetupActionProcessorDelegate extends WebRtcActionProcessor { .changeCallInfoState() .callState(WebRtcViewModel.State.CALL_CONNECTED) .callConnectedTime(System.currentTimeMillis()) + .commit() + .changeLocalDeviceState() + .wantsBluetooth(true) .build(); webRtcInteractor.setCallInProgressNotification(TYPE_ESTABLISHED, activePeer); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/DeviceAwareActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/DeviceAwareActionProcessor.java index 8ca8a1477..7ccd9bcb3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/DeviceAwareActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/DeviceAwareActionProcessor.java @@ -42,6 +42,10 @@ public abstract class DeviceAwareActionProcessor extends WebRtcActionProcessor { protected @NonNull WebRtcServiceState handleBluetoothChange(@NonNull WebRtcServiceState currentState, boolean available) { Log.i(tag, "handleBluetoothChange(): " + available); + if (available && currentState.getLocalDeviceState().wantsBluetooth()) { + webRtcInteractor.setWantsBluetoothConnection(true); + } + return currentState.builder() .changeLocalDeviceState() .isBluetoothAvailable(available) @@ -63,7 +67,10 @@ public abstract class DeviceAwareActionProcessor extends WebRtcActionProcessor { webRtcInteractor.postStateUpdate(currentState); - return currentState; + return currentState.builder() + .changeLocalDeviceState() + .wantsBluetooth(false) + .build(); } @Override @@ -78,7 +85,10 @@ public abstract class DeviceAwareActionProcessor extends WebRtcActionProcessor { webRtcInteractor.postStateUpdate(currentState); - return currentState; + return currentState.builder() + .changeLocalDeviceState() + .wantsBluetooth(isBluetooth) + .build(); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupJoiningActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupJoiningActionProcessor.java index 206d56d9f..e63f0bfc6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupJoiningActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupJoiningActionProcessor.java @@ -86,6 +86,9 @@ public class GroupJoiningActionProcessor extends GroupActionProcessor { .groupCallState(WebRtcViewModel.GroupCallState.CONNECTED_AND_JOINED) .callConnectedTime(System.currentTimeMillis()) .commit() + .changeLocalDeviceState() + .wantsBluetooth(true) + .commit() .actionProcessor(new GroupConnectedActionProcessor(webRtcInteractor)) .build(); } else if (device.getJoinState() == GroupCall.JoinState.JOINING) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java index 4e887943a..2a68ba2ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java @@ -164,6 +164,9 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor { .changeCallInfoState() .callState(WebRtcViewModel.State.CALL_OUTGOING) .groupCallState(WebRtcViewModel.GroupCallState.CONNECTED_AND_JOINING) + .commit() + .changeLocalDeviceState() + .wantsBluetooth(true) .build(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java index b7b0c98b3..104da7728 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java @@ -83,6 +83,9 @@ public class OutgoingCallActionProcessor extends DeviceAwareActionProcessor { return builder.changeCallInfoState() .activePeer(remotePeer) .callState(WebRtcViewModel.State.CALL_OUTGOING) + .commit() + .changeLocalDeviceState() + .wantsBluetooth(true) .build(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java index 3aa176d2f..b569668d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java @@ -547,6 +547,9 @@ public abstract class WebRtcActionProcessor { .changeCallInfoState() .activePeer(null) .commit() + .changeLocalDeviceState() + .wantsBluetooth(false) + .commit() .actionProcessor(currentState.getCallInfoState().getCallState() == WebRtcViewModel.State.CALL_DISCONNECTED ? new DisconnectingCallActionProcessor(webRtcInteractor) : new IdleActionProcessor(webRtcInteractor)) .terminate() .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/LocalDeviceState.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/LocalDeviceState.java index fea03b538..80f42b972 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/LocalDeviceState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/LocalDeviceState.java @@ -12,20 +12,27 @@ public final class LocalDeviceState { CameraState cameraState; boolean microphoneEnabled; boolean bluetoothAvailable; + boolean wantsBluetooth; Orientation orientation; LocalDeviceState() { - this(CameraState.UNKNOWN, true, false, Orientation.PORTRAIT_BOTTOM_EDGE); + this(CameraState.UNKNOWN, true, false, false, Orientation.PORTRAIT_BOTTOM_EDGE); } LocalDeviceState(@NonNull LocalDeviceState toCopy) { - this(toCopy.cameraState, toCopy.microphoneEnabled, toCopy.bluetoothAvailable, toCopy.orientation); + this(toCopy.cameraState, toCopy.microphoneEnabled, toCopy.bluetoothAvailable, toCopy.wantsBluetooth, toCopy.orientation); } - LocalDeviceState(@NonNull CameraState cameraState, boolean microphoneEnabled, boolean bluetoothAvailable, @NonNull Orientation orientation) { + LocalDeviceState(@NonNull CameraState cameraState, + boolean microphoneEnabled, + boolean bluetoothAvailable, + boolean wantsBluetooth, + @NonNull Orientation orientation) + { this.cameraState = cameraState; this.microphoneEnabled = microphoneEnabled; this.bluetoothAvailable = bluetoothAvailable; + this.wantsBluetooth = wantsBluetooth; this.orientation = orientation; } @@ -41,6 +48,10 @@ public final class LocalDeviceState { return bluetoothAvailable; } + public boolean wantsBluetooth() { + return wantsBluetooth; + } + public @NonNull Orientation getOrientation() { return orientation; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/WebRtcServiceStateBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/WebRtcServiceStateBuilder.java index 0761bd91d..a8fe13cc6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/WebRtcServiceStateBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/WebRtcServiceStateBuilder.java @@ -101,6 +101,11 @@ public class WebRtcServiceStateBuilder { return this; } + public @NonNull LocalDeviceStateBuilder wantsBluetooth(boolean wantsBluetooth) { + toBuild.wantsBluetooth = wantsBluetooth; + return this; + } + public @NonNull LocalDeviceStateBuilder setOrientation(@NonNull Orientation orientation) { toBuild.orientation = orientation; return this;