mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 16:08:33 +00:00
parent
36286da9bd
commit
33334f80c3
@ -1542,7 +1542,7 @@ public class MmsDatabase extends MessagingDatabase {
|
|||||||
List<? extends Attachment> quoteAttachments = Stream.of(attachments).filter(Attachment::isQuote).toList();
|
List<? extends Attachment> quoteAttachments = Stream.of(attachments).filter(Attachment::isQuote).toList();
|
||||||
SlideDeck quoteDeck = new SlideDeck(context, quoteAttachments);
|
SlideDeck quoteDeck = new SlideDeck(context, quoteAttachments);
|
||||||
|
|
||||||
if (quoteId > 0) {
|
if (quoteId > 0 && !quoteAuthor.isUnknown()) {
|
||||||
return new Quote(quoteId, quoteAuthor, quoteText, quoteMissing, quoteDeck);
|
return new Quote(quoteId, quoteAuthor, quoteText, quoteMissing, quoteDeck);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
@ -625,9 +625,9 @@ public class RecipientDatabase extends Database {
|
|||||||
} else {
|
} else {
|
||||||
throw new AssertionError("Failed to insert recipient!");
|
throw new AssertionError("Failed to insert recipient!");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
return RecipientId.from(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return RecipientId.from(id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ public class SmsMigrator {
|
|||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
long theirThreadId = cursor.getLong(cursor.getColumnIndexOrThrow("_id"));
|
long theirThreadId = cursor.getLong(cursor.getColumnIndexOrThrow("_id"));
|
||||||
String theirRecipients = cursor.getString(cursor.getColumnIndexOrThrow("recipient_ids"));
|
String theirRecipients = cursor.getString(cursor.getColumnIndexOrThrow("recipient_ids"));
|
||||||
Set<Recipient> ourRecipients = getOurRecipients(context, theirRecipients);
|
Set<Recipient> ourRecipients = getOurRecipients(context, theirRecipients);
|
||||||
ProgressDescription progress = new ProgressDescription(cursor.getCount(), cursor.getPosition(), 100, 0);
|
ProgressDescription progress = new ProgressDescription(cursor.getCount(), cursor.getPosition(), 100, 0);
|
||||||
|
|
||||||
if (ourRecipients != null) {
|
if (ourRecipients != null) {
|
||||||
|
@ -117,6 +117,10 @@ public class ThreadDatabase extends Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private long createThreadForRecipient(@NonNull RecipientId recipientId, boolean group, int distributionType) {
|
private long createThreadForRecipient(@NonNull RecipientId recipientId, boolean group, int distributionType) {
|
||||||
|
if (recipientId.isUnknown()) {
|
||||||
|
throw new AssertionError("Cannot create a thread for an unknown recipient!");
|
||||||
|
}
|
||||||
|
|
||||||
ContentValues contentValues = new ContentValues(4);
|
ContentValues contentValues = new ContentValues(4);
|
||||||
long date = System.currentTimeMillis();
|
long date = System.currentTimeMillis();
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@ public class ThreadMediaLoader extends AbstractCursorLoader {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Cursor getCursor() {
|
public Cursor getCursor() {
|
||||||
|
if (recipientId.isUnknown()) return null;
|
||||||
|
|
||||||
long threadId = DatabaseFactory.getThreadDatabase(getContext()).getThreadIdFor(Recipient.resolved(recipientId));
|
long threadId = DatabaseFactory.getThreadDatabase(getContext()).getThreadIdFor(Recipient.resolved(recipientId));
|
||||||
|
|
||||||
if (gallery) return DatabaseFactory.getMediaDatabase(getContext()).getGalleryMediaForThread(threadId);
|
if (gallery) return DatabaseFactory.getMediaDatabase(getContext()).getGalleryMediaForThread(threadId);
|
||||||
|
@ -212,7 +212,6 @@ public class MmsDownloadJob extends BaseJob {
|
|||||||
if (from != null) {
|
if (from != null) {
|
||||||
members.add(from);
|
members.add(from);
|
||||||
}
|
}
|
||||||
|
|
||||||
members.add(Recipient.self().getId());
|
members.add(Recipient.self().getId());
|
||||||
|
|
||||||
if (retrieved.getBody() != null) {
|
if (retrieved.getBody() != null) {
|
||||||
|
@ -140,7 +140,9 @@ public class NotificationChannels {
|
|||||||
* Creates a channel for the specified recipient.
|
* Creates a channel for the specified recipient.
|
||||||
* @return The channel ID for the newly-created channel.
|
* @return The channel ID for the newly-created channel.
|
||||||
*/
|
*/
|
||||||
public static synchronized String createChannelFor(@NonNull Context context, @NonNull Recipient recipient) {
|
public static synchronized @Nullable String createChannelFor(@NonNull Context context, @NonNull Recipient recipient) {
|
||||||
|
if (recipient.getId().isUnknown()) return null;
|
||||||
|
|
||||||
VibrateState vibrateState = recipient.getMessageVibrate();
|
VibrateState vibrateState = recipient.getMessageVibrate();
|
||||||
boolean vibrationEnabled = vibrateState == VibrateState.DEFAULT ? TextSecurePreferences.isNotificationVibrateEnabled(context) : vibrateState == VibrateState.ENABLED;
|
boolean vibrationEnabled = vibrateState == VibrateState.DEFAULT ? TextSecurePreferences.isNotificationVibrateEnabled(context) : vibrateState == VibrateState.ENABLED;
|
||||||
Uri messageRingtone = recipient.getMessageRingtone() != null ? recipient.getMessageRingtone() : getMessageRingtone(context);
|
Uri messageRingtone = recipient.getMessageRingtone() != null ? recipient.getMessageRingtone() : getMessageRingtone(context);
|
||||||
@ -152,11 +154,11 @@ public class NotificationChannels {
|
|||||||
/**
|
/**
|
||||||
* More verbose version of {@link #createChannelFor(Context, Recipient)}.
|
* More verbose version of {@link #createChannelFor(Context, Recipient)}.
|
||||||
*/
|
*/
|
||||||
public static synchronized @Nullable String createChannelFor(@NonNull Context context,
|
public static synchronized @Nullable String createChannelFor(@NonNull Context context,
|
||||||
@NonNull Address address,
|
@NonNull Address address,
|
||||||
@NonNull String displayName,
|
@NonNull String displayName,
|
||||||
@Nullable Uri messageSound,
|
@Nullable Uri messageSound,
|
||||||
boolean vibrationEnabled)
|
boolean vibrationEnabled)
|
||||||
{
|
{
|
||||||
if (!supported()) {
|
if (!supported()) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -119,7 +119,7 @@ public final class LiveRecipient {
|
|||||||
public @NonNull Recipient resolve() {
|
public @NonNull Recipient resolve() {
|
||||||
Recipient current = recipient.get();
|
Recipient current = recipient.get();
|
||||||
|
|
||||||
if (!current.isResolving()) {
|
if (!current.isResolving() || current.getId().isUnknown()) {
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,6 +150,8 @@ public final class LiveRecipient {
|
|||||||
*/
|
*/
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
public void refresh() {
|
public void refresh() {
|
||||||
|
if (getId().isUnknown()) return;
|
||||||
|
|
||||||
if (Util.isMainThread()) {
|
if (Util.isMainThread()) {
|
||||||
Log.w(TAG, "[Refresh][MAIN] " + getId(), new Throwable());
|
Log.w(TAG, "[Refresh][MAIN] " + getId(), new Throwable());
|
||||||
} else {
|
} else {
|
||||||
@ -189,7 +191,7 @@ public final class LiveRecipient {
|
|||||||
|
|
||||||
if (groupRecord.isPresent()) {
|
if (groupRecord.isPresent()) {
|
||||||
String title = groupRecord.get().getTitle();
|
String title = groupRecord.get().getTitle();
|
||||||
List<Recipient> members = Stream.of(groupRecord.get().getMembers()).map(this::fetchRecipientFromDisk).toList();
|
List<Recipient> members = Stream.of(groupRecord.get().getMembers()).filterNot(RecipientId::isUnknown).map(this::fetchRecipientFromDisk).toList();
|
||||||
Optional<Long> avatarId = Optional.absent();
|
Optional<Long> avatarId = Optional.absent();
|
||||||
|
|
||||||
if (!settings.getAddress().isMmsGroup() && title == null) {
|
if (!settings.getAddress().isMmsGroup() && title == null) {
|
||||||
|
@ -23,6 +23,7 @@ public final class LiveRecipientCache {
|
|||||||
private final Context context;
|
private final Context context;
|
||||||
private final RecipientDatabase recipientDatabase;
|
private final RecipientDatabase recipientDatabase;
|
||||||
private final Map<RecipientId, LiveRecipient> recipients;
|
private final Map<RecipientId, LiveRecipient> recipients;
|
||||||
|
private final LiveRecipient unknown;
|
||||||
|
|
||||||
private RecipientId localRecipientId;
|
private RecipientId localRecipientId;
|
||||||
|
|
||||||
@ -31,10 +32,13 @@ public final class LiveRecipientCache {
|
|||||||
this.context = context.getApplicationContext();
|
this.context = context.getApplicationContext();
|
||||||
this.recipientDatabase = DatabaseFactory.getRecipientDatabase(context);
|
this.recipientDatabase = DatabaseFactory.getRecipientDatabase(context);
|
||||||
this.recipients = new LRUCache<>(1000);
|
this.recipients = new LRUCache<>(1000);
|
||||||
|
this.unknown = new LiveRecipient(context, new MutableLiveData<>(), Recipient.UNKNOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AnyThread
|
@AnyThread
|
||||||
synchronized @NonNull LiveRecipient getLive(@NonNull RecipientId id) {
|
synchronized @NonNull LiveRecipient getLive(@NonNull RecipientId id) {
|
||||||
|
if (id.isUnknown()) return unknown;
|
||||||
|
|
||||||
LiveRecipient live = recipients.get(id);
|
LiveRecipient live = recipients.get(id);
|
||||||
|
|
||||||
if (live == null) {
|
if (live == null) {
|
||||||
|
@ -44,6 +44,8 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public class Recipient {
|
public class Recipient {
|
||||||
|
|
||||||
|
public static final Recipient UNKNOWN = new Recipient(RecipientId.UNKNOWN, new RecipientDetails());
|
||||||
|
|
||||||
private final RecipientId id;
|
private final RecipientId id;
|
||||||
private final boolean resolving;
|
private final boolean resolving;
|
||||||
private final Address address;
|
private final Address address;
|
||||||
|
@ -87,4 +87,34 @@ public class RecipientDetails {
|
|||||||
if (name == null) this.name = settings.getSystemDisplayName();
|
if (name == null) this.name = settings.getSystemDisplayName();
|
||||||
else this.name = name;
|
else this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RecipientDetails() {
|
||||||
|
this.groupAvatarId = null;
|
||||||
|
this.systemContactPhoto = null;
|
||||||
|
this.customLabel = null;
|
||||||
|
this.contactUri = null;
|
||||||
|
this.address = Address.UNKNOWN;
|
||||||
|
this.color = null;
|
||||||
|
this.messageRingtone = null;
|
||||||
|
this.callRingtone = null;
|
||||||
|
this.mutedUntil = 0;
|
||||||
|
this.messageVibrateState = VibrateState.DEFAULT;
|
||||||
|
this.callVibrateState = VibrateState.DEFAULT;
|
||||||
|
this.blocked = false;
|
||||||
|
this.expireMessages = 0;
|
||||||
|
this.participants = new LinkedList<>();
|
||||||
|
this.profileName = null;
|
||||||
|
this.seenInviteReminder = true;
|
||||||
|
this.defaultSubscriptionId = Optional.absent();
|
||||||
|
this.registered = RegisteredState.UNKNOWN;
|
||||||
|
this.profileKey = null;
|
||||||
|
this.profileAvatar = null;
|
||||||
|
this.profileSharing = false;
|
||||||
|
this.systemContact = true;
|
||||||
|
this.isLocalNumber = false;
|
||||||
|
this.notificationChannel = null;
|
||||||
|
this.unidentifiedAccessMode = UnidentifiedAccessMode.UNKNOWN;
|
||||||
|
this.forceSmsSelection = false;
|
||||||
|
this.name = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,10 @@ import java.util.List;
|
|||||||
|
|
||||||
public class RecipientId implements Parcelable, Comparable<RecipientId> {
|
public class RecipientId implements Parcelable, Comparable<RecipientId> {
|
||||||
|
|
||||||
private static final char DELIMITER = ',';
|
private static final long UNKNOWN_ID = -1;
|
||||||
|
private static final char DELIMITER = ',';
|
||||||
|
|
||||||
|
public static final RecipientId UNKNOWN = RecipientId.from(UNKNOWN_ID);
|
||||||
|
|
||||||
private final long id;
|
private final long id;
|
||||||
|
|
||||||
@ -51,6 +54,10 @@ public class RecipientId implements Parcelable, Comparable<RecipientId> {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isUnknown() {
|
||||||
|
return id == UNKNOWN_ID;
|
||||||
|
}
|
||||||
|
|
||||||
public @NonNull String serialize() {
|
public @NonNull String serialize() {
|
||||||
return String.valueOf(id);
|
return String.valueOf(id);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user