diff --git a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java index fdefc65cc5..e191d18d26 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java @@ -35,7 +35,6 @@ import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatDelegate; -import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.util.Consumer; import androidx.lifecycle.ViewModelProvider; @@ -469,7 +468,7 @@ public class WebRtcCallActivity extends BaseActivity implements SafetyNumberChan .ifNecessary() .withRationaleDialog(getString(R.string.WebRtcCallActivity__to_call_s_signal_needs_access_to_your_camera, recipientDisplayName), R.drawable.ic_video_solid_24_tinted) .withPermanentDenialDialog(getString(R.string.WebRtcCallActivity__to_call_s_signal_needs_access_to_your_camera, recipientDisplayName)) - .onAllGranted(() -> ApplicationDependencies.getSignalCallManager().setMuteVideo(!muted)) + .onAllGranted(() -> ApplicationDependencies.getSignalCallManager().setEnableVideo(!muted)) .execute(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/ringrtc/Camera.java b/app/src/main/java/org/thoughtcrime/securesms/ringrtc/Camera.java index 0551653103..2821df1b7f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ringrtc/Camera.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ringrtc/Camera.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.ringrtc; -import android.annotation.TargetApi; import android.content.Context; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; @@ -318,6 +317,7 @@ public class Camera implements CameraControl, CameraVideoCapturer.CameraSwitchHa @Override public void onCapturerStopped() { observer.onCapturerStopped(); + cameraEventListener.onCameraStopped(); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/ringrtc/CameraEventListener.java b/app/src/main/java/org/thoughtcrime/securesms/ringrtc/CameraEventListener.java index 8a0a140a58..441040d4f6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ringrtc/CameraEventListener.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ringrtc/CameraEventListener.java @@ -2,7 +2,13 @@ package org.thoughtcrime.securesms.ringrtc; import androidx.annotation.NonNull; +/** + * Event listener that are (indirectly) bound to WebRTC events. + * onFullyInitialized and onCameraStopped are hardware lifecycle methods triggered by our implementation of {@link org.webrtc.CapturerObserver} + * onCameraSwitchCompleted is triggered by {@link org.webrtc.CameraVideoCapturer.CameraSwitchHandler} + */ public interface CameraEventListener { void onFullyInitialized(); void onCameraSwitchCompleted(@NonNull CameraState newCameraState); + void onCameraStopped(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java index 33239b661a..083b408aa4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java @@ -226,7 +226,7 @@ private void processStateless(@NonNull Function1 p.handleSetMuteAudio(s, enabled)); } - public void setMuteVideo(boolean enabled) { + public void setEnableVideo(boolean enabled) { process((s, p) -> p.handleSetEnableVideo(s, enabled)); } @@ -817,6 +817,12 @@ private void processStateless(@NonNull Function1 p.handleCameraSwitchCompleted(s, newCameraState)); } + @Override + public void onCameraStopped() { + Log.i(TAG, "Camera error. Muting video."); + setEnableVideo(false); + } + @Override public void onForeground() { process((s, p) -> {