From 4b5b46bb66bf74ef5edd65c55e186b02f3c56e5d Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Thu, 26 Apr 2012 18:01:13 +0900
Subject: [PATCH] Don't autocorrect after suggestion resuming

Bug: 6105732
Change-Id: I92e7a9c6d6eb648f747c3b396d7993479fd8478a
---
 .../src/com/android/inputmethod/latin/Suggest.java |  1 +
 .../android/inputmethod/latin/WordComposer.java    | 14 ++++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 7cbee4f714..112bde6a35 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -385,6 +385,7 @@ public class Suggest implements Dictionary.WordCallback {
         }
         // Don't auto-correct words with multiple capital letter
         autoCorrectionAvailable &= !wordComposer.isMostlyCaps();
+        autoCorrectionAvailable &= !wordComposer.isResumed();
         if (allowsToBeAutoCorrected && suggestionsList.size() > 1 && mAutoCorrectionThreshold > 0
                 && Suggest.shouldBlockAutoCorrectionBySafetyNet(typedWord,
                         suggestionsList.get(1).mWord)) {
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index bd8532ebdd..e27a546c5e 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -38,6 +38,7 @@ public class WordComposer {
     private int[] mYCoordinates;
     private StringBuilder mTypedWord;
     private CharSequence mAutoCorrection;
+    private boolean mIsResumed;
 
     // Cache these values for performance
     private int mCapsCount;
@@ -57,6 +58,7 @@ public class WordComposer {
         mYCoordinates = new int[N];
         mAutoCorrection = null;
         mTrailingSingleQuotesCount = 0;
+        mIsResumed = false;
         refreshSize();
     }
 
@@ -73,6 +75,7 @@ public class WordComposer {
         mIsFirstCharCapitalized = source.mIsFirstCharCapitalized;
         mAutoCapitalized = source.mAutoCapitalized;
         mTrailingSingleQuotesCount = source.mTrailingSingleQuotesCount;
+        mIsResumed = source.mIsResumed;
         refreshSize();
     }
 
@@ -85,6 +88,7 @@ public class WordComposer {
         mCapsCount = 0;
         mIsFirstCharCapitalized = false;
         mTrailingSingleQuotesCount = 0;
+        mIsResumed = false;
         refreshSize();
     }
 
@@ -193,6 +197,7 @@ public class WordComposer {
             int codePoint = Character.codePointAt(word, i);
             addKeyInfo(codePoint, keyboard);
         }
+        mIsResumed = true;
     }
 
     /**
@@ -299,6 +304,13 @@ public class WordComposer {
         return mAutoCorrection;
     }
 
+    /**
+     * @return whether we started composing this word by resuming suggestion on an existing string
+     */
+    public boolean isResumed() {
+        return mIsResumed;
+    }
+
     // `type' should be one of the LastComposedWord.COMMIT_TYPE_* constants above.
     public LastComposedWord commitWord(final int type, final String committedWord,
             final int separatorCode) {
@@ -320,6 +332,7 @@ public class WordComposer {
         mTypedWord.setLength(0);
         refreshSize();
         mAutoCorrection = null;
+        mIsResumed = false;
         return lastComposedWord;
     }
 
@@ -331,5 +344,6 @@ public class WordComposer {
         mTypedWord.append(lastComposedWord.mTypedWord);
         refreshSize();
         mAutoCorrection = null; // This will be filled by the next call to updateSuggestion.
+        mIsResumed = true;
     }
 }
-- 
GitLab