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 87d3eb18f4..8bd19193c5 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 @@ -130,6 +130,7 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { private ComposeView raiseHandSnackbar; private View missingPermissionContainer; private MaterialButton allowAccessButton; + private Guideline callParticipantsOverflowGuideline; private WebRtcCallParticipantsPagerAdapter pagerAdapter; private WebRtcCallParticipantsRecyclerAdapter recyclerAdapter; @@ -164,50 +165,51 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { protected void onFinishInflate() { super.onFinishInflate(); - audioToggle = findViewById(R.id.call_screen_speaker_toggle); - videoToggle = findViewById(R.id.call_screen_video_toggle); - micToggle = findViewById(R.id.call_screen_audio_mic_toggle); - smallLocalRenderFrame = findViewById(R.id.call_screen_pip); - smallLocalRender = findViewById(R.id.call_screen_small_local_renderer); - largeLocalRenderFrame = findViewById(R.id.call_screen_large_local_renderer_frame); - largeLocalRender = findViewById(R.id.call_screen_large_local_renderer); - largeLocalRenderNoVideo = findViewById(R.id.call_screen_large_local_video_off); - largeLocalRenderNoVideoAvatar = findViewById(R.id.call_screen_large_local_video_off_avatar); - recipientName = findViewById(R.id.call_screen_recipient_name); - status = findViewById(R.id.call_screen_status); - incomingRingStatus = findViewById(R.id.call_screen_incoming_ring_status); - answer = findViewById(R.id.call_screen_answer_call); - answerWithoutVideoLabel = findViewById(R.id.call_screen_answer_without_video_label); - cameraDirectionToggle = findViewById(R.id.call_screen_camera_direction_toggle); - ringToggle = findViewById(R.id.call_screen_audio_ring_toggle); - overflow = findViewById(R.id.call_screen_overflow_button); - hangup = findViewById(R.id.call_screen_end_call); - answerWithoutVideo = findViewById(R.id.call_screen_answer_without_video); - topGradient = findViewById(R.id.call_screen_header_gradient); - footerGradient = findViewById(R.id.call_screen_footer_gradient); - startCallControls = findViewById(R.id.call_screen_start_call_controls); - callParticipantsPager = findViewById(R.id.call_screen_participants_pager); - callParticipantsRecycler = findViewById(R.id.call_screen_participants_recycler); - largeHeader = findViewById(R.id.call_screen_header); - startCall = findViewById(R.id.call_screen_start_call_start_call); - errorButton = findViewById(R.id.call_screen_error_cancel); - groupCallSpeakerHint = new Stub<>(findViewById(R.id.call_screen_group_call_speaker_hint)); - groupCallFullStub = new Stub<>(findViewById(R.id.group_call_call_full_view)); - showParticipantsGuideline = findViewById(R.id.call_screen_show_participants_guideline); - aboveControlsGuideline = findViewById(R.id.call_screen_above_controls_guideline); - topFoldGuideline = findViewById(R.id.fold_top_guideline); - callScreenTopFoldGuideline = findViewById(R.id.fold_top_call_screen_guideline); - largeHeaderAvatar = findViewById(R.id.call_screen_header_avatar); - fullScreenShade = findViewById(R.id.call_screen_full_shade); - collapsedToolbar = findViewById(R.id.webrtc_call_view_toolbar_text); - headerToolbar = findViewById(R.id.webrtc_call_view_toolbar_no_text); - pendingParticipantsViewStub = new Stub<>(findViewById(R.id.call_screen_pending_recipients)); - callLinkWarningCard = new Stub<>(findViewById(R.id.call_screen_call_link_warning)); - 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); - missingPermissionContainer = findViewById(R.id.missing_permissions_container); - allowAccessButton = findViewById(R.id.allow_access_button); + audioToggle = findViewById(R.id.call_screen_speaker_toggle); + videoToggle = findViewById(R.id.call_screen_video_toggle); + micToggle = findViewById(R.id.call_screen_audio_mic_toggle); + smallLocalRenderFrame = findViewById(R.id.call_screen_pip); + smallLocalRender = findViewById(R.id.call_screen_small_local_renderer); + largeLocalRenderFrame = findViewById(R.id.call_screen_large_local_renderer_frame); + largeLocalRender = findViewById(R.id.call_screen_large_local_renderer); + largeLocalRenderNoVideo = findViewById(R.id.call_screen_large_local_video_off); + largeLocalRenderNoVideoAvatar = findViewById(R.id.call_screen_large_local_video_off_avatar); + recipientName = findViewById(R.id.call_screen_recipient_name); + status = findViewById(R.id.call_screen_status); + incomingRingStatus = findViewById(R.id.call_screen_incoming_ring_status); + answer = findViewById(R.id.call_screen_answer_call); + answerWithoutVideoLabel = findViewById(R.id.call_screen_answer_without_video_label); + cameraDirectionToggle = findViewById(R.id.call_screen_camera_direction_toggle); + ringToggle = findViewById(R.id.call_screen_audio_ring_toggle); + overflow = findViewById(R.id.call_screen_overflow_button); + hangup = findViewById(R.id.call_screen_end_call); + answerWithoutVideo = findViewById(R.id.call_screen_answer_without_video); + topGradient = findViewById(R.id.call_screen_header_gradient); + footerGradient = findViewById(R.id.call_screen_footer_gradient); + startCallControls = findViewById(R.id.call_screen_start_call_controls); + callParticipantsPager = findViewById(R.id.call_screen_participants_pager); + callParticipantsRecycler = findViewById(R.id.call_screen_participants_recycler); + largeHeader = findViewById(R.id.call_screen_header); + startCall = findViewById(R.id.call_screen_start_call_start_call); + errorButton = findViewById(R.id.call_screen_error_cancel); + groupCallSpeakerHint = new Stub<>(findViewById(R.id.call_screen_group_call_speaker_hint)); + groupCallFullStub = new Stub<>(findViewById(R.id.group_call_call_full_view)); + showParticipantsGuideline = findViewById(R.id.call_screen_show_participants_guideline); + aboveControlsGuideline = findViewById(R.id.call_screen_above_controls_guideline); + topFoldGuideline = findViewById(R.id.fold_top_guideline); + callScreenTopFoldGuideline = findViewById(R.id.fold_top_call_screen_guideline); + largeHeaderAvatar = findViewById(R.id.call_screen_header_avatar); + fullScreenShade = findViewById(R.id.call_screen_full_shade); + collapsedToolbar = findViewById(R.id.webrtc_call_view_toolbar_text); + headerToolbar = findViewById(R.id.webrtc_call_view_toolbar_no_text); + pendingParticipantsViewStub = new Stub<>(findViewById(R.id.call_screen_pending_recipients)); + callLinkWarningCard = new Stub<>(findViewById(R.id.call_screen_call_link_warning)); + 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); + missingPermissionContainer = findViewById(R.id.missing_permissions_container); + allowAccessButton = findViewById(R.id.allow_access_button); + callParticipantsOverflowGuideline = findViewById(R.id.call_screen_participants_overflow_guideline); View decline = findViewById(R.id.call_screen_decline_call); View answerLabel = findViewById(R.id.call_screen_answer_call_label); @@ -376,6 +378,12 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { pictureInPictureGestureHelper.setBottomVerticalBoundary(topOfControls); }); } + + if (callParticipantsOverflowGuideline != null) { + callParticipantsRecycler.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { + callParticipantsOverflowGuideline.setGuidelineEnd(bottom - top); + }); + } } @Override diff --git a/app/src/main/res/layout/webrtc_call_controls.xml b/app/src/main/res/layout/webrtc_call_controls.xml index 35b45bc50a..8718e4bb32 100644 --- a/app/src/main/res/layout/webrtc_call_controls.xml +++ b/app/src/main/res/layout/webrtc_call_controls.xml @@ -56,6 +56,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="12dp" + app:layout_goneMarginBottom="32dp" app:layout_constraintBottom_toTopOf="@id/call_screen_pending_recipients" app:layout_constraintEnd_toEndOf="parent" /> @@ -67,7 +68,7 @@ android:layout_marginBottom="32dp" android:inflatedId="@+id/call_screen_pending_recipients" android:layout="@layout/call_screen_pending_participants_view" - app:layout_constraintBottom_toTopOf="@id/call_screen_camera_direction_toggle" + app:layout_constraintBottom_toTopOf="@id/call_screen_participants_overflow_guideline" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> @@ -84,7 +85,7 @@ android:text="@string/WebRtcCallView__waiting_to_be_let_in" android:textAppearance="@style/Signal.Text.BodyLarge" android:visibility="gone" - app:layout_constraintBottom_toTopOf="@id/call_screen_camera_direction_toggle" + app:layout_constraintBottom_toTopOf="@id/call_screen_participants_overflow_guideline" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" tools:visibility="visible" /> @@ -111,6 +112,13 @@ app:barrierDirection="top" app:constraint_referenced_ids="call_screen_camera_direction_toggle,call_screen_pending_recipients,call_screen_raise_hand_view" /> + +