mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-10 17:38:34 +00:00
167 lines
6.3 KiB
Java
167 lines
6.3 KiB
Java
package org.thoughtcrime.securesms.dependencies;
|
|
|
|
import android.content.Context;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import org.greenrobot.eventbus.EventBus;
|
|
import org.thoughtcrime.securesms.BuildConfig;
|
|
import org.thoughtcrime.securesms.IncomingMessageProcessor;
|
|
import org.thoughtcrime.securesms.crypto.storage.SignalProtocolStoreImpl;
|
|
import org.thoughtcrime.securesms.events.ReminderUpdateEvent;
|
|
import org.thoughtcrime.securesms.gcm.MessageRetriever;
|
|
import org.thoughtcrime.securesms.logging.Log;
|
|
import org.thoughtcrime.securesms.push.SecurityEventListener;
|
|
import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess;
|
|
import org.thoughtcrime.securesms.service.IncomingMessageObserver;
|
|
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.util.CredentialsProvider;
|
|
import org.whispersystems.signalservice.api.util.RealtimeSleepTimer;
|
|
import org.whispersystems.signalservice.api.util.SleepTimer;
|
|
import org.whispersystems.signalservice.api.util.UptimeSleepTimer;
|
|
import org.whispersystems.signalservice.api.websocket.ConnectivityListener;
|
|
|
|
/**
|
|
* 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 Context context;
|
|
private final SignalServiceNetworkAccess networkAccess;
|
|
|
|
private SignalServiceAccountManager accountManager;
|
|
private SignalServiceMessageSender messageSender;
|
|
private SignalServiceMessageReceiver messageReceiver;
|
|
private IncomingMessageProcessor incomingMessageProcessor;
|
|
private MessageRetriever messageRetriever;
|
|
|
|
public ApplicationDependencyProvider(@NonNull Context context, @NonNull SignalServiceNetworkAccess networkAccess) {
|
|
this.context = context.getApplicationContext();
|
|
this.networkAccess = networkAccess;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceAccountManager getSignalServiceAccountManager() {
|
|
if (accountManager == null) {
|
|
this.accountManager = new SignalServiceAccountManager(networkAccess.getConfiguration(context),
|
|
new DynamicCredentialsProvider(context),
|
|
BuildConfig.USER_AGENT);
|
|
}
|
|
|
|
return accountManager;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceMessageSender getSignalServiceMessageSender() {
|
|
if (this.messageSender == null) {
|
|
this.messageSender = new SignalServiceMessageSender(networkAccess.getConfiguration(context),
|
|
new DynamicCredentialsProvider(context),
|
|
new SignalProtocolStoreImpl(context),
|
|
BuildConfig.USER_AGENT,
|
|
TextSecurePreferences.isMultiDevice(context),
|
|
Optional.fromNullable(IncomingMessageObserver.getPipe()),
|
|
Optional.fromNullable(IncomingMessageObserver.getUnidentifiedPipe()),
|
|
Optional.of(new SecurityEventListener(context)));
|
|
}else {
|
|
this.messageSender.setMessagePipe(IncomingMessageObserver.getPipe(), IncomingMessageObserver.getUnidentifiedPipe());
|
|
this.messageSender.setIsMultiDevice(TextSecurePreferences.isMultiDevice(context));
|
|
}
|
|
|
|
return this.messageSender;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceMessageReceiver getSignalServiceMessageReceiver() {
|
|
if (this.messageReceiver == null) {
|
|
SleepTimer sleepTimer = TextSecurePreferences.isFcmDisabled(context) ? new RealtimeSleepTimer(context)
|
|
: new UptimeSleepTimer();
|
|
|
|
this.messageReceiver = new SignalServiceMessageReceiver(networkAccess.getConfiguration(context),
|
|
new DynamicCredentialsProvider(context),
|
|
BuildConfig.USER_AGENT,
|
|
new PipeConnectivityListener(),
|
|
sleepTimer);
|
|
}
|
|
|
|
return this.messageReceiver;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull SignalServiceNetworkAccess getSignalServiceNetworkAccess() {
|
|
return networkAccess;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull IncomingMessageProcessor getIncomingMessageProcessor() {
|
|
if (incomingMessageProcessor == null) {
|
|
incomingMessageProcessor = new IncomingMessageProcessor(context);
|
|
}
|
|
|
|
return incomingMessageProcessor;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull MessageRetriever getMessageRetriever() {
|
|
if (messageRetriever == null) {
|
|
messageRetriever = new MessageRetriever();
|
|
}
|
|
|
|
return messageRetriever;
|
|
}
|
|
|
|
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() {
|
|
Log.i(TAG, "onConnected()");
|
|
}
|
|
|
|
@Override
|
|
public void onConnecting() {
|
|
Log.i(TAG, "onConnecting()");
|
|
}
|
|
|
|
@Override
|
|
public void onDisconnected() {
|
|
Log.w(TAG, "onDisconnected()");
|
|
}
|
|
|
|
@Override
|
|
public void onAuthenticationFailure() {
|
|
Log.w(TAG, "onAuthenticationFailure()");
|
|
TextSecurePreferences.setUnauthorizedReceived(context, true);
|
|
EventBus.getDefault().post(new ReminderUpdateEvent());
|
|
}
|
|
}
|
|
}
|