mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-24 10:51:27 +01:00
Change WebsocketDrainedConstraint to DecryptionsDrainedConstraint.
This commit is contained in:
@@ -20,6 +20,7 @@ import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
|
||||
import org.thoughtcrime.securesms.jobs.PushDecryptDrainedJob;
|
||||
import org.thoughtcrime.securesms.messages.IncomingMessageProcessor.Processor;
|
||||
import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
||||
import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess;
|
||||
@@ -30,6 +31,7 @@ import org.whispersystems.signalservice.api.SignalServiceMessagePipe;
|
||||
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -47,16 +49,17 @@ public class IncomingMessageObserver {
|
||||
|
||||
private final Context context;
|
||||
private final SignalServiceNetworkAccess networkAccess;
|
||||
private final List<Runnable> websocketDrainedListeners;
|
||||
private final List<Runnable> decryptionDrainedListeners;
|
||||
|
||||
private boolean appVisible;
|
||||
|
||||
private volatile boolean websocketDrained;
|
||||
private volatile boolean networkDrained;
|
||||
private volatile boolean decryptionDrained;
|
||||
|
||||
public IncomingMessageObserver(@NonNull Context context) {
|
||||
this.context = context;
|
||||
this.networkAccess = ApplicationDependencies.getSignalServiceNetworkAccess();
|
||||
this.websocketDrainedListeners = new CopyOnWriteArrayList<>();
|
||||
this.context = context;
|
||||
this.networkAccess = ApplicationDependencies.getSignalServiceNetworkAccess();
|
||||
this.decryptionDrainedListeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
new MessageRetrievalThread().start();
|
||||
|
||||
@@ -82,7 +85,8 @@ public class IncomingMessageObserver {
|
||||
synchronized (IncomingMessageObserver.this) {
|
||||
if (!NetworkConstraint.isMet(context)) {
|
||||
Log.w(TAG, "Lost network connection. Shutting down our websocket connections and resetting the drained state.");
|
||||
websocketDrained = false;
|
||||
networkDrained = false;
|
||||
decryptionDrained = false;
|
||||
shutdown(pipe, unidentifiedPipe);
|
||||
}
|
||||
IncomingMessageObserver.this.notifyAll();
|
||||
@@ -91,15 +95,31 @@ public class IncomingMessageObserver {
|
||||
}, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
|
||||
}
|
||||
|
||||
public synchronized void addWebsocketDrainedListener(@NonNull Runnable listener) {
|
||||
websocketDrainedListeners.add(listener);
|
||||
if (websocketDrained) {
|
||||
public synchronized void addDecryptionDrainedListener(@NonNull Runnable listener) {
|
||||
decryptionDrainedListeners.add(listener);
|
||||
if (decryptionDrained) {
|
||||
listener.run();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isWebsocketDrained() {
|
||||
return websocketDrained;
|
||||
public boolean isDecryptionDrained() {
|
||||
return decryptionDrained;
|
||||
}
|
||||
|
||||
public void notifyDecryptionsDrained() {
|
||||
List<Runnable> listenersToTrigger = new ArrayList<>(decryptionDrainedListeners.size());
|
||||
|
||||
synchronized (this) {
|
||||
if (networkDrained && !decryptionDrained) {
|
||||
Log.i(TAG, "Decryptions newly drained.");
|
||||
decryptionDrained = true;
|
||||
listenersToTrigger.addAll(decryptionDrainedListeners);
|
||||
}
|
||||
}
|
||||
|
||||
for (Runnable listener : listenersToTrigger) {
|
||||
listener.run();
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void onAppForegrounded() {
|
||||
@@ -195,13 +215,10 @@ public class IncomingMessageObserver {
|
||||
}
|
||||
});
|
||||
|
||||
if (!result.isPresent() && !websocketDrained) {
|
||||
Log.i(TAG, "Websocket was newly-drained. Triggering listeners.");
|
||||
websocketDrained = true;
|
||||
|
||||
for (Runnable listener : websocketDrainedListeners) {
|
||||
listener.run();
|
||||
}
|
||||
if (!result.isPresent() && !networkDrained) {
|
||||
Log.i(TAG, "Network was newly-drained. Enqueuing a job to listen for decryption draining.");
|
||||
networkDrained = true;
|
||||
ApplicationDependencies.getJobManager().add(new PushDecryptDrainedJob());
|
||||
}
|
||||
} catch (TimeoutException e) {
|
||||
Log.w(TAG, "Application level read timeout...");
|
||||
|
||||
Reference in New Issue
Block a user