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 1b4c3405a..99a9785bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java @@ -63,6 +63,7 @@ import org.whispersystems.signalservice.internal.util.Util; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.NoSuchAlgorithmException; +import java.util.function.Supplier; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; @@ -260,6 +261,9 @@ public class ApplicationDependencies { public static void resetNetworkConnectionsAfterProxyChange() { synchronized (LOCK) { closeConnections(); + if (signalWebSocket != null) { + signalWebSocket.forceNewWebSockets(); + } } } @@ -570,7 +574,7 @@ public class ApplicationDependencies { if (signalWebSocket == null) { synchronized (LOCK) { if (signalWebSocket == null) { - signalWebSocket = provider.provideSignalWebSocket(getSignalServiceNetworkAccess().getConfiguration()); + signalWebSocket = provider.provideSignalWebSocket(() -> getSignalServiceNetworkAccess().getConfiguration()); } } } @@ -696,7 +700,7 @@ public class ApplicationDependencies { @NonNull SignalCallManager provideSignalCallManager(); @NonNull PendingRetryReceiptManager providePendingRetryReceiptManager(); @NonNull PendingRetryReceiptCache providePendingRetryReceiptCache(); - @NonNull SignalWebSocket provideSignalWebSocket(@NonNull SignalServiceConfiguration signalServiceConfiguration); + @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier signalServiceConfigurationSupplier); @NonNull SignalServiceDataStoreImpl provideProtocolStore(); @NonNull GiphyMp4Cache provideGiphyMp4Cache(); @NonNull SimpleExoPlayerPool provideExoPlayerPool(); 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 1b7c492ce..003a71266 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -95,6 +95,7 @@ import org.whispersystems.signalservice.internal.websocket.WebSocketConnection; import java.security.KeyStore; import java.util.Optional; import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; /** * Implementation of {@link ApplicationDependencies.Provider} that provides real app dependencies. @@ -281,10 +282,10 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr } @Override - public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull SignalServiceConfiguration signalServiceConfiguration) { + public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier signalServiceConfigurationSupplier) { SleepTimer sleepTimer = SignalStore.account().isFcmEnabled() ? new UptimeSleepTimer() : new AlarmSleepTimer(context); SignalWebSocketHealthMonitor healthMonitor = new SignalWebSocketHealthMonitor(context, sleepTimer); - SignalWebSocket signalWebSocket = new SignalWebSocket(provideWebSocketFactory(signalServiceConfiguration, healthMonitor)); + SignalWebSocket signalWebSocket = new SignalWebSocket(provideWebSocketFactory(signalServiceConfigurationSupplier, healthMonitor)); healthMonitor.monitor(signalWebSocket); @@ -389,12 +390,12 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr 10); } - private @NonNull WebSocketFactory provideWebSocketFactory(@NonNull SignalServiceConfiguration signalServiceConfiguration, @NonNull SignalWebSocketHealthMonitor healthMonitor) { + @NonNull WebSocketFactory provideWebSocketFactory(@NonNull Supplier signalServiceConfigurationSupplier, @NonNull SignalWebSocketHealthMonitor healthMonitor) { return new WebSocketFactory() { @Override public WebSocketConnection createWebSocket() { return new WebSocketConnection("normal", - signalServiceConfiguration, + signalServiceConfigurationSupplier.get(), Optional.of(new DynamicCredentialsProvider()), BuildConfig.SIGNAL_AGENT, healthMonitor); @@ -403,7 +404,7 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr @Override public WebSocketConnection createUnidentifiedWebSocket() { return new WebSocketConnection("unidentified", - signalServiceConfiguration, + signalServiceConfigurationSupplier.get(), Optional.empty(), BuildConfig.SIGNAL_AGENT, healthMonitor); diff --git a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java index ec282fe9a..a5c316d6d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java +++ b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java @@ -45,6 +45,7 @@ import org.whispersystems.signalservice.api.services.ProfileService; import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; import java.security.KeyStore; +import java.util.function.Supplier; import static org.mockito.Mockito.mock; @@ -186,7 +187,7 @@ public class MockApplicationDependencyProvider implements ApplicationDependencie } @Override - public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull SignalServiceConfiguration signalServiceConfiguration) { + public @NonNull SignalWebSocket provideSignalWebSocket(@NonNull Supplier signalServiceConfigurationSupplier) { return null; }