aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/latin')
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java7
-rw-r--r--java/src/com/android/inputmethod/latin/WordComposer.java29
-rw-r--r--java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java2
3 files changed, 14 insertions, 24 deletions
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 9877dc853..6985d9a84 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;
import android.text.TextUtils;
+import com.android.inputmethod.event.Event;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.define.ProductionFlag;
@@ -104,7 +105,11 @@ public final class Suggest {
if (trailingSingleQuotesCount > 0) {
wordComposerForLookup = new WordComposer(wordComposer);
for (int i = trailingSingleQuotesCount - 1; i >= 0; --i) {
- wordComposerForLookup.deleteLast();
+ // TODO: do not create a fake event for this. Ideally the word composer should know
+ // how to give out the word without trailing quotes and we can remove this entirely
+ wordComposerForLookup.deleteLast(Event.createSoftwareKeypressEvent(
+ Event.NOT_A_CODE_POINT, Constants.CODE_DELETE,
+ Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE));
}
} else {
wordComposerForLookup = wordComposer;
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index a60ca3d41..a955f375b 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -314,29 +314,14 @@ public final class WordComposer {
}
/**
- * Delete the last keystroke as a result of hitting backspace.
+ * Delete the last composing unit as a result of hitting backspace.
*/
- public void deleteLast() {
- final int size = size();
- if (size > 0) {
- // Note: mTypedWord.length() and mCodes.length differ when there are surrogate pairs
- final int stringBuilderLength = mTypedWord.length();
- if (stringBuilderLength < size) {
- throw new RuntimeException(
- "In WordComposer: mCodes and mTypedWords have non-matching lengths");
- }
- final int lastChar = mTypedWord.codePointBefore(stringBuilderLength);
- // TODO: with events and composition, this is absolutely not necessarily true.
- mEvents.remove(mEvents.size() - 1);
- if (Character.isSupplementaryCodePoint(lastChar)) {
- mTypedWord.delete(stringBuilderLength - 2, stringBuilderLength);
- } else {
- mTypedWord.deleteCharAt(stringBuilderLength - 1);
- }
- if (Character.isUpperCase(lastChar)) mCapsCount--;
- if (Character.isDigit(lastChar)) mDigitsCount--;
- refreshSize();
- }
+ public void deleteLast(final Event event) {
+ mCombinerChain.processEvent(mEvents, event);
+ mTypedWord.replace(0, mTypedWord.length(),
+ mCombinerChain.getComposingWordWithCombiningFeedback().toString());
+ mEvents.add(event);
+ refreshSize();
// We may have deleted the last one.
if (0 == size()) {
mIsFirstCharCapitalized = false;
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index ffa5e8e89..3a59be198 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -908,7 +908,7 @@ public final class InputLogic {
mWordComposer.reset();
mWordComposer.setRejectedBatchModeSuggestion(rejectedSuggestion);
} else {
- mWordComposer.deleteLast();
+ mWordComposer.deleteLast(inputTransaction.mEvent);
}
mConnection.setComposingText(getTextWithUnderline(mWordComposer.getTypedWord()), 1);
handler.postUpdateSuggestionStrip();