From ea081e981f7e978b01e5eb07a54ccfdb5bef15f1 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 4 Apr 2024 16:50:25 -0400 Subject: [PATCH] Treat unregistered user during send as general failure. --- .../thoughtcrime/securesms/components/AlertView.java | 6 ------ .../securesms/components/ConversationItemFooter.java | 4 +--- .../securesms/conversation/ConversationItem.java | 5 +---- .../v2/items/V2ConversationItemTextOnlyViewHolder.kt | 5 +---- .../conversationlist/ConversationListItem.java | 3 --- .../thoughtcrime/securesms/database/MessageTable.kt | 6 ------ .../securesms/database/model/DisplayRecord.java | 5 +---- .../securesms/database/model/StatusUtil.java | 1 + .../securesms/database/model/ThreadRecord.java | 4 ---- .../securesms/jobs/IndividualSendJob.java | 12 ++++-------- .../transport/InsecureFallbackApprovalException.java | 11 ----------- app/src/main/res/values/strings.xml | 1 - 12 files changed, 9 insertions(+), 54 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/transport/InsecureFallbackApprovalException.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AlertView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AlertView.java index e0a7b2886c..4c4fca4c24 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AlertView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AlertView.java @@ -35,12 +35,6 @@ public class AlertView extends AppCompatImageView { setVisibility(View.GONE); } - public void setPendingApproval() { - setVisibility(View.VISIBLE); - setColorFilter(ContextCompat.getColor(getContext(), R.color.signal_colorOnSurfaceVariant)); - setContentDescription(getContext().getString(R.string.conversation_item_sent__pending_approval_description)); - } - public void setFailed() { setVisibility(View.VISIBLE); setColorFilter(ContextCompat.getColor(getContext(), R.color.signal_colorError)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index 1c2dc80c43..6ba9ac0757 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -315,8 +315,6 @@ public class ConversationItemFooter extends ConstraintLayout { } dateView.setText(errorMsg); - } else if (messageRecord.isPendingInsecureSmsFallback()) { - dateView.setText(R.string.ConversationItem_click_to_approve_unencrypted); } else if (messageRecord.isRateLimited()) { dateView.setText(R.string.ConversationItem_send_paused); } else if (MessageRecordUtil.isScheduled(messageRecord)) { @@ -410,7 +408,7 @@ public class ConversationItemFooter extends ConstraintLayout { previousMessageId = newMessageId; - if (messageRecord.isFailed() || messageRecord.isPendingInsecureSmsFallback() || MessageRecordUtil.isScheduled(messageRecord)) { + if (messageRecord.isFailed() || MessageRecordUtil.isScheduled(messageRecord)) { deliveryStatusView.setNone(); return; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 1d6e0cce65..5138e6699c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -1573,8 +1573,6 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (!messageRecord.isMediaPending() && messageRecord.isFailed()) { alertView.setFailed(); - } else if (messageRecord.isPendingInsecureSmsFallback()) { - alertView.setPendingApproval(); } else if (messageRecord.isRateLimited()) { alertView.setRateLimited(); } else { @@ -1826,7 +1824,6 @@ public final class ConversationItem extends RelativeLayout implements BindableCo return batchSelected.isEmpty() && ((messageRecord.isFailed() && !messageRecord.isMmsNotification()) || (messageRecord.isRateLimited() && SignalStore.rateLimit().needsRecaptcha()) || - messageRecord.isPendingInsecureSmsFallback() || messageRecord.isBundleKeyExchange()); } @@ -1990,7 +1987,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo private boolean isFooterVisible(@NonNull MessageRecord current, @NonNull Optional next, boolean isGroupThread) { boolean differentTimestamps = next.isPresent() && !DateUtils.isSameExtendedRelativeTimestamp(next.get().getTimestamp(), current.getTimestamp()); - return forceFooter(messageRecord) || current.getExpiresIn() > 0 || !current.isSecure() || current.isPending() || current.isPendingInsecureSmsFallback() || + return forceFooter(messageRecord) || current.getExpiresIn() > 0 || !current.isSecure() || current.isPending() || current.isFailed() || current.isRateLimited() || differentTimestamps || isEndOfMessageCluster(current, next, isGroupThread); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt index 7ca9ff389f..5ec98f4424 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder.kt @@ -578,7 +578,6 @@ open class V2ConversationItemTextOnlyViewHolder>( when { record.isFailed -> alert.setFailed() - record.isPendingInsecureSmsFallback -> alert.setPendingApproval() record.isRateLimited -> alert.setRateLimited() else -> alert.setNone() } @@ -645,8 +644,6 @@ open class V2ConversationItemTextOnlyViewHolder>( binding.footerDate.setOnClickListener { conversationContext.clickListener.onMessageWithErrorClicked(record) } - } else if (record.isPendingInsecureSmsFallback) { - binding.footerDate.setText(R.string.ConversationItem_click_to_approve_unencrypted) } else if (record.isRateLimited) { binding.footerDate.setText(R.string.ConversationItem_send_paused) } else if (record.isScheduled()) { @@ -694,7 +691,7 @@ open class V2ConversationItemTextOnlyViewHolder>( messageId = newMessageId - if (!record.isOutgoing || record.isFailed || record.isPendingInsecureSmsFallback || record.isScheduled()) { + if (!record.isOutgoing || record.isFailed || record.isScheduled()) { deliveryStatus.setNone() return } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index db5df964bd..5f937e78fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -508,9 +508,6 @@ public final class ConversationListItem extends ConstraintLayout implements Bind } else if (thread.isFailed()) { deliveryStatusIndicator.setNone(); alertView.setFailed(); - } else if (thread.isPendingInsecureSmsFallback()) { - deliveryStatusIndicator.setNone(); - alertView.setPendingApproval(); } else { alertView.setNone(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index d78cbefbfc..86bf3b612b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -1915,12 +1915,6 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat } } - fun markAsPendingInsecureSmsFallback(messageId: Long) { - val threadId = getThreadIdForMessage(messageId) - updateMailboxBitmask(messageId, MessageTypes.BASE_TYPE_MASK, MessageTypes.BASE_PENDING_INSECURE_SMS_FALLBACK, Optional.of(threadId)) - ApplicationDependencies.getDatabaseObserver().notifyMessageUpdateObservers(MessageId(messageId)) - } - fun markAsSending(messageId: Long) { val threadId = getThreadIdForMessage(messageId) updateMailboxBitmask(messageId, MessageTypes.BASE_TYPE_MASK, MessageTypes.BASE_SENDING_TYPE, Optional.of(threadId)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java index a8a7fc1e41..58d2acbcd0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java @@ -75,6 +75,7 @@ public abstract class DisplayRecord { return MessageTypes.isFailedMessageType(type) || MessageTypes.isPendingSecureSmsFallbackType(type) || + MessageTypes.isPendingInsecureSmsFallbackType(type) || deliveryStatus >= MessageTable.Status.STATUS_FAILED; } @@ -224,10 +225,6 @@ public abstract class DisplayRecord { return hasReadReceipt; } - public boolean isPendingInsecureSmsFallback() { - return MessageTypes.isPendingInsecureSmsFallbackType(type); - } - public boolean isPaymentNotification() { return MessageTypes.isPaymentsNotification(type); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java index a9230188f2..ca92394add 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java @@ -20,6 +20,7 @@ final class StatusUtil { static boolean isFailed(long type, long deliveryStatus) { return MessageTypes.isFailedMessageType(type) || MessageTypes.isPendingSecureSmsFallbackType(type) || + MessageTypes.isPendingInsecureSmsFallbackType(type) || deliveryStatus >= MessageTable.Status.STATUS_FAILED; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java index fcbc5ba24e..ec164f9c26 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java @@ -180,10 +180,6 @@ public final class ThreadRecord { return hasReadReceipt; } - public boolean isPendingInsecureSmsFallback() { - return MessageTypes.isPendingInsecureSmsFallbackType(type); - } - public boolean isDelivered() { return StatusUtil.isDelivered(deliveryStatus, hasDeliveryReceipt); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java index 0c3e09ea47..5cf445bdba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java @@ -30,7 +30,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.service.ExpiringMessageManager; -import org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException; import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.transport.UndeliverableMessageException; import org.thoughtcrime.securesms.util.SignalLocalMetrics; @@ -205,9 +204,9 @@ public class IndividualSendJob extends PushSendJob { log(TAG, String.valueOf(message.getSentTimeMillis()), "Sent message: " + messageId); - } catch (InsecureFallbackApprovalException ifae) { - warn(TAG, "Failure", ifae); - database.markAsPendingInsecureSmsFallback(messageId); + } catch (UnregisteredUserException uue) { + warn(TAG, "Failure", uue); + database.markAsSentFailed(messageId); notifyMediaMessageDeliveryFailed(context, messageId); ApplicationDependencies.getJobManager().add(new DirectoryRefreshJob(false)); } catch (UntrustedIdentityException uie) { @@ -237,7 +236,7 @@ public class IndividualSendJob extends PushSendJob { } private boolean deliver(OutgoingMessage message, MessageRecord originalEditedMessage) - throws IOException, InsecureFallbackApprovalException, UntrustedIdentityException, UndeliverableMessageException + throws IOException, UnregisteredUserException, UntrustedIdentityException, UndeliverableMessageException { if (message.getThreadRecipient() == null) { throw new UndeliverableMessageException("No destination address."); @@ -335,9 +334,6 @@ public class IndividualSendJob extends PushSendJob { return result.getSuccess().isUnidentified(); } - } catch (UnregisteredUserException e) { - warn(TAG, String.valueOf(message.getSentTimeMillis()), e); - throw new InsecureFallbackApprovalException(e); } catch (FileNotFoundException e) { warn(TAG, String.valueOf(message.getSentTimeMillis()), e); throw new UndeliverableMessageException(e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/transport/InsecureFallbackApprovalException.java b/app/src/main/java/org/thoughtcrime/securesms/transport/InsecureFallbackApprovalException.java deleted file mode 100644 index 15651696f9..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/transport/InsecureFallbackApprovalException.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.thoughtcrime.securesms.transport; - -public class InsecureFallbackApprovalException extends Exception { - public InsecureFallbackApprovalException(String detailMessage) { - super(detailMessage); - } - - public InsecureFallbackApprovalException(Throwable e) { - super(e); - } -} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c46ac424a2..4a7e933bb8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -307,7 +307,6 @@ Send failed %1$s has left the group. Send paused - Send failed, tap for unsecured fallback Fallback to unencrypted SMS? Fallback to unencrypted MMS? This message will not be encrypted because the recipient is no longer a Signal user.\n\nSend unsecured message?