package org.thoughtcrime.SMP.dependencies; import android.content.Context; import org.thoughtcrime.SMP.BuildConfig; import org.thoughtcrime.SMP.crypto.MasterSecret; import org.thoughtcrime.SMP.crypto.SMP.PushSMPSendJob; import org.thoughtcrime.SMP.crypto.SMP.TextSecureSMPMessageSender; import org.thoughtcrime.SMP.crypto.storage.TextSecureAxolotlStore; import org.thoughtcrime.SMP.jobs.AttachmentDownloadJob; import org.thoughtcrime.SMP.jobs.CleanPreKeysJob; import org.thoughtcrime.SMP.jobs.CreateSignedPreKeyJob; import org.thoughtcrime.SMP.jobs.DeliveryReceiptJob; import org.thoughtcrime.SMP.jobs.PushGroupSendJob; import org.thoughtcrime.SMP.jobs.PushMediaSendJob; import org.thoughtcrime.SMP.jobs.PushNotificationReceiveJob; import org.thoughtcrime.SMP.jobs.PushTextSendJob; import org.thoughtcrime.SMP.jobs.RefreshPreKeysJob; import org.thoughtcrime.SMP.push.SecurityEventListener; import org.thoughtcrime.SMP.push.TextSecurePushTrustStore; import org.thoughtcrime.SMP.service.MessageRetrievalService; import org.thoughtcrime.SMP.util.TextSecurePreferences; import org.whispersystems.libaxolotl.util.guava.Optional; import org.whispersystems.textsecure.api.TextSecureAccountManager; import org.whispersystems.textsecure.api.TextSecureMessageReceiver; import org.whispersystems.textsecure.api.TextSecureMessageSender; import org.whispersystems.textsecure.api.util.CredentialsProvider; import dagger.Module; import dagger.Provides; @Module(complete = false, injects = {CleanPreKeysJob.class, CreateSignedPreKeyJob.class, DeliveryReceiptJob.class, PushGroupSendJob.class, PushTextSendJob.class, PushSMPSendJob.class, PushMediaSendJob.class, AttachmentDownloadJob.class, RefreshPreKeysJob.class, MessageRetrievalService.class, PushNotificationReceiveJob.class}) public class TextSecureCommunicationModule { private final Context context; public TextSecureCommunicationModule(Context context) { this.context = context; } @Provides TextSecureAccountManager provideTextSecureAccountManager() { return new TextSecureAccountManager(BuildConfig.PUSH_URL, new TextSecurePushTrustStore(context), TextSecurePreferences.getLocalNumber(context), TextSecurePreferences.getPushServerPassword(context)); } @Provides TextSecureMessageSenderFactory provideTextSecureMessageSenderFactory() { return new TextSecureMessageSenderFactory() { @Override public TextSecureMessageSender create(MasterSecret masterSecret) { return new TextSecureMessageSender(BuildConfig.PUSH_URL, new TextSecurePushTrustStore(context), TextSecurePreferences.getLocalNumber(context), TextSecurePreferences.getPushServerPassword(context), new TextSecureAxolotlStore(context, masterSecret), Optional.of((TextSecureMessageSender.EventListener) new SecurityEventListener(context))); } }; } @Provides TextSecureSMPMessageSenderFactory provideTextSecureSMPMessageSenderFactory() { return new TextSecureSMPMessageSenderFactory() { @Override public TextSecureSMPMessageSender create(MasterSecret masterSecret) { return new TextSecureSMPMessageSender(BuildConfig.PUSH_URL, new TextSecurePushTrustStore(context), TextSecurePreferences.getLocalNumber(context), TextSecurePreferences.getPushServerPassword(context), new TextSecureAxolotlStore(context, masterSecret), Optional.of((TextSecureSMPMessageSender.EventListener) new SecurityEventListener(context))); } }; } @Provides TextSecureMessageReceiver provideTextSecureMessageReceiver() { return new TextSecureMessageReceiver(BuildConfig.PUSH_URL, new TextSecurePushTrustStore(context), new DynamicCredentialsProvider(context)); } public static interface TextSecureMessageSenderFactory { public TextSecureMessageSender create(MasterSecret masterSecret); } public static interface TextSecureSMPMessageSenderFactory{ public TextSecureSMPMessageSender create(MasterSecret masterSecret); } private static class DynamicCredentialsProvider implements CredentialsProvider { private final Context context; private DynamicCredentialsProvider(Context context) { this.context = context.getApplicationContext(); } @Override public String getUser() { return TextSecurePreferences.getLocalNumber(context); } @Override public String getPassword() { return TextSecurePreferences.getPushServerPassword(context); } @Override public String getSignalingKey() { return TextSecurePreferences.getSignalingKey(context); } } }