diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java index 30f2e70790def030b4c7fe424c55689dc68d4efe..b9036b6df9181d6909f2a261f7e9c00b6f1d4422 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java @@ -28,6 +28,7 @@ import static android.content.Context.LAYOUT_INFLATER_SERVICE; import static android.view.KeyEvent.KEYCODE_ENTER; import static android.view.inputmethod.EditorInfo.IME_ACTION_SEND; import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT; +import static java.lang.Character.isWhitespace; import static java.util.Objects.requireNonNull; import static org.briarproject.bramble.util.StringUtils.utf8IsTooLong; @@ -125,19 +126,31 @@ public class EmojiTextInputView extends KeyboardAwareLinearLayout implements @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - // Need to start at position 0 to change empty - if (start != 0 || emptyTextAllowed || listener == null) return; - if (s.length() == 0) { - if (!isEmpty) { + if (emptyTextAllowed || listener == null) return; + // Work out whether the trimmed text has become empty or non-empty + if (isEmpty) { + // We only need to check the characters that were added + if (countLeadingWhitespace(s, start, count) < count) { + isEmpty = false; + listener.onTextIsEmptyChanged(false); + } + } else if (before > 0) { + // Characters have been removed or replaced - check from the start + int length = s.length(); + if (countLeadingWhitespace(s, 0, length) == length) { isEmpty = true; listener.onTextIsEmptyChanged(true); } - } else if (isEmpty) { - isEmpty = false; - listener.onTextIsEmptyChanged(false); } } + private int countLeadingWhitespace(CharSequence s, int off, int len) { + for (int i = 0; i < len; i++) { + if (!isWhitespace(s.charAt(off + i))) return i; + } + return len; + } + @Override public void afterTextChanged(Editable s) { } @@ -242,6 +255,7 @@ public class EmojiTextInputView extends KeyboardAwareLinearLayout implements interface TextInputListener { void onTextIsEmptyChanged(boolean isEmpty); + void onSendEvent(); }