Ensure notifications for new users won't be generated first fetch

fork-5.53.8
Moxie Marlinspike 2017-11-21 11:54:18 -08:00
rodzic 66e1be1aeb
commit f855e161d9
11 zmienionych plików z 36 dodań i 19 usunięć

Wyświetl plik

@ -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);
}

Wyświetl plik

@ -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) {

Wyświetl plik

@ -391,7 +391,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements Verif
keyboard.displaySuccess().addListener(new AssertedSuccessListener<Boolean>() {
@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);

Wyświetl plik

@ -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);
}

Wyświetl plik

@ -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);
}

Wyświetl plik

@ -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());

Wyświetl plik

@ -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()) {

Wyświetl plik

@ -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());

Wyświetl plik

@ -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;

Wyświetl plik

@ -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<Address> 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<>();

Wyświetl plik

@ -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);