merge in jb-mr1.1-release history after reset to jb-mr1.1-dev
diff --git a/dictionaries/de_wordlist.xml.gz b/dictionaries/de_wordlist.xml.gz
index a4267b3..f193ed2 100644
--- a/dictionaries/de_wordlist.xml.gz
+++ b/dictionaries/de_wordlist.xml.gz
Binary files differ
diff --git a/dictionaries/en_gb_wordlist.xml.gz b/dictionaries/en_gb_wordlist.xml.gz
index 274424c..f955186 100644
--- a/dictionaries/en_gb_wordlist.xml.gz
+++ b/dictionaries/en_gb_wordlist.xml.gz
Binary files differ
diff --git a/dictionaries/en_wordlist.xml.gz b/dictionaries/en_wordlist.xml.gz
index 6e57f42..d5c5b8a 100644
--- a/dictionaries/en_wordlist.xml.gz
+++ b/dictionaries/en_wordlist.xml.gz
Binary files differ
diff --git a/dictionaries/fr_wordlist.xml.gz b/dictionaries/fr_wordlist.xml.gz
index 3134a04..5f8a5eb 100644
--- a/dictionaries/fr_wordlist.xml.gz
+++ b/dictionaries/fr_wordlist.xml.gz
Binary files differ
diff --git a/dictionaries/ru_wordlist.xml.gz b/dictionaries/ru_wordlist.xml.gz
index 877f060..020fe68 100644
--- a/dictionaries/ru_wordlist.xml.gz
+++ b/dictionaries/ru_wordlist.xml.gz
Binary files differ
diff --git a/java/res/raw/main_de.dict b/java/res/raw/main_de.dict
index 6122cd3..59df8b8 100644
--- a/java/res/raw/main_de.dict
+++ b/java/res/raw/main_de.dict
Binary files differ
diff --git a/java/res/raw/main_en.dict b/java/res/raw/main_en.dict
index de1170a..85ee809 100644
--- a/java/res/raw/main_en.dict
+++ b/java/res/raw/main_en.dict
Binary files differ
diff --git a/java/res/raw/main_es.dict b/java/res/raw/main_es.dict
index 7a4daf1..cb17926 100644
--- a/java/res/raw/main_es.dict
+++ b/java/res/raw/main_es.dict
Binary files differ
diff --git a/java/res/raw/main_fr.dict b/java/res/raw/main_fr.dict
index c607d0e..53fd8d1 100644
--- a/java/res/raw/main_fr.dict
+++ b/java/res/raw/main_fr.dict
Binary files differ
diff --git a/java/res/raw/main_it.dict b/java/res/raw/main_it.dict
index b93a55c..59b78d6 100644
--- a/java/res/raw/main_it.dict
+++ b/java/res/raw/main_it.dict
Binary files differ
diff --git a/java/res/raw/main_pt_br.dict b/java/res/raw/main_pt_br.dict
index 66ac3f9..2a8af6f 100644
--- a/java/res/raw/main_pt_br.dict
+++ b/java/res/raw/main_pt_br.dict
Binary files differ
diff --git a/java/res/raw/main_ru.dict b/java/res/raw/main_ru.dict
index 050b0b8..1cddb05 100644
--- a/java/res/raw/main_ru.dict
+++ b/java/res/raw/main_ru.dict
Binary files differ
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index 5e111fb..631e647 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -487,6 +487,11 @@
                     // After chording input while normal state.
                     setShifted(UNSHIFT);
                 }
+                // After chording input, automatic shift state may have been changed depending on
+                // what characters were input.
+                mShiftKeyState.onRelease();
+                mSwitchActions.requestUpdatingShiftState();
+                return;
             } else if (mAlphabetShiftState.isShiftLockShifted() && withSliding) {
                 // In shift locked state, shift has been pressed and slid out to other key.
                 setShiftLocked(true);
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
index f5ad723..053bcb5 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -50,7 +50,7 @@
         pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
         // Press/release symbol letter key.
         chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
-        // Release "123?" key, switch back to alphabet shift unshifted.
+        // Release "123?" key, switch back to alphabet unshifted.
         releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
     }
 
@@ -330,7 +330,7 @@
         releaseKey('X', ALPHABET_MANUAL_SHIFTED);
         // Release 'Z' key
         releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
-        // Release shift key.
+        // Release shift key, switch back to alphabet shifted.
         releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
     }
 
@@ -351,8 +351,24 @@
         releaseKey('X', ALPHABET_MANUAL_SHIFTED);
         // Release 'Z' key
         releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
-        // Release shift key.
+        // Release shift key, updated to alphabet unshifted.
         releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+
+        // Update shift state with auto caps enabled.
+        pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+        // Press shift key and hold, switch to alphabet shifted.
+        pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+        // Press 'X' key and hold
+        chordingPressKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Release 'X' key
+        releaseKey('X', ALPHABET_MANUAL_SHIFTED);
+        // Press  key and hold, stays in alphabet shifted.
+        chordingPressKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_MANUAL_SHIFTED);
+        // Release 'Z' key
+        releaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_MANUAL_SHIFTED);
+        // Release shift key, updated to alphabet automatic shifted.
+        releaseKey(CODE_SHIFT, ALPHABET_AUTOMATIC_SHIFTED);
     }
 
     // Multi touch shift chording input in capitalize character mode.
@@ -372,8 +388,8 @@
         releaseKey('X', ALPHABET_MANUAL_SHIFTED);
         // Release 'Z' key
         releaseKey('Z', ALPHABET_MANUAL_SHIFTED);
-        // Release shift key.
-        releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+        // Release shift key, updated to alphabet automatic shifted.
+        releaseKey(CODE_SHIFT, ALPHABET_AUTOMATIC_SHIFTED);
     }
 
     public void testLongPressShiftAndChording() {