Merge "Cleaup gesture preview drawing code a bit" into jb-mr1-dev
diff --git a/java/res/values-en/whitelist.xml b/java/res/values-en/whitelist.xml
deleted file mode 100644
index 2620179..0000000
--- a/java/res/values-en/whitelist.xml
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!--
-        An entry of the whitelist word should be:
-        1. (int)frequency
-        2. (String)before
-        3. (String)after
-     -->
-    <string-array name="wordlist_whitelist" translatable="false">
-
-        <item>255</item>
-        <item>ill</item>
-        <item>I\'ll</item>
-
-        <!-- TODO: Trim down more entries by removing ones that get auto-corrected by the
-             Android keyboard's own typing error correction algorithms. -->
-
-        <item>255</item>
-        <item>acomodate</item>
-        <item>accommodate</item>
-
-        <item>255</item>
-        <item>aint</item>
-        <item>ain\'t</item>
-
-        <item>255</item>
-        <item>alot</item>
-        <item>a lot</item>
-
-        <item>255</item>
-        <item>andteh</item>
-        <item>and the</item>
-
-        <item>255</item>
-        <item>arent</item>
-        <item>aren\'t</item>
-
-        <item>255</item>
-        <item>bot</item>
-        <item>not</item>
-
-        <item>255</item>
-        <item>bern</item>
-        <item>been</item>
-
-        <item>255</item>
-        <item>bot</item>
-        <item>not</item>
-
-        <item>255</item>
-        <item>bur</item>
-        <item>but</item>
-
-        <item>255</item>
-        <item>cam</item>
-        <item>can</item>
-
-        <item>255</item>
-        <item>cant</item>
-        <item>can\'t</item>
-
-        <item>255</item>
-        <item>dame</item>
-        <item>same</item>
-
-        <item>255</item>
-        <item>didint</item>
-        <item>didn\'t</item>
-
-        <item>255</item>
-        <item>dormer</item>
-        <item>former</item>
-
-        <item>255</item>
-        <item>dud</item>
-        <item>did</item>
-
-        <item>255</item>
-        <item>fay</item>
-        <item>day</item>
-
-        <item>255</item>
-        <item>fife</item>
-        <item>five</item>
-
-        <item>255</item>
-        <item>foo</item>
-        <item>for</item>
-
-        <item>255</item>
-        <item>fora</item>
-        <item>for a</item>
-
-        <item>255</item>
-        <item>galled</item>
-        <item>called</item>
-
-        <item>255</item>
-        <item>goo</item>
-        <item>too</item>
-
-        <item>255</item>
-        <item>hed</item>
-        <item>he\'d</item>
-
-        <item>255</item>
-        <item>hel</item>
-        <item>he\'ll</item>
-
-        <item>255</item>
-        <item>heres</item>
-        <item>here\'s</item>
-
-        <item>255</item>
-        <item>hew</item>
-        <item>new</item>
-
-        <item>255</item>
-        <item>hoe</item>
-        <item>how</item>
-
-        <item>255</item>
-        <item>hoes</item>
-        <item>how\'s</item>
-
-        <item>255</item>
-        <item>howd</item>
-        <item>how\'d</item>
-
-        <item>255</item>
-        <item>howll</item>
-        <item>how\'ll</item>
-
-        <item>255</item>
-        <item>hows</item>
-        <item>how\'s</item>
-
-        <item>255</item>
-        <item>howve</item>
-        <item>how\'ve</item>
-
-        <item>255</item>
-        <item>hum</item>
-        <item>him</item>
-
-        <item>255</item>
-        <item>i</item>
-        <item>I</item>
-
-        <item>255</item>
-        <item>ifs</item>
-        <item>its</item>
-
-        <item>255</item>
-        <item>il</item>
-        <item>I\'ll</item>
-
-        <item>255</item>
-        <item>im</item>
-        <item>I\'m</item>
-
-        <item>255</item>
-        <item>inteh</item>
-        <item>in the</item>
-
-        <item>255</item>
-        <item>itd</item>
-        <item>it\'d</item>
-
-        <item>255</item>
-        <item>itsa</item>
-        <item>it\'s a</item>
-
-        <item>255</item>
-        <item>lets</item>
-        <item>let\'s</item>
-
-        <item>255</item>
-        <item>maam</item>
-        <item>ma\'am</item>
-
-        <item>255</item>
-        <item>manu</item>
-        <item>many</item>
-
-        <item>255</item>
-        <item>mare</item>
-        <item>made</item>
-
-        <item>255</item>
-        <item>mew</item>
-        <item>new</item>
-
-        <item>255</item>
-        <item>mire</item>
-        <item>more</item>
-
-        <item>255</item>
-        <item>moat</item>
-        <item>most</item>
-
-        <item>255</item>
-        <item>mot</item>
-        <item>not</item>
-
-        <item>255</item>
-        <item>mote</item>
-        <item>note</item>
-
-        <item>255</item>
-        <item>motes</item>
-        <item>notes</item>
-
-        <item>255</item>
-        <item>mow</item>
-        <item>now</item>
-
-        <item>255</item>
-        <item>namer</item>
-        <item>named</item>
-
-        <item>255</item>
-        <item>nave</item>
-        <item>have</item>
-
-        <item>255</item>
-        <item>nee</item>
-        <item>new</item>
-
-        <item>255</item>
-        <item>nigh</item>
-        <item>high</item>
-
-        <item>255</item>
-        <item>nit</item>
-        <item>not</item>
-
-        <item>255</item>
-        <item>oft</item>
-        <item>off</item>
-
-        <item>255</item>
-        <item>os</item>
-        <item>is</item>
-
-        <item>255</item>
-        <item>pater</item>
-        <item>later</item>
-
-        <item>255</item>
-        <item>rook</item>
-        <item>took</item>
-
-        <item>255</item>
-        <item>shel</item>
-        <item>she\'ll</item>
-
-        <item>255</item>
-        <item>shouldent</item>
-        <item>shouldn\'t</item>
-
-        <item>255</item>
-        <item>sill</item>
-        <item>will</item>
-
-        <item>255</item>
-        <item>sown</item>
-        <item>down</item>
-
-        <item>255</item>
-        <item>thatd</item>
-        <item>that\'d</item>
-
-        <item>255</item>
-        <item>tine</item>
-        <item>time</item>
-
-        <item>255</item>
-        <item>thong</item>
-        <item>thing</item>
-
-        <item>255</item>
-        <item>tome</item>
-        <item>time</item>
-
-        <!-- through additional proximity, 'uf' becomes 'of'. 'o' is not next to 'u' so anyone
-             typing 'uf' probably meant 'if', but 'of' is much more common and should be left
-             higher than 'if', hence the need for this entry. -->
-        <item>255</item>
-        <item>uf</item>
-        <item>if</item>
-
-        <!-- 'un' becomes 'UN' because of perfect match ; even if we remove 'UN', then 'un'
-             will become 'on' for the same reason as above. So list this here. -->
-        <item>255</item>
-        <item>un</item>
-        <item>in</item>
-
-        <!-- does it really make any sense to have the following here? -->
-        <item>255</item>
-        <item>UnitedStates</item>
-        <item>United States</item>
-
-        <item>255</item>
-        <item>unitedstates</item>
-        <item>United States</item>
-
-        <item>255</item>
-        <item>visavis</item>
-        <item>vis-a-vis</item>
-
-        <item>255</item>
-        <item>wierd</item>
-        <item>weird</item>
-
-        <item>255</item>
-        <item>wel</item>
-        <item>we\'ll</item>
-
-        <item>255</item>
-        <item>wer</item>
-        <item>we\'re</item>
-
-        <item>255</item>
-        <item>whatd</item>
-        <item>what\'d</item>
-
-        <item>255</item>
-        <item>whatm</item>
-        <item>what\'m</item>
-
-        <item>255</item>
-        <item>whatre</item>
-        <item>what\'re</item>
-
-        <item>255</item>
-        <item>whats</item>
-        <item>what\'s</item>
-
-        <item>255</item>
-        <item>whens</item>
-        <item>when\'s</item>
-
-        <item>255</item>
-        <item>whered</item>
-        <item>where\'d</item>
-
-        <item>255</item>
-        <item>wherell</item>
-        <item>where\'ll</item>
-
-        <item>255</item>
-        <item>wheres</item>
-        <item>where\'s</item>
-
-        <item>255</item>
-        <item>wholl</item>
-        <item>who\'ll</item>
-
-        <item>255</item>
-        <item>whove</item>
-        <item>who\'ve</item>
-
-        <item>255</item>
-        <item>whyd</item>
-        <item>why\'d</item>
-
-        <item>255</item>
-        <item>whyll</item>
-        <item>why\'ll</item>
-
-        <item>255</item>
-        <item>whys</item>
-        <item>why\'s</item>
-
-        <item>255</item>
-        <item>whyve</item>
-        <item>why\'ve</item>
-
-        <item>255</item>
-        <item>wont</item>
-        <item>won\'t</item>
-
-        <item>255</item>
-        <item>yall</item>
-        <item>y\'all</item>
-
-        <item>255</item>
-        <item>youd</item>
-        <item>you\'d</item>
-
-    </string-array>
-</resources>
diff --git a/java/res/values/whitelist.xml b/java/res/values/whitelist.xml
deleted file mode 100644
index d4ecbfa..0000000
--- a/java/res/values/whitelist.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2011, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-**     http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!--
-        An entry of the whitelist word should be:
-        1. (int)frequency
-        2. (String)before
-        3. (String)after
-     -->
-    <string-array name="wordlist_whitelist">
-    </string-array>
-</resources>
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 726c44c..2d9e0ce 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -64,18 +64,21 @@
 
     private final SparseArray<DicTraverseSession> mDicTraverseSessions =
             new SparseArray<DicTraverseSession>();
+
+    // TODO: There should be a way to remove used DicTraverseSession objects from
+    // {@code mDicTraverseSessions}.
     private DicTraverseSession getTraverseSession(int traverseSessionId) {
-        DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId);
-        if (traverseSession == null) {
-            synchronized(mDicTraverseSessions) {
+        synchronized(mDicTraverseSessions) {
+            DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId);
+            if (traverseSession == null) {
                 traverseSession = mDicTraverseSessions.get(traverseSessionId);
                 if (traverseSession == null) {
                     traverseSession = new DicTraverseSession(mLocale, mNativeDict);
                     mDicTraverseSessions.put(traverseSessionId, traverseSession);
                 }
             }
+            return traverseSession;
         }
-        return traverseSession;
     }
 
     /**
@@ -209,18 +212,20 @@
     }
 
     @Override
-    public synchronized void close() {
-        for (int i = 0; i < mDicTraverseSessions.size(); ++i) {
-            final int key = mDicTraverseSessions.keyAt(i);
-            final DicTraverseSession traverseSession = mDicTraverseSessions.get(key);
-            if (traverseSession != null) {
-                traverseSession.close();
+    public void close() {
+        synchronized (mDicTraverseSessions) {
+            final int sessionsSize = mDicTraverseSessions.size();
+            for (int index = 0; index < sessionsSize; ++index) {
+                final DicTraverseSession traverseSession = mDicTraverseSessions.valueAt(index);
+                if (traverseSession != null) {
+                    traverseSession.close();
+                }
             }
         }
         closeInternal();
     }
 
-    private void closeInternal() {
+    private synchronized void closeInternal() {
         if (mNativeDict != 0) {
             closeNative(mNativeDict);
             mNativeDict = 0;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index c20f3a3..a7896ad 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1696,6 +1696,7 @@
 
         Utils.Stats.onSeparator((char)primaryCode, x, y);
 
+        mHandler.postUpdateShiftState();
         return didAutoCorrect;
     }