Mercury-IM/app/src/main/java/org/mercury_im/messenger/android/ui/roster/contacts/ContactListViewModel.java

65 lines
2.0 KiB
Java

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<List<Peer>> rosterEntryList = new MutableLiveData<>();
private final MutableLiveData<List<Account>> 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<List<Peer>> getRosterEntryList() {
return rosterEntryList;
}
public LiveData<List<Account>> getAccounts() {
return accounts;
}
}