session-android/app/src/main/java/org/thoughtcrime/securesms/dependencies/SignalCommunicationModule.java

177 lines
7.8 KiB
Java
Raw Normal View History

package org.thoughtcrime.securesms.dependencies;
import android.content.Context;
2020-12-02 13:01:04 +01:00
import org.session.libsignal.libsignal.util.guava.Optional;
import org.session.libsignal.service.api.SignalServiceMessageReceiver;
import org.session.libsignal.service.api.SignalServiceMessageSender;
import org.session.libsignal.service.api.util.CredentialsProvider;
import org.session.libsignal.service.api.util.SleepTimer;
import org.session.libsignal.service.api.util.UptimeSleepTimer;
import org.session.libsignal.service.api.websocket.ConnectivityListener;
2020-01-16 04:35:51 +01:00
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
2019-06-24 06:10:09 +02:00
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
2019-06-24 06:10:09 +02:00
import org.thoughtcrime.securesms.jobs.AttachmentUploadJob;
import org.thoughtcrime.securesms.jobs.AvatarDownloadJob;
2019-06-24 06:10:09 +02:00
import org.thoughtcrime.securesms.jobs.PushDecryptJob;
import org.thoughtcrime.securesms.jobs.PushGroupSendJob;
import org.thoughtcrime.securesms.jobs.PushGroupUpdateJob;
import org.thoughtcrime.securesms.jobs.PushMediaSendJob;
import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob;
import org.thoughtcrime.securesms.jobs.PushTextSendJob;
import org.thoughtcrime.securesms.jobs.RequestGroupInfoJob;
import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob;
2018-05-22 11:13:10 +02:00
import org.thoughtcrime.securesms.jobs.SendDeliveryReceiptJob;
2017-09-16 07:38:53 +02:00
import org.thoughtcrime.securesms.jobs.SendReadReceiptJob;
import org.thoughtcrime.securesms.jobs.StickerDownloadJob;
import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob;
2019-06-24 06:10:09 +02:00
import org.thoughtcrime.securesms.jobs.TypingSendJob;
import org.thoughtcrime.securesms.linkpreview.LinkPreviewRepository;
2021-02-03 02:22:40 +01:00
import org.session.libsignal.utilities.logging.Log;
import org.thoughtcrime.securesms.loki.api.SessionProtocolImpl;
2018-03-01 18:51:37 +01:00
import org.thoughtcrime.securesms.preferences.AppProtectionPreferenceFragment;
2019-10-24 08:16:53 +02:00
import org.thoughtcrime.securesms.push.MessageSenderEventListener;
import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess;
import org.thoughtcrime.securesms.service.IncomingMessageObserver;
import org.thoughtcrime.securesms.stickers.StickerPackPreviewRepository;
import org.thoughtcrime.securesms.stickers.StickerRemoteUriLoader;
2019-06-04 03:45:29 +02:00
import org.thoughtcrime.securesms.util.RealtimeSleepTimer;
2021-01-18 23:12:44 +01:00
import org.session.libsession.utilities.TextSecurePreferences;
import dagger.Module;
import dagger.Provides;
2019-08-07 08:48:54 +02:00
import network.loki.messenger.BuildConfig;
@Module(complete = false, injects = {PushGroupSendJob.class,
PushTextSendJob.class,
PushMediaSendJob.class,
AttachmentDownloadJob.class,
IncomingMessageObserver.class,
PushNotificationReceiveJob.class,
RequestGroupInfoJob.class,
PushGroupUpdateJob.class,
AvatarDownloadJob.class,
RetrieveProfileAvatarJob.class,
SendReadReceiptJob.class,
AppProtectionPreferenceFragment.class,
2018-10-12 01:45:22 +02:00
SendDeliveryReceiptJob.class,
2018-12-08 03:31:39 +01:00
TypingSendJob.class,
AttachmentUploadJob.class,
2019-08-07 08:48:54 +02:00
PushDecryptJob.class,
StickerDownloadJob.class,
StickerPackPreviewRepository.class,
StickerRemoteUriLoader.Factory.class,
StickerPackDownloadJob.class,
LinkPreviewRepository.class})
2019-08-07 08:48:54 +02:00
public class SignalCommunicationModule {
private static final String TAG = SignalCommunicationModule.class.getSimpleName();
2017-09-16 07:38:53 +02:00
private final Context context;
private final SignalServiceNetworkAccess networkAccess;
private SignalServiceMessageSender messageSender;
private SignalServiceMessageReceiver messageReceiver;
public SignalCommunicationModule(Context context, SignalServiceNetworkAccess networkAccess) {
this.context = context;
this.networkAccess = networkAccess;
2020-12-07 02:41:03 +01:00
}
@Provides
2019-06-28 08:08:27 +02:00
public synchronized SignalServiceMessageSender provideSignalMessageSender() {
2017-09-16 07:38:53 +02:00
if (this.messageSender == null) {
2021-02-19 01:03:58 +01:00
this.messageSender = new SignalServiceMessageSender(new DynamicCredentialsProvider(context),
2017-09-16 07:38:53 +02:00
new SignalProtocolStoreImpl(context),
Optional.fromNullable(IncomingMessageObserver.getPipe()),
2018-05-22 11:13:10 +02:00
Optional.fromNullable(IncomingMessageObserver.getUnidentifiedPipe()),
2019-06-11 08:27:00 +02:00
TextSecurePreferences.getLocalNumber(context),
2019-06-12 03:41:50 +02:00
DatabaseFactory.getLokiAPIDatabase(context),
2019-07-22 01:38:12 +02:00
DatabaseFactory.getLokiThreadDatabase(context),
DatabaseFactory.getLokiMessageDatabase(context),
new SessionProtocolImpl(context),
2020-01-16 04:35:51 +01:00
DatabaseFactory.getLokiUserDatabase(context),
2020-10-19 06:21:15 +02:00
DatabaseFactory.getGroupDatabase(context),
2020-01-16 04:35:51 +01:00
((ApplicationContext)context.getApplicationContext()).broadcaster);
} else {
2018-05-22 11:13:10 +02:00
this.messageSender.setMessagePipe(IncomingMessageObserver.getPipe(), IncomingMessageObserver.getUnidentifiedPipe());
2017-09-16 07:38:53 +02:00
}
2017-09-16 07:38:53 +02:00
return this.messageSender;
}
2017-09-16 07:38:53 +02:00
@Provides
synchronized SignalServiceMessageReceiver provideSignalMessageReceiver() {
if (this.messageReceiver == null) {
2019-01-24 12:04:28 +01:00
SleepTimer sleepTimer = TextSecurePreferences.isFcmDisabled(context) ? new RealtimeSleepTimer(context) : new UptimeSleepTimer();
2017-09-16 07:38:53 +02:00
this.messageReceiver = new SignalServiceMessageReceiver(networkAccess.getConfiguration(context),
new DynamicCredentialsProvider(context),
BuildConfig.USER_AGENT,
new PipeConnectivityListener(),
sleepTimer);
2017-09-16 07:38:53 +02:00
}
return this.messageReceiver;
}
@Provides
synchronized SignalServiceNetworkAccess provideSignalServiceNetworkAccess() {
return networkAccess;
}
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);
}
}
private class PipeConnectivityListener implements ConnectivityListener {
@Override
public void onConnected() {
2018-08-02 15:25:33 +02:00
Log.i(TAG, "onConnected()");
}
@Override
public void onConnecting() {
2018-08-02 15:25:33 +02:00
Log.i(TAG, "onConnecting()");
}
@Override
public void onDisconnected() {
Log.w(TAG, "onDisconnected()");
}
@Override
public void onAuthenticationFailure() {
Log.w(TAG, "onAuthenticationFailure()");
TextSecurePreferences.setUnauthorizedReceived(context, true);
}
}
}