diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java index b772b3d040..70ff8029e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -180,9 +180,10 @@ public class ApplicationMigrations { static final int FIX_CHANGE_NUMBER_ERROR = 136; static final int CHAT_FOLDER_STORAGE_SYNC = 137; static final int SVR2_ENCLAVE_UPDATE_3 = 138; + static final int DUPLICATE_E164_FIX_3 = 139; } - public static final int CURRENT_VERSION = 138; + public static final int CURRENT_VERSION = 139; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -829,6 +830,10 @@ public class ApplicationMigrations { jobs.put(Version.SVR2_ENCLAVE_UPDATE_3, new Svr2MirrorMigrationJob()); } + if (lastSeenVersion < Version.DUPLICATE_E164_FIX_3) { + jobs.put(Version.DUPLICATE_E164_FIX_3, new DuplicateE164MigrationJob()); + } + return jobs; } diff --git a/core-util-jvm/src/main/java/org/signal/core/util/E164Util.kt b/core-util-jvm/src/main/java/org/signal/core/util/E164Util.kt index a417619733..e10ce5c6f6 100644 --- a/core-util-jvm/src/main/java/org/signal/core/util/E164Util.kt +++ b/core-util-jvm/src/main/java/org/signal/core/util/E164Util.kt @@ -160,7 +160,7 @@ object E164Util { val withAreaCodeRules: String = applyAreaCodeRules(localNumber, localAreaCode, correctedInput) val parsedNumber: PhoneNumber = PhoneNumberUtil.getInstance().parse(withAreaCodeRules, regionCode) - val isShortCode = ShortNumberInfo.getInstance().isValidShortNumberForRegion(parsedNumber, regionCode) || withAreaCodeRules.length <= 5 + val isShortCode = ShortNumberInfo.getInstance().isValidShortNumberForRegion(parsedNumber, regionCode) || withAreaCodeRules.trimStart('+').length <= 6 if (isShortCode) { return correctedInput.numbersOnly().stripLeadingZerosFromE164() } diff --git a/core-util-jvm/src/test/java/org/signal/core/util/E164UtilTest.kt b/core-util-jvm/src/test/java/org/signal/core/util/E164UtilTest.kt index 1408cd1825..14b3b2ccfe 100644 --- a/core-util-jvm/src/test/java/org/signal/core/util/E164UtilTest.kt +++ b/core-util-jvm/src/test/java/org/signal/core/util/E164UtilTest.kt @@ -54,13 +54,18 @@ class E164UtilTest { @Test fun `formatAsE164 - strip leading zeros`() { - val formatter: E164Util.Formatter = E164Util.createFormatterForE164("+14152222222") + var formatter: E164Util.Formatter = E164Util.createFormatterForE164("+14152222222") Assert.assertEquals("+15551234567", formatter.formatAsE164("+015551234567")) Assert.assertEquals("+15551234567", formatter.formatAsE164("+0015551234567")) Assert.assertEquals("+15551234567", formatter.formatAsE164("01115551234567")) Assert.assertEquals("1234", formatter.formatAsE164("01234")) Assert.assertEquals(null, formatter.formatAsE164("0")) Assert.assertEquals(null, formatter.formatAsE164("0000000")) + + formatter = E164Util.createFormatterForE164("+49 1234 567890") + Assert.assertEquals("+491234567890", formatter.formatAsE164("+0491234567890")) + Assert.assertEquals("+4912345", formatter.formatAsE164("+04912345")) + Assert.assertEquals("+491601234567", formatter.formatAsE164("+0491601234567")) } @Test @@ -97,8 +102,10 @@ class E164UtilTest { @Test fun `formatAsE164 - short codes`() { - val formatter: E164Util.Formatter = E164Util.createFormatterForE164("+14152222222") - Assert.assertEquals("+40404", formatter.formatAsE164("+40404")) + var formatter: E164Util.Formatter = E164Util.createFormatterForE164("+14152222222") + Assert.assertEquals("40404", formatter.formatAsE164("+40404")) + Assert.assertEquals("404040", formatter.formatAsE164("+404040")) + Assert.assertEquals("404040", formatter.formatAsE164("404040")) Assert.assertEquals("7726", formatter.formatAsE164("+7726")) Assert.assertEquals("69987", formatter.formatAsE164("+69987")) Assert.assertEquals("40404", formatter.formatAsE164("40404")) @@ -119,6 +126,10 @@ class E164UtilTest { Assert.assertEquals("988", formatter.formatAsE164("988")) Assert.assertEquals("999", formatter.formatAsE164("999")) Assert.assertEquals("118", formatter.formatAsE164("118")) + Assert.assertEquals("+119990001", formatter.formatAsE164("19990001")) + + formatter = E164Util.createFormatterForE164("+61 2 9876 5432") + Assert.assertEquals("19990001", formatter.formatAsE164("19990001")) } @Test