Mercury-IM/app/src/main/java/org/mercury_im/messenger/ui/account/AccountsViewModel.java

77 lines
2.5 KiB
Java
Raw Normal View History

2019-12-21 03:46:17 +01:00
package org.mercury_im.messenger.ui.account;
2019-06-03 01:16:49 +02:00
import android.app.Application;
import androidx.lifecycle.AndroidViewModel;
2019-06-03 01:16:49 +02:00
import androidx.lifecycle.LiveData;
2019-08-04 04:22:08 +02:00
import androidx.lifecycle.MutableLiveData;
2019-06-03 01:16:49 +02:00
import org.mercury_im.messenger.MercuryImApplication;
import org.mercury_im.messenger.Messenger;
2019-12-06 15:52:50 +01:00
import org.mercury_im.messenger.data.repository.AccountRepository;
import org.mercury_im.messenger.entity.Account;
import org.mercury_im.messenger.xmpp.MercuryConnection;
import org.mercury_im.messenger.xmpp.exception.InvalidCredentialsException;
import org.mercury_im.messenger.xmpp.exception.ServerUnreachableException;
2020-05-15 17:05:11 +02:00
import org.mercury_im.messenger.xmpp.state.ConnectionPoolState;
2019-06-03 01:16:49 +02:00
import javax.inject.Inject;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
public class AccountsViewModel extends AndroidViewModel {
2019-06-03 01:16:49 +02:00
@Inject
2019-12-06 15:52:50 +01:00
AccountRepository repository;
2019-06-03 01:16:49 +02:00
@Inject
Messenger messenger;
2020-05-15 17:05:11 +02:00
private final MutableLiveData<ConnectionPoolState> connectionPool = new MutableLiveData<>();
2019-08-04 04:22:08 +02:00
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
2019-06-03 01:16:49 +02:00
@Inject
public AccountsViewModel(Application application) {
super(application);
2019-06-03 01:16:49 +02:00
MercuryImApplication.getApplication().getAppComponent().inject(this);
compositeDisposable.add(messenger.getConnectionManager()
2020-05-15 17:05:11 +02:00
.observeConnectionPool()
.subscribe(connectionPool::postValue));
2019-08-04 04:22:08 +02:00
}
@Override
protected void onCleared() {
super.onCleared();
compositeDisposable.clear();
2019-06-03 01:16:49 +02:00
}
2020-01-06 03:41:37 +01:00
public CompositeDisposable getDisposable() {
return compositeDisposable;
}
2020-05-15 17:05:11 +02:00
public LiveData<ConnectionPoolState> getConnectionPool() {
return connectionPool;
2019-06-03 01:16:49 +02:00
}
2019-12-21 04:08:59 +01:00
public void setAccountEnabled(Account accountModel, boolean enabled) {
accountModel.setEnabled(enabled);
2019-12-06 15:52:50 +01:00
repository.upsertAccount(accountModel)
.subscribe();
MercuryConnection connection = messenger.getConnectionManager().getConnection(accountModel);
if (connection != null) {
if (enabled) {
connection.connect()
.andThen(connection.login())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
} else {
connection.shutdown();
}
}
}
2019-06-03 01:16:49 +02:00
}