From 4ada7c9be94a3a2840311e2d9a6122f899c4553e Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 23 Jan 2024 15:50:47 -0400 Subject: [PATCH] Implement several polish items for Call Links. --- .../components/webrtc/LayoutPositions.kt | 4 +-- .../components/webrtc/WebRtcCallView.java | 32 +++++++++++-------- .../controls/ControlsAndInfoController.kt | 10 +++--- .../webrtc/controls/RaiseHandSnackbar.kt | 2 +- .../call_screen_pending_participants_view.xml | 5 +-- .../res/layout/pending_participant_view.xml | 2 +- app/src/main/res/layout/webrtc_call_view.xml | 16 +++++++--- 7 files changed, 42 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/LayoutPositions.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/LayoutPositions.kt index e493f0efd2..289ca65a3d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/LayoutPositions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/LayoutPositions.kt @@ -20,7 +20,7 @@ enum class LayoutPositions( SMALL_GROUP( participantBottomViewId = ConstraintSet.PARENT_ID, participantBottomMargin = 0, - reactionBottomViewId = R.id.call_screen_above_controls_guideline, + reactionBottomViewId = R.id.call_screen_pending_recipients, reactionBottomMargin = 8 ), @@ -28,7 +28,7 @@ enum class LayoutPositions( LARGE_GROUP( participantBottomViewId = R.id.call_screen_participants_recycler, participantBottomMargin = 16, - reactionBottomViewId = R.id.call_screen_participants_recycler, + reactionBottomViewId = R.id.call_screen_pending_recipients, reactionBottomMargin = 20 ); 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 0738480c32..c881a5a4b5 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 @@ -25,6 +25,7 @@ import androidx.annotation.StringRes; import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.Toolbar; import androidx.compose.ui.platform.ComposeView; +import androidx.constraintlayout.widget.Barrier; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; import androidx.constraintlayout.widget.Guideline; @@ -124,6 +125,7 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { private RecyclerView groupReactionsFeed; private MultiReactionBurstLayout reactionViews; private ComposeView raiseHandSnackbar; + private Barrier pipBottomBoundaryBarrier; @@ -203,6 +205,7 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { groupReactionsFeed = findViewById(R.id.call_screen_reactions_feed); reactionViews = findViewById(R.id.call_screen_reactions_container); raiseHandSnackbar = findViewById(R.id.call_screen_raise_hand_view); + pipBottomBoundaryBarrier = findViewById(R.id.pip_bottom_boundary_barrier); View decline = findViewById(R.id.call_screen_decline_call); View answerLabel = findViewById(R.id.call_screen_answer_call_label); @@ -355,6 +358,12 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { rotatableControls.add(decline); rotatableControls.add(smallLocalAudioIndicator); rotatableControls.add(ringToggle); + + pipBottomBoundaryBarrier.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { + if (bottom != oldBottom) { + onBarrierBottomChanged(bottom); + } + }); } @Override @@ -851,17 +860,17 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { private void moveSnackbarAboveParticipantRail(boolean aboveRail) { if (aboveRail) { - updateSnackbarBottomConstraint(callParticipantsRecycler); + updatePendingParticipantsBottomConstraint(callParticipantsRecycler); } else { - updateSnackbarBottomConstraint(aboveControlsGuideline); + updatePendingParticipantsBottomConstraint(aboveControlsGuideline); } } - private void updateSnackbarBottomConstraint(View anchor) { + private void updatePendingParticipantsBottomConstraint(View anchor) { ConstraintSet constraintSet = new ConstraintSet(); constraintSet.clone(this); - constraintSet.connect(R.id.call_screen_raise_hand_view, + constraintSet.connect(R.id.call_screen_pending_recipients, ConstraintSet.BOTTOM, anchor.getId(), ConstraintSet.TOP, @@ -938,15 +947,12 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { ringToggle.setActivated(enabled); } - public void onControlTopChanged(int guidelineTop, int snackBarHeight) { - int offset = 0; - if (lastState != null) { - CallParticipantsState state = lastState.getCallParticipantsState(); - if (!state.isViewingFocusedParticipant() && !state.isLargeVideoGroup()) { - offset = snackBarHeight; - } - pictureInPictureGestureHelper.setBottomVerticalBoundary(guidelineTop - offset); - } + public void onControlTopChanged() { + onBarrierBottomChanged(pipBottomBoundaryBarrier.getBottom()); + } + + private void onBarrierBottomChanged(int barrierBottom) { + pictureInPictureGestureHelper.setBottomVerticalBoundary(barrierBottom); } public interface ControlsListener { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt index 1d87e98e20..a79bad8fa6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt @@ -147,8 +147,8 @@ class ControlsAndInfoController( webRtcCallView.post { onControlTopChanged() } } - raiseHandComposeView.addOnLayoutChangeListener { _, _, top, _, bottom, _, _, _, _ -> - onControlTopChanged(composeViewSize = bottom - top) + raiseHandComposeView.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> + onControlTopChanged() } callControls.viewTreeObserver.addOnGlobalLayoutListener { @@ -184,8 +184,6 @@ class ControlsAndInfoController( callInfoComposeView.alpha = alphaCallInfo(slideOffset) callInfoComposeView.translationY = infoTranslationDistance - (infoTranslationDistance * callInfoComposeView.alpha) - - onControlTopChanged() } }) @@ -210,10 +208,10 @@ class ControlsAndInfoController( } } - fun onControlTopChanged(composeViewSize: Int = raiseHandComposeView.height) { + fun onControlTopChanged() { val guidelineTop = max(frame.top, coordinator.height - behavior.peekHeight) aboveControlsGuideline.setGuidelineBegin(guidelineTop) - webRtcCallView.onControlTopChanged(guidelineTop, composeViewSize) + webRtcCallView.onControlTopChanged() } fun addVisibilityListener(listener: BottomSheetVisibilityListener): Boolean { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt index cee9975ca0..c4648fd7da 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt @@ -120,7 +120,7 @@ private fun RaiseHand( modifier = modifier .padding(horizontal = 16.dp) .clip(shape = RoundedCornerShape(16.dp, 16.dp, 16.dp, 16.dp)) - .background(MaterialTheme.colorScheme.surface) + .background(SignalTheme.colors.colorSurface1) .animateContentSize() ) { val boxModifier = modifier diff --git a/app/src/main/res/layout/call_screen_pending_participants_view.xml b/app/src/main/res/layout/call_screen_pending_participants_view.xml index d66d1c0307..021b58d7db 100644 --- a/app/src/main/res/layout/call_screen_pending_participants_view.xml +++ b/app/src/main/res/layout/call_screen_pending_participants_view.xml @@ -4,11 +4,12 @@ --> \ No newline at end of file diff --git a/app/src/main/res/layout/pending_participant_view.xml b/app/src/main/res/layout/pending_participant_view.xml index 6c038072c3..6564f5730d 100644 --- a/app/src/main/res/layout/pending_participant_view.xml +++ b/app/src/main/res/layout/pending_participant_view.xml @@ -8,7 +8,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="72dp" - app:cardBackgroundColor="@color/signal_colorSurface3" + app:cardBackgroundColor="@color/signal_colorSurface1" app:cardCornerRadius="18dp" app:cardElevation="0dp" tools:layout_marginHorizontal="24dp" diff --git a/app/src/main/res/layout/webrtc_call_view.xml b/app/src/main/res/layout/webrtc_call_view.xml index a0f3873cf1..3cad60ce92 100644 --- a/app/src/main/res/layout/webrtc_call_view.xml +++ b/app/src/main/res/layout/webrtc_call_view.xml @@ -106,7 +106,7 @@ android:orientation="vertical" android:scrollbars="none" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" - app:layout_constraintBottom_toTopOf="@+id/call_screen_above_controls_guideline" + app:layout_constraintBottom_toTopOf="@+id/call_screen_pending_recipients" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -369,9 +369,9 @@ android:id="@+id/call_screen_pending_recipients" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="24dp" + android:layout_marginHorizontal="16dp" android:layout_marginBottom="32dp" - android:inflatedId="@+id/call_screen_pending_recipients_view" + android:inflatedId="@+id/call_screen_pending_recipients" android:layout="@layout/call_screen_pending_participants_view" app:layout_constraintBottom_toTopOf="@id/call_screen_above_controls_guideline" app:layout_constraintEnd_toEndOf="parent" @@ -400,8 +400,16 @@ android:id="@+id/call_screen_raise_hand_view" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:layout_constraintBottom_toTopOf="@id/call_screen_above_controls_guideline" + android:layout_marginBottom="12dp" + app:layout_constraintBottom_toTopOf="@id/call_screen_pending_recipients" app:layout_constraintEnd_toEndOf="parent" /> + + \ No newline at end of file