diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java index 2526ed762c..ec92f1b4e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java @@ -5,6 +5,7 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; +import org.signal.core.util.E164Util; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; import org.signal.storageservice.protos.groups.local.DecryptedGroup; @@ -16,6 +17,7 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.signal.core.util.Base64; +import org.thoughtcrime.securesms.util.SignalE164Util; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.ServiceId.ACI; @@ -128,6 +130,7 @@ public final class MessageGroupContext { RecipientId selfId = Recipient.self().getId(); return Stream.of(groupContext.members) + .filter(m -> SignalE164Util.isPotentialE164(m.e164)) .map(m -> m.e164) .withoutNulls() .map(RecipientId::fromE164) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SignalE164Util.kt b/app/src/main/java/org/thoughtcrime/securesms/util/SignalE164Util.kt index 72709e73a8..acfb828df1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SignalE164Util.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SignalE164Util.kt @@ -53,6 +53,14 @@ object SignalE164Util { return getFormatter().formatAsE164(input) } + /** + * Returns true if the input string can be considered an E164. Specifically, it returns true if we could figure out how to format it as an E164. + */ + @JvmStatic + fun isPotentialE164(input: String): Boolean { + return formatAsE164(input) != null + } + private fun getFormatter(): E164Util.Formatter { val localNumber = SignalStore.account.e164 ?: return defaultFormatter val formatter = cachedFormatters[localNumber]