mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-25 12:57:21 +00:00
Don't return unresolved asynchronous recipients for non-async callers
Fixes #6082 // FREEBIE
This commit is contained in:
parent
dadc8d0183
commit
21a0fe3a48
@ -46,6 +46,7 @@ public class Recipient {
|
|||||||
private @NonNull String number;
|
private @NonNull String number;
|
||||||
private @Nullable String name;
|
private @Nullable String name;
|
||||||
private boolean stale;
|
private boolean stale;
|
||||||
|
private boolean resolving;
|
||||||
|
|
||||||
private ContactPhoto contactPhoto;
|
private ContactPhoto contactPhoto;
|
||||||
private Uri contactUri;
|
private Uri contactUri;
|
||||||
@ -61,6 +62,7 @@ public class Recipient {
|
|||||||
this.number = number;
|
this.number = number;
|
||||||
this.contactPhoto = ContactPhotoFactory.getLoadingPhoto();
|
this.contactPhoto = ContactPhotoFactory.getLoadingPhoto();
|
||||||
this.color = null;
|
this.color = null;
|
||||||
|
this.resolving = true;
|
||||||
|
|
||||||
if (stale != null) {
|
if (stale != null) {
|
||||||
this.name = stale.name;
|
this.name = stale.name;
|
||||||
@ -79,6 +81,7 @@ public class Recipient {
|
|||||||
Recipient.this.contactUri = result.contactUri;
|
Recipient.this.contactUri = result.contactUri;
|
||||||
Recipient.this.contactPhoto = result.avatar;
|
Recipient.this.contactPhoto = result.avatar;
|
||||||
Recipient.this.color = result.color;
|
Recipient.this.color = result.color;
|
||||||
|
Recipient.this.resolving = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
@ -99,6 +102,7 @@ public class Recipient {
|
|||||||
this.name = details.name;
|
this.name = details.name;
|
||||||
this.contactPhoto = details.avatar;
|
this.contactPhoto = details.avatar;
|
||||||
this.color = details.color;
|
this.color = details.color;
|
||||||
|
this.resolving = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized @Nullable Uri getContactUri() {
|
public synchronized @Nullable Uri getContactUri() {
|
||||||
@ -193,4 +197,9 @@ public class Recipient {
|
|||||||
void setStale() {
|
void setStale() {
|
||||||
this.stale = true;
|
this.stale = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
synchronized boolean isResolving() {
|
||||||
|
return resolving;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
||||||
public class RecipientProvider {
|
class RecipientProvider {
|
||||||
|
|
||||||
private static final String TAG = RecipientProvider.class.getSimpleName();
|
private static final String TAG = RecipientProvider.class.getSimpleName();
|
||||||
|
|
||||||
@ -72,7 +72,9 @@ public class RecipientProvider {
|
|||||||
|
|
||||||
@NonNull Recipient getRecipient(Context context, long recipientId, boolean asynchronous) {
|
@NonNull Recipient getRecipient(Context context, long recipientId, boolean asynchronous) {
|
||||||
Recipient cachedRecipient = recipientCache.get(recipientId);
|
Recipient cachedRecipient = recipientCache.get(recipientId);
|
||||||
if (cachedRecipient != null && !cachedRecipient.isStale()) return cachedRecipient;
|
if (cachedRecipient != null && !cachedRecipient.isStale() && (asynchronous || !cachedRecipient.isResolving())) {
|
||||||
|
return cachedRecipient;
|
||||||
|
}
|
||||||
|
|
||||||
String number = CanonicalAddressDatabase.getInstance(context).getAddressFromId(recipientId);
|
String number = CanonicalAddressDatabase.getInstance(context).getAddressFromId(recipientId);
|
||||||
|
|
||||||
@ -88,7 +90,9 @@ public class RecipientProvider {
|
|||||||
|
|
||||||
@NonNull Recipients getRecipients(Context context, long[] recipientIds, boolean asynchronous) {
|
@NonNull Recipients getRecipients(Context context, long[] recipientIds, boolean asynchronous) {
|
||||||
Recipients cachedRecipients = recipientsCache.get(new RecipientIds(recipientIds));
|
Recipients cachedRecipients = recipientsCache.get(new RecipientIds(recipientIds));
|
||||||
if (cachedRecipients != null && !cachedRecipients.isStale()) return cachedRecipients;
|
if (cachedRecipients != null && !cachedRecipients.isStale() && (asynchronous || !cachedRecipients.isResolving())) {
|
||||||
|
return cachedRecipients;
|
||||||
|
}
|
||||||
|
|
||||||
List<Recipient> recipientList = new LinkedList<>();
|
List<Recipient> recipientList = new LinkedList<>();
|
||||||
|
|
||||||
|
@ -344,6 +344,14 @@ public class Recipients implements Iterable<Recipient>, RecipientModifiedListene
|
|||||||
this.stale = true;
|
this.stale = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isResolving() {
|
||||||
|
for (Recipient recipient : recipients) {
|
||||||
|
if (recipient.isResolving()) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public interface RecipientsModifiedListener {
|
public interface RecipientsModifiedListener {
|
||||||
public void onModified(Recipients recipient);
|
public void onModified(Recipients recipient);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user