mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 02:10:44 +01:00
Fix dancing call icon when a new message is recieved.
This commit is contained in:
@@ -6,6 +6,7 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.disposables.Disposable
|
||||
import io.reactivex.rxjava3.kotlin.plusAssign
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.subjects.Subject
|
||||
@@ -25,19 +26,19 @@ class ConversationListTabsViewModel(repository: ConversationListTabRepository) :
|
||||
val tabClickEvents: Observable<ConversationListTab> = internalTabClickEvents.filter { Stories.isFeatureEnabled() }
|
||||
|
||||
init {
|
||||
disposables += store.update(repository.getNumberOfUnreadMessages()) { unreadChats, state ->
|
||||
disposables += performStoreUpdate(repository.getNumberOfUnreadMessages()) { unreadChats, state ->
|
||||
state.copy(unreadMessagesCount = unreadChats)
|
||||
}
|
||||
|
||||
disposables += store.update(repository.getNumberOfUnseenCalls()) { unseenCalls, state ->
|
||||
disposables += performStoreUpdate(repository.getNumberOfUnseenCalls()) { unseenCalls, state ->
|
||||
state.copy(unreadCallsCount = unseenCalls)
|
||||
}
|
||||
|
||||
disposables += store.update(repository.getNumberOfUnseenStories()) { unseenStories, state ->
|
||||
disposables += performStoreUpdate(repository.getNumberOfUnseenStories()) { unseenStories, state ->
|
||||
state.copy(unreadStoriesCount = unseenStories)
|
||||
}
|
||||
|
||||
disposables += store.update(repository.getHasFailedOutgoingStories()) { hasFailedStories, state ->
|
||||
disposables += performStoreUpdate(repository.getHasFailedOutgoingStories()) { hasFailedStories, state ->
|
||||
state.copy(hasFailedStory = hasFailedStories)
|
||||
}
|
||||
}
|
||||
@@ -48,37 +49,49 @@ class ConversationListTabsViewModel(repository: ConversationListTabRepository) :
|
||||
|
||||
fun onChatsSelected() {
|
||||
internalTabClickEvents.onNext(ConversationListTab.CHATS)
|
||||
store.update { it.copy(tab = ConversationListTab.CHATS, prevTab = it.tab) }
|
||||
performStoreUpdate { it.copy(tab = ConversationListTab.CHATS) }
|
||||
}
|
||||
|
||||
fun onCallsSelected() {
|
||||
internalTabClickEvents.onNext(ConversationListTab.CALLS)
|
||||
store.update { it.copy(tab = ConversationListTab.CALLS, prevTab = it.tab) }
|
||||
performStoreUpdate { it.copy(tab = ConversationListTab.CALLS) }
|
||||
}
|
||||
|
||||
fun onStoriesSelected() {
|
||||
internalTabClickEvents.onNext(ConversationListTab.STORIES)
|
||||
store.update { it.copy(tab = ConversationListTab.STORIES, prevTab = it.tab) }
|
||||
performStoreUpdate { it.copy(tab = ConversationListTab.STORIES) }
|
||||
}
|
||||
|
||||
fun onSearchOpened() {
|
||||
store.update { it.copy(visibilityState = it.visibilityState.copy(isSearchOpen = true)) }
|
||||
performStoreUpdate { it.copy(visibilityState = it.visibilityState.copy(isSearchOpen = true)) }
|
||||
}
|
||||
|
||||
fun onSearchClosed() {
|
||||
store.update { it.copy(visibilityState = it.visibilityState.copy(isSearchOpen = false)) }
|
||||
performStoreUpdate { it.copy(visibilityState = it.visibilityState.copy(isSearchOpen = false)) }
|
||||
}
|
||||
|
||||
fun onMultiSelectStarted() {
|
||||
store.update { it.copy(visibilityState = it.visibilityState.copy(isMultiSelectOpen = true)) }
|
||||
performStoreUpdate { it.copy(visibilityState = it.visibilityState.copy(isMultiSelectOpen = true)) }
|
||||
}
|
||||
|
||||
fun onMultiSelectFinished() {
|
||||
store.update { it.copy(visibilityState = it.visibilityState.copy(isMultiSelectOpen = false)) }
|
||||
performStoreUpdate { it.copy(visibilityState = it.visibilityState.copy(isMultiSelectOpen = false)) }
|
||||
}
|
||||
|
||||
fun isShowingArchived(isShowingArchived: Boolean) {
|
||||
store.update { it.copy(visibilityState = it.visibilityState.copy(isShowingArchived = isShowingArchived)) }
|
||||
performStoreUpdate { it.copy(visibilityState = it.visibilityState.copy(isShowingArchived = isShowingArchived)) }
|
||||
}
|
||||
|
||||
private fun performStoreUpdate(fn: (ConversationListTabsState) -> ConversationListTabsState) {
|
||||
store.update {
|
||||
fn(it.copy(prevTab = it.tab))
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T: Any> performStoreUpdate(flowable: Flowable<T>, fn: (T, ConversationListTabsState) -> ConversationListTabsState): Disposable {
|
||||
return store.update(flowable) { t, state ->
|
||||
fn(t, state.copy(prevTab = state.tab))
|
||||
}
|
||||
}
|
||||
|
||||
class Factory(private val repository: ConversationListTabRepository) : ViewModelProvider.Factory {
|
||||
|
||||
Reference in New Issue
Block a user