Support for disappearing messages

// FREEBIE
This commit is contained in:
Moxie Marlinspike
2016-08-15 20:23:56 -07:00
parent f03a086191
commit d7e4928f22
86 changed files with 1635 additions and 261 deletions

View File

@@ -17,6 +17,7 @@
package org.thoughtcrime.securesms.recipients;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.text.TextUtils;
@@ -31,6 +32,8 @@ import java.util.StringTokenizer;
public class RecipientFactory {
public static final String RECIPIENT_CLEAR_ACTION = "org.thoughtcrime.securesms.database.RecipientFactory.CLEAR";
private static final RecipientProvider provider = new RecipientProvider();
public static Recipients getRecipientsForIds(Context context, String recipientIds, boolean asynchronous) {
@@ -133,8 +136,9 @@ public class RecipientFactory {
return value;
}
public static void clearCache() {
public static void clearCache(Context context) {
provider.clearCache();
context.sendBroadcast(new Intent(RECIPIENT_CLEAR_ACTION));
}
}

View File

@@ -51,11 +51,12 @@ public class Recipients implements Iterable<Recipient>, RecipientModifiedListene
private final Set<RecipientsModifiedListener> listeners = Collections.newSetFromMap(new WeakHashMap<RecipientsModifiedListener, Boolean>());
private final List<Recipient> recipients;
private Uri ringtone = null;
private long mutedUntil = 0;
private boolean blocked = false;
private VibrateState vibrate = VibrateState.DEFAULT;
private boolean stale = false;
private Uri ringtone = null;
private long mutedUntil = 0;
private boolean blocked = false;
private VibrateState vibrate = VibrateState.DEFAULT;
private int expireMessages = 0;
private boolean stale = false;
Recipients() {
this(new LinkedList<Recipient>(), null);
@@ -65,10 +66,11 @@ public class Recipients implements Iterable<Recipient>, RecipientModifiedListene
this.recipients = recipients;
if (preferences != null) {
ringtone = preferences.getRingtone();
mutedUntil = preferences.getMuteUntil();
vibrate = preferences.getVibrateState();
blocked = preferences.isBlocked();
ringtone = preferences.getRingtone();
mutedUntil = preferences.getMuteUntil();
vibrate = preferences.getVibrateState();
blocked = preferences.isBlocked();
expireMessages = preferences.getExpireMessages();
}
}
@@ -79,10 +81,11 @@ public class Recipients implements Iterable<Recipient>, RecipientModifiedListene
this.recipients = recipients;
if (stale != null) {
ringtone = stale.ringtone;
mutedUntil = stale.mutedUntil;
vibrate = stale.vibrate;
blocked = stale.blocked;
ringtone = stale.ringtone;
mutedUntil = stale.mutedUntil;
vibrate = stale.vibrate;
blocked = stale.blocked;
expireMessages = stale.expireMessages;
}
preferences.addListener(new FutureTaskListener<RecipientsPreferences>() {
@@ -93,10 +96,11 @@ public class Recipients implements Iterable<Recipient>, RecipientModifiedListene
Set<RecipientsModifiedListener> localListeners;
synchronized (Recipients.this) {
ringtone = result.getRingtone();
mutedUntil = result.getMuteUntil();
vibrate = result.getVibrateState();
blocked = result.isBlocked();
ringtone = result.getRingtone();
mutedUntil = result.getMuteUntil();
vibrate = result.getVibrateState();
blocked = result.isBlocked();
expireMessages = result.getExpireMessages();
localListeners = new HashSet<>(listeners);
}
@@ -178,6 +182,18 @@ public class Recipients implements Iterable<Recipient>, RecipientModifiedListene
else if (!isEmpty()) recipients.get(0).setColor(color);
}
public synchronized int getExpireMessages() {
return expireMessages;
}
public void setExpireMessages(int expireMessages) {
synchronized (this) {
this.expireMessages = expireMessages;
}
notifyListeners();
}
public synchronized void addListener(RecipientsModifiedListener listener) {
if (listeners.isEmpty()) {
for (Recipient recipient : recipients) {