diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java
index 363f93f1a2..d03a1ca774 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java
@@ -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();
+ }
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bcc23be6f2..8b2d3a25cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -429,7 +429,13 @@
You will leave this group, and it will be deleted from all your devices.
Delete
Delete and leave
- To call %1$s, Signal needs access to your microphone
+
+
+ To start a call:
+
+ To start a call, allow Signal access to your microphone.
+
+ Signal needs microphone access to start a call.
Join