From 231cacd08075e88a2bcdf25f025206de524e880b Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Sun, 14 Mar 2010 22:53:16 -0700 Subject: [PATCH] Fix occasional correction errors in suggesting obvious corrections. Bug: 2513996 The array of adjacent letters did not have the primary code in the first position. Swap the codes around to make the primary the first one. Change-Id: Id753254c88d440d3d76dbc048d123dfc78edf58d --- .../android/inputmethod/latin/WordComposer.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java index e97cb24ba..8d8e35197 100644 --- a/java/src/com/android/inputmethod/latin/WordComposer.java +++ b/java/src/com/android/inputmethod/latin/WordComposer.java @@ -84,10 +84,26 @@ public class WordComposer { */ public void add(int primaryCode, int[] codes) { mTypedWord.append((char) primaryCode); + correctPrimaryJuxtapos(primaryCode, codes); mCodes.add(codes); if (Character.isUpperCase((char) primaryCode)) mCapsCount++; } + /** + * Swaps the first and second values in the codes array if the primary code is not the first + * value in the array but the second. This happens when the preferred key is not the key that + * the user released the finger on. + * @param primaryCode the preferred character + * @param codes array of codes based on distance from touch point + */ + private void correctPrimaryJuxtapos(int primaryCode, int[] codes) { + if (codes.length < 2) return; + if (codes[0] > 0 && codes[1] > 0 && codes[0] != primaryCode && codes[1] == primaryCode) { + codes[1] = codes[0]; + codes[0] = primaryCode; + } + } + /** * Delete the last keystroke as a result of hitting backspace. */