diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ca89c0e19f..f80910055d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -120,6 +120,7 @@ android:supportsPictureInPicture="true" android:windowSoftInputMode="stateAlwaysHidden" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" + android:taskAffinity=".calling" android:launchMode="singleTask"/> = 26 && FeatureFlags.callingPip() && getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java index 589f03a270..a044e2d6e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java @@ -307,7 +307,10 @@ public class WebRtcCallView extends FrameLayout { Set lastVisibleSet = new HashSet<>(visibleViewSet); visibleViewSet.clear(); - visibleViewSet.addAll(topViews); + + if (webRtcControls.displayTopViews()) { + visibleViewSet.addAll(topViews); + } if (webRtcControls.displayIncomingCallButtons()) { visibleViewSet.addAll(incomingCallViews); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java index 3963bb7710..81c843e296 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallViewModel.java @@ -180,6 +180,7 @@ public class WebRtcCallViewModel extends ViewModel { isRemoteVideoEnabled || isRemoteVideoOffer, isMoreThanOneCameraAvailable, isBluetoothAvailable, + isInPipMode.getValue() == Boolean.TRUE, callState, audioOutput)); } @@ -189,9 +190,9 @@ public class WebRtcCallViewModel extends ViewModel { else return WebRtcLocalRenderState.GONE; } - private @NonNull WebRtcControls getRealWebRtcControls(boolean neverDisplayControls, @NonNull WebRtcControls controls) { - if (neverDisplayControls) return WebRtcControls.NONE; - else return controls; + private @NonNull WebRtcControls getRealWebRtcControls(boolean isInPipMode, @NonNull WebRtcControls controls) { + if (isInPipMode) return WebRtcControls.PIP; + else return controls; } private void startTimer() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java index 362535bde9..4472a00c49 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java @@ -5,22 +5,25 @@ import androidx.annotation.NonNull; public final class WebRtcControls { public static final WebRtcControls NONE = new WebRtcControls(); + public static final WebRtcControls PIP = new WebRtcControls(false, false, false, false, true, CallState.NONE, WebRtcAudioOutput.HANDSET); private final boolean isRemoteVideoEnabled; private final boolean isLocalVideoEnabled; private final boolean isMoreThanOneCameraAvailable; private final boolean isBluetoothAvailable; + private final boolean isInPipMode; private final CallState callState; private final WebRtcAudioOutput audioOutput; private WebRtcControls() { - this(false, false, false, false, CallState.NONE, WebRtcAudioOutput.HANDSET); + this(false, false, false, false, false, CallState.NONE, WebRtcAudioOutput.HANDSET); } WebRtcControls(boolean isLocalVideoEnabled, boolean isRemoteVideoEnabled, boolean isMoreThanOneCameraAvailable, boolean isBluetoothAvailable, + boolean isInPipMode, @NonNull CallState callState, @NonNull WebRtcAudioOutput audioOutput) { @@ -28,6 +31,7 @@ public final class WebRtcControls { this.isRemoteVideoEnabled = isRemoteVideoEnabled; this.isBluetoothAvailable = isBluetoothAvailable; this.isMoreThanOneCameraAvailable = isMoreThanOneCameraAvailable; + this.isInPipMode = isInPipMode; this.callState = callState; this.audioOutput = audioOutput; } @@ -80,6 +84,10 @@ public final class WebRtcControls { return isOngoing() && !(displayAudioToggle() && displayCameraToggle()); } + boolean displayTopViews() { + return !isInPipMode; + } + WebRtcAudioOutput getAudioOutput() { return audioOutput; }