diff options
| author | 2016-04-13 05:14:24 +0000 | |
|---|---|---|
| committer | 2016-04-13 05:14:25 +0000 | |
| commit | 363a2884c99714547e684b42c59d9ff5de49851f (patch) | |
| tree | 19fd5ab6fc1dc4735c79920935cf9e6df1f90ef5 | |
| parent | aceda5b93a01a93c88fc37334ca03b2bb74c71e9 (diff) | |
| parent | 4d19160ef18779502cf0559f9cc0db184f7fbc21 (diff) | |
Merge "Delete CR LF at the same time with one backspace key." into nyc-dev
| -rw-r--r-- | core/java/android/text/method/BaseKeyListener.java | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/core/java/android/text/method/BaseKeyListener.java b/core/java/android/text/method/BaseKeyListener.java index 3564e11f5b13..e93e58da20d6 100644 --- a/core/java/android/text/method/BaseKeyListener.java +++ b/core/java/android/text/method/BaseKeyListener.java @@ -48,6 +48,9 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener implements KeyListener { /* package */ static final Object OLD_SEL_START = new NoCopySpan.Concrete(); + private static final int LINE_FEED = 0x0A; + private static final int CARRIAGE_RETURN = 0x0D; + private final Object mLock = new Object(); @GuardedBy("mLock") @@ -110,34 +113,37 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener // Initial state final int STATE_START = 0; + // The offset is immediately before line feed. + final int STATE_LF = 1; + // The offset is immediately before a KEYCAP. - final int STATE_BEFORE_KEYCAP = 1; + final int STATE_BEFORE_KEYCAP = 2; // The offset is immediately before a variation selector and a KEYCAP. - final int STATE_BEFORE_VS_AND_KEYCAP = 2; + final int STATE_BEFORE_VS_AND_KEYCAP = 3; // The offset is immediately before an emoji modifier. - final int STATE_BEFORE_EMOJI_MODIFIER = 3; + final int STATE_BEFORE_EMOJI_MODIFIER = 4; // The offset is immediately before a variation selector and an emoji modifier. - final int STATE_BEFORE_VS_AND_EMOJI_MODIFIER = 4; + final int STATE_BEFORE_VS_AND_EMOJI_MODIFIER = 5; // The offset is immediately before a variation selector. - final int STATE_BEFORE_VS = 5; + final int STATE_BEFORE_VS = 6; // The offset is immediately before a ZWJ emoji. - final int STATE_BEFORE_ZWJ_EMOJI = 6; + final int STATE_BEFORE_ZWJ_EMOJI = 7; // The offset is immediately before a ZWJ that were seen before a ZWJ emoji. - final int STATE_BEFORE_ZWJ = 7; + final int STATE_BEFORE_ZWJ = 8; // The offset is immediately before a variation selector and a ZWJ that were seen before a // ZWJ emoji. - final int STATE_BEFORE_VS_AND_ZWJ = 8; + final int STATE_BEFORE_VS_AND_ZWJ = 9; // The number of following RIS code points is odd. - final int STATE_ODD_NUMBERED_RIS = 9; + final int STATE_ODD_NUMBERED_RIS = 10; // The number of following RIS code points is even. - final int STATE_EVEN_NUMBERED_RIS = 10; + final int STATE_EVEN_NUMBERED_RIS = 11; // The state machine has been stopped. - final int STATE_FINISHED = 11; + final int STATE_FINISHED = 12; int deleteCharCount = 0; // Char count to be deleted by backspace. int lastSeenVSCharCount = 0; // Char count of previous variation selector. @@ -152,7 +158,9 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener switch (state) { case STATE_START: deleteCharCount = Character.charCount(codePoint); - if (isVariationSelector(codePoint)) { + if (codePoint == LINE_FEED) { + state = STATE_LF; + } else if (isVariationSelector(codePoint)) { state = STATE_BEFORE_VS; } else if (Emoji.isZwjEmoji(codePoint)) { state = STATE_BEFORE_ZWJ_EMOJI; @@ -166,6 +174,11 @@ public abstract class BaseKeyListener extends MetaKeyKeyListener state = STATE_FINISHED; } break; + case STATE_LF: + if (codePoint == CARRIAGE_RETURN) { + ++deleteCharCount; + } + state = STATE_FINISHED; case STATE_ODD_NUMBERED_RIS: if (Emoji.isRegionalIndicatorSymbol(codePoint)) { deleteCharCount += 2; /* Char count of RIS */ |