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