class ChatRoomsViewModel( private val repository: ChatRoomsRepository, private val mapper: RoomMapper ) : ViewModel() { private val ordering: MutableLiveData = MutableLiveData() private val runContext = newSingleThreadContext("chat-rooms-view-model") init { ordering.value = ChatRoomsRepository.Order.ACTIVITY } fun getChatRooms(): LiveData>> { return Transformations.switchMap(ordering) { order -> repository.getChatRooms(order) .nonNull() .distinct() .transform(runContext) { rooms -> rooms?.let { mapper.map(rooms, order.isGrouped()) } } } } fun setOrdering(order: ChatRoomsRepository.Order) { ordering.value = order } }