mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 10:20:25 +01:00
Create group v2 - Implement navigation to group details screen.
This commit is contained in:
@@ -148,10 +148,6 @@ class ContactSearchMediator(
|
||||
viewModel.clearSelection()
|
||||
}
|
||||
|
||||
fun getSelectedMembersSize(): Int {
|
||||
return viewModel.getSelectedMembersSize()
|
||||
}
|
||||
|
||||
fun getSelectedContacts(): Set<ContactSearchKey> {
|
||||
return viewModel.getSelectedContacts()
|
||||
}
|
||||
|
||||
@@ -5,12 +5,16 @@ import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.asLiveData
|
||||
import androidx.lifecycle.map
|
||||
import androidx.lifecycle.switchMap
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import org.signal.paging.LivePagedData
|
||||
import org.signal.paging.PagedData
|
||||
import org.signal.paging.PagingConfig
|
||||
@@ -52,23 +56,21 @@ class ContactSearchViewModel(
|
||||
|
||||
private val pagedData = MutableLiveData<LivePagedData<ContactSearchKey, ContactSearchData>>()
|
||||
private val configurationStore = Store(ContactSearchState(query = savedStateHandle[QUERY]))
|
||||
private val selectionStore = Store<Set<ContactSearchKey>>(emptySet())
|
||||
private val internalSelectedContacts = MutableStateFlow<Set<ContactSearchKey>>(emptySet())
|
||||
private val errorEvents = PublishSubject.create<ContactSearchError>()
|
||||
|
||||
val controller: LiveData<PagingController<ContactSearchKey>> = pagedData.map { it.controller }
|
||||
val data: LiveData<List<ContactSearchData>> = pagedData.switchMap { it.data }
|
||||
val configurationState: LiveData<ContactSearchState> = configurationStore.stateLiveData
|
||||
val selectionState: LiveData<Set<ContactSearchKey>> = selectionStore.stateLiveData
|
||||
private val selectedContacts: StateFlow<Set<ContactSearchKey>> = internalSelectedContacts
|
||||
val selectionState: LiveData<Set<ContactSearchKey>> = selectedContacts.asLiveData()
|
||||
|
||||
val errorEventsStream: Observable<ContactSearchError> = errorEvents
|
||||
|
||||
private var selectionSize = 0
|
||||
override fun onCleared() {
|
||||
disposables.clear()
|
||||
}
|
||||
|
||||
fun getSelectedMembersSize(): Int {
|
||||
return selectionSize
|
||||
}
|
||||
fun setConfiguration(contactSearchConfiguration: ContactSearchConfiguration) {
|
||||
val pagedDataSource = ContactSearchPagedDataSource(
|
||||
contactSearchConfiguration,
|
||||
@@ -103,7 +105,6 @@ class ContactSearchViewModel(
|
||||
|
||||
val newSelectionEntries = results.filter { it.isSelectable }.map { it.key } - getSelectedContacts()
|
||||
val newSelectionSize = newSelectionEntries.size + getSelectedContacts().size
|
||||
selectionSize = newSelectionSize
|
||||
if (selectionLimits.hasRecommendedLimit() && getSelectedContacts().size < selectionLimits.recommendedLimit && newSelectionSize >= selectionLimits.recommendedLimit) {
|
||||
errorEvents.onNext(ContactSearchError.RECOMMENDED_LIMIT_REACHED)
|
||||
} else if (selectionLimits.hasHardLimit() && newSelectionSize > selectionLimits.hardLimit) {
|
||||
@@ -115,22 +116,20 @@ class ContactSearchViewModel(
|
||||
safetyNumberRepository.batchSafetyNumberCheck(newSelectionEntries)
|
||||
}
|
||||
|
||||
selectionStore.update { state -> state + newSelectionEntries }
|
||||
internalSelectedContacts.update { it + newSelectionEntries }
|
||||
}
|
||||
}
|
||||
|
||||
fun setKeysNotSelected(contactSearchKeys: Set<ContactSearchKey>) {
|
||||
val newSelectionSize = getSelectedContacts().size - contactSearchKeys.size
|
||||
selectionSize = newSelectionSize
|
||||
selectionStore.update { it - contactSearchKeys }
|
||||
internalSelectedContacts.update { it - contactSearchKeys }
|
||||
}
|
||||
|
||||
fun getSelectedContacts(): Set<ContactSearchKey> {
|
||||
return selectionStore.state
|
||||
return selectedContacts.value
|
||||
}
|
||||
|
||||
fun clearSelection() {
|
||||
selectionStore.update { emptySet() }
|
||||
internalSelectedContacts.update { emptySet() }
|
||||
}
|
||||
|
||||
fun addToVisibleGroupStories(groupStories: Set<ContactSearchKey.RecipientSearchKey>) {
|
||||
|
||||
Reference in New Issue
Block a user