Fix for double notification when locked.

Fixes #3702
// FREEBIE
This commit is contained in:
Moxie Marlinspike 2015-07-20 18:00:48 -07:00
parent 1daea51cfb
commit 90d5e9dccd
2 changed files with 21 additions and 19 deletions

View file

@ -34,8 +34,6 @@ import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.thoughtcrime.securesms.util.Base64;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.VersionTracker;
import org.whispersystems.jobqueue.JobParameters;
import org.whispersystems.libaxolotl.DuplicateMessageException;
import org.whispersystems.libaxolotl.IdentityKey;
@ -88,11 +86,7 @@ public class PushDecryptJob extends ContextJob {
}
@Override
public void onAdded() {
if (KeyCachingService.getMasterSecret(context) == null) {
MessageNotifier.updateNotification(context, null, -2);
}
}
public void onAdded() {}
@Override
public void onRun() throws NoSuchMessageException {
@ -100,7 +94,7 @@ public class PushDecryptJob extends ContextJob {
Log.w(TAG, "Skipping job, waiting for migration...");
if (KeyCachingService.getMasterSecret(context) != null) {
MessageNotifier.updateNotification(context, null, -2);
MessageNotifier.updateNotification(context, null, true, -2);
}
return;

View file

@ -124,12 +124,20 @@ public class MessageNotifier {
return;
}
updateNotification(context, masterSecret, false, 0);
updateNotification(context, masterSecret, false, false, 0);
}
public static void updateNotification(@NonNull Context context,
@Nullable MasterSecret masterSecret,
long threadId)
{
updateNotification(context, masterSecret, false, threadId);
}
public static void updateNotification(@NonNull Context context,
@Nullable MasterSecret masterSecret,
boolean includePushDatabase,
long threadId)
{
Recipients recipients = DatabaseFactory.getThreadDatabase(context)
.getRecipientsForThreadId(threadId);
@ -140,19 +148,20 @@ public class MessageNotifier {
return;
}
if (visibleThread == threadId) {
ThreadDatabase threads = DatabaseFactory.getThreadDatabase(context);
threads.setRead(threadId);
sendInThreadNotification(context, threads.getRecipientsForThreadId(threadId));
} else {
updateNotification(context, masterSecret, true, 0);
updateNotification(context, masterSecret, true, includePushDatabase, 0);
}
}
private static void updateNotification(@NonNull Context context,
@Nullable MasterSecret masterSecret,
boolean signal, int reminderCount)
boolean signal,
boolean includePushDatabase,
int reminderCount)
{
Cursor telcoCursor = null;
Cursor pushCursor = null;
@ -173,7 +182,9 @@ public class MessageNotifier {
NotificationState notificationState = constructNotificationState(context, masterSecret, telcoCursor);
appendPushNotificationState(context, masterSecret, notificationState, pushCursor);
if (includePushDatabase) {
appendPushNotificationState(context, notificationState, pushCursor);
}
if (notificationState.hasMultipleThreads()) {
sendMultipleThreadNotification(context, masterSecret, notificationState, signal);
@ -382,13 +393,10 @@ public class MessageNotifier {
}
}
private static void appendPushNotificationState(@NonNull Context context,
@Nullable MasterSecret masterSecret,
@NonNull NotificationState notificationState,
@NonNull Cursor cursor)
private static void appendPushNotificationState(@NonNull Context context,
@NonNull NotificationState notificationState,
@NonNull Cursor cursor)
{
if (masterSecret != null) return;
PushDatabase.Reader reader = null;
TextSecureEnvelope envelope;