Skip to content
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@ sealed class HudCommand {
object CloseEmojiSearch : HudCommand()
data class EmojiInsert(val emoji: String?) : HudCommand()
data class EmojiKeyEvent(val keyEvent: KeyEvent?) : HudCommand()

// Request that the hosting MediaReviewFragment perform a send (same logic as the send button).
object PerformSend : HudCommand()
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.widget.TextView
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.viewModels
Expand All @@ -32,6 +34,7 @@ import org.thoughtcrime.securesms.conversation.ui.mentions.MentionsPickerViewMod
import org.thoughtcrime.securesms.databinding.V2MediaAddMessageDialogFragmentBinding
import org.thoughtcrime.securesms.keyboard.KeyboardPage
import org.thoughtcrime.securesms.keyboard.KeyboardPagerViewModel
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.mediasend.v2.HudCommand
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
Expand Down Expand Up @@ -74,6 +77,33 @@ class AddMessageDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_a

private val disposables = CompositeDisposable()

// When the user presses IME action SEND or Enter, request the MediaReviewFragment to perform send.
val sendEditorActionListener = TextView.OnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEND) {
viewModel.sendCommand(HudCommand.PerformSend)
dismissAllowingStateLoss()
true
} else {
false
}
}

// When the user presses IME action SEND or Enter, request the MediaReviewFragment to perform send.
val sendKeyListener = View.OnKeyListener { _, keyCode, keyEvent ->
if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
// Only treat Enter as send if the user enabled that preference, or Ctrl is pressed — match ConversationFragment.
if (SignalStore.settings.isEnterKeySends || keyEvent.isCtrlPressed) {
viewModel.sendCommand(HudCommand.PerformSend)
dismissAllowingStateLoss()
true
} else {
false
}
} else {
false
}
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val themeWrapper = ContextThemeWrapper(inflater.context, R.style.TextSecure_DarkTheme)
val themedInflater = LayoutInflater.from(themeWrapper)
Expand All @@ -96,6 +126,9 @@ class AddMessageDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_a
binding.content.addAMessageInput.addTextChangedListener { viewModel.setMessage(it) }
binding.content.addAMessageInput.filters += ByteLimitInputFilter(MessageUtil.MAX_TOTAL_BODY_SIZE_BYTES)

binding.content.addAMessageInput.setOnEditorActionListener(sendEditorActionListener)
binding.content.addAMessageInput.setOnKeyListener(sendKeyListener)

binding.content.emojiToggle.setOnClickListener { onEmojiToggleClicked() }
if (requireArguments().getBoolean(ARG_INITIAL_EMOJI_TOGGLE) && view is KeyboardAwareLinearLayout) {
view.addOnKeyboardShownListener(EmojiLaunchListener(view))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,16 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul
disposables += sharedViewModel.hudCommands.subscribe {
when (it) {
HudCommand.ResumeEntryTransition -> startPostponedEnterTransition()
HudCommand.PerformSend -> {
if (!readyToSend) {
Log.d(TAG, "Attachment send button not currently enabled. Ignoring PerformSend command.")
return@subscribe
}

Log.d(TAG, "Performing send from PerformSend HUD command.")
readyToSend = false
performSend()
}
else -> Unit
}
}
Expand Down