From 90d4069d0a3bf3213581a3e7dd50c0af53adb1f8 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 17 Dec 2021 10:36:07 -0500 Subject: [PATCH] Fix crash and UI issues in call screen. --- .../securesms/WebRtcCallActivity.java | 30 ++++++++----------- .../webrtc/WebRtcCallParticipantsPage.java | 10 ++++--- .../components/webrtc/WebRtcCallView.java | 9 +++--- .../layout/webrtc_call_view_header_large.xml | 3 +- app/src/main/res/values/strings.xml | 1 + 5 files changed, 25 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java index 2d39210558..e62194162c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java @@ -256,7 +256,6 @@ public class WebRtcCallActivity extends BaseActivity implements SafetyNumberChan private void processIntent(@NonNull Intent intent) { if (ANSWER_ACTION.equals(intent.getAction())) { - viewModel.setRecipient(EventBus.getDefault().getStickyEvent(WebRtcViewModel.class).getRecipient()); handleAnswerWithAudio(); } else if (DENY_ACTION.equals(intent.getAction())) { handleDenyCall(); @@ -403,24 +402,19 @@ public class WebRtcCallActivity extends BaseActivity implements SafetyNumberChan } private void handleAnswerWithAudio() { - Recipient recipient = viewModel.getRecipient().get(); + Permissions.with(this) + .request(Manifest.permission.RECORD_AUDIO) + .ifNecessary() + .withRationaleDialog(getString(R.string.WebRtcCallActivity_to_answer_the_call_give_signal_access_to_your_microphone), + R.drawable.ic_mic_solid_24) + .withPermanentDenialDialog(getString(R.string.WebRtcCallActivity_signal_requires_microphone_and_camera_permissions_in_order_to_make_or_receive_calls)) + .onAllGranted(() -> { + callScreen.setStatus(getString(R.string.RedPhone_answering)); - if (!recipient.equals(Recipient.UNKNOWN)) { - Permissions.with(this) - .request(Manifest.permission.RECORD_AUDIO) - .ifNecessary() - .withRationaleDialog(getString(R.string.WebRtcCallActivity_to_answer_the_call_from_s_give_signal_access_to_your_microphone, recipient.getDisplayName(this)), - R.drawable.ic_mic_solid_24) - .withPermanentDenialDialog(getString(R.string.WebRtcCallActivity_signal_requires_microphone_and_camera_permissions_in_order_to_make_or_receive_calls)) - .onAllGranted(() -> { - callScreen.setRecipient(recipient); - callScreen.setStatus(getString(R.string.RedPhone_answering)); - - ApplicationDependencies.getSignalCallManager().acceptCall(false); - }) - .onAnyDenied(this::handleDenyCall) - .execute(); - } + ApplicationDependencies.getSignalCallManager().acceptCall(false); + }) + .onAnyDenied(this::handleDenyCall) + .execute(); } private void handleAnswerWithVideo() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallParticipantsPage.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallParticipantsPage.java index 7a2380cad8..e4741dd8c2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallParticipantsPage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallParticipantsPage.java @@ -85,16 +85,18 @@ class WebRtcCallParticipantsPage { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - WebRtcCallParticipantsPage that = (WebRtcCallParticipantsPage) o; + final WebRtcCallParticipantsPage that = (WebRtcCallParticipantsPage) o; return isSpeaker == that.isSpeaker && isRenderInPip == that.isRenderInPip && - focusedParticipant.equals(that.focusedParticipant) && + isPortrait == that.isPortrait && + isLandscapeEnabled == that.isLandscapeEnabled && + isIncomingRing == that.isIncomingRing && callParticipants.equals(that.callParticipants) && - isPortrait == that.isPortrait; + focusedParticipant.equals(that.focusedParticipant); } @Override public int hashCode() { - return Objects.hash(callParticipants, isSpeaker, focusedParticipant, isRenderInPip, isPortrait); + return Objects.hash(callParticipants, focusedParticipant, isSpeaker, isRenderInPip, isPortrait, isLandscapeEnabled, isIncomingRing); } } 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 9b1034c68e..c4c75475f2 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 @@ -226,6 +226,7 @@ public class WebRtcCallView extends ConstraintLayout { incomingCallViews.add(decline); incomingCallViews.add(declineLabel); incomingCallViews.add(footerGradient); + incomingCallViews.add(incomingRingStatus); adjustableMarginsSet.add(micToggle); adjustableMarginsSet.add(cameraDirectionToggle); @@ -589,8 +590,7 @@ public class WebRtcCallView extends ConstraintLayout { if (webRtcControls.displayIncomingCallButtons()) { visibleViewSet.addAll(incomingCallViews); - incomingRingStatus.setVisibility(VISIBLE); - incomingRingStatus.setText(R.string.WebRtcCallView__signal_call); + incomingRingStatus.setText(webRtcControls.displayAnswerWithAudio() ? R.string.WebRtcCallView__signal_call : R.string.WebRtcCallView__signal_video_call); answer.setImageDrawable(AppCompatResources.getDrawable(getContext(), R.drawable.webrtc_call_screen_answer)); } @@ -599,9 +599,6 @@ public class WebRtcCallView extends ConstraintLayout { visibleViewSet.add(answerWithAudio); visibleViewSet.add(answerWithAudioLabel); - incomingRingStatus.setVisibility(VISIBLE); - incomingRingStatus.setText(R.string.WebRtcCallView__signal_video_call); - answer.setImageDrawable(AppCompatResources.getDrawable(getContext(), R.drawable.webrtc_call_screen_answer_with_video)); } @@ -934,8 +931,10 @@ public class WebRtcCallView extends ConstraintLayout { constraintSet.applyTo(parent); if (showSmallHeader) { + smallHeaderConstraints.setVisibility(incomingRingStatus.getId(), visibleViewSet.contains(incomingRingStatus) ? View.VISIBLE : View.GONE); smallHeaderConstraints.applyTo(toolbar); } else { + largeHeaderConstraints.setVisibility(incomingRingStatus.getId(), visibleViewSet.contains(incomingRingStatus) ? View.VISIBLE : View.GONE); largeHeaderConstraints.applyTo(toolbar); } } diff --git a/app/src/main/res/layout/webrtc_call_view_header_large.xml b/app/src/main/res/layout/webrtc_call_view_header_large.xml index 18845eff90..a0e21a1630 100644 --- a/app/src/main/res/layout/webrtc_call_view_header_large.xml +++ b/app/src/main/res/layout/webrtc_call_view_header_large.xml @@ -12,11 +12,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" + android:drawablePadding="4dp" android:gravity="center" android:textAppearance="@style/TextAppearance.Signal.Body2" android:textColor="@color/core_white" + android:visibility="gone" app:drawableStartCompat="@drawable/ic_signal_logo_small" - android:drawablePadding="4dp" app:layout_constraintBottom_toBottomOf="@id/action_bar_guideline" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6e520e81e2..8bc677c29d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1899,6 +1899,7 @@ This is likely because you registered your phone number with Signal on a different device. Tap to re-register. + To answer the call, give Signal access to your microphone. To answer the call from %s, give Signal access to your microphone. Signal requires Microphone and Camera permissions in order to make or receive calls, but they have been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\" and \"Camera\". Answered on a linked device.