kopia lustrzana https://github.com/ryukoposting/Signal-Android
285 wiersze
12 KiB
Java
285 wiersze
12 KiB
Java
package org.thoughtcrime.securesms.dependencies;
|
|
|
|
import android.app.Application;
|
|
import android.content.Context;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import org.signal.core.util.concurrent.SignalExecutors;
|
|
import org.signal.core.util.logging.Log;
|
|
import org.thoughtcrime.securesms.BuildConfig;
|
|
import org.thoughtcrime.securesms.components.TypingStatusRepository;
|
|
import org.thoughtcrime.securesms.components.TypingStatusSender;
|
|
import org.thoughtcrime.securesms.crypto.DatabaseSessionLock;
|
|
import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
|
|
import org.thoughtcrime.securesms.database.DatabaseObserver;
|
|
import org.thoughtcrime.securesms.database.JobDatabase;
|
|
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
|
import org.thoughtcrime.securesms.jobmanager.JobMigrator;
|
|
import org.thoughtcrime.securesms.jobmanager.impl.FactoryJobPredicate;
|
|
import org.thoughtcrime.securesms.jobmanager.impl.JsonDataSerializer;
|
|
import org.thoughtcrime.securesms.jobs.FastJobStorage;
|
|
import org.thoughtcrime.securesms.jobs.GroupCallUpdateSendJob;
|
|
import org.thoughtcrime.securesms.jobs.JobManagerFactories;
|
|
import org.thoughtcrime.securesms.jobs.MarkerJob;
|
|
import org.thoughtcrime.securesms.jobs.PushDecryptMessageJob;
|
|
import org.thoughtcrime.securesms.jobs.PushGroupSendJob;
|
|
import org.thoughtcrime.securesms.jobs.PushMediaSendJob;
|
|
import org.thoughtcrime.securesms.jobs.PushProcessMessageJob;
|
|
import org.thoughtcrime.securesms.jobs.PushTextSendJob;
|
|
import org.thoughtcrime.securesms.jobs.ReactionSendJob;
|
|
import org.thoughtcrime.securesms.jobs.TypingSendJob;
|
|
import org.thoughtcrime.securesms.megaphone.MegaphoneRepository;
|
|
import org.thoughtcrime.securesms.messages.BackgroundMessageRetriever;
|
|
import org.thoughtcrime.securesms.messages.IncomingMessageObserver;
|
|
import org.thoughtcrime.securesms.messages.IncomingMessageProcessor;
|
|
import org.thoughtcrime.securesms.net.PipeConnectivityListener;
|
|
import org.thoughtcrime.securesms.notifications.DefaultMessageNotifier;
|
|
import org.thoughtcrime.securesms.notifications.MessageNotifier;
|
|
import org.thoughtcrime.securesms.notifications.v2.MessageNotifierV2;
|
|
import org.thoughtcrime.securesms.notifications.OptimizedMessageNotifier;
|
|
import org.thoughtcrime.securesms.payments.MobileCoinConfig;
|
|
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;
|
|
import org.thoughtcrime.securesms.util.AlarmSleepTimer;
|
|
import org.thoughtcrime.securesms.util.AppForegroundObserver;
|
|
import org.thoughtcrime.securesms.util.ByteUnit;
|
|
import org.thoughtcrime.securesms.util.EarlyMessageCache;
|
|
import org.thoughtcrime.securesms.util.FeatureFlags;
|
|
import org.thoughtcrime.securesms.util.FrameRateTracker;
|
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
import org.whispersystems.libsignal.util.guava.Optional;
|
|
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
|
|
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
|
|
import org.whispersystems.signalservice.api.SignalServiceMessageSender;
|
|
import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations;
|
|
import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
|
|
import org.whispersystems.signalservice.api.util.CredentialsProvider;
|
|
import org.whispersystems.signalservice.api.util.SleepTimer;
|
|
import org.whispersystems.signalservice.api.util.UptimeSleepTimer;
|
|
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* Implementation of {@link ApplicationDependencies.Provider} that provides real app dependencies.
|
|
*/
|
|
public class ApplicationDependencyProvider implements ApplicationDependencies.Provider {
|
|
|
|
private static final String TAG = Log.tag(ApplicationDependencyProvider.class);
|
|
|
|
private final Application context;
|
|
private final PipeConnectivityListener pipeListener;
|
|
|
|
public ApplicationDependencyProvider(@NonNull Application context) {
|
|
this.context = context;
|
|
this.pipeListener = new PipeConnectivityListener(context);
|
|
}
|
|
|
|
private @NonNull ClientZkOperations provideClientZkOperations() {
|
|
return ClientZkOperations.create(provideSignalServiceNetworkAccess().getConfiguration(context));
|
|
}
|
|
|
|
@Override
|
|
public @NonNull PipeConnectivityListener providePipeListener() {
|
|
return pipeListener;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull GroupsV2Operations provideGroupsV2Operations() {
|
|
return new GroupsV2Operations(provideClientZkOperations());
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceAccountManager provideSignalServiceAccountManager() {
|
|
return new SignalServiceAccountManager(provideSignalServiceNetworkAccess().getConfiguration(context),
|
|
new DynamicCredentialsProvider(context),
|
|
BuildConfig.SIGNAL_AGENT,
|
|
provideGroupsV2Operations(),
|
|
FeatureFlags.okHttpAutomaticRetry());
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceMessageSender provideSignalServiceMessageSender() {
|
|
return new SignalServiceMessageSender(provideSignalServiceNetworkAccess().getConfiguration(context),
|
|
new DynamicCredentialsProvider(context),
|
|
new SignalProtocolStoreImpl(context),
|
|
DatabaseSessionLock.INSTANCE,
|
|
BuildConfig.SIGNAL_AGENT,
|
|
TextSecurePreferences.isMultiDevice(context),
|
|
Optional.fromNullable(IncomingMessageObserver.getPipe()),
|
|
Optional.fromNullable(IncomingMessageObserver.getUnidentifiedPipe()),
|
|
Optional.of(new SecurityEventListener(context)),
|
|
provideClientZkOperations().getProfileOperations(),
|
|
SignalExecutors.newCachedBoundedExecutor("signal-messages", 1, 16),
|
|
ByteUnit.KILOBYTES.toBytes(512),
|
|
FeatureFlags.okHttpAutomaticRetry());
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceMessageReceiver provideSignalServiceMessageReceiver() {
|
|
SleepTimer sleepTimer = TextSecurePreferences.isFcmDisabled(context) ? new AlarmSleepTimer(context)
|
|
: new UptimeSleepTimer();
|
|
return new SignalServiceMessageReceiver(provideSignalServiceNetworkAccess().getConfiguration(context),
|
|
new DynamicCredentialsProvider(context),
|
|
BuildConfig.SIGNAL_AGENT,
|
|
pipeListener,
|
|
sleepTimer,
|
|
provideClientZkOperations().getProfileOperations(),
|
|
FeatureFlags.okHttpAutomaticRetry());
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceNetworkAccess provideSignalServiceNetworkAccess() {
|
|
return new SignalServiceNetworkAccess(context);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull IncomingMessageProcessor provideIncomingMessageProcessor() {
|
|
return new IncomingMessageProcessor(context);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull BackgroundMessageRetriever provideBackgroundMessageRetriever() {
|
|
return new BackgroundMessageRetriever();
|
|
}
|
|
|
|
@Override
|
|
public @NonNull LiveRecipientCache provideRecipientCache() {
|
|
return new LiveRecipientCache(context);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull JobManager provideJobManager() {
|
|
JobManager.Configuration config = new JobManager.Configuration.Builder()
|
|
.setDataSerializer(new JsonDataSerializer())
|
|
.setJobFactories(JobManagerFactories.getJobFactories(context))
|
|
.setConstraintFactories(JobManagerFactories.getConstraintFactories(context))
|
|
.setConstraintObservers(JobManagerFactories.getConstraintObservers(context))
|
|
.setJobStorage(new FastJobStorage(JobDatabase.getInstance(context)))
|
|
.setJobMigrator(new JobMigrator(TextSecurePreferences.getJobManagerVersion(context), JobManager.CURRENT_VERSION, JobManagerFactories.getJobMigrations(context)))
|
|
.addReservedJobRunner(new FactoryJobPredicate(PushDecryptMessageJob.KEY, PushProcessMessageJob.KEY, MarkerJob.KEY))
|
|
.addReservedJobRunner(new FactoryJobPredicate(PushTextSendJob.KEY, PushMediaSendJob.KEY, PushGroupSendJob.KEY, ReactionSendJob.KEY, TypingSendJob.KEY, GroupCallUpdateSendJob.KEY))
|
|
.build();
|
|
return new JobManager(context, config);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull FrameRateTracker provideFrameRateTracker() {
|
|
return new FrameRateTracker(context);
|
|
}
|
|
|
|
public @NonNull MegaphoneRepository provideMegaphoneRepository() {
|
|
return new MegaphoneRepository(context);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull EarlyMessageCache provideEarlyMessageCache() {
|
|
return new EarlyMessageCache();
|
|
}
|
|
|
|
@Override
|
|
public @NonNull MessageNotifier provideMessageNotifier() {
|
|
MessageNotifier inner;
|
|
if (FeatureFlags.useNewNotificationSystem()) {
|
|
inner = new MessageNotifierV2();
|
|
} else {
|
|
inner = new DefaultMessageNotifier();
|
|
}
|
|
|
|
return new OptimizedMessageNotifier(inner);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull IncomingMessageObserver provideIncomingMessageObserver() {
|
|
return new IncomingMessageObserver(context);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull TrimThreadsByDateManager provideTrimThreadsByDateManager() {
|
|
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();
|
|
}
|
|
|
|
@Override
|
|
public @NonNull TypingStatusSender provideTypingStatusSender() {
|
|
return new TypingStatusSender();
|
|
}
|
|
|
|
@Override
|
|
public @NonNull DatabaseObserver provideDatabaseObserver() {
|
|
return new DatabaseObserver(context);
|
|
}
|
|
|
|
@SuppressWarnings("ConstantConditions")
|
|
@Override
|
|
public @NonNull Payments providePayments(@NonNull SignalServiceAccountManager signalServiceAccountManager) {
|
|
MobileCoinConfig network;
|
|
|
|
if (BuildConfig.MOBILE_COIN_ENVIRONMENT.equals("mainnet")) network = MobileCoinConfig.getMainNet(signalServiceAccountManager);
|
|
else if (BuildConfig.MOBILE_COIN_ENVIRONMENT.equals("testnet")) network = MobileCoinConfig.getTestNet(signalServiceAccountManager);
|
|
else throw new AssertionError("Unknown network " + BuildConfig.MOBILE_COIN_ENVIRONMENT);
|
|
|
|
return new Payments(network);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull ShakeToReport provideShakeToReport() {
|
|
return new ShakeToReport(context);
|
|
}
|
|
|
|
@Override
|
|
public @NonNull AppForegroundObserver provideAppForegroundObserver() {
|
|
return new AppForegroundObserver();
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalCallManager provideSignalCallManager() {
|
|
return new SignalCallManager(context);
|
|
}
|
|
|
|
private static class DynamicCredentialsProvider implements CredentialsProvider {
|
|
|
|
private final Context context;
|
|
|
|
private DynamicCredentialsProvider(Context context) {
|
|
this.context = context.getApplicationContext();
|
|
}
|
|
|
|
@Override
|
|
public UUID getUuid() {
|
|
return TextSecurePreferences.getLocalUuid(context);
|
|
}
|
|
|
|
@Override
|
|
public String getE164() {
|
|
return TextSecurePreferences.getLocalNumber(context);
|
|
}
|
|
|
|
@Override
|
|
public String getPassword() {
|
|
return TextSecurePreferences.getPushServerPassword(context);
|
|
}
|
|
}
|
|
}
|