From e83a4692c59976fb9b9b17dba7aafd2b7760f0e9 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 9 Aug 2022 15:09:19 -0400 Subject: [PATCH] Change calling rotation behavior for 1:1 calls. --- .../sensors/DeviceOrientationMonitor.java | 16 +++++++++-- .../components/webrtc/BroadcastVideoSink.java | 15 ++-------- .../CallParticipantsLayoutStrategies.kt | 4 ++- .../webrtc/TextureViewRenderer.java | 28 ------------------- .../BeginCallActionProcessorDelegate.java | 4 +-- .../IncomingGroupCallActionProcessor.java | 2 +- 6 files changed, 22 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/sensors/DeviceOrientationMonitor.java b/app/src/main/java/org/thoughtcrime/securesms/components/sensors/DeviceOrientationMonitor.java index c433d9848b..9774ea50ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/sensors/DeviceOrientationMonitor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/sensors/DeviceOrientationMonitor.java @@ -1,10 +1,12 @@ package org.thoughtcrime.securesms.components.sensors; +import android.content.ContentResolver; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; +import android.provider.Settings; import androidx.annotation.NonNull; import androidx.lifecycle.DefaultLifecycleObserver; @@ -22,8 +24,9 @@ public final class DeviceOrientationMonitor implements DefaultLifecycleObserver private static final float LANDSCAPE_PITCH_MINIMUM = -0.5f; private static final float LANDSCAPE_PITCH_MAXIMUM = 0.5f; - private final SensorManager sensorManager; - private final EventListener eventListener = new EventListener(); + private final SensorManager sensorManager; + private final ContentResolver contentResolver; + private final EventListener eventListener = new EventListener(); private final float[] accelerometerReading = new float[3]; private final float[] magnetometerReading = new float[3]; @@ -34,7 +37,8 @@ public final class DeviceOrientationMonitor implements DefaultLifecycleObserver private final MutableLiveData orientation = new MutableLiveData<>(Orientation.PORTRAIT_BOTTOM_EDGE); public DeviceOrientationMonitor(@NonNull Context context) { - this.sensorManager = ServiceUtil.getSensorManager(context); + this.sensorManager = ServiceUtil.getSensorManager(context); + this.contentResolver = context.getContentResolver(); } @Override @@ -65,6 +69,12 @@ public final class DeviceOrientationMonitor implements DefaultLifecycleObserver } private void updateOrientationAngles() { + int rotationLocked = Settings.System.getInt(contentResolver, Settings.System.ACCELEROMETER_ROTATION, -1); + if (rotationLocked == 0) { + orientation.setValue(Orientation.PORTRAIT_BOTTOM_EDGE); + return; + } + boolean success = SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerReading, magnetometerReading); if (!success) { SensorUtil.getRotationMatrixWithoutMagneticSensorData(rotationMatrix, accelerometerReading); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/BroadcastVideoSink.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/BroadcastVideoSink.java index 9b3bf0a0c6..452d3b3467 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/BroadcastVideoSink.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/BroadcastVideoSink.java @@ -26,8 +26,8 @@ public class BroadcastVideoSink implements VideoSink { private final WeakHashMap requestingSizes; private int deviceOrientationDegrees; private boolean rotateToRightSide; - private boolean forceRotate; - private boolean rotateWithDevice; + private final boolean forceRotate; + private final boolean rotateWithDevice; private RequestedSize currentlyRequestedMaxSize; public BroadcastVideoSink() { @@ -62,14 +62,6 @@ public class BroadcastVideoSink implements VideoSink { sinks.remove(sink); } - public void setForceRotate(boolean forceRotate) { - this.forceRotate = forceRotate; - } - - public void setRotateWithDevice(boolean rotateWithDevice) { - this.rotateWithDevice = rotateWithDevice; - } - /** * Set the specific rotation desired when not rotating with device. * @@ -86,9 +78,8 @@ public class BroadcastVideoSink implements VideoSink { @Override public synchronized void onFrame(@NonNull VideoFrame videoFrame) { boolean isDeviceRotationIgnored = deviceOrientationDegrees == DEVICE_ROTATION_IGNORE; - boolean isWideVideoFrame = videoFrame.getRotatedHeight() < videoFrame.getRotatedWidth(); - if (!isDeviceRotationIgnored && (isWideVideoFrame || forceRotate)) { + if (!isDeviceRotationIgnored && forceRotate) { int rotation = calculateRotation(); if (rotation > 0) { rotation += rotateWithDevice ? videoFrame.getRotation() : 0; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayoutStrategies.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayoutStrategies.kt index e8007d2531..9770881b73 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayoutStrategies.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayoutStrategies.kt @@ -15,7 +15,9 @@ object CallParticipantsLayoutStrategies { if (callParticipant.isScreenSharing) { callParticipantView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT) } else { - callParticipantView.setScalingType(if (isPortrait || childCount < 3) RendererCommon.ScalingType.SCALE_ASPECT_FILL else RendererCommon.ScalingType.SCALE_ASPECT_BALANCED) + val matchOrientationScaling = if (isPortrait || childCount < 3) RendererCommon.ScalingType.SCALE_ASPECT_FILL else RendererCommon.ScalingType.SCALE_ASPECT_BALANCED + val mismatchOrientationScaling = if (childCount == 1) RendererCommon.ScalingType.SCALE_ASPECT_FIT else matchOrientationScaling + callParticipantView.setScalingType(matchOrientationScaling, mismatchOrientationScaling) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/TextureViewRenderer.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/TextureViewRenderer.java index cd0c71143b..a874d477a2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/TextureViewRenderer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/TextureViewRenderer.java @@ -122,26 +122,10 @@ public class TextureViewRenderer extends TextureView implements TextureView.Surf } } - public void addFrameListener(@NonNull EglRenderer.FrameListener listener, float scale, @NonNull RendererCommon.GlDrawer drawerParam) { - eglRenderer.addFrameListener(listener, scale, drawerParam); - } - - public void addFrameListener(@NonNull EglRenderer.FrameListener listener, float scale) { - eglRenderer.addFrameListener(listener, scale); - } - public void removeFrameListener(@NonNull EglRenderer.FrameListener listener) { eglRenderer.removeFrameListener(listener); } - public void setEnableHardwareScaler(boolean enabled) { - ThreadUtils.checkIsOnMainThread(); - - enableFixedSize = enabled; - - updateSurfaceSize(); - } - public void setMirror(boolean mirror) { eglRenderer.setMirror(mirror); } @@ -164,18 +148,6 @@ public class TextureViewRenderer extends TextureView implements TextureView.Surf requestLayout(); } - public void setFpsReduction(float fps) { - eglRenderer.setFpsReduction(fps); - } - - public void disableFpsReduction() { - eglRenderer.disableFpsReduction(); - } - - public void pauseVideo() { - eglRenderer.pauseVideo(); - } - @Override protected void onMeasure(int widthSpec, int heightSpec) { ThreadUtils.checkIsOnMainThread(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/BeginCallActionProcessorDelegate.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/BeginCallActionProcessorDelegate.java index 00a1bc6b8b..263ae1acd7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/BeginCallActionProcessorDelegate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/BeginCallActionProcessorDelegate.java @@ -44,7 +44,7 @@ public class BeginCallActionProcessorDelegate extends WebRtcActionProcessor { remotePeer.getRecipient(), null, new BroadcastVideoSink(currentState.getVideoState().getLockableEglBase(), - false, + true, true, currentState.getLocalDeviceState().getOrientation().getDegrees()), true, @@ -99,7 +99,7 @@ public class BeginCallActionProcessorDelegate extends WebRtcActionProcessor { remotePeer.getRecipient(), null, new BroadcastVideoSink(currentState.getVideoState().getLockableEglBase(), - false, + true, true, currentState.getLocalDeviceState().getOrientation().getDegrees()), true, diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java index 2c2ffaa75f..b50961edf1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java @@ -150,7 +150,7 @@ public final class IncomingGroupCallActionProcessor extends DeviceAwareActionPro remotePeerGroup.getRecipient(), null, new BroadcastVideoSink(currentState.getVideoState().getLockableEglBase(), - false, + true, true, currentState.getLocalDeviceState().getOrientation().getDegrees()), true,