diff --git a/presentation/src/main/java/common/util/extensions/ViewExtensions.kt b/presentation/src/main/java/common/util/extensions/ViewExtensions.kt index d994a133..ed1b67e0 100644 --- a/presentation/src/main/java/common/util/extensions/ViewExtensions.kt +++ b/presentation/src/main/java/common/util/extensions/ViewExtensions.kt @@ -41,6 +41,7 @@ fun ImageView.setTint(color: Int) { } fun ProgressBar.setTint(color: Int) { + indeterminateTintList = ColorStateList.valueOf(color) progressTintList = ColorStateList.valueOf(color) } diff --git a/presentation/src/main/java/feature/compose/ComposeActivity.kt b/presentation/src/main/java/feature/compose/ComposeActivity.kt index 8a9771b4..bd637b0a 100644 --- a/presentation/src/main/java/feature/compose/ComposeActivity.kt +++ b/presentation/src/main/java/feature/compose/ComposeActivity.kt @@ -126,6 +126,7 @@ class ComposeActivity : QkThemedActivity(), ComposeView { message.supportsInputContent = true theme + .doOnNext { loading.setTint(it.theme) } .doOnNext { send.setBackgroundTint(it.theme) } .doOnNext { send.setTint(it.textPrimary) } .doOnNext { messageAdapter.theme = it } @@ -165,7 +166,7 @@ class ComposeActivity : QkThemedActivity(), ComposeView { toolbarTitle.setVisible(!state.editingMode) chips.setVisible(state.editingMode) contacts.setVisible(state.contactsVisible) - composeBar.setVisible(!state.contactsVisible) + composeBar.setVisible(!state.contactsVisible && !state.loading) // Don't set the adapters unless needed if (state.editingMode && chips.adapter == null) chips.adapter = chipsAdapter @@ -187,6 +188,8 @@ class ComposeActivity : QkThemedActivity(), ComposeView { chipsAdapter.data = state.selectedContacts contactsAdapter.data = state.contacts + loading.setVisible(state.loading) + sendAsGroup.setVisible(state.editingMode && state.selectedContacts.size >= 2) sendAsGroupSwitch.isChecked = state.sendAsGroup diff --git a/presentation/src/main/java/feature/compose/ComposeState.kt b/presentation/src/main/java/feature/compose/ComposeState.kt index ec101be7..e24c5589 100644 --- a/presentation/src/main/java/feature/compose/ComposeState.kt +++ b/presentation/src/main/java/feature/compose/ComposeState.kt @@ -34,6 +34,7 @@ data class ComposeState( val selectedContacts: List = ArrayList(), val sendAsGroup: Boolean = true, val conversationtitle: String = "", + val loading: Boolean = false, val query: String = "", val searchSelectionId: Long = -1, val searchSelectionPosition: Int = 0, diff --git a/presentation/src/main/java/feature/compose/ComposeViewModel.kt b/presentation/src/main/java/feature/compose/ComposeViewModel.kt index d453baa1..6e8cef1e 100644 --- a/presentation/src/main/java/feature/compose/ComposeViewModel.kt +++ b/presentation/src/main/java/feature/compose/ComposeViewModel.kt @@ -149,7 +149,14 @@ class ComposeViewModel @Inject constructor( .skipUntil(state.filter { state -> state.editingMode }) .takeUntil(state.filter { state -> !state.editingMode }) .map { contacts -> contacts.map { it.numbers.firstOrNull()?.address ?: "" } } - .mapNotNull { addresses -> messageRepo.getOrCreateConversation(addresses) } + .observeOn(Schedulers.computation()) + .doOnNext { newState { copy(loading = true) } } + .mapNotNull { addresses -> + val conversation = messageRepo.getOrCreateConversation(addresses) + newState { copy(loading = false) } + conversation + } + .observeOn(AndroidSchedulers.mainThread()) .mergeWith(initialConversation) .filter { conversation -> conversation.isLoaded } .doOnNext { conversation -> diff --git a/presentation/src/main/res/layout/compose_activity.xml b/presentation/src/main/res/layout/compose_activity.xml index 6c301993..4c7d1afc 100644 --- a/presentation/src/main/res/layout/compose_activity.xml +++ b/presentation/src/main/res/layout/compose_activity.xml @@ -54,6 +54,19 @@ app:textColor="tertiary" app:textSize="secondary" /> + +