mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Introduce SignalDatabase as the main database entrypoint.
This commit is contained in:
@@ -13,8 +13,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupJoinInfo;
|
||||
import org.signal.zkgroup.VerificationFailedException;
|
||||
import org.signal.zkgroup.groups.GroupMasterKey;
|
||||
import org.signal.zkgroup.groups.UuidCiphertext;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl;
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupLinkPassword;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
@@ -81,8 +81,8 @@ public final class GroupManager {
|
||||
avatarChanged);
|
||||
}
|
||||
} else if (groupId.isV1()) {
|
||||
List<Recipient> members = DatabaseFactory.getGroupDatabase(context)
|
||||
.getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF);
|
||||
List<Recipient> members = SignalDatabase.groups()
|
||||
.getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF);
|
||||
|
||||
Set<RecipientId> recipientIds = getMemberIds(new HashSet<>(members));
|
||||
|
||||
@@ -229,7 +229,7 @@ public final class GroupManager {
|
||||
public static void updateSelfProfileKeyInGroup(@NonNull Context context, @NonNull GroupId.V2 groupId)
|
||||
throws IOException, GroupChangeBusyException, GroupInsufficientRightsException, GroupNotAMemberException, GroupChangeFailedException
|
||||
{
|
||||
if (!DatabaseFactory.getGroupDatabase(context).groupExists(groupId)) {
|
||||
if (!SignalDatabase.groups().groupExists(groupId)) {
|
||||
Log.i(TAG, "Group is not available locally " + groupId);
|
||||
return;
|
||||
}
|
||||
@@ -245,8 +245,7 @@ public final class GroupManager {
|
||||
{
|
||||
try (GroupManagerV2.GroupEditor editor = new GroupManagerV2(context).edit(groupId.requireV2())) {
|
||||
editor.acceptInvite();
|
||||
DatabaseFactory.getGroupDatabase(context)
|
||||
.setActive(groupId, true);
|
||||
SignalDatabase.groups().setActive(groupId, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -361,7 +360,7 @@ public final class GroupManager {
|
||||
return editor.addMembers(newMembers);
|
||||
}
|
||||
} else {
|
||||
GroupDatabase.GroupRecord groupRecord = DatabaseFactory.getGroupDatabase(context).requireGroup(groupId);
|
||||
GroupDatabase.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId);
|
||||
List<RecipientId> members = groupRecord.getMembers();
|
||||
byte[] avatar = groupRecord.hasAvatar() ? AvatarHelper.getAvatarBytes(context, groupRecord.getRecipientId()) : null;
|
||||
Set<RecipientId> recipientIds = new HashSet<>(members);
|
||||
|
||||
@@ -13,9 +13,9 @@ import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||
import org.thoughtcrime.securesms.attachments.UriAttachment;
|
||||
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||
import org.thoughtcrime.securesms.groups.GroupManager.GroupActionResult;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage;
|
||||
@@ -49,10 +49,10 @@ final class GroupManagerV1 {
|
||||
@Nullable String name,
|
||||
boolean mms)
|
||||
{
|
||||
final GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
final GroupDatabase groupDatabase = SignalDatabase.groups();
|
||||
final SecureRandom secureRandom = new SecureRandom();
|
||||
final GroupId groupId = mms ? GroupId.createMms(secureRandom) : GroupId.createV1(secureRandom);
|
||||
final RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
|
||||
final RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId);
|
||||
final Recipient groupRecipient = Recipient.resolved(groupRecipientId);
|
||||
|
||||
memberIds.add(Recipient.self().getId());
|
||||
@@ -68,7 +68,7 @@ final class GroupManagerV1 {
|
||||
Log.w(TAG, "Failed to save avatar!", e);
|
||||
}
|
||||
groupDatabase.onAvatarUpdated(groupIdV1, avatarBytes != null);
|
||||
DatabaseFactory.getRecipientDatabase(context).setProfileSharing(groupRecipient.getId(), true);
|
||||
SignalDatabase.recipients().setProfileSharing(groupRecipient.getId(), true);
|
||||
return sendGroupUpdate(context, groupIdV1, memberIds, name, avatarBytes, memberIds.size() - 1);
|
||||
} else {
|
||||
groupDatabase.create(groupId.requireMms(), name, memberIds);
|
||||
@@ -80,7 +80,7 @@ final class GroupManagerV1 {
|
||||
}
|
||||
groupDatabase.onAvatarUpdated(groupId, avatarBytes != null);
|
||||
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(groupRecipient, ThreadDatabase.DistributionTypes.CONVERSATION);
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient, ThreadDatabase.DistributionTypes.CONVERSATION);
|
||||
return new GroupActionResult(groupRecipient, threadId, memberIds.size() - 1, Collections.emptyList());
|
||||
}
|
||||
}
|
||||
@@ -92,8 +92,8 @@ final class GroupManagerV1 {
|
||||
@Nullable String name,
|
||||
int newMemberCount)
|
||||
{
|
||||
final GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
final RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
|
||||
final GroupDatabase groupDatabase = SignalDatabase.groups();
|
||||
final RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId);
|
||||
|
||||
memberAddresses.add(Recipient.self().getId());
|
||||
groupDatabase.updateMembers(groupId, new LinkedList<>(memberAddresses));
|
||||
@@ -112,7 +112,7 @@ final class GroupManagerV1 {
|
||||
return sendGroupUpdate(context, groupIdV1, memberAddresses, name, avatarBytes, newMemberCount);
|
||||
} else {
|
||||
Recipient groupRecipient = Recipient.resolved(groupRecipientId);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(groupRecipient);
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient);
|
||||
return new GroupActionResult(groupRecipient, threadId, newMemberCount, Collections.emptyList());
|
||||
}
|
||||
}
|
||||
@@ -122,10 +122,10 @@ final class GroupManagerV1 {
|
||||
@Nullable byte[] avatarBytes,
|
||||
@Nullable String name)
|
||||
{
|
||||
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
|
||||
GroupDatabase groupDatabase = SignalDatabase.groups();
|
||||
RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId);
|
||||
Recipient groupRecipient = Recipient.resolved(groupRecipientId);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(groupRecipient);
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient);
|
||||
|
||||
groupDatabase.updateTitle(groupId, name);
|
||||
groupDatabase.onAvatarUpdated(groupId, avatarBytes != null);
|
||||
@@ -147,7 +147,7 @@ final class GroupManagerV1 {
|
||||
int newMemberCount)
|
||||
{
|
||||
Attachment avatarAttachment = null;
|
||||
RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
|
||||
RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId);
|
||||
Recipient groupRecipient = Recipient.resolved(groupRecipientId);
|
||||
|
||||
List<GroupContext.Member> uuidMembers = new ArrayList<>(members.size());
|
||||
@@ -194,8 +194,8 @@ final class GroupManagerV1 {
|
||||
|
||||
@WorkerThread
|
||||
static void updateGroupTimer(@NonNull Context context, @NonNull GroupId.V1 groupId, int expirationTime) {
|
||||
RecipientDatabase recipientDatabase = DatabaseFactory.getRecipientDatabase(context);
|
||||
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
||||
RecipientDatabase recipientDatabase = SignalDatabase.recipients();
|
||||
ThreadDatabase threadDatabase = SignalDatabase.threads();
|
||||
Recipient recipient = Recipient.externalGroupExact(context, groupId);
|
||||
long threadId = threadDatabase.getOrCreateThreadIdFor(recipient);
|
||||
|
||||
@@ -209,7 +209,7 @@ final class GroupManagerV1 {
|
||||
@NonNull GroupId.V1 groupId,
|
||||
@NonNull Recipient groupRecipient)
|
||||
{
|
||||
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
GroupDatabase groupDatabase = SignalDatabase.groups();
|
||||
|
||||
if (!groupDatabase.isActive(groupId)) {
|
||||
Log.w(TAG, "Group has already been left.");
|
||||
|
||||
@@ -31,8 +31,8 @@ import org.signal.zkgroup.groups.UuidCiphertext;
|
||||
import org.signal.zkgroup.profiles.ProfileKey;
|
||||
import org.signal.zkgroup.profiles.ProfileKeyCredential;
|
||||
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
@@ -98,7 +98,7 @@ final class GroupManagerV2 {
|
||||
|
||||
GroupManagerV2(@NonNull Context context) {
|
||||
this.context = context;
|
||||
this.groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
this.groupDatabase = SignalDatabase.groups();
|
||||
this.groupsV2Api = ApplicationDependencies.getSignalServiceAccountManager().getGroupsV2Api();
|
||||
this.groupsV2Operations = ApplicationDependencies.getGroupsV2Operations();
|
||||
this.authorization = ApplicationDependencies.getGroupsV2Authorization();
|
||||
@@ -121,7 +121,7 @@ final class GroupManagerV2 {
|
||||
@NonNull GroupExternalCredential getGroupExternalCredential(@NonNull GroupId.V2 groupId)
|
||||
throws IOException, VerificationFailedException
|
||||
{
|
||||
GroupMasterKey groupMasterKey = DatabaseFactory.getGroupDatabase(context)
|
||||
GroupMasterKey groupMasterKey = SignalDatabase.groups()
|
||||
.requireGroup(groupId)
|
||||
.requireV2GroupProperties()
|
||||
.getGroupMasterKey();
|
||||
@@ -133,7 +133,7 @@ final class GroupManagerV2 {
|
||||
|
||||
@WorkerThread
|
||||
@NonNull Map<UUID, UuidCiphertext> getUuidCipherTexts(@NonNull GroupId.V2 groupId) {
|
||||
GroupDatabase.GroupRecord groupRecord = DatabaseFactory.getGroupDatabase(context).requireGroup(groupId);
|
||||
GroupDatabase.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId);
|
||||
GroupDatabase.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties();
|
||||
GroupMasterKey groupMasterKey = v2GroupProperties.getGroupMasterKey();
|
||||
ClientZkGroupCipher clientZkGroupCipher = new ClientZkGroupCipher(GroupSecretParams.deriveFromMasterKey(groupMasterKey));
|
||||
@@ -164,10 +164,10 @@ final class GroupManagerV2 {
|
||||
|
||||
@WorkerThread
|
||||
GroupJoiner cancelRequest(@NonNull GroupId.V2 groupId) throws GroupChangeBusyException {
|
||||
GroupMasterKey groupMasterKey = DatabaseFactory.getGroupDatabase(context)
|
||||
.requireGroup(groupId)
|
||||
.requireV2GroupProperties()
|
||||
.getGroupMasterKey();
|
||||
GroupMasterKey groupMasterKey = SignalDatabase.groups()
|
||||
.requireGroup(groupId)
|
||||
.requireV2GroupProperties()
|
||||
.getGroupMasterKey();
|
||||
|
||||
return new GroupJoiner(groupMasterKey, null, GroupsV2ProcessingLock.acquireGroupProcessingLock());
|
||||
}
|
||||
@@ -260,12 +260,12 @@ final class GroupManagerV2 {
|
||||
|
||||
GroupMasterKey masterKey = groupSecretParams.getMasterKey();
|
||||
GroupId.V2 groupId = groupDatabase.create(masterKey, decryptedGroup);
|
||||
RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
|
||||
RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId);
|
||||
Recipient groupRecipient = Recipient.resolved(groupRecipientId);
|
||||
|
||||
AvatarHelper.setAvatar(context, groupRecipientId, avatar != null ? new ByteArrayInputStream(avatar) : null);
|
||||
groupDatabase.onAvatarUpdated(groupId, avatar != null);
|
||||
DatabaseFactory.getRecipientDatabase(context).setProfileSharing(groupRecipient.getId(), true);
|
||||
SignalDatabase.recipients().setProfileSharing(groupRecipient.getId(), true);
|
||||
|
||||
DecryptedGroupChange groupChange = DecryptedGroupChange.newBuilder(GroupChangeReconstruct.reconstructGroupChange(DecryptedGroup.newBuilder().build(), decryptedGroup))
|
||||
.setEditor(selfAci.toByteString())
|
||||
@@ -569,7 +569,7 @@ final class GroupManagerV2 {
|
||||
if (GroupChangeUtil.changeIsEmpty(change.build())) {
|
||||
Log.i(TAG, "Change is empty after conflict resolution");
|
||||
Recipient groupRecipient = Recipient.externalGroupExact(context, groupId);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(groupRecipient);
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient);
|
||||
|
||||
return new GroupManager.GroupActionResult(groupRecipient, threadId, 0, Collections.emptyList());
|
||||
}
|
||||
@@ -830,17 +830,17 @@ final class GroupManagerV2 {
|
||||
Log.i(TAG, "Created local group with placeholder");
|
||||
}
|
||||
|
||||
RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
|
||||
RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId);
|
||||
Recipient groupRecipient = Recipient.resolved(groupRecipientId);
|
||||
|
||||
AvatarHelper.setAvatar(context, groupRecipientId, avatar != null ? new ByteArrayInputStream(avatar) : null);
|
||||
groupDatabase.onAvatarUpdated(groupId, avatar != null);
|
||||
DatabaseFactory.getRecipientDatabase(context).setProfileSharing(groupRecipientId, true);
|
||||
SignalDatabase.recipients().setProfileSharing(groupRecipientId, true);
|
||||
|
||||
if (alreadyAMember) {
|
||||
Log.i(TAG, "Already a member of the group");
|
||||
|
||||
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
||||
ThreadDatabase threadDatabase = SignalDatabase.threads();
|
||||
long threadId = threadDatabase.getOrCreateValidThreadId(groupRecipient, -1);
|
||||
|
||||
return new GroupManager.GroupActionResult(groupRecipient,
|
||||
|
||||
@@ -10,10 +10,10 @@ import com.annimon.stream.Stream;
|
||||
import com.google.protobuf.ByteString;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase.InsertResult;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.jobs.AvatarGroupsV1DownloadJob;
|
||||
import org.thoughtcrime.securesms.jobs.PushGroupUpdateJob;
|
||||
@@ -65,7 +65,7 @@ public final class GroupV1MessageProcessor {
|
||||
return null;
|
||||
}
|
||||
|
||||
GroupDatabase database = DatabaseFactory.getGroupDatabase(context);
|
||||
GroupDatabase database = SignalDatabase.groups();
|
||||
SignalServiceGroup group = groupV1.get();
|
||||
GroupId id = GroupId.v1(group.getGroupId());
|
||||
Optional<GroupRecord> record = database.getGroup(id);
|
||||
@@ -89,7 +89,7 @@ public final class GroupV1MessageProcessor {
|
||||
@NonNull SignalServiceGroup group,
|
||||
boolean outgoing)
|
||||
{
|
||||
GroupDatabase database = DatabaseFactory.getGroupDatabase(context);
|
||||
GroupDatabase database = SignalDatabase.groups();
|
||||
GroupId.V1 id = GroupId.v1orThrow(group.getGroupId());
|
||||
GroupContext.Builder builder = createGroupContext(group);
|
||||
builder.setType(GroupContext.Type.UPDATE);
|
||||
@@ -110,7 +110,7 @@ public final class GroupV1MessageProcessor {
|
||||
|
||||
if (sender.isSystemContact() || sender.isProfileSharing()) {
|
||||
Log.i(TAG, "Auto-enabling profile sharing because 'adder' is trusted. contact: " + sender.isSystemContact() + ", profileSharing: " + sender.isProfileSharing());
|
||||
DatabaseFactory.getRecipientDatabase(context).setProfileSharing(Recipient.externalGroupExact(context, id).getId(), true);
|
||||
SignalDatabase.recipients().setProfileSharing(Recipient.externalGroupExact(context, id).getId(), true);
|
||||
}
|
||||
|
||||
return storeMessage(context, content, group, builder.build(), outgoing);
|
||||
@@ -123,7 +123,7 @@ public final class GroupV1MessageProcessor {
|
||||
boolean outgoing)
|
||||
{
|
||||
|
||||
GroupDatabase database = DatabaseFactory.getGroupDatabase(context);
|
||||
GroupDatabase database = SignalDatabase.groups();
|
||||
GroupId.V1 id = GroupId.v1orThrow(group.getGroupId());
|
||||
|
||||
Set<RecipientId> recordMembers = new HashSet<>(groupRecord.getMembers());
|
||||
@@ -202,7 +202,7 @@ public final class GroupV1MessageProcessor {
|
||||
@NonNull GroupRecord record,
|
||||
boolean outgoing)
|
||||
{
|
||||
GroupDatabase database = DatabaseFactory.getGroupDatabase(context);
|
||||
GroupDatabase database = SignalDatabase.groups();
|
||||
GroupId id = GroupId.v1orThrow(group.getGroupId());
|
||||
List<RecipientId> members = record.getMembers();
|
||||
|
||||
@@ -235,18 +235,18 @@ public final class GroupV1MessageProcessor {
|
||||
|
||||
try {
|
||||
if (outgoing) {
|
||||
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||
RecipientId recipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(GroupId.v1orThrow(group.getGroupId()));
|
||||
MessageDatabase mmsDatabase = SignalDatabase.mms();
|
||||
RecipientId recipientId = SignalDatabase.recipients().getOrInsertFromGroupId(GroupId.v1orThrow(group.getGroupId()));
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(recipient, storage, null, content.getTimestamp(), 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient);
|
||||
long messageId = mmsDatabase.insertMessageOutbox(outgoingMessage, threadId, false, null);
|
||||
|
||||
mmsDatabase.markAsSent(messageId, true);
|
||||
|
||||
return threadId;
|
||||
} else {
|
||||
MessageDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context);
|
||||
MessageDatabase smsDatabase = SignalDatabase.sms();
|
||||
String body = Base64.encodeBytes(storage.toByteArray());
|
||||
IncomingTextMessage incoming = new IncomingTextMessage(Recipient.externalHighTrustPush(context, content.getSender()).getId(), content.getSenderDevice(), content.getTimestamp(), content.getServerReceivedTimestamp(), System.currentTimeMillis(), body, Optional.of(GroupId.v1orThrow(group.getGroupId())), 0, content.isNeedsReceipt(), content.getServerUuid());
|
||||
IncomingGroupUpdateMessage groupMessage = new IncomingGroupUpdateMessage(incoming, storage, body);
|
||||
|
||||
@@ -10,9 +10,9 @@ import com.annimon.stream.Stream;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedGroup;
|
||||
import org.signal.zkgroup.groups.GroupMasterKey;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.MmsException;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
@@ -39,8 +39,8 @@ public final class GroupsV1MigrationUtil {
|
||||
throws IOException, RetryLaterException, GroupChangeBusyException, InvalidMigrationStateException
|
||||
{
|
||||
Recipient groupRecipient = Recipient.resolved(recipientId);
|
||||
Long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipientId);
|
||||
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
Long threadId = SignalDatabase.threads().getThreadIdFor(recipientId);
|
||||
GroupDatabase groupDatabase = SignalDatabase.groups();
|
||||
|
||||
if (threadId == null) {
|
||||
Log.w(TAG, "No thread found!");
|
||||
@@ -146,13 +146,13 @@ public final class GroupsV1MigrationUtil {
|
||||
{
|
||||
Log.i(TAG, "Beginning local migration! V1 ID: " + gv1Id, new Throwable());
|
||||
try (Closeable ignored = GroupsV2ProcessingLock.acquireGroupProcessingLock()) {
|
||||
if (DatabaseFactory.getGroupDatabase(context).groupExists(gv1Id.deriveV2MigrationGroupId())) {
|
||||
if (SignalDatabase.groups().groupExists(gv1Id.deriveV2MigrationGroupId())) {
|
||||
Log.w(TAG, "Group was already migrated! Could have been waiting for the lock.", new Throwable());
|
||||
return;
|
||||
}
|
||||
|
||||
Recipient recipient = Recipient.externalGroupExact(context, gv1Id);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
||||
long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient);
|
||||
|
||||
performLocalMigration(context, gv1Id, threadId, recipient);
|
||||
Log.i(TAG, "Migration complete! (" + gv1Id + ", " + threadId + ", " + recipient.getId() + ")", new Throwable());
|
||||
@@ -182,7 +182,7 @@ public final class GroupsV1MigrationUtil {
|
||||
}
|
||||
|
||||
Log.i(TAG, "[Local] Migrating group over to the version we were added to: V" + decryptedGroup.getRevision());
|
||||
DatabaseFactory.getGroupDatabase(context).migrateToV2(threadId, gv1Id, decryptedGroup);
|
||||
SignalDatabase.groups().migrateToV2(threadId, gv1Id, decryptedGroup);
|
||||
|
||||
Log.i(TAG, "[Local] Applying all changes since V" + decryptedGroup.getRevision());
|
||||
try {
|
||||
@@ -198,14 +198,14 @@ public final class GroupsV1MigrationUtil {
|
||||
private static void handleLeftBehind(@NonNull Context context, @NonNull GroupId.V1 gv1Id, @NonNull Recipient groupRecipient, long threadId) {
|
||||
OutgoingMediaMessage leaveMessage = GroupUtil.createGroupV1LeaveMessage(gv1Id, groupRecipient);
|
||||
try {
|
||||
long id = DatabaseFactory.getMmsDatabase(context).insertMessageOutbox(leaveMessage, threadId, false, null);
|
||||
DatabaseFactory.getMmsDatabase(context).markAsSent(id, true);
|
||||
long id = SignalDatabase.mms().insertMessageOutbox(leaveMessage, threadId, false, null);
|
||||
SignalDatabase.mms().markAsSent(id, true);
|
||||
} catch (MmsException e) {
|
||||
Log.w(TAG, "Failed to insert group leave message!", e);
|
||||
}
|
||||
|
||||
DatabaseFactory.getGroupDatabase(context).setActive(gv1Id, false);
|
||||
DatabaseFactory.getGroupDatabase(context).remove(gv1Id, Recipient.self().getId());
|
||||
SignalDatabase.groups().setActive(gv1Id, false);
|
||||
SignalDatabase.groups().remove(gv1Id, Recipient.self().getId());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,8 +17,8 @@ import org.signal.storageservice.protos.groups.AccessControl;
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedGroup;
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry;
|
||||
import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl;
|
||||
@@ -56,7 +56,7 @@ public final class LiveGroup {
|
||||
Context context = ApplicationDependencies.getApplication();
|
||||
MutableLiveData<LiveRecipient> liveRecipient = new MutableLiveData<>();
|
||||
|
||||
this.groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
this.groupDatabase = SignalDatabase.groups();
|
||||
this.recipient = Transformations.switchMap(liveRecipient, LiveRecipient::getLiveData);
|
||||
this.groupRecord = LiveDataUtil.filterNotNull(LiveDataUtil.mapAsync(recipient, groupRecipient -> groupDatabase.getGroup(groupRecipient.getId()).orNull()));
|
||||
this.fullMembers = mapToFullMembers(this.groupRecord);
|
||||
|
||||
@@ -12,8 +12,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeException;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.groups.GroupManager;
|
||||
@@ -54,10 +54,10 @@ public final class LeaveGroupDialog {
|
||||
}
|
||||
|
||||
SimpleTask.run(activity.getLifecycle(), () -> {
|
||||
GroupDatabase.V2GroupProperties groupProperties = DatabaseFactory.getGroupDatabase(activity)
|
||||
.getGroup(groupId)
|
||||
.transform(GroupDatabase.GroupRecord::requireV2GroupProperties)
|
||||
.orNull();
|
||||
GroupDatabase.V2GroupProperties groupProperties = SignalDatabase.groups()
|
||||
.getGroup(groupId)
|
||||
.transform(GroupDatabase.GroupRecord::requireV2GroupProperties)
|
||||
.orNull();
|
||||
|
||||
if (groupProperties != null && groupProperties.isAdmin(Recipient.self())) {
|
||||
List<Recipient> otherMemberRecipients = groupProperties.getMemberRecipients(GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF);
|
||||
|
||||
@@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import org.thoughtcrime.securesms.contacts.SelectedContact;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -28,6 +28,6 @@ final class AddMembersRepository {
|
||||
|
||||
@WorkerThread
|
||||
String getGroupTitle() {
|
||||
return DatabaseFactory.getGroupDatabase(context).requireGroup(groupId).getTitle();
|
||||
return SignalDatabase.groups().requireGroup(groupId).getTitle();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup;
|
||||
import org.signal.storageservice.protos.groups.local.DecryptedPendingMember;
|
||||
import org.signal.zkgroup.InvalidInputException;
|
||||
import org.signal.zkgroup.groups.UuidCiphertext;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeException;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.groups.GroupManager;
|
||||
@@ -48,7 +48,7 @@ final class PendingMemberInvitesRepository {
|
||||
|
||||
public void getInvitees(@NonNull Consumer<InviteeResult> onInviteesLoaded) {
|
||||
executor.execute(() -> {
|
||||
GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
GroupDatabase groupDatabase = SignalDatabase.groups();
|
||||
GroupDatabase.V2GroupProperties v2GroupProperties = groupDatabase.getGroup(groupId).get().requireV2GroupProperties();
|
||||
DecryptedGroup decryptedGroup = v2GroupProperties.getDecryptedGroup();
|
||||
List<DecryptedPendingMember> pendingMembersList = decryptedGroup.getPendingMembersList();
|
||||
|
||||
@@ -10,7 +10,7 @@ import androidx.fragment.app.FragmentActivity;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeBusyException;
|
||||
import org.thoughtcrime.securesms.groups.GroupChangeFailedException;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
@@ -77,14 +77,14 @@ public final class GroupsV1MigrationSuggestionsDialog {
|
||||
try {
|
||||
GroupManager.addMembers(fragmentActivity, groupId.requirePush(), suggestions);
|
||||
Log.i(TAG, "Successfully added members! Removing these dropped members from the list.");
|
||||
DatabaseFactory.getGroupDatabase(fragmentActivity).removeUnmigratedV1Members(groupId, suggestions);
|
||||
SignalDatabase.groups().removeUnmigratedV1Members(groupId, suggestions);
|
||||
return Result.SUCCESS;
|
||||
} catch (IOException | GroupChangeBusyException e) {
|
||||
Log.w(TAG, "Temporary failure.", e);
|
||||
return Result.NETWORK_ERROR;
|
||||
} catch (GroupNotAMemberException | GroupInsufficientRightsException | MembershipNotSuitableForV2Exception | GroupChangeFailedException e) {
|
||||
Log.w(TAG, "Permanent failure! Removing these dropped members from the list.", e);
|
||||
DatabaseFactory.getGroupDatabase(fragmentActivity).removeUnmigratedV1Members(groupId, suggestions);
|
||||
SignalDatabase.groups().removeUnmigratedV1Members(groupId, suggestions);
|
||||
return Result.IMPOSSIBLE;
|
||||
}
|
||||
}, result -> {
|
||||
|
||||
@@ -9,8 +9,8 @@ import org.signal.core.util.logging.Log;
|
||||
import org.signal.zkgroup.profiles.ProfileKey;
|
||||
import org.signal.zkgroup.profiles.ProfileKeyCredential;
|
||||
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -24,7 +24,6 @@ import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public final class GroupCandidateHelper {
|
||||
private final SignalServiceAccountManager signalServiceAccountManager;
|
||||
@@ -32,7 +31,7 @@ public final class GroupCandidateHelper {
|
||||
|
||||
public GroupCandidateHelper(@NonNull Context context) {
|
||||
signalServiceAccountManager = ApplicationDependencies.getSignalServiceAccountManager();
|
||||
recipientDatabase = DatabaseFactory.getRecipientDatabase(context);
|
||||
recipientDatabase = SignalDatabase.recipients();
|
||||
}
|
||||
|
||||
private static final String TAG = Log.tag(GroupCandidateHelper.class);
|
||||
|
||||
@@ -17,10 +17,10 @@ import org.signal.storageservice.protos.groups.local.DecryptedPendingMember;
|
||||
import org.signal.zkgroup.VerificationFailedException;
|
||||
import org.signal.zkgroup.groups.GroupMasterKey;
|
||||
import org.signal.zkgroup.groups.GroupSecretParams;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
@@ -96,8 +96,8 @@ public final class GroupsV2StateProcessor {
|
||||
this.jobManager = ApplicationDependencies.getJobManager();
|
||||
this.groupsV2Authorization = ApplicationDependencies.getGroupsV2Authorization();
|
||||
this.groupsV2Api = ApplicationDependencies.getSignalServiceAccountManager().getGroupsV2Api();
|
||||
this.recipientDatabase = DatabaseFactory.getRecipientDatabase(context);
|
||||
this.groupDatabase = DatabaseFactory.getGroupDatabase(context);
|
||||
this.recipientDatabase = SignalDatabase.recipients();
|
||||
this.groupDatabase = SignalDatabase.groups();
|
||||
}
|
||||
|
||||
public StateProcessorForGroup forGroup(@NonNull GroupMasterKey groupMasterKey) {
|
||||
@@ -311,8 +311,8 @@ public final class GroupsV2StateProcessor {
|
||||
Collections.emptyList());
|
||||
|
||||
try {
|
||||
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
||||
MessageDatabase mmsDatabase = SignalDatabase.mms();
|
||||
ThreadDatabase threadDatabase = SignalDatabase.threads();
|
||||
long threadId = threadDatabase.getOrCreateThreadIdFor(groupRecipient);
|
||||
long id = mmsDatabase.insertMessageOutbox(leaveMessage, threadId, false, null);
|
||||
mmsDatabase.markAsSent(id, true);
|
||||
@@ -503,8 +503,8 @@ public final class GroupsV2StateProcessor {
|
||||
|
||||
if (outgoing) {
|
||||
try {
|
||||
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
||||
MessageDatabase mmsDatabase = SignalDatabase.mms();
|
||||
ThreadDatabase threadDatabase = SignalDatabase.threads();
|
||||
RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupId);
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(recipient, decryptedGroupV2Context, null, timestamp, 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||
@@ -517,14 +517,14 @@ public final class GroupsV2StateProcessor {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
} else {
|
||||
MessageDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context);
|
||||
MessageDatabase smsDatabase = SignalDatabase.sms();
|
||||
RecipientId sender = RecipientId.from(editor.get(), null);
|
||||
IncomingTextMessage incoming = new IncomingTextMessage(sender, -1, timestamp, timestamp, timestamp, "", Optional.of(groupId), 0, false, null);
|
||||
IncomingGroupUpdateMessage groupMessage = new IncomingGroupUpdateMessage(incoming, decryptedGroupV2Context);
|
||||
Optional<MessageDatabase.InsertResult> insertResult = smsDatabase.insertMessageInbox(groupMessage);
|
||||
|
||||
if (insertResult.isPresent()) {
|
||||
DatabaseFactory.getThreadDatabase(context).update(insertResult.get().getThreadId(), false, false);
|
||||
SignalDatabase.threads().update(insertResult.get().getThreadId(), false, false);
|
||||
} else {
|
||||
Log.w(TAG, "Could not insert update message");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user