diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java index 8c67be3bb..5e6b9dfb5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java @@ -41,6 +41,11 @@ public class ContactsSyncAdapter extends AbstractThreadedSyncAdapter { Context context = getContext(); + if (SignalStore.account().getE164() == null) { + Log.i(TAG, "No local number set, skipping all sync operations."); + return; + } + if (!SignalStore.account().isRegistered()) { Log.i(TAG, "Not push registered. Just syncing contact info."); DirectoryHelper.syncRecipientInfoWithSystemContacts(context); diff --git a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java index 11844176c..8b9119372 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java @@ -142,20 +142,28 @@ public class PhoneNumberFormatter { return phoneNumberUtil.format(parsedNumber, PhoneNumberUtil.PhoneNumberFormat.E164); } catch (NumberParseException e) { Log.w(TAG, e); - if (bareNumber.charAt(0) == '+') + if (bareNumber.charAt(0) == '+') { return bareNumber; + } - String localNumberImprecise = localNumber.isPresent() ? localNumber.get().getE164Number() : ""; + if (localNumber.isPresent()) { + String localNumberImprecise = localNumber.get().getE164Number(); - if (localNumberImprecise.charAt(0) == '+') - localNumberImprecise = localNumberImprecise.substring(1); + if (localNumberImprecise.charAt(0) == '+') { + localNumberImprecise = localNumberImprecise.substring(1); + } - if (localNumberImprecise.length() == bareNumber.length() || bareNumber.length() > localNumberImprecise.length()) - return "+" + number; + if (localNumberImprecise.length() == bareNumber.length() || bareNumber.length() > localNumberImprecise.length()) { + return "+" + number; + } - int difference = localNumberImprecise.length() - bareNumber.length(); + int difference = localNumberImprecise.length() - bareNumber.length(); - return "+" + localNumberImprecise.substring(0, difference) + bareNumber; + return "+" + localNumberImprecise.substring(0, difference) + bareNumber; + } else { + String countryCode = String.valueOf(phoneNumberUtil.getCountryCodeForRegion(localCountryCode)); + return "+" + (bareNumber.startsWith(countryCode) ? bareNumber : countryCode + bareNumber); + } } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatterTest.java b/app/src/test/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatterTest.java index 7c32efe41..1371b3090 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatterTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatterTest.java @@ -3,13 +3,17 @@ package org.thoughtcrime.securesms.phonenumbers; import org.junit.Before; import org.junit.Test; +import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.testutil.EmptyLogger; import static junit.framework.Assert.assertEquals; public class PhoneNumberFormatterTest { @Before - public void setup() {} + public void setup() { + Log.initialize(new EmptyLogger()); + } @Test public void testAddressString() throws Exception { @@ -89,4 +93,11 @@ public class PhoneNumberFormatterTest { PhoneNumberFormatter formatter = new PhoneNumberFormatter("US", true); assertEquals(formatter.format("(415) 111-1122"), "+14151111122"); } + + @Test + public void testParseNumberFailWithoutLocalNumber() { + PhoneNumberFormatter formatter = new PhoneNumberFormatter("US", true); + assertEquals("+144444444441234512312312312312312312312", formatter.format("44444444441234512312312312312312312312")); + assertEquals("+144444444441234512312312312312312312312", formatter.format("144444444441234512312312312312312312312")); + } }