package org.mercury_im.messenger.ui.roster; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.persistence.repository.ContactRepository; import org.mercury_im.messenger.persistence.room.model.RoomContactModel; import org.mercury_im.messenger.persistence.room.repository.IContactRepository; import java.util.List; import javax.inject.Inject; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; public class RosterViewModel extends ViewModel { @Inject ContactRepository contactRepository; private final MutableLiveData> rosterEntryList = new MutableLiveData<>(); private final CompositeDisposable compositeDisposable = new CompositeDisposable(); public RosterViewModel() { super(); MercuryImApplication.getApplication().getAppComponent().inject(this); // Subscribe to changes to the contacts table and update the LiveData object for the UI. compositeDisposable.add(contactRepository.getAllContacts() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(o -> rosterEntryList.setValue((List) o))); } @Override protected void onCleared() { super.onCleared(); compositeDisposable.clear(); } public LiveData> getRosterEntryList() { return rosterEntryList; } }