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