From 670aed2074002e62787ff26e57faa9ec553eb8e8 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 13 Apr 2021 14:49:32 -0400 Subject: [PATCH] Move ViewOnceMessageManager and ExpiringMessageManager to AppDependencies. --- .../securesms/ApplicationContext.java | 19 ++------- .../components/ConversationItemFooter.java | 5 ++- .../conversation/ConversationFragment.java | 4 +- .../dependencies/ApplicationDependencies.java | 42 ++++++++++++++++++- .../ApplicationDependencyProvider.java | 12 ++++++ .../securesms/jobs/PushGroupSendJob.java | 5 +-- .../securesms/jobs/PushMediaSendJob.java | 2 +- .../securesms/jobs/PushTextSendJob.java | 2 +- .../messages/MessageContentProcessor.java | 27 ++++++------ .../notifications/MarkReadReceiver.java | 2 +- .../revealable/ViewOnceMessageManager.java | 3 +- .../securesms/service/ExpirationListener.java | 3 +- .../securesms/sms/MessageSender.java | 4 +- 13 files changed, 82 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 4a2404e26..80a31fe83 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -95,9 +95,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr private static final String TAG = Log.tag(ApplicationContext.class); - private ExpiringMessageManager expiringMessageManager; - private ViewOnceMessageManager viewOnceMessageManager; - private PersistentLogger persistentLogger; + private PersistentLogger persistentLogger; public static ApplicationContext getInstance(Context context) { return (ApplicationContext)context.getApplicationContext(); @@ -194,17 +192,6 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr ApplicationDependencies.getShakeToReport().disable(); } - public ExpiringMessageManager getExpiringMessageManager() { - if (expiringMessageManager == null) { - initializeExpiringMessageManager(); - } - return expiringMessageManager; - } - - public ViewOnceMessageManager getViewOnceMessageManager() { - return viewOnceMessageManager; - } - public PersistentLogger getPersistentLogger() { return persistentLogger; } @@ -299,11 +286,11 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr } private void initializeExpiringMessageManager() { - this.expiringMessageManager = new ExpiringMessageManager(this); + ApplicationDependencies.getExpiringMessageManager().checkSchedule(); } private void initializeRevealableMessageManager() { - this.viewOnceMessageManager = new ViewOnceMessageManager(this); + ApplicationDependencies.getViewOnceMessageManager().scheduleIfNecessary(); } private void initializePeriodicTasks() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index d5256b4f8..1c1c9a719 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -26,6 +26,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.service.ExpiringMessageManager; import org.thoughtcrime.securesms.util.DateUtils; @@ -197,11 +198,11 @@ public class ConversationItemFooter extends LinearLayout { this.timerView.startAnimation(); if (messageRecord.getExpireStarted() + messageRecord.getExpiresIn() <= System.currentTimeMillis()) { - ApplicationContext.getInstance(getContext()).getExpiringMessageManager().checkSchedule(); + ApplicationDependencies.getExpiringMessageManager().checkSchedule(); } } else if (!messageRecord.isOutgoing() && !messageRecord.isMediaPending()) { SignalExecutors.BOUNDED.execute(() -> { - ExpiringMessageManager expirationManager = ApplicationContext.getInstance(getContext()).getExpiringMessageManager(); + ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); long id = messageRecord.getId(); boolean mms = messageRecord.isMms(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index a87b1acbf..d907c77a3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -1382,9 +1382,7 @@ public class ConversationFragment extends LoggingFragment { DatabaseFactory.getAttachmentDatabase(requireContext()).deleteAttachmentFilesForViewOnceMessage(messageRecord.getId()); - ApplicationContext.getInstance(requireContext()) - .getViewOnceMessageManager() - .scheduleIfNecessary(); + ApplicationDependencies.getViewOnceMessageManager().scheduleIfNecessary(); ApplicationDependencies.getJobManager().add(new MultiDeviceViewOnceOpenJob(new MessageDatabase.SyncMessageId(messageRecord.getIndividualRecipient().getId(), messageRecord.getDateSent()))); diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java index 1c6b7ae81..fb0d5d4f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java @@ -23,6 +23,8 @@ import org.thoughtcrime.securesms.notifications.MessageNotifier; import org.thoughtcrime.securesms.payments.Payments; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.recipients.LiveRecipientCache; +import org.thoughtcrime.securesms.revealable.ViewOnceMessageManager; +import org.thoughtcrime.securesms.service.ExpiringMessageManager; import org.thoughtcrime.securesms.service.TrimThreadsByDateManager; import org.thoughtcrime.securesms.service.webrtc.SignalCallManager; import org.thoughtcrime.securesms.shakereport.ShakeToReport; @@ -75,6 +77,8 @@ public class ApplicationDependencies { private static volatile TypingStatusSender typingStatusSender; private static volatile DatabaseObserver databaseObserver; private static volatile TrimThreadsByDateManager trimThreadsByDateManager; + private static volatile ViewOnceMessageManager viewOnceMessageManager; + private static volatile ExpiringMessageManager expiringMessageManager; private static volatile Payments payments; private static volatile ShakeToReport shakeToReport; private static volatile SignalCallManager signalCallManager; @@ -341,9 +345,37 @@ public class ApplicationDependencies { return trimThreadsByDateManager; } + public static @NonNull ViewOnceMessageManager getViewOnceMessageManager() { + if (viewOnceMessageManager == null) { + synchronized (LOCK) { + if (viewOnceMessageManager == null) { + viewOnceMessageManager = provider.provideViewOnceMessageManager(); + } + } + } + + return viewOnceMessageManager; + } + + public static @NonNull ExpiringMessageManager getExpiringMessageManager() { + if (expiringMessageManager == null) { + synchronized (LOCK) { + if (expiringMessageManager == null) { + expiringMessageManager = provider.provideExpiringMessageManager(); + } + } + } + + return expiringMessageManager; + } + public static TypingStatusRepository getTypingStatusRepository() { if (typingStatusRepository == null) { - typingStatusRepository = provider.provideTypingStatusRepository(); + synchronized (LOCK) { + if (typingStatusRepository == null) { + typingStatusRepository = provider.provideTypingStatusRepository(); + } + } } return typingStatusRepository; @@ -351,7 +383,11 @@ public class ApplicationDependencies { public static TypingStatusSender getTypingStatusSender() { if (typingStatusSender == null) { - typingStatusSender = provider.provideTypingStatusSender(); + synchronized (LOCK) { + if (typingStatusSender == null) { + typingStatusSender = provider.provideTypingStatusSender(); + } + } } return typingStatusSender; @@ -427,6 +463,8 @@ public class ApplicationDependencies { @NonNull MessageNotifier provideMessageNotifier(); @NonNull IncomingMessageObserver provideIncomingMessageObserver(); @NonNull TrimThreadsByDateManager provideTrimThreadsByDateManager(); + @NonNull ViewOnceMessageManager provideViewOnceMessageManager(); + @NonNull ExpiringMessageManager provideExpiringMessageManager(); @NonNull TypingStatusRepository provideTypingStatusRepository(); @NonNull TypingStatusSender provideTypingStatusSender(); @NonNull DatabaseObserver provideDatabaseObserver(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index fd2ac8df4..7ba508c86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -42,6 +42,8 @@ import org.thoughtcrime.securesms.payments.Payments; import org.thoughtcrime.securesms.push.SecurityEventListener; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.recipients.LiveRecipientCache; +import org.thoughtcrime.securesms.revealable.ViewOnceMessageManager; +import org.thoughtcrime.securesms.service.ExpiringMessageManager; import org.thoughtcrime.securesms.service.TrimThreadsByDateManager; import org.thoughtcrime.securesms.service.webrtc.SignalCallManager; import org.thoughtcrime.securesms.shakereport.ShakeToReport; @@ -196,6 +198,16 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr return new TrimThreadsByDateManager(context); } + @Override + public @NonNull ViewOnceMessageManager provideViewOnceMessageManager() { + return new ViewOnceMessageManager(context); + } + + @Override + public @NonNull ExpiringMessageManager provideExpiringMessageManager() { + return new ExpiringMessageManager(context); + } + @Override public @NonNull TypingStatusRepository provideTypingStatusRepository() { return new TypingStatusRepository(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index dc8540ccd..a5dde5bc7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -236,9 +236,8 @@ public final class PushGroupSendJob extends PushSendJob { if (message.getExpiresIn() > 0 && !message.isExpirationUpdate()) { database.markExpireStarted(messageId); - ApplicationContext.getInstance(context) - .getExpiringMessageManager() - .scheduleDeletion(messageId, true, message.getExpiresIn()); + ApplicationDependencies.getExpiringMessageManager() + .scheduleDeletion(messageId, true, message.getExpiresIn()); } if (message.isViewOnce()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index 88902c833..8a753d690 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -107,7 +107,7 @@ public class PushMediaSendJob extends PushSendJob { public void onPushSend() throws IOException, MmsException, NoSuchMessageException, UndeliverableMessageException { - ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager(); + ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); MessageDatabase database = DatabaseFactory.getMmsDatabase(context); OutgoingMediaMessage message = database.getOutgoingMessage(messageId); long threadId = database.getMessageRecord(messageId).getThreadId(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java index e923cf1fc..9f995b722 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java @@ -74,7 +74,7 @@ public class PushTextSendJob extends PushSendJob { @Override public void onPushSend() throws IOException, NoSuchMessageException, UndeliverableMessageException { - ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager(); + ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); MessageDatabase database = DatabaseFactory.getSmsDatabase(context); SmsMessageRecord record = database.getSmsMessage(messageId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index 4b883a102..eebdea3c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -992,15 +992,13 @@ public final class MessageContentProcessor { List> expiringMedia = DatabaseFactory.getMmsDatabase(context).setTimestampRead(new SyncMessageId(Recipient.externalPush(context, readMessage.getSender()).getId(), readMessage.getTimestamp()), envelopeTimestamp); for (Pair expiringMessage : expiringText) { - ApplicationContext.getInstance(context) - .getExpiringMessageManager() - .scheduleDeletion(expiringMessage.first(), false, envelopeTimestamp, expiringMessage.second()); + ApplicationDependencies.getExpiringMessageManager() + .scheduleDeletion(expiringMessage.first(), false, envelopeTimestamp, expiringMessage.second()); } for (Pair expiringMessage : expiringMedia) { - ApplicationContext.getInstance(context) - .getExpiringMessageManager() - .scheduleDeletion(expiringMessage.first(), true, envelopeTimestamp, expiringMessage.second()); + ApplicationDependencies.getExpiringMessageManager() + .scheduleDeletion(expiringMessage.first(), true, envelopeTimestamp, expiringMessage.second()); } } @@ -1094,7 +1092,7 @@ public final class MessageContentProcessor { ApplicationDependencies.getJobManager().add(new TrimThreadJob(insertResult.get().getThreadId())); if (message.isViewOnce()) { - ApplicationContext.getInstance(context).getViewOnceMessageManager().scheduleIfNecessary(); + ApplicationDependencies.getViewOnceMessageManager().scheduleIfNecessary(); } } } @@ -1181,11 +1179,11 @@ public final class MessageContentProcessor { if (message.getMessage().getExpiresInSeconds() > 0) { database.markExpireStarted(messageId, message.getExpirationStartTimestamp()); - ApplicationContext.getInstance(context) - .getExpiringMessageManager() - .scheduleDeletion(messageId, true, - message.getExpirationStartTimestamp(), - message.getMessage().getExpiresInSeconds() * 1000L); + ApplicationDependencies.getExpiringMessageManager() + .scheduleDeletion(messageId, + true, + message.getExpirationStartTimestamp(), + message.getMessage().getExpiresInSeconds() * 1000L); } if (recipients.isSelf()) { @@ -1341,9 +1339,8 @@ public final class MessageContentProcessor { if (expiresInMillis > 0) { database.markExpireStarted(messageId, message.getExpirationStartTimestamp()); - ApplicationContext.getInstance(context) - .getExpiringMessageManager() - .scheduleDeletion(messageId, isGroup, message.getExpirationStartTimestamp(), expiresInMillis); + ApplicationDependencies.getExpiringMessageManager() + .scheduleDeletion(messageId, isGroup, message.getExpirationStartTimestamp(), expiresInMillis); } if (recipient.isSelf()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java index 8bb674b30..69afd6c07 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java @@ -111,7 +111,7 @@ public class MarkReadReceiver extends BroadcastReceiver { } if (smsExpirationInfo.size() + mmsExpirationInfo.size() > 0) { - ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager(); + ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); Stream.concat(Stream.of(smsExpirationInfo), Stream.of(mmsExpirationInfo)) .forEach(info -> expirationManager.scheduleDeletion(info.getId(), info.isMms(), info.getExpiresIn())); diff --git a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java index 861b1094e..2b96e3293 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java @@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.service.TimedEventManager; /** @@ -79,7 +80,7 @@ public class ViewOnceMessageManager extends TimedEventManager