package org.mercury_im.messenger.ui.account; import android.app.Application; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; 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 javax.inject.Inject; import io.reactivex.disposables.CompositeDisposable; import lombok.Getter; public class AccountsViewModel extends AndroidViewModel { @Inject AccountRepository repository; @Inject Messenger messenger; private final MutableLiveData> connections = new MutableLiveData<>(); private final CompositeDisposable compositeDisposable = new CompositeDisposable(); @Inject public AccountsViewModel(Application application) { super(application); MercuryImApplication.getApplication().getAppComponent().inject(this); compositeDisposable.add(messenger.getConnectionManager() .observeConnections() .map(Map::values) .subscribe(conns -> connections.postValue(new ArrayList<>(conns)))); } @Override protected void onCleared() { super.onCleared(); compositeDisposable.clear(); } public CompositeDisposable getDisposable() { return compositeDisposable; } public LiveData> getConnections() { return connections; } public void setAccountEnabled(Account accountModel, boolean enabled) { accountModel.setEnabled(enabled); repository.upsertAccount(accountModel) .subscribe(); } }