From 6558253160e2039c87f424bd814f402ecd31de3b Mon Sep 17 00:00:00 2001
From: Ken Wakasa <kwakasa@google.com>
Date: Wed, 4 Aug 2010 03:47:42 +0900
Subject: [PATCH] Fix a bug in backspace handling for the "Tap again to save"

bug: 2889273
Change-Id: I0f317e203f368f5f47738154a6dee0f556d56148
---
 .../inputmethod/latin/CandidateView.java      |  6 +++++
 .../android/inputmethod/latin/LatinIME.java   | 23 +++++++++++++++++--
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index 0c0373b3b7..9a7c35d4c9 100755
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -333,6 +333,12 @@ public class CandidateView extends View {
         mShowingAddToDictionary = true;
     }
 
+    public boolean dismissAddToDictionaryHint() {
+        if (!mShowingAddToDictionary) return false;
+        clear();
+        return true;
+    }
+
     public void scrollPrev() {
         int i = 0;
         final int count = mSuggestions.size();
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 299b6a650a..dc49fa58d4 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -913,6 +913,9 @@ public class LatinIME extends InputMethodService
 
     public boolean addWordToDictionary(String word) {
         mUserDictionary.addWord(word, 128);
+        // Suggestion strip should be updated after the operation of adding word to the
+        // user dictionary
+        postUpdateSuggestions();
         return true;
     }
 
@@ -1058,9 +1061,20 @@ public class LatinIME extends InputMethodService
         } else if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) {
             ic.deleteSurroundingText(mEnteredText.length(), 0);
         } else if (deleteChar) {
-            sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
-            if (mDeleteCount > DELETE_ACCELERATE_AT) {
+            if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
+                // Go back to the suggestion mode if the user canceled the
+                // "Tap again to save".
+                // NOTE: In gerenal, we don't revert the word when backspacing
+                // from a manual suggestion pick.  We deliberately chose a
+                // different behavior only in the case of picking the first
+                // suggestion (typed word).  It's intentional to have made this
+                // inconsistent with backspacing after selecting other suggestions.
+                revertLastWord(deleteChar);
+            } else {
                 sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
+                if (mDeleteCount > DELETE_ACCELERATE_AT) {
+                    sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL);
+                }
             }
         }
         mJustRevertedSeparator = null;
@@ -1136,6 +1150,11 @@ public class LatinIME extends InputMethodService
             mVoiceInput.incrementTextModificationInsertPunctuationCount(1);
         }
 
+        // Should dismiss the "Tap again to save" message when handling separator
+        if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) {
+            postUpdateSuggestions();
+        }
+
         boolean pickedDefault = false;
         // Handle separator
         InputConnection ic = getCurrentInputConnection();
-- 
GitLab