Merge "Move debug information back to suggestions strip"
diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
index 4929dd9..5c54fa5 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
@@ -53,7 +53,8 @@
     public static CharSequence getTextWithSuggestionSpan(Context context,
             CharSequence pickedWord, SuggestedWords suggestedWords) {
         if (TextUtils.isEmpty(pickedWord) || CONSTRUCTOR_SuggestionSpan == null
-                || suggestedWords == null || suggestedWords.size() == 0) {
+                || suggestedWords == null || suggestedWords.size() == 0
+                || suggestedWords.getInfo(0).isObsoleteSuggestedWord()) {
             return pickedWord;
         }
 
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index cf88529..f445abf 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -367,7 +367,7 @@
 
             final SuggestedWordInfo info = (pos < suggestions.size())
                     ? suggestions.getInfo(pos) : null;
-            if (info != null && info.isPreviousSuggestedWord()) {
+            if (info != null && info.isObsoleteSuggestedWord()) {
                 return applyAlpha(color, 0.5f);
             } else {
                 return color;
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index c1c46fa..b177d14 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -199,7 +199,7 @@
             }
         }
 
-        public boolean isPreviousSuggestedWord () {
+        public boolean isObsoleteSuggestedWord () {
             return mPreviousSuggestedWord;
         }
     }
diff --git a/native/src/correction.cpp b/native/src/correction.cpp
index ce4a869..5a0e608 100644
--- a/native/src/correction.cpp
+++ b/native/src/correction.cpp
@@ -490,7 +490,7 @@
             const uint16_t cost = (ci == co) ? 0 : 1;
             dp[(i + 1) * lo + (j + 1)] = min(dp[i * lo + (j + 1)] + 1,
                     min(dp[(i + 1) * lo + j] + 1, dp[i * lo + j] + cost));
-            if (ci == Dictionary::toBaseLowerCase(output[j - 1])
+            if (i > 0 && j > 0 && ci == Dictionary::toBaseLowerCase(output[j - 1])
                     && co == Dictionary::toBaseLowerCase(input[i - 1])) {
                 dp[(i + 1) * lo + (j + 1)] = min(
                         dp[(i + 1) * lo + (j + 1)], dp[(i - 1) * lo + (j - 1)] + cost);