kopia lustrzana https://github.com/ryukoposting/Signal-Android
Prevent crash when opening conversation with unregistered UUID-only recipient.
rodzic
129effd0ec
commit
add65cf592
|
@ -1518,7 +1518,9 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
|
|
||||||
sendButton.resetAvailableTransports(isMediaMessage);
|
sendButton.resetAvailableTransports(isMediaMessage);
|
||||||
|
|
||||||
if (!isSecureText && !isPushGroupConversation()) sendButton.disableTransport(Type.TEXTSECURE);
|
if (!isSecureText && !isPushGroupConversation() && !recipient.get().isUuidOnly()) {
|
||||||
|
sendButton.disableTransport(Type.TEXTSECURE);
|
||||||
|
}
|
||||||
|
|
||||||
if (recipient.get().isPushGroup() || (!recipient.get().isMmsGroup() && !recipient.get().hasSmsAddress())) {
|
if (recipient.get().isPushGroup() || (!recipient.get().isMmsGroup() && !recipient.get().hasSmsAddress())) {
|
||||||
sendButton.disableTransport(Type.SMS);
|
sendButton.disableTransport(Type.SMS);
|
||||||
|
@ -1527,8 +1529,11 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
if (!recipient.get().isPushGroup() && recipient.get().isForceSmsSelection()) {
|
if (!recipient.get().isPushGroup() && recipient.get().isForceSmsSelection()) {
|
||||||
sendButton.setDefaultTransport(Type.SMS);
|
sendButton.setDefaultTransport(Type.SMS);
|
||||||
} else {
|
} else {
|
||||||
if (isSecureText || isPushGroupConversation()) sendButton.setDefaultTransport(Type.TEXTSECURE);
|
if (isSecureText || isPushGroupConversation() || recipient.get().isUuidOnly()) {
|
||||||
else sendButton.setDefaultTransport(Type.SMS);
|
sendButton.setDefaultTransport(Type.TEXTSECURE);
|
||||||
|
} else {
|
||||||
|
sendButton.setDefaultTransport(Type.SMS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
calculateCharactersRemaining();
|
calculateCharactersRemaining();
|
||||||
|
@ -2588,7 +2593,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
inputPanel.setVisibility(View.GONE);
|
inputPanel.setVisibility(View.GONE);
|
||||||
makeDefaultSmsButton.setVisibility(View.GONE);
|
makeDefaultSmsButton.setVisibility(View.GONE);
|
||||||
registerButton.setVisibility(View.VISIBLE);
|
registerButton.setVisibility(View.VISIBLE);
|
||||||
} else if (!isSecureText && !isDefaultSms) {
|
} else if (!isSecureText && !isDefaultSms && recipient.hasSmsAddress()) {
|
||||||
unblockButton.setVisibility(View.GONE);
|
unblockButton.setVisibility(View.GONE);
|
||||||
inputPanel.setVisibility(View.GONE);
|
inputPanel.setVisibility(View.GONE);
|
||||||
makeDefaultSmsButton.setVisibility(View.VISIBLE);
|
makeDefaultSmsButton.setVisibility(View.VISIBLE);
|
||||||
|
@ -2842,14 +2847,15 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
final boolean initiating,
|
final boolean initiating,
|
||||||
final boolean clearComposeBox)
|
final boolean clearComposeBox)
|
||||||
{
|
{
|
||||||
if (!isDefaultSms && (!isSecureText || forceSms)) {
|
if (!isDefaultSms && (!isSecureText || forceSms) && recipient.get().hasSmsAddress()) {
|
||||||
showDefaultSmsPrompt();
|
showDefaultSmsPrompt();
|
||||||
return new SettableFuture<>(null);
|
return new SettableFuture<>(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final boolean sendPush = (isSecureText && !forceSms) || recipient.get().isUuidOnly();
|
||||||
final long thread = this.threadId;
|
final long thread = this.threadId;
|
||||||
|
|
||||||
if (isSecureText && !forceSms) {
|
if (sendPush) {
|
||||||
MessageUtil.SplitResult splitMessage = MessageUtil.getSplitMessage(this, body, sendButton.getSelectedTransport().calculateCharacters(body).maxPrimaryMessageSize);
|
MessageUtil.SplitResult splitMessage = MessageUtil.getSplitMessage(this, body, sendButton.getSelectedTransport().calculateCharacters(body).maxPrimaryMessageSize);
|
||||||
body = splitMessage.getBody();
|
body = splitMessage.getBody();
|
||||||
|
|
||||||
|
@ -2865,7 +2871,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
|
|
||||||
final OutgoingMediaMessage outgoingMessage;
|
final OutgoingMediaMessage outgoingMessage;
|
||||||
|
|
||||||
if (isSecureText && !forceSms) {
|
if (sendPush) {
|
||||||
outgoingMessage = new OutgoingSecureMediaMessage(outgoingMessageCandidate);
|
outgoingMessage = new OutgoingSecureMediaMessage(outgoingMessageCandidate);
|
||||||
ApplicationDependencies.getTypingStatusSender().onTypingStopped(thread);
|
ApplicationDependencies.getTypingStatusSender().onTypingStopped(thread);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2874,7 +2880,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
|
|
||||||
Permissions.with(this)
|
Permissions.with(this)
|
||||||
.request(Manifest.permission.SEND_SMS, Manifest.permission.READ_SMS)
|
.request(Manifest.permission.SEND_SMS, Manifest.permission.READ_SMS)
|
||||||
.ifNecessary(!isSecureText || forceSms)
|
.ifNecessary(!sendPush)
|
||||||
.withPermanentDenialDialog(getString(R.string.ConversationActivity_signal_needs_sms_permission_in_order_to_send_an_sms))
|
.withPermanentDenialDialog(getString(R.string.ConversationActivity_signal_needs_sms_permission_in_order_to_send_an_sms))
|
||||||
.onAllGranted(() -> {
|
.onAllGranted(() -> {
|
||||||
if (clearComposeBox) {
|
if (clearComposeBox) {
|
||||||
|
@ -2901,7 +2907,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
private void sendTextMessage(final boolean forceSms, final long expiresIn, final int subscriptionId, final boolean initiating)
|
private void sendTextMessage(final boolean forceSms, final long expiresIn, final int subscriptionId, final boolean initiating)
|
||||||
throws InvalidMessageException
|
throws InvalidMessageException
|
||||||
{
|
{
|
||||||
if (!isDefaultSms && (!isSecureText || forceSms)) {
|
if (!isDefaultSms && (!isSecureText || forceSms) && recipient.get().hasSmsAddress()) {
|
||||||
showDefaultSmsPrompt();
|
showDefaultSmsPrompt();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2909,10 +2915,11 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
final long thread = this.threadId;
|
final long thread = this.threadId;
|
||||||
final Context context = getApplicationContext();
|
final Context context = getApplicationContext();
|
||||||
final String messageBody = getMessage();
|
final String messageBody = getMessage();
|
||||||
|
final boolean sendPush = (isSecureText && !forceSms) || recipient.get().isUuidOnly();
|
||||||
|
|
||||||
OutgoingTextMessage message;
|
OutgoingTextMessage message;
|
||||||
|
|
||||||
if (isSecureText && !forceSms) {
|
if (sendPush) {
|
||||||
message = new OutgoingEncryptedMessage(recipient.get(), messageBody, expiresIn);
|
message = new OutgoingEncryptedMessage(recipient.get(), messageBody, expiresIn);
|
||||||
ApplicationDependencies.getTypingStatusSender().onTypingStopped(thread);
|
ApplicationDependencies.getTypingStatusSender().onTypingStopped(thread);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2921,7 +2928,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||||
|
|
||||||
Permissions.with(this)
|
Permissions.with(this)
|
||||||
.request(Manifest.permission.SEND_SMS)
|
.request(Manifest.permission.SEND_SMS)
|
||||||
.ifNecessary(forceSms || !isSecureText)
|
.ifNecessary(!sendPush)
|
||||||
.withPermanentDenialDialog(getString(R.string.ConversationActivity_signal_needs_sms_permission_in_order_to_send_an_sms))
|
.withPermanentDenialDialog(getString(R.string.ConversationActivity_signal_needs_sms_permission_in_order_to_send_an_sms))
|
||||||
.onAllGranted(() -> {
|
.onAllGranted(() -> {
|
||||||
silentlySetComposeText("");
|
silentlySetComposeText("");
|
||||||
|
|
|
@ -650,6 +650,10 @@ public class Recipient {
|
||||||
return getUuid().isPresent();
|
return getUuid().isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isUuidOnly() {
|
||||||
|
return hasUuid() && !hasSmsAddress();
|
||||||
|
}
|
||||||
|
|
||||||
public @NonNull GroupId requireGroupId() {
|
public @NonNull GroupId requireGroupId() {
|
||||||
GroupId resolved = resolving ? resolve().groupId : groupId;
|
GroupId resolved = resolving ? resolve().groupId : groupId;
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue