diff --git a/src/org/thoughtcrime/securesms/ContactSelectionActivity.java b/src/org/thoughtcrime/securesms/ContactSelectionActivity.java index 2dde655b42..e50b8d4919 100644 --- a/src/org/thoughtcrime/securesms/ContactSelectionActivity.java +++ b/src/org/thoughtcrime/securesms/ContactSelectionActivity.java @@ -140,7 +140,7 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB protected Void doInBackground(Context... params) { try { - DirectoryHelper.refreshDirectory(params[0], masterSecret); + DirectoryHelper.refreshDirectory(params[0], masterSecret, true); } catch (IOException e) { Log.w(TAG, e); } diff --git a/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java b/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java index 4535a8ec7b..318cab5103 100644 --- a/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java +++ b/src/org/thoughtcrime/securesms/DatabaseUpgradeActivity.java @@ -223,7 +223,7 @@ public class DatabaseUpgradeActivity extends BaseActivity { if (params[0] < CONTACTS_ACCOUNT_VERSION) { ApplicationContext.getInstance(getApplicationContext()) .getJobManager() - .add(new DirectoryRefreshJob(getApplicationContext())); + .add(new DirectoryRefreshJob(getApplicationContext(), false)); } if (params[0] < MEDIA_DOWNLOAD_CONTROLS_VERSION) { @@ -236,13 +236,13 @@ public class DatabaseUpgradeActivity extends BaseActivity { .add(new RefreshAttributesJob(getApplicationContext())); ApplicationContext.getInstance(getApplicationContext()) .getJobManager() - .add(new DirectoryRefreshJob(getApplicationContext())); + .add(new DirectoryRefreshJob(getApplicationContext(), false)); } if (params[0] < PROFILES) { ApplicationContext.getInstance(getApplicationContext()) .getJobManager() - .add(new DirectoryRefreshJob(getApplicationContext())); + .add(new DirectoryRefreshJob(getApplicationContext(), false)); } if (params[0] < SCREENSHOTS) { diff --git a/src/org/thoughtcrime/securesms/RegistrationActivity.java b/src/org/thoughtcrime/securesms/RegistrationActivity.java index d25f3324f0..a064b511bb 100644 --- a/src/org/thoughtcrime/securesms/RegistrationActivity.java +++ b/src/org/thoughtcrime/securesms/RegistrationActivity.java @@ -391,7 +391,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements Verif keyboard.displaySuccess().addListener(new AssertedSuccessListener() { @Override public void onSuccess(Boolean result) { - ApplicationContext.getInstance(RegistrationActivity.this).getJobManager().add(new DirectoryRefreshJob(RegistrationActivity.this)); + ApplicationContext.getInstance(RegistrationActivity.this).getJobManager().add(new DirectoryRefreshJob(RegistrationActivity.this, false)); DirectoryRefreshListener.schedule(RegistrationActivity.this); RotateSignedPreKeyListener.schedule(RegistrationActivity.this); diff --git a/src/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java b/src/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java index e2e798a8c1..25f8f215a5 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java +++ b/src/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java @@ -30,7 +30,7 @@ public class ContactsSyncAdapter extends AbstractThreadedSyncAdapter { if (TextSecurePreferences.isPushRegistered(getContext())) { try { - DirectoryHelper.refreshDirectory(getContext(), KeyCachingService.getMasterSecret(getContext())); + DirectoryHelper.refreshDirectory(getContext(), KeyCachingService.getMasterSecret(getContext()), true); } catch (IOException e) { Log.w(TAG, e); } diff --git a/src/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java b/src/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java index 3c2221b7e3..e1a9fffa3c 100644 --- a/src/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java +++ b/src/org/thoughtcrime/securesms/jobs/DirectoryRefreshJob.java @@ -21,22 +21,25 @@ public class DirectoryRefreshJob extends ContextJob { @Nullable private transient Recipient recipient; @Nullable private transient MasterSecret masterSecret; + private transient boolean notifyOfNewUsers; - public DirectoryRefreshJob(@NonNull Context context) { - this(context, null, null); + public DirectoryRefreshJob(@NonNull Context context, boolean notifyOfNewUsers) { + this(context, null, null, notifyOfNewUsers); } public DirectoryRefreshJob(@NonNull Context context, @Nullable MasterSecret masterSecret, - @Nullable Recipient recipient) + @Nullable Recipient recipient, + boolean notifyOfNewUsers) { super(context, JobParameters.newBuilder() .withGroupId(DirectoryRefreshJob.class.getSimpleName()) .withRequirement(new NetworkRequirement(context)) .create()); - this.recipient = recipient; - this.masterSecret = masterSecret; + this.recipient = recipient; + this.masterSecret = masterSecret; + this.notifyOfNewUsers = notifyOfNewUsers; } @Override @@ -51,7 +54,7 @@ public class DirectoryRefreshJob extends ContextJob { try { wakeLock.acquire(); if (recipient == null) { - DirectoryHelper.refreshDirectory(context, KeyCachingService.getMasterSecret(context)); + DirectoryHelper.refreshDirectory(context, KeyCachingService.getMasterSecret(context), notifyOfNewUsers); } else { DirectoryHelper.refreshDirectoryFor(context, masterSecret, recipient); } diff --git a/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index ddd75dab0b..1eb3e1cb8a 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -75,7 +75,7 @@ public class PushMediaSendJob extends PushSendJob implements InjectableType { Log.w(TAG, ifae); database.markAsPendingInsecureSmsFallback(messageId); notifyMediaMessageDeliveryFailed(context, messageId); - ApplicationContext.getInstance(context).getJobManager().add(new DirectoryRefreshJob(context)); + ApplicationContext.getInstance(context).getJobManager().add(new DirectoryRefreshJob(context, false)); } catch (UntrustedIdentityException uie) { Log.w(TAG, uie); database.addMismatchedIdentity(messageId, Address.fromSerialized(uie.getE164Number()), uie.getIdentityKey()); diff --git a/src/org/thoughtcrime/securesms/jobs/PushReceivedJob.java b/src/org/thoughtcrime/securesms/jobs/PushReceivedJob.java index 918b938b85..d25f4c4e04 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushReceivedJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushReceivedJob.java @@ -29,7 +29,7 @@ public abstract class PushReceivedJob extends ContextJob { if (!isActiveNumber(recipient)) { DatabaseFactory.getRecipientDatabase(context).setRegistered(recipient, RecipientDatabase.RegisteredState.REGISTERED); - ApplicationContext.getInstance(context).getJobManager().add(new DirectoryRefreshJob(context, KeyCachingService.getMasterSecret(context), recipient)); + ApplicationContext.getInstance(context).getJobManager().add(new DirectoryRefreshJob(context, KeyCachingService.getMasterSecret(context), recipient, false)); } if (envelope.isReceipt()) { diff --git a/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java index 011d48951f..be5936a623 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushTextSendJob.java @@ -66,7 +66,7 @@ public class PushTextSendJob extends PushSendJob implements InjectableType { Log.w(TAG, e); database.markAsPendingInsecureSmsFallback(record.getId()); MessageNotifier.notifyMessageDeliveryFailed(context, record.getRecipient(), record.getThreadId()); - ApplicationContext.getInstance(context).getJobManager().add(new DirectoryRefreshJob(context)); + ApplicationContext.getInstance(context).getJobManager().add(new DirectoryRefreshJob(context, false)); } catch (UntrustedIdentityException e) { Log.w(TAG, e); database.addMismatchedIdentity(record.getId(), Address.fromSerialized(e.getE164Number()), e.getIdentityKey()); diff --git a/src/org/thoughtcrime/securesms/service/DirectoryRefreshListener.java b/src/org/thoughtcrime/securesms/service/DirectoryRefreshListener.java index 53300b07aa..d31aff40df 100644 --- a/src/org/thoughtcrime/securesms/service/DirectoryRefreshListener.java +++ b/src/org/thoughtcrime/securesms/service/DirectoryRefreshListener.java @@ -24,7 +24,7 @@ public class DirectoryRefreshListener extends PersistentAlarmManagerListener { if (scheduledTime != 0 && TextSecurePreferences.isPushRegistered(context)) { ApplicationContext.getInstance(context) .getJobManager() - .add(new DirectoryRefreshJob(context)); + .add(new DirectoryRefreshJob(context, true)); } long newTime = System.currentTimeMillis() + INTERVAL; diff --git a/src/org/thoughtcrime/securesms/util/DirectoryHelper.java b/src/org/thoughtcrime/securesms/util/DirectoryHelper.java index c8ec529f1f..856602a738 100644 --- a/src/org/thoughtcrime/securesms/util/DirectoryHelper.java +++ b/src/org/thoughtcrime/securesms/util/DirectoryHelper.java @@ -47,7 +47,7 @@ public class DirectoryHelper { private static final String TAG = DirectoryHelper.class.getSimpleName(); - public static void refreshDirectory(@NonNull Context context, @Nullable MasterSecret masterSecret) + public static void refreshDirectory(@NonNull Context context, @Nullable MasterSecret masterSecret, boolean notifyOfNewUsers) throws IOException { if (TextUtils.isEmpty(TextSecurePreferences.getLocalNumber(context))) return; @@ -60,7 +60,7 @@ public class DirectoryHelper { .add(new MultiDeviceContactUpdateJob(context)); } - notifyNewUsers(context, masterSecret, newlyActiveUsers); + if (notifyOfNewUsers) notifyNewUsers(context, masterSecret, newlyActiveUsers); } public static @NonNull List
refreshDirectory(@NonNull Context context, @NonNull SignalServiceAccountManager accountManager) @@ -101,7 +101,12 @@ public class DirectoryHelper { recipientDatabase.setRegistered(activeRecipients, inactiveRecipients); updateContactsDatabase(context, Stream.of(activeRecipients).map(Recipient::getAddress).toList(), true); - return newlyActiveAddresses; + if (TextSecurePreferences.hasSuccessfullyRetrievedDirectory(context)) { + return newlyActiveAddresses; + } else { + TextSecurePreferences.setHasSuccessfullyRetrievedDirectory(context, true); + return new LinkedList<>(); + } } return new LinkedList<>(); diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java index e7fc6307ef..389e540d06 100644 --- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -116,6 +116,15 @@ public class TextSecurePreferences { public static final String READ_RECEIPTS_PREF = "pref_read_receipts"; public static final String INCOGNITO_KEYBORAD_PREF = "pref_incognito_keyboard"; private static final String UNAUTHORIZED_RECEIVED = "pref_unauthorized_received"; + private static final String SUCCESSFUL_DIRECTORY_PREF = "pref_successful_directory"; + + public static void setHasSuccessfullyRetrievedDirectory(Context context, boolean value) { + setBooleanPreference(context, SUCCESSFUL_DIRECTORY_PREF, value); + } + + public static boolean hasSuccessfullyRetrievedDirectory(Context context) { + return getBooleanPreference(context, SUCCESSFUL_DIRECTORY_PREF, false); + } public static void setUnauthorizedReceived(Context context, boolean value) { setBooleanPreference(context, UNAUTHORIZED_RECEIVED, value);