ChatActivity: set sendbutton inactive when text or media are empty, fix media menu, fix media button stay inactive after removing media

main
Alibek Omarov 4 years ago
parent 12e95a7190
commit cbe737ef54
  1. 60
      app/src/main/java/com/keylesspalace/tusky/components/chat/ChatActivity.kt

@ -66,7 +66,6 @@ import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp import com.mikepenz.iconics.utils.sizeDp
import com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider.from
import com.uber.autodispose.android.lifecycle.autoDispose import com.uber.autodispose.android.lifecycle.autoDispose
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -228,21 +227,23 @@ class ChatActivity: BottomSheetActivity(),
.subscribe { event: Event? -> .subscribe { event: Event? ->
when(event) { when(event) {
is ChatMessageDeliveredEvent -> { is ChatMessageDeliveredEvent -> {
onRefresh() if(event.chatMsg.chatId == chatId) {
enableButton(sendButton, true, true) onRefresh()
enableButton(attachmentButton, true, true) enableButton(attachmentButton, true, true)
enableButton(stickerButton, haveStickers, haveStickers) enableButton(stickerButton, haveStickers, haveStickers)
editText.text.clear()
viewModel.media.value = listOf()
}
sending = false
enableSendButton()
}
}
is ChatMessageReceivedEvent -> { is ChatMessageReceivedEvent -> {
onRefresh() if(event.chatMsg.chatId == chatId) {
onRefresh()
}
} }
} }
} }
tryCache() tryCache()
} }
@ -288,11 +289,14 @@ class ChatActivity: BottomSheetActivity(),
viewModel.updateDescription(it.localId, newDescription) viewModel.updateDescription(it.localId, newDescription)
} }
} }
removeId -> viewModel.removeMediaFromQueue(it) removeId -> {
viewModel.removeMediaFromQueue(it)
}
} }
} }
true true
} }
popup.show()
} }
imageAttachment.setOnClickListener(onMediaPick) imageAttachment.setOnClickListener(onMediaPick)
@ -315,6 +319,7 @@ class ChatActivity: BottomSheetActivity(),
highlightSpans(editText.text, mentionColour) highlightSpans(editText.text, mentionColour)
editText.afterTextChanged { editable -> editText.afterTextChanged { editable ->
highlightSpans(editable, mentionColour) highlightSpans(editable, mentionColour)
enableSendButton()
} }
// work around Android platform bug -> https://issuetracker.google.com/issues/67102093 // work around Android platform bug -> https://issuetracker.google.com/issues/67102093
@ -324,6 +329,17 @@ class ChatActivity: BottomSheetActivity(),
} }
} }
private var sending = false
private fun enableSendButton() {
if(sending)
return
val haveMedia = viewModel.media.value?.isNotEmpty() ?: false
val haveText = editText.text.isNotEmpty()
enableButton(sendButton, haveMedia || haveText, haveMedia || haveText)
}
override fun search(token: String): List<ComposeAutoCompleteAdapter.AutocompleteResult> { override fun search(token: String): List<ComposeAutoCompleteAdapter.AutocompleteResult> {
return viewModel.searchAutocompleteSuggestions(token) return viewModel.searchAutocompleteSuggestions(token)
} }
@ -355,11 +371,6 @@ class ChatActivity: BottomSheetActivity(),
viewModel.instanceParams.observe { instanceData -> viewModel.instanceParams.observe { instanceData ->
maximumTootCharacters = instanceData.chatLimit maximumTootCharacters = instanceData.chatLimit
} }
viewModel.haveStickers.observe { haveStickers ->
if (haveStickers) {
stickerButton.visibility = View.VISIBLE
}
}
viewModel.instanceStickers.observe { stickers -> viewModel.instanceStickers.observe { stickers ->
if(stickers.isNotEmpty()) { if(stickers.isNotEmpty()) {
haveStickers = true haveStickers = true
@ -370,7 +381,13 @@ class ChatActivity: BottomSheetActivity(),
} }
viewModel.emoji.observe { setEmojiList(it) } viewModel.emoji.observe { setEmojiList(it) }
viewModel.media.observe { viewModel.media.observe {
if(it.isNotEmpty()) { val notHaveMedia = it.isEmpty()
enableSendButton()
enableButton(attachmentButton, notHaveMedia, notHaveMedia)
enableButton(stickerButton, haveStickers, haveStickers)
if(!it.isNotEmpty()) {
val media = it[0] val media = it[0]
when(media.type) { when(media.type) {
@ -462,7 +479,7 @@ class ChatActivity: BottomSheetActivity(),
emojiBehavior = BottomSheetBehavior.from(emojiView) emojiBehavior = BottomSheetBehavior.from(emojiView)
stickerBehavior = BottomSheetBehavior.from(stickerKeyboard) stickerBehavior = BottomSheetBehavior.from(stickerKeyboard)
sendButton.setOnClickListener { onSendClicked()} sendButton.setOnClickListener { onSendClicked() }
attachmentButton.setOnClickListener { openPickDialog() } attachmentButton.setOnClickListener { openPickDialog() }
emojiButton.setOnClickListener { showEmojis() } emojiButton.setOnClickListener { showEmojis() }
@ -491,7 +508,7 @@ class ChatActivity: BottomSheetActivity(),
private fun onSendClicked() { private fun onSendClicked() {
val media = viewModel.getSingleMedia() val media = viewModel.getSingleMedia()
serviceClient.sendChatMessage( MessageToSend( serviceClient.sendChatMessage(MessageToSend(
editText.text.toString(), editText.text.toString(),
media?.id, media?.id,
media?.uri?.toString(), media?.uri?.toString(),
@ -500,6 +517,9 @@ class ChatActivity: BottomSheetActivity(),
0 0
)) ))
sending = true
editText.text.clear()
viewModel.media.value = listOf()
enableButton(sendButton, false, false) enableButton(sendButton, false, false)
enableButton(attachmentButton, false, false) enableButton(attachmentButton, false, false)
enableButton(stickerButton, false, false) enableButton(stickerButton, false, false)
@ -655,8 +675,6 @@ class ChatActivity: BottomSheetActivity(),
} }
} }
displayTransientError(errorId) displayTransientError(errorId)
} else {
enableButton(attachmentButton, false, false)
} }
} }
} }

Loading…
Cancel
Save