import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.SignatureException;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
private Thread receiveThread;
private final Set<ReceiveMessageHandler> weakHandlers = new HashSet<>();
private final Set<ReceiveMessageHandler> messageHandlers = new HashSet<>();
+ private final List<Runnable> closedListeners = new ArrayList<>();
private boolean isReceivingSynchronous;
ManagerImpl(
dependencies.getAccountManager().setGcmId(Optional.absent());
account.setRegistered(false);
+ close();
}
@Override
dependencies.getAccountManager().deleteAccount();
account.setRegistered(false);
+ close();
}
@Override
return identityHelper.trustIdentityAllKeys(recipientId);
}
+ @Override
+ public void addClosedListener(final Runnable listener) {
+ synchronized (closedListeners) {
+ closedListeners.add(listener);
+ }
+ }
+
private void handleIdentityFailure(
final RecipientId recipientId,
final org.whispersystems.signalservice.api.messages.SendMessageResult.IdentityFailure identityFailure
@Override
public void close() throws IOException {
- close(true);
- }
-
- private void close(boolean closeAccount) throws IOException {
Thread thread;
synchronized (messageHandlers) {
weakHandlers.clear();
dependencies.getSignalWebSocket().disconnect();
- if (closeAccount && account != null) {
+ synchronized (closedListeners) {
+ closedListeners.forEach(Runnable::run);
+ closedListeners.clear();
+ }
+
+ if (account != null) {
account.close();
}
account = null;