Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.text.TextWatcher
import android.util.Log
import android.util.TypedValue
import android.view.Gravity
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.MotionEvent
Expand Down Expand Up @@ -113,6 +114,8 @@ class MessageInputFragment : Fragment() {
@Inject
lateinit var dateUtils: DateUtils

private enum class KeyboardSendTarget { NONE, EDIT, THREAD, SEND }

private val messageInputViewModel: MessageInputViewModel by activityViewModels()
lateinit var binding: FragmentMessageInputBinding
private lateinit var conversationInternalId: String
Expand Down Expand Up @@ -511,6 +514,33 @@ class MessageInputFragment : Fragment() {
submitMessage(false)
}

binding.fragmentMessageInputView.inputEditText.setOnKeyListener { _, keyCode, event ->
val target = resolveKeyboardSendTarget(
keyCode = keyCode,
action = event.action,
isCtrlPressed = event.isCtrlPressed,
isEditButtonVisible = binding.fragmentEditView.editMessageView.isVisible,
isThreadButtonVisible = binding.fragmentMessageInputView.submitThreadButton.isVisible,
isThreadButtonEnabled = binding.fragmentMessageInputView.submitThreadButton.isEnabled,
isSendButtonVisible = binding.fragmentMessageInputView.messageSendButton.isVisible
)
when (target) {
KeyboardSendTarget.EDIT -> {
binding.fragmentMessageInputView.editMessageButton.performClick()
true
}
KeyboardSendTarget.THREAD -> {
binding.fragmentMessageInputView.submitThreadButton.performClick()
true
}
KeyboardSendTarget.SEND -> {
binding.fragmentMessageInputView.button.performClick()
true
}
KeyboardSendTarget.NONE -> false
}
}

binding.fragmentMessageInputView.editMessageButton.setOnClickListener {
val editable = binding.fragmentMessageInputView.inputEditText!!.editableText
replaceMentionChipSpans(editable)
Expand Down Expand Up @@ -1267,6 +1297,31 @@ class MessageInputFragment : Fragment() {
return isChannel && permissions?.hasChatPermission() == false && permissions.hasReactPermission() == true
}

private fun resolveKeyboardSendTarget(
keyCode: Int,
action: Int,
isCtrlPressed: Boolean,
isEditButtonVisible: Boolean,
isThreadButtonVisible: Boolean,
isThreadButtonEnabled: Boolean,
isSendButtonVisible: Boolean
): KeyboardSendTarget {
val isSendChord = action == KeyEvent.ACTION_DOWN &&
isCtrlPressed &&
(keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER)

if (!isSendChord) {
return KeyboardSendTarget.NONE
}

return when {
isEditButtonVisible -> KeyboardSendTarget.EDIT
isThreadButtonVisible && isThreadButtonEnabled -> KeyboardSendTarget.THREAD
isSendButtonVisible -> KeyboardSendTarget.SEND
else -> KeyboardSendTarget.NONE
}
}

companion object {
fun newInstance() = MessageInputFragment()
private val TAG: String = MessageInputFragment::class.java.simpleName
Expand Down
Loading