package org.mercury_im.messenger.android.ui.roster.contacts; import android.util.Log; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import org.mercury_im.messenger.android.MercuryImApplication; import org.mercury_im.messenger.core.Messenger; import org.mercury_im.messenger.data.repository.RxAccountRepository; import org.mercury_im.messenger.data.repository.RxPeerRepository; import org.mercury_im.messenger.entity.Account; import org.mercury_im.messenger.entity.contact.Peer; import java.util.List; import javax.inject.Inject; import io.reactivex.disposables.CompositeDisposable; import lombok.Getter; public class ContactListViewModel extends ViewModel { @Inject RxPeerRepository xmppContactRepository; @Inject RxAccountRepository accountRepository; @Inject @Getter Messenger messenger; private final MutableLiveData> rosterEntryList = new MutableLiveData<>(); private final MutableLiveData> accounts = new MutableLiveData<>(); private final CompositeDisposable compositeDisposable = new CompositeDisposable(); public ContactListViewModel() { super(); MercuryImApplication.getApplication().getAppComponent().inject(this); Log.d("ContactListViewModel", "Start observing database"); // Subscribe to changes to the contacts table and update the LiveData object for the UI. compositeDisposable.add(xmppContactRepository.observeAllPeers() .subscribe(rosterEntryList::setValue)); compositeDisposable.add(accountRepository.observeAllAccounts() .subscribe(accounts::setValue)); } @Override protected void onCleared() { super.onCleared(); compositeDisposable.clear(); } public LiveData> getRosterEntryList() { return rosterEntryList; } public LiveData> getAccounts() { return accounts; } }