Fix dancing call icon when a new message is recieved.

This commit is contained in:
Alex Hart
2023-05-02 11:42:40 -03:00
parent fe9ed4c5f7
commit 3c343af562

View File

@@ -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 {