diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
index bf83a61dcc2c925e4d11580d1e2364fe107093d1..06bd583e69bf2febdcb3d9c3c300830cde29e147 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
 import static android.content.Context.INPUT_METHOD_SERVICE;
 import static android.content.Context.LAYOUT_INFLATER_SERVICE;
 import static android.view.KeyEvent.KEYCODE_BACK;
+import static android.view.KeyEvent.KEYCODE_ENTER;
 import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT;
 
 @UiThread
@@ -82,16 +83,22 @@ public class TextInputView extends KeyboardAwareLinearLayout
 				hideEmojiDrawer();
 				return true;
 			}
-			return false;
-		});
-		ui.sendButton.setOnClickListener(v -> {
-			if (listener != null) {
-				listener.onSendClick(ui.editText.getText().toString());
+			if (keyCode == KEYCODE_ENTER && event.isCtrlPressed()) {
+				trySendMessage();
+				return true;
 			}
+			return false;
 		});
+		ui.sendButton.setOnClickListener(v -> trySendMessage());
 		ui.emojiDrawer.setEmojiEventListener(this);
 	}
 
+	private void trySendMessage() {
+		if (listener != null) {
+			listener.onSendClick(ui.editText.getText().toString());
+		}
+	}
+
 	@Override
 	public void setVisibility(int visibility) {
 		if (visibility == GONE && isKeyboardOpen()) {