Mercury-IM/app/src/main/java/org/mercury_im/messenger/ui/roster/RosterViewModel.java

56 lines
1.9 KiB
Java

package org.mercury_im.messenger.ui.roster;
import android.util.Log;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import org.mercury_im.messenger.MercuryImApplication;
import org.mercury_im.messenger.persistence.model.ContactModel;
import org.mercury_im.messenger.persistence.repository.RosterRepository;
import org.mercury_im.messenger.persistence.room.model.RoomContactModel;
import java.util.List;
import javax.inject.Inject;
public class RosterViewModel extends ViewModel {
@Inject
RosterRepository rosterRepository;
private final MutableLiveData<List<RoomContactModel>> rosterEntryList = new MutableLiveData<>();
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
public RosterViewModel() {
super();
MercuryImApplication.getApplication().getAppComponent().inject(this);
Log.d("RosterViewModel", "Start observing database");
// Subscribe to changes to the contacts table and update the LiveData object for the UI.
compositeDisposable.add(rosterRepository.getAllContacts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((Consumer<List<? extends ContactModel>>) o -> {
Log.d("RosterViewModel", "Room changed contacts: " + o.size());
rosterEntryList.setValue((List<RoomContactModel>) o);
}));
}
@Override
protected void onCleared() {
super.onCleared();
compositeDisposable.clear();
}
public LiveData<List<RoomContactModel>> getRosterEntryList() {
return rosterEntryList;
}
}