Render GV1->GV2 migration event.

This commit is contained in:
Greyson Parrelli
2020-11-04 14:19:14 -05:00
committed by Alan Evans
parent 6bb9d27d4e
commit 5e536c3fa5
21 changed files with 447 additions and 26 deletions

View File

@@ -137,7 +137,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, @Nullable SmsDatabase.InsertListener insertListener) throws MmsException;
public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, int defaultReceiptStatus, @Nullable SmsDatabase.InsertListener insertListener) throws MmsException;
public abstract void insertProfileNameChangeMessages(@NonNull Recipient recipient, @NonNull String newProfileName, @NonNull String previousProfileName);
public abstract void insertGroupV1MigrationEvent(@NonNull RecipientId recipientId, long threadId, List<RecipientId> pendingRecipients);
public abstract void insertGroupV1MigrationEvents(@NonNull RecipientId recipientId, long threadId, List<RecipientId> pendingRecipients);
public abstract boolean deleteMessage(long messageId);
abstract void deleteThread(long threadId);

View File

@@ -415,7 +415,7 @@ public class MmsDatabase extends MessageDatabase {
}
@Override
public void insertGroupV1MigrationEvent(@NonNull RecipientId recipientId, long threadId, List<RecipientId> pendingRecipients) {
public void insertGroupV1MigrationEvents(@NonNull RecipientId recipientId, long threadId, List<RecipientId> pendingRecipients) {
throw new UnsupportedOperationException();
}

View File

@@ -266,6 +266,10 @@ public interface MmsSmsColumns {
return type == PROFILE_CHANGE_TYPE;
}
public static boolean isGroupV1MigrationEvent(long type) {
return type == GV1_MIGRATION_TYPE;
}
public static long translateFromSystemBaseType(long theirType) {
// public static final int NONE_TYPE = 0;
// public static final int INBOX_TYPE = 1;

View File

@@ -740,7 +740,22 @@ public class SmsDatabase extends MessageDatabase {
}
@Override
public void insertGroupV1MigrationEvent(@NonNull RecipientId recipientId, long threadId, List<RecipientId> pendingRecipients) {
public void insertGroupV1MigrationEvents(@NonNull RecipientId recipientId, long threadId, @NonNull List<RecipientId> pendingRecipients) {
insertGroupV1MigrationNotification(recipientId, threadId);
if (pendingRecipients.size() > 0) {
insertGroupV1MigrationEvent(recipientId, threadId, pendingRecipients);
}
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
}
private void insertGroupV1MigrationNotification(@NonNull RecipientId recipientId, long threadId) {
insertGroupV1MigrationEvent(recipientId, threadId, Collections.emptyList());
}
private void insertGroupV1MigrationEvent(@NonNull RecipientId recipientId, long threadId, @NonNull List<RecipientId> pendingRecipients) {
ContentValues values = new ContentValues();
values.put(RECIPIENT_ID, recipientId.serialize());
values.put(ADDRESS_DEVICE_ID, 1);
@@ -749,12 +764,12 @@ public class SmsDatabase extends MessageDatabase {
values.put(READ, 1);
values.put(TYPE, Types.GV1_MIGRATION_TYPE);
values.put(THREAD_ID, threadId);
values.put(BODY, RecipientId.toSerializedList(pendingRecipients));
if (pendingRecipients.size() > 0) {
values.put(BODY, RecipientId.toSerializedList(pendingRecipients));
}
databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, values);
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
}
@Override

View File

@@ -17,7 +17,6 @@
package org.thoughtcrime.securesms.database.model;
import android.content.Context;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.RelativeSizeSpan;
@@ -46,6 +45,7 @@ import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.ExpirationUtil;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.StringUtil;
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.libsignal.util.guava.Function;
import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil;
import org.whispersystems.signalservice.api.util.UuidUtil;
@@ -172,6 +172,13 @@ public abstract class MessageRecord extends DisplayRecord {
} else if (isEndSession()) {
if (isOutgoing()) return staticUpdateDescription(context.getString(R.string.SmsMessageRecord_secure_session_reset), R.drawable.ic_update_info_light_16, R.drawable.ic_update_info_dark_16);
else return fromRecipient(getIndividualRecipient(), r-> context.getString(R.string.SmsMessageRecord_secure_session_reset_s, r.getDisplayName(context)), R.drawable.ic_update_info_light_16, R.drawable.ic_update_info_dark_16);
} else if (isGroupV1MigrationEvent()) {
if (Util.isEmpty(getBody())) {
return staticUpdateDescription(context.getString(R.string.MessageRecord_this_group_was_updated_to_a_new_group), R.drawable.ic_update_group_role_light_16, R.drawable.ic_update_group_role_dark_16);
} else {
int count = getGroupV1MigrationEventInvites().size();
return staticUpdateDescription(context.getResources().getQuantityString(R.plurals.MessageRecord_members_couldnt_be_added_to_the_new_group_and_have_been_invited, count, count), R.drawable.ic_update_group_add_light_16, R.drawable.ic_update_group_add_dark_16);
}
}
return null;
@@ -347,9 +354,22 @@ public abstract class MessageRecord extends DisplayRecord {
return SmsDatabase.Types.isInvalidVersionKeyExchange(type);
}
public boolean isGroupV1MigrationEvent() {
return SmsDatabase.Types.isGroupV1MigrationEvent(type);
}
public @NonNull List<RecipientId> getGroupV1MigrationEventInvites() {
if (isGroupV1MigrationEvent()) {
return RecipientId.fromSerializedList(getBody());
} else {
return Collections.emptyList();
}
}
public boolean isUpdate() {
return isGroupAction() || isJoined() || isExpirationTimerUpdate() || isCallLog() ||
isEndSession() || isIdentityUpdate() || isIdentityVerified() || isIdentityDefault() || isProfileChange();
isEndSession() || isIdentityUpdate() || isIdentityVerified() || isIdentityDefault() ||
isProfileChange() || isGroupV1MigrationEvent();
}
public boolean isMediaPending() {