Merge "Slightly reluctant to scroll candidate strip to be able to easily choose the suggestion"
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 51fb9d8..783805e 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -82,6 +82,7 @@
static final boolean TRACE = false;
static final boolean VOICE_INSTALLED = true;
static final boolean ENABLE_VOICE_BUTTON = true;
+ private static final boolean MODIFY_TEXT_FOR_CORRECTION = false;
private static final String PREF_VIBRATE_ON = "vibrate_on";
private static final String PREF_SOUND_ON = "sound_on";
@@ -1604,7 +1605,7 @@
if (mBestWord != null && mBestWord.length() > 0) {
TextEntryState.acceptedDefault(mWord.getTypedWord(), mBestWord);
mJustAccepted = true;
- pickSuggestion(mBestWord);
+ pickSuggestion(mBestWord, false);
// Add the word to the auto dictionary if it's not a known word
checkAddToDictionary(mBestWord, AutoDictionary.FREQUENCY_FOR_TYPED);
}
@@ -1650,7 +1651,7 @@
return;
}
mJustAccepted = true;
- pickSuggestion(suggestion);
+ pickSuggestion(suggestion, correcting);
// Add the word to the auto dictionary if it's not a known word
if (index == 0) {
checkAddToDictionary(suggestion, AutoDictionary.FREQUENCY_FOR_PICKED);
@@ -1696,7 +1697,15 @@
// TODO: implement rememberReplacedWord for typed words
}
- private void pickSuggestion(CharSequence suggestion) {
+ /**
+ * Commits the chosen word to the text field and saves it for later
+ * retrieval.
+ * @param suggestion the suggestion picked by the user to be committed to
+ * the text field
+ * @param correcting whether this is due to a correction of an existing
+ * word.
+ */
+ private void pickSuggestion(CharSequence suggestion, boolean correcting) {
if (mCapsLock) {
suggestion = suggestion.toString().toUpperCase();
} else if (preferCapitalization()
@@ -1707,9 +1716,17 @@
InputConnection ic = getCurrentInputConnection();
if (ic != null) {
rememberReplacedWord(suggestion);
- if (!VoiceInput.DELETE_SYMBOL.equals(suggestion)) {
- ic.commitText(suggestion, 1);
+ // If text is in correction mode and we're not using composing
+ // text to underline, then the word at the cursor position needs
+ // to be removed before committing the correction
+ if (correcting && !MODIFY_TEXT_FOR_CORRECTION) {
+ if (mLastSelectionStart < mLastSelectionEnd) {
+ ic.setSelection(mLastSelectionStart, mLastSelectionStart);
+ }
+ EditingUtil.deleteWordAtCursor(ic, getWordSeparators());
}
+
+ ic.commitText(suggestion, 1);
}
saveWordInHistory(suggestion);
mPredicting = false;
@@ -1828,9 +1845,11 @@
private void underlineWord(CharSequence word, int left, int right) {
InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
- ic.finishComposingText();
- ic.deleteSurroundingText(left, right);
- ic.setComposingText(word, 1);
+ if (MODIFY_TEXT_FOR_CORRECTION) {
+ ic.finishComposingText();
+ ic.deleteSurroundingText(left, right);
+ ic.setComposingText(word, 1);
+ }
ic.setSelection(mLastSelectionStart, mLastSelectionStart);
}
diff --git a/native/Android.mk b/native/Android.mk
index b294469..6bad9d6 100644
--- a/native/Android.mk
+++ b/native/Android.mk
@@ -8,8 +8,13 @@
src/dictionary.cpp \
src/char_utils.cpp
-LOCAL_NDK_VERSION := 4
-LOCAL_SDK_VERSION := 8
+# NDK does not support sim build.
+ifneq ($(TARGET_SIMULATOR),true)
+ LOCAL_NDK_VERSION := 4
+ LOCAL_SDK_VERSION := 8
+else
+ LOCAL_C_INCLUDES += $(JNI_H_INCLUDE)
+endif
LOCAL_MODULE := libjni_latinime