Update microphone permission UI for calls.

This commit is contained in:
mtang-signal
2024-04-29 10:22:11 -04:00
committed by Greyson Parrelli
parent c5c0c432c4
commit fd4864b3b1
2 changed files with 27 additions and 14 deletions

View File

@@ -19,6 +19,7 @@ import androidx.annotation.Nullable;
import androidx.core.app.TaskStackBuilder;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -26,8 +27,6 @@ import org.signal.core.util.concurrent.RxExtensions;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.concurrent.SimpleTask;
import org.signal.core.util.logging.Log;
import org.signal.libsignal.usernames.BaseUsernameException;
import org.signal.libsignal.usernames.Username;
import org.signal.ringrtc.CallLinkRootKey;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.WebRtcCallActivity;
@@ -44,16 +43,13 @@ import org.thoughtcrime.securesms.groups.ui.invitesandrequests.joining.GroupJoin
import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.profiles.manage.UsernameRepository;
import org.thoughtcrime.securesms.profiles.manage.UsernameRepository.UsernameAciFetchResult;
import org.thoughtcrime.securesms.profiles.manage.UsernameRepository.UsernameLinkConversionResult;
import org.thoughtcrime.securesms.proxy.ProxyBottomSheetFragment;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.service.webrtc.links.CallLinkRoomId;
import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.UsernameLinkComponents;
import org.whispersystems.signalservice.internal.storage.protos.AccountRecord;
import java.io.IOException;
import java.util.Objects;
@@ -74,7 +70,7 @@ public class CommunicationActions {
/**
* Start a voice call. Assumes that permission request results will be routed to a handler on the Activity.
*/
public static void startVoiceCall(@NonNull Activity activity, @NonNull Recipient recipient) {
public static void startVoiceCall(@NonNull FragmentActivity activity, @NonNull Recipient recipient) {
startVoiceCall(new ActivityCallContext(activity), recipient);
}
@@ -118,7 +114,7 @@ public class CommunicationActions {
/**
* Start a video call. Assumes that permission request results will be routed to a handler on the Activity.
*/
public static void startVideoCall(@NonNull Activity activity, @NonNull Recipient recipient) {
public static void startVideoCall(@NonNull FragmentActivity activity, @NonNull Recipient recipient) {
startVideoCall(new ActivityCallContext(activity), recipient, false);
}
@@ -172,7 +168,7 @@ public class CommunicationActions {
}.execute();
}
public static void startInsecureCall(@NonNull Activity activity, @NonNull Recipient recipient) {
public static void startInsecureCall(@NonNull FragmentActivity activity, @NonNull Recipient recipient) {
startInsecureCall(new ActivityCallContext(activity), recipient);
}
@@ -392,9 +388,9 @@ public class CommunicationActions {
callContext.getPermissionsBuilder()
.request(Manifest.permission.RECORD_AUDIO)
.ifNecessary()
.withRationaleDialog(callContext.getContext().getString(R.string.ConversationActivity__to_call_s_signal_needs_access_to_your_microphone, recipient.getDisplayName(callContext.getContext())),
R.drawable.ic_mic_solid_24)
.withPermanentDenialDialog(callContext.getContext().getString(R.string.ConversationActivity__to_call_s_signal_needs_access_to_your_microphone, recipient.getDisplayName(callContext.getContext())))
.withRationaleDialog(callContext.getContext().getString(R.string.ConversationActivity_allow_access_microphone), callContext.getContext().getString(R.string.ConversationActivity__to_call_signal_needs_access_to_your_microphone), R.drawable.symbol_phone_24)
.withPermanentDenialDialog(callContext.getContext().getString(R.string.ConversationActivity__to_call_signal_needs_access_to_your_microphone), null, R.string.ConversationActivity_allow_access_microphone, R.string.ConversationActivity__to_start_call, callContext.getFragmentManager())
.onAnyDenied(() -> Toast.makeText(callContext.getContext(), R.string.ConversationActivity_signal_needs_microphone_access_voice_call, Toast.LENGTH_LONG).show())
.onAllGranted(() -> {
ApplicationDependencies.getSignalCallManager().startOutgoingAudioCall(recipient);
@@ -496,12 +492,13 @@ public class CommunicationActions {
@NonNull Permissions.PermissionsBuilder getPermissionsBuilder();
void startActivity(@NonNull Intent intent);
@NonNull Context getContext();
@NonNull FragmentManager getFragmentManager();
}
private static class ActivityCallContext implements CallContext {
private final Activity activity;
private final FragmentActivity activity;
private ActivityCallContext(Activity activity) {
private ActivityCallContext(FragmentActivity activity) {
this.activity = activity;
}
@@ -519,6 +516,11 @@ public class CommunicationActions {
public @NonNull Context getContext() {
return activity;
}
@Override
public @NonNull FragmentManager getFragmentManager() {
return activity.getSupportFragmentManager();
}
}
private static class FragmentCallContext implements CallContext {
@@ -542,5 +544,10 @@ public class CommunicationActions {
public @NonNull Context getContext() {
return fragment.requireContext();
}
@Override
public @NonNull FragmentManager getFragmentManager() {
return fragment.getParentFragmentManager();
}
}
}

View File

@@ -429,7 +429,13 @@
<string name="ConversationActivity_you_will_leave_this_group_and_it_will_be_deleted_from_all_of_your_devices">You will leave this group, and it will be deleted from all your devices.</string>
<string name="ConversationActivity_delete">Delete</string>
<string name="ConversationActivity_delete_and_leave">Delete and leave</string>
<string name="ConversationActivity__to_call_s_signal_needs_access_to_your_microphone">To call %1$s, Signal needs access to your microphone</string>
<!-- Dialog description that will explain the steps needed to give microphone permissions for a voice call -->
<string name="ConversationActivity__to_start_call">To start a call:</string>
<!-- Alert dialog description asking for microphone permission in order to start a voice call -->
<string name="ConversationActivity__to_call_signal_needs_access_to_your_microphone">To start a call, allow Signal access to your microphone.</string>
<!-- Toast text explaining Signal's need for microphone access for a voice call -->
<string name="ConversationActivity_signal_needs_microphone_access_voice_call">Signal needs microphone access to start a call.</string>
<string name="ConversationActivity_join">Join</string>