diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsFragment.java b/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsFragment.java index 84da9b0..d3b76dd 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsFragment.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsFragment.java @@ -58,7 +58,7 @@ public class AccountsFragment extends Fragment { } private void observeViewModel() { - viewModel.getConnections().observe(this, adapter::setValues); + viewModel.getConnectionPool().observe(this, adapter::setValues); } @Override diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsViewModel.java b/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsViewModel.java index 09b0ffb..dfb2753 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsViewModel.java @@ -10,16 +10,11 @@ import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.Messenger; import org.mercury_im.messenger.data.repository.AccountRepository; import org.mercury_im.messenger.entity.Account; -import org.mercury_im.messenger.xmpp.MercuryConnection; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import org.mercury_im.messenger.xmpp.state.ConnectionPoolState; import javax.inject.Inject; import io.reactivex.disposables.CompositeDisposable; -import lombok.Getter; public class AccountsViewModel extends AndroidViewModel { @@ -29,7 +24,7 @@ public class AccountsViewModel extends AndroidViewModel { @Inject Messenger messenger; - private final MutableLiveData> connections = new MutableLiveData<>(); + private final MutableLiveData connectionPool = new MutableLiveData<>(); private final CompositeDisposable compositeDisposable = new CompositeDisposable(); @Inject @@ -37,9 +32,8 @@ public class AccountsViewModel extends AndroidViewModel { super(application); MercuryImApplication.getApplication().getAppComponent().inject(this); compositeDisposable.add(messenger.getConnectionManager() - .observeConnections() - .map(Map::values) - .subscribe(conns -> connections.postValue(new ArrayList<>(conns)))); + .observeConnectionPool() + .subscribe(connectionPool::postValue)); } @Override @@ -52,8 +46,8 @@ public class AccountsViewModel extends AndroidViewModel { return compositeDisposable; } - public LiveData> getConnections() { - return connections; + public LiveData getConnectionPool() { + return connectionPool; } public void setAccountEnabled(Account accountModel, boolean enabled) { diff --git a/app/src/main/java/org/mercury_im/messenger/ui/account/LoginViewModel.java b/app/src/main/java/org/mercury_im/messenger/ui/account/LoginViewModel.java index 62291be..f43b456 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/account/LoginViewModel.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/account/LoginViewModel.java @@ -92,13 +92,7 @@ public class LoginViewModel extends AndroidViewModel { MercuryConnection connection = messenger.getConnectionManager().createConnection(account); disposable.add(Completable.fromAction(() -> { connection.connect().login(); - }) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe() - ); - disposable.add(messenger.addAccount() - .execute(account) + }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .doOnComplete(this::signalLoginSuccessful) diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java b/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java index a1d5f87..1a2ed35 100644 --- a/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java +++ b/domain/src/main/java/org/mercury_im/messenger/xmpp/MercuryConnectionManager.java @@ -47,9 +47,6 @@ public class MercuryConnectionManager { private final BehaviorSubject stateObservable = BehaviorSubject.createDefault(new ConnectionPoolState()); - private final BehaviorSubject> connectionsSubject = - BehaviorSubject.createDefault(connections); - private final AccountRepository accountRepository; private final RosterStoreBinder rosterStoreBinder; @@ -84,11 +81,7 @@ public class MercuryConnectionManager { return new ArrayList<>(connections.values()); } - public Observable> observeConnections() { - return connectionsSubject; - } - - public Observable observeConnectionPoolState() { + public Observable observeConnectionPool() { return stateObservable; } diff --git a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionState.java b/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionState.java index cc6b862..374d363 100644 --- a/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionState.java +++ b/domain/src/main/java/org/mercury_im/messenger/xmpp/state/ConnectionState.java @@ -1,5 +1,7 @@ package org.mercury_im.messenger.xmpp.state; +import org.jivesoftware.smack.XMPPConnection; + import java.util.UUID; import lombok.ToString; @@ -11,6 +13,7 @@ import lombok.With; public class ConnectionState { UUID id; + XMPPConnection connection; @With ConnectivityState connectivity; @With @@ -18,26 +21,11 @@ public class ConnectionState { @With boolean resumed; - public ConnectionState(UUID id, ConnectivityState connectivity, boolean authenticated, boolean resumed) { + public ConnectionState(UUID id, XMPPConnection connection, ConnectivityState connectivity, boolean authenticated, boolean resumed) { this.id = id; + this.connection = connection; this.connectivity = connectivity; this.authenticated = authenticated; this.resumed = resumed; } - - public UUID getId() { - return id; - } - - public ConnectivityState getConnectivity() { - return connectivity; - } - - public boolean isAuthenticated() { - return authenticated; - } - - public boolean isResumed() { - return resumed; - } } diff --git a/libs/Smack b/libs/Smack index e797108..e6e8547 160000 --- a/libs/Smack +++ b/libs/Smack @@ -1 +1 @@ -Subproject commit e79710840be6d6b3301e078a23688eafaa06013c +Subproject commit e6e8547f7b29e9c961cb23020c0f0fe2ea1b0f14