mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 09:49:30 +01:00
Introduce SignalDatabase as the main database entrypoint.
This commit is contained in:
@@ -6,7 +6,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
|
||||
public class DeleteNotificationReceiver extends BroadcastReceiver {
|
||||
@@ -40,9 +40,9 @@ public class DeleteNotificationReceiver extends BroadcastReceiver {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
for (int i = 0; i < ids.length; i++) {
|
||||
if (!mms[i]) {
|
||||
DatabaseFactory.getSmsDatabase(context).markAsNotified(ids[i]);
|
||||
SignalDatabase.sms().markAsNotified(ids[i]);
|
||||
} else {
|
||||
DatabaseFactory.getMmsDatabase(context).markAsNotified(ids[i]);
|
||||
SignalDatabase.mms().markAsNotified(ids[i]);
|
||||
}
|
||||
}
|
||||
finisher.finish();
|
||||
|
||||
@@ -13,7 +13,7 @@ import androidx.annotation.RequiresApi;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.permissions.Permissions;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.util.CursorUtil;
|
||||
@@ -117,7 +117,7 @@ public final class DoNotDisturbUtil {
|
||||
}
|
||||
|
||||
private static boolean isRepeatCaller(@NonNull Context context, @NonNull Recipient recipient) {
|
||||
return DatabaseFactory.getThreadDatabase(context).hasCalledSince(recipient, System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(15));
|
||||
return SignalDatabase.threads().hasCalledSince(recipient, System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(15));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,10 +12,10 @@ import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase.ExpirationInfo;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob;
|
||||
import org.thoughtcrime.securesms.jobs.SendReadReceiptJob;
|
||||
@@ -55,7 +55,7 @@ public class MarkReadReceiver extends BroadcastReceiver {
|
||||
|
||||
for (long threadId : threadIds) {
|
||||
Log.i(TAG, "Marking as read: " + threadId);
|
||||
List<MarkedMessageInfo> messageIds = DatabaseFactory.getThreadDatabase(context).setRead(threadId, true);
|
||||
List<MarkedMessageInfo> messageIds = SignalDatabase.threads().setRead(threadId, true);
|
||||
messageIdsCollection.addAll(messageIds);
|
||||
}
|
||||
|
||||
@@ -111,11 +111,11 @@ public class MarkReadReceiver extends BroadcastReceiver {
|
||||
@NonNull List<ExpirationInfo> mmsExpirationInfo)
|
||||
{
|
||||
if (smsExpirationInfo.size() > 0) {
|
||||
DatabaseFactory.getSmsDatabase(context).markExpireStarted(Stream.of(smsExpirationInfo).map(ExpirationInfo::getId).toList(), System.currentTimeMillis());
|
||||
SignalDatabase.sms().markExpireStarted(Stream.of(smsExpirationInfo).map(ExpirationInfo::getId).toList(), System.currentTimeMillis());
|
||||
}
|
||||
|
||||
if (mmsExpirationInfo.size() > 0) {
|
||||
DatabaseFactory.getMmsDatabase(context).markExpireStarted(Stream.of(mmsExpirationInfo).map(ExpirationInfo::getId).toList(), System.currentTimeMillis());
|
||||
SignalDatabase.mms().markExpireStarted(Stream.of(mmsExpirationInfo).map(ExpirationInfo::getId).toList(), System.currentTimeMillis());
|
||||
}
|
||||
|
||||
if (smsExpirationInfo.size() + mmsExpirationInfo.size() > 0) {
|
||||
|
||||
@@ -12,7 +12,7 @@ import androidx.annotation.RequiresApi;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.notifications.v2.MessageNotifierV2;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -183,7 +183,7 @@ public final class NotificationCancellationHelper {
|
||||
return true;
|
||||
}
|
||||
|
||||
Long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipientId);
|
||||
Long threadId = SignalDatabase.threads().getThreadIdFor(recipientId);
|
||||
long focusedThreadId = ApplicationDependencies.getMessageNotifier().getVisibleThread();
|
||||
|
||||
if (Objects.equals(threadId, focusedThreadId)) {
|
||||
|
||||
@@ -19,7 +19,6 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.core.app.NotificationChannelCompat;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
@@ -27,9 +26,9 @@ import com.annimon.stream.Stream;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.BuildConfig;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
||||
import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -108,7 +107,7 @@ public class NotificationChannels {
|
||||
return;
|
||||
}
|
||||
|
||||
RecipientDatabase db = DatabaseFactory.getRecipientDatabase(context);
|
||||
RecipientDatabase db = SignalDatabase.recipients();
|
||||
|
||||
try (RecipientDatabase.RecipientReader reader = db.getRecipientsWithNotificationChannels()) {
|
||||
Recipient recipient;
|
||||
@@ -328,7 +327,7 @@ public class NotificationChannels {
|
||||
generateChannelIdFor(recipient),
|
||||
channel -> channel.setSound(uri == null ? Settings.System.DEFAULT_NOTIFICATION_URI : uri, getRingtoneAudioAttributes()));
|
||||
|
||||
DatabaseFactory.getRecipientDatabase(context).setNotificationChannel(recipient.getId(), success ? newChannelId : null);
|
||||
SignalDatabase.recipients().setNotificationChannel(recipient.getId(), success ? newChannelId : null);
|
||||
ensureCustomChannelConsistency(context);
|
||||
}
|
||||
|
||||
@@ -396,7 +395,7 @@ public class NotificationChannels {
|
||||
newChannelId,
|
||||
channel -> setVibrationEnabled(channel, enabled));
|
||||
|
||||
DatabaseFactory.getRecipientDatabase(context).setNotificationChannel(recipient.getId(), success ? newChannelId : null);
|
||||
SignalDatabase.recipients().setNotificationChannel(recipient.getId(), success ? newChannelId : null);
|
||||
ensureCustomChannelConsistency(context);
|
||||
}
|
||||
|
||||
@@ -496,7 +495,7 @@ public class NotificationChannels {
|
||||
|
||||
if (channel.isPresent()) {
|
||||
Log.i(TAG, "Conversation channel created outside of app, while running. Update " + recipient.getId() + " to use '" + channel.get().getId() + "'");
|
||||
DatabaseFactory.getRecipientDatabase(context).setNotificationChannel(recipient.getId(), channel.get().getId());
|
||||
SignalDatabase.recipients().setNotificationChannel(recipient.getId(), channel.get().getId());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -536,7 +535,7 @@ public class NotificationChannels {
|
||||
Log.d(TAG, "ensureCustomChannelConsistency()");
|
||||
|
||||
NotificationManager notificationManager = ServiceUtil.getNotificationManager(context);
|
||||
RecipientDatabase db = DatabaseFactory.getRecipientDatabase(context);
|
||||
RecipientDatabase db = SignalDatabase.recipients();
|
||||
List<Recipient> customRecipients = new ArrayList<>();
|
||||
Set<String> customChannelIds = new HashSet<>();
|
||||
|
||||
@@ -685,7 +684,7 @@ public class NotificationChannels {
|
||||
@WorkerThread
|
||||
@TargetApi(26)
|
||||
private static void updateAllRecipientChannelLedColors(@NonNull Context context, @NonNull NotificationManager notificationManager, @NonNull String color) {
|
||||
RecipientDatabase database = DatabaseFactory.getRecipientDatabase(context);
|
||||
RecipientDatabase database = SignalDatabase.recipients();
|
||||
|
||||
try (RecipientDatabase.RecipientReader recipients = database.getRecipientsWithNotificationChannels()) {
|
||||
Recipient recipient;
|
||||
|
||||
@@ -26,8 +26,8 @@ import android.os.Bundle;
|
||||
import androidx.core.app.RemoteInput;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||
import org.thoughtcrime.securesms.notifications.v2.MessageNotifierV2;
|
||||
@@ -111,7 +111,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
|
||||
|
||||
ApplicationDependencies.getMessageNotifier().addStickyThread(threadId, intent.getLongExtra(EARLIEST_TIMESTAMP, System.currentTimeMillis()));
|
||||
|
||||
List<MarkedMessageInfo> messageIds = DatabaseFactory.getThreadDatabase(context).setRead(threadId, true);
|
||||
List<MarkedMessageInfo> messageIds = SignalDatabase.threads().setRead(threadId, true);
|
||||
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context);
|
||||
MarkReadReceiver.process(context, messageIds);
|
||||
|
||||
@@ -13,8 +13,8 @@ import androidx.core.content.ContextCompat
|
||||
import me.leolin.shortcutbadger.ShortcutBadger
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||
import org.thoughtcrime.securesms.database.MessageDatabase
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.messages.IncomingMessageObserver
|
||||
@@ -140,7 +140,7 @@ class MessageNotifierV2(context: Application) : MessageNotifier {
|
||||
.forEach { conversation ->
|
||||
cleanedUpThreadIds += conversation.threadId
|
||||
conversation.notificationItems.forEach { item ->
|
||||
val messageDatabase: MessageDatabase = if (item.isMms) DatabaseFactory.getMmsDatabase(context) else DatabaseFactory.getSmsDatabase(context)
|
||||
val messageDatabase: MessageDatabase = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms
|
||||
messageDatabase.markAsNotified(item.id)
|
||||
}
|
||||
}
|
||||
@@ -192,7 +192,7 @@ class MessageNotifierV2(context: Application) : MessageNotifier {
|
||||
smsIds.add(item.id)
|
||||
}
|
||||
}
|
||||
DatabaseFactory.getMmsSmsDatabase(context).setNotifiedTimestamp(System.currentTimeMillis(), smsIds, mmsIds)
|
||||
SignalDatabase.mmsSms.setNotifiedTimestamp(System.currentTimeMillis(), smsIds, mmsIds)
|
||||
|
||||
Log.i(TAG, "threads: ${state.threadCount} messages: ${state.messageCount}")
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@ import androidx.core.content.LocusIdCompat
|
||||
import androidx.core.graphics.drawable.IconCompat
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.conversation.ConversationIntents
|
||||
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.notifications.NotificationChannels
|
||||
import org.thoughtcrime.securesms.notifications.ReplyMethod
|
||||
@@ -116,7 +116,7 @@ sealed class NotificationBuilder(protected val context: Context) {
|
||||
fun addReplyActions(conversation: NotificationConversation) {
|
||||
if (privacy.isDisplayMessage && isNotLocked && !conversation.recipient.isPushV1Group && RecipientUtil.isMessageRequestAccepted(context, conversation.recipient)) {
|
||||
if (conversation.recipient.isPushV2Group) {
|
||||
val group: Optional<GroupDatabase.GroupRecord> = DatabaseFactory.getGroupDatabase(context).getGroup(conversation.recipient.requireGroupId())
|
||||
val group: Optional<GroupDatabase.GroupRecord> = SignalDatabase.groups.getGroup(conversation.recipient.requireGroupId())
|
||||
if (group.isPresent && group.get().isAnnouncementGroup && !group.get().isAdmin(Recipient.self())) {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.MainActivity
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.conversation.ConversationIntents
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.model.InMemoryMessageRecord
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.notifications.NotificationChannels
|
||||
@@ -386,7 +386,7 @@ object NotificationFactory {
|
||||
Log.i(TAG, "Security exception when posting notification, clearing ringtone")
|
||||
if (threadRecipient != null) {
|
||||
SignalExecutors.BOUNDED.execute {
|
||||
DatabaseFactory.getRecipientDatabase(context).setMessageRingtone(threadRecipient.id, null)
|
||||
SignalDatabase.recipients.setMessageRingtone(threadRecipient.id, null)
|
||||
NotificationChannels.updateMessageRingtone(context, threadRecipient, null)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,8 @@ import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.contactshare.Contact
|
||||
import org.thoughtcrime.securesms.contactshare.ContactUtil
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||
import org.thoughtcrime.securesms.database.MentionUtil
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.ThreadBodyUtil
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
|
||||
@@ -304,7 +304,7 @@ class ReactionNotification(threadRecipient: Recipient, record: MessageRecord, va
|
||||
}
|
||||
|
||||
override fun getStartingPosition(context: Context): Int {
|
||||
return DatabaseFactory.getMmsSmsDatabase(context).getMessagePositionInConversation(threadId, record.dateReceived)
|
||||
return SignalDatabase.mmsSms.getMessagePositionInConversation(threadId, record.dateReceived)
|
||||
}
|
||||
|
||||
override fun getLargeIconUri(): Uri? = null
|
||||
|
||||
@@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.notifications.v2
|
||||
import android.content.Context
|
||||
import androidx.annotation.WorkerThread
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||
import org.thoughtcrime.securesms.database.MmsSmsColumns
|
||||
import org.thoughtcrime.securesms.database.MmsSmsDatabase
|
||||
import org.thoughtcrime.securesms.database.RecipientDatabase
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.model.MessageId
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||
import org.thoughtcrime.securesms.database.model.ReactionRecord
|
||||
@@ -25,7 +25,7 @@ object NotificationStateProvider {
|
||||
fun constructNotificationState(context: Context, stickyThreads: Map<Long, MessageNotifierV2.StickyThread>): NotificationStateV2 {
|
||||
val messages: MutableList<NotificationMessage> = mutableListOf()
|
||||
|
||||
DatabaseFactory.getMmsSmsDatabase(context).getMessagesForNotificationState(stickyThreads.values).use { unreadMessages ->
|
||||
SignalDatabase.mmsSms.getMessagesForNotificationState(stickyThreads.values).use { unreadMessages ->
|
||||
if (unreadMessages.count == 0) {
|
||||
return NotificationStateV2.EMPTY
|
||||
}
|
||||
@@ -33,13 +33,13 @@ object NotificationStateProvider {
|
||||
MmsSmsDatabase.readerFor(unreadMessages).use { reader ->
|
||||
var record: MessageRecord? = reader.next
|
||||
while (record != null) {
|
||||
val threadRecipient: Recipient? = DatabaseFactory.getThreadDatabase(context).getRecipientForThreadId(record.threadId)
|
||||
val threadRecipient: Recipient? = SignalDatabase.threads.getRecipientForThreadId(record.threadId)
|
||||
if (threadRecipient != null) {
|
||||
val hasUnreadReactions = CursorUtil.requireInt(unreadMessages, MmsSmsColumns.REACTIONS_UNREAD) == 1
|
||||
|
||||
messages += NotificationMessage(
|
||||
messageRecord = record,
|
||||
reactions = if (hasUnreadReactions) DatabaseFactory.getReactionDatabase(context).getReactions(MessageId(record.id, record.isMms)) else emptyList(),
|
||||
reactions = if (hasUnreadReactions) SignalDatabase.reactions.getReactions(MessageId(record.id, record.isMms)) else emptyList(),
|
||||
threadRecipient = threadRecipient,
|
||||
threadId = record.threadId,
|
||||
stickyThread = stickyThreads.containsKey(record.threadId),
|
||||
|
||||
Reference in New Issue
Block a user