Merge "Use PointerTracker.getPointerTracker() class method"
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 57930c6..57aa5dd 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -345,20 +345,19 @@
     <declare-styleable name="KeyboardSet_Element">
         <!-- This should be aligned with KeyboardId.ELEMENT_* -->
         <attr name="elementName" format="enum">
-          <enum name="alphabet" value="0" />
-          <!--  TODO: Implement alphabet variant shift keyboards
-          <enum name="alphabetManualTemporaryShift" value="1" />
-          <enum name="alphabetAutomaticTemporaryShift" value="2" />
-          <enum name="alphabetShiftLock" value="3" />
-          <enum name="alphabetShiftLockShift" value="4" />
-          -->
-          <enum name="symbols" value="5" />
-          <enum name="symbolsShift" value="6"  />
-          <enum name="phone" value="7"  />
-          <enum name="phoneShift" value="8"  />
-          <enum name="number" value="9"  />
+            <enum name="alphabet" value="0" />
+            <enum name="alphabetManualShifted" value="1" />
+            <enum name="alphabetAutomaticShifted" value="2" />
+            <enum name="alphabetShiftLocked" value="3" />
+            <enum name="alphabetShiftLockShifted" value="4" />
+            <enum name="symbols" value="5" />
+            <enum name="symbolsShifted" value="6"  />
+            <enum name="phone" value="7"  />
+            <enum name="phoneShifted" value="8"  />
+            <enum name="number" value="9"  />
         </attr>
-        <attr name="elementKeyboard" format="reference" />
+        <attr name="elementKeyboard" format="reference"/>
+        <attr name="elementAutoGenerate" format="boolean" />
         <!-- TODO: Add setShifted and setShiftLocked attribute. -->
     </declare-styleable>
 </resources>
diff --git a/java/res/xml-ar/keyboard_set.xml b/java/res/xml-ar/keyboard_set.xml
index 68dc34f..a8aac16 100644
--- a/java/res/xml-ar/keyboard_set.xml
+++ b/java/res/xml-ar/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-be/keyboard_set.xml b/java/res/xml-be/keyboard_set.xml
index e5c6ba3..c8ee9c1 100644
--- a/java/res/xml-be/keyboard_set.xml
+++ b/java/res/xml-be/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-bg/keyboard_set.xml b/java/res/xml-bg/keyboard_set.xml
index a789de6..5a75964 100644
--- a/java/res/xml-bg/keyboard_set.xml
+++ b/java/res/xml-bg/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-cs/keyboard_set.xml b/java/res/xml-cs/keyboard_set.xml
index 94076d3..6b476df 100644
--- a/java/res/xml-cs/keyboard_set.xml
+++ b/java/res/xml-cs/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-da/keyboard_set.xml b/java/res/xml-da/keyboard_set.xml
index 84d126d..cf930dd 100644
--- a/java/res/xml-da/keyboard_set.xml
+++ b/java/res/xml-da/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-de-rZZ/keyboard_set.xml b/java/res/xml-de-rZZ/keyboard_set.xml
index 2309729..585dc3d 100644
--- a/java/res/xml-de-rZZ/keyboard_set.xml
+++ b/java/res/xml-de-rZZ/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-de/keyboard_set.xml b/java/res/xml-de/keyboard_set.xml
index c178836..059174c 100644
--- a/java/res/xml-de/keyboard_set.xml
+++ b/java/res/xml-de/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-es/keyboard_set.xml b/java/res/xml-es/keyboard_set.xml
index 77f3786..ec40a5a 100644
--- a/java/res/xml-es/keyboard_set.xml
+++ b/java/res/xml-es/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-et/keyboard_set.xml b/java/res/xml-et/keyboard_set.xml
index 304328a..80a9d8f 100644
--- a/java/res/xml-et/keyboard_set.xml
+++ b/java/res/xml-et/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-fi/keyboard_set.xml b/java/res/xml-fi/keyboard_set.xml
index 0c3a96d..cf95b5e 100644
--- a/java/res/xml-fi/keyboard_set.xml
+++ b/java/res/xml-fi/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-fr-rCA/keyboard_set.xml b/java/res/xml-fr-rCA/keyboard_set.xml
index b3bb4cc..856363e 100644
--- a/java/res/xml-fr-rCA/keyboard_set.xml
+++ b/java/res/xml-fr-rCA/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-fr-rCH/keyboard_set.xml b/java/res/xml-fr-rCH/keyboard_set.xml
index d6dcf75..778754c 100644
--- a/java/res/xml-fr-rCH/keyboard_set.xml
+++ b/java/res/xml-fr-rCH/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-fr/keyboard_set.xml b/java/res/xml-fr/keyboard_set.xml
index b94a3f2..ae911af 100644
--- a/java/res/xml-fr/keyboard_set.xml
+++ b/java/res/xml-fr/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-hr/keyboard_set.xml b/java/res/xml-hr/keyboard_set.xml
index 1d8582c..4bd81d0 100644
--- a/java/res/xml-hr/keyboard_set.xml
+++ b/java/res/xml-hr/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-hu/keyboard_set.xml b/java/res/xml-hu/keyboard_set.xml
index 0771119..9ed1d94 100644
--- a/java/res/xml-hu/keyboard_set.xml
+++ b/java/res/xml-hu/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-iw/keyboard_set.xml b/java/res/xml-iw/keyboard_set.xml
index ce25aae..c16a6d7 100644
--- a/java/res/xml-iw/keyboard_set.xml
+++ b/java/res/xml-iw/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-ky/keyboard_set.xml b/java/res/xml-ky/keyboard_set.xml
index 7cdd0a1..1bb8926 100644
--- a/java/res/xml-ky/keyboard_set.xml
+++ b/java/res/xml-ky/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-nb/keyboard_set.xml b/java/res/xml-nb/keyboard_set.xml
index eacda8f..1a36de4 100644
--- a/java/res/xml-nb/keyboard_set.xml
+++ b/java/res/xml-nb/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-pl/keyboard_set.xml b/java/res/xml-pl/keyboard_set.xml
index 89bd72f..39ee777 100644
--- a/java/res/xml-pl/keyboard_set.xml
+++ b/java/res/xml-pl/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-pt/keyboard_set.xml b/java/res/xml-pt/keyboard_set.xml
index de31e0b..bd19761 100644
--- a/java/res/xml-pt/keyboard_set.xml
+++ b/java/res/xml-pt/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-ro/keyboard_set.xml b/java/res/xml-ro/keyboard_set.xml
index 725cb52..75ca682 100644
--- a/java/res/xml-ro/keyboard_set.xml
+++ b/java/res/xml-ro/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-ru/keyboard_set.xml b/java/res/xml-ru/keyboard_set.xml
index 0a158d9..8d4d277 100644
--- a/java/res/xml-ru/keyboard_set.xml
+++ b/java/res/xml-ru/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-sk/keyboard_set.xml b/java/res/xml-sk/keyboard_set.xml
index 9df01dd..b73c446 100644
--- a/java/res/xml-sk/keyboard_set.xml
+++ b/java/res/xml-sk/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-sl/keyboard_set.xml b/java/res/xml-sl/keyboard_set.xml
index d2ec4c0..b2378e2 100644
--- a/java/res/xml-sl/keyboard_set.xml
+++ b/java/res/xml-sl/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-sr/keyboard_set.xml b/java/res/xml-sr/keyboard_set.xml
index e72a0f2..729136f 100644
--- a/java/res/xml-sr/keyboard_set.xml
+++ b/java/res/xml-sr/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-sv/keyboard_set.xml b/java/res/xml-sv/keyboard_set.xml
index df06aef..3d366a4 100644
--- a/java/res/xml-sv/keyboard_set.xml
+++ b/java/res/xml-sv/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-tr/keyboard_set.xml b/java/res/xml-tr/keyboard_set.xml
index 854ab85..3c42958 100644
--- a/java/res/xml-tr/keyboard_set.xml
+++ b/java/res/xml-tr/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-uk/keyboard_set.xml b/java/res/xml-uk/keyboard_set.xml
index e5ba43b..300eea2 100644
--- a/java/res/xml-uk/keyboard_set.xml
+++ b/java/res/xml-uk/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml-vi/keyboard_set.xml b/java/res/xml-vi/keyboard_set.xml
index 7f4b25d..0b92c94 100644
--- a/java/res/xml-vi/keyboard_set.xml
+++ b/java/res/xml-vi/keyboard_set.xml
@@ -28,13 +28,13 @@
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/res/xml/keyboard_set.xml b/java/res/xml/keyboard_set.xml
index 96f352b..03eb778 100644
--- a/java/res/xml/keyboard_set.xml
+++ b/java/res/xml/keyboard_set.xml
@@ -25,16 +25,32 @@
         latin:elementName="alphabet"
         latin:elementKeyboard="@xml/kbd_qwerty" />
     <Element
+        latin:elementName="alphabetManualShifted"
+        latin:elementKeyboard="@xml/kbd_qwerty"
+        latin:elementAutoGenerate="true" />
+    <Element
+        latin:elementName="alphabetAutomaticShifted"
+        latin:elementKeyboard="@xml/kbd_qwerty"
+        latin:elementAutoGenerate="true" />
+    <Element
+        latin:elementName="alphabetShiftLocked"
+        latin:elementKeyboard="@xml/kbd_qwerty"
+        latin:elementAutoGenerate="true" />
+    <Element
+        latin:elementName="alphabetShiftLockShifted"
+        latin:elementKeyboard="@xml/kbd_qwerty"
+        latin:elementAutoGenerate="true" />
+    <Element
         latin:elementName="symbols"
         latin:elementKeyboard="@xml/kbd_symbols" />
     <Element
-        latin:elementName="symbolsShift"
+        latin:elementName="symbolsShifted"
         latin:elementKeyboard="@xml/kbd_symbols_shift" />
     <Element
         latin:elementName="phone"
         latin:elementKeyboard="@xml/kbd_phone" />
     <Element
-        latin:elementName="phoneShift"
+        latin:elementName="phoneShifted"
         latin:elementKeyboard="@xml/kbd_phone_shift" />
     <Element
         latin:elementName="number"
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 3a9423f..b3c5ed7 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -52,9 +52,9 @@
     public final int mAltCode;
 
     /** Label to display */
-    public final CharSequence mLabel;
+    public final String mLabel;
     /** Hint label to display on the key in conjunction with the label */
-    public final CharSequence mHintLabel;
+    public final String mHintLabel;
     /** Flags of the label */
     private final int mLabelFlags;
     private static final int LABEL_FLAGS_ALIGN_LEFT = 0x01;
@@ -187,7 +187,7 @@
     /**
      * This constructor is being used only for key in popup suggestions pane.
      */
-    public Key(Keyboard.Params params, CharSequence label, CharSequence hintLabel, Drawable icon,
+    public Key(Keyboard.Params params, String label, String hintLabel, Drawable icon,
             int code, CharSequence outputText, int x, int y, int width, int height) {
         mHeight = height - params.mVerticalGap;
         mHorizontalGap = params.mHorizontalGap;
@@ -260,7 +260,7 @@
         // Update row to have current x coordinate.
         row.setXPos(keyXPos + keyWidth);
 
-        final String[] moreKeys = style.getTextArray(keyAttr,
+        final String[] moreKeys = style.getStringArray(keyAttr,
                 R.styleable.Keyboard_Key_moreKeys);
         // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of
         // config_digit_more_keys_enabled.
@@ -291,11 +291,11 @@
         final int disabledIconAttrId = KeyboardIconsSet.getIconAttrId(style.getInt(keyAttr,
                 R.styleable.Keyboard_Key_keyIconDisabled, KeyboardIconsSet.ICON_UNDEFINED));
         mDisabledIcon = iconsSet.getIconByAttrId(disabledIconAttrId);
-        mHintLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
+        mHintLabel = style.getString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
 
-        mLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyLabel);
+        mLabel = style.getString(keyAttr, R.styleable.Keyboard_Key_keyLabel);
         mLabelFlags = style.getFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags, 0);
-        mOutputText = style.getText(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
+        mOutputText = style.getString(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
         // Choose the first letter of the label as primary code if not
         // specified.
         final int code = style.getInt(keyAttr, R.styleable.Keyboard_Key_code,
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index c548f11..8c386da 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -245,10 +245,10 @@
     }
 
     // TODO: Remove this method.
-    public CharSequence adjustLabelCase(CharSequence label) {
+    public String adjustLabelCase(String label) {
         if (mId.isAlphabetKeyboard() && isShiftedOrShiftLocked() && !TextUtils.isEmpty(label)
                 && label.length() < 3 && Character.isLowerCase(label.charAt(0))) {
-            return label.toString().toUpperCase(mId.mLocale);
+            return label.toUpperCase(mId.mLocale);
         }
         return label;
     }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
index d95c3b3..8db8c94 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
@@ -39,16 +39,14 @@
     public static final int MODE_NUMBER = 5;
 
     public static final int ELEMENT_ALPHABET = 0;
-    /* TODO: Implement alphabet variant shift keyboard.
-    public static final int ELEMENT_ALPHABET_MANUAL_TEMPORARY_SHIFT = 1;
-    public static final int ELEMENT_ALPHABET_AUTOMATIC_TEMPORARY_SHIFT = 2;
-    public static final int ELEMENT_ALPHABET_SHIFT_LOCK = 3;
-    public static final int ELEMENT_ALPHABET_SHIFT_LOCK_SHIFT = 4;
-    */
+    public static final int ELEMENT_ALPHABET_MANUAL_SHIFTED = 1;
+    public static final int ELEMENT_ALPHABET_AUTOMATIC_SHIFTED = 2;
+    public static final int ELEMENT_ALPHABET_SHIFT_LOCKED = 3;
+    public static final int ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED = 4;
     public static final int ELEMENT_SYMBOLS = 5;
-    public static final int ELEMENT_SYMBOLS_SHIFT = 6;
+    public static final int ELEMENT_SYMBOLS_SHIFTED = 6;
     public static final int ELEMENT_PHONE = 7;
-    public static final int ELEMENT_PHONE_SHIFT = 8;
+    public static final int ELEMENT_PHONE_SHIFTED = 8;
     public static final int ELEMENT_NUMBER = 9;
 
     private static final int F2KEY_MODE_NONE = 0;
@@ -60,7 +58,7 @@
     public final int mOrientation;
     public final int mWidth;
     public final int mMode;
-    public final int mElementState;
+    public final int mElementId;
     private final int mInputType;
     private final int mImeOptions;
     private final boolean mSettingsKeyEnabled;
@@ -70,14 +68,14 @@
 
     private final int mHashCode;
 
-    public KeyboardId(int elementState, Locale locale, int orientation, int width, int mode,
+    public KeyboardId(int elementId, Locale locale, int orientation, int width, int mode,
             int inputType, int imeOptions, boolean settingsKeyEnabled, boolean clobberSettingsKey,
             boolean shortcutKeyEnabled, boolean hasShortcutKey) {
         this.mLocale = locale;
         this.mOrientation = orientation;
         this.mWidth = width;
         this.mMode = mode;
-        this.mElementState = elementState;
+        this.mElementId = elementId;
         this.mInputType = inputType;
         this.mImeOptions = imeOptions;
         this.mSettingsKeyEnabled = settingsKeyEnabled;
@@ -91,7 +89,7 @@
     private static int hashCode(KeyboardId id) {
         return Arrays.hashCode(new Object[] {
                 id.mOrientation,
-                id.mElementState,
+                id.mElementId,
                 id.mMode,
                 id.mWidth,
                 id.navigateAction(),
@@ -109,7 +107,7 @@
         if (other == this)
             return true;
         return other.mOrientation == this.mOrientation
-                && other.mElementState == this.mElementState
+                && other.mElementId == this.mElementId
                 && other.mMode == this.mMode
                 && other.mWidth == this.mWidth
                 && other.navigateAction() == this.navigateAction()
@@ -123,19 +121,19 @@
     }
 
     public boolean isAlphabetKeyboard() {
-        return mElementState < ELEMENT_SYMBOLS;
+        return mElementId < ELEMENT_SYMBOLS;
     }
 
     public boolean isSymbolsKeyboard() {
-        return mElementState == ELEMENT_SYMBOLS || mElementState == ELEMENT_SYMBOLS_SHIFT;
+        return mElementId == ELEMENT_SYMBOLS || mElementId == ELEMENT_SYMBOLS_SHIFTED;
     }
 
     public boolean isPhoneKeyboard() {
-        return mElementState == ELEMENT_PHONE || mElementState == ELEMENT_PHONE_SHIFT;
+        return mElementId == ELEMENT_PHONE || mElementId == ELEMENT_PHONE_SHIFTED;
     }
 
     public boolean isPhoneShiftKeyboard() {
-        return mElementState == ELEMENT_PHONE_SHIFT;
+        return mElementId == ELEMENT_PHONE_SHIFTED;
     }
 
     public boolean navigateAction() {
@@ -190,7 +188,7 @@
     @Override
     public String toString() {
         return String.format("[%s %s %s%d %s %s %s%s%s%s%s%s%s]",
-                elementStateToString(mElementState),
+                elementIdToName(mElementId),
                 mLocale,
                 (mOrientation == 1 ? "port" : "land"), mWidth,
                 modeName(mMode),
@@ -213,19 +211,17 @@
                 && TextUtils.equals(a.privateImeOptions, b.privateImeOptions);
     }
 
-    public static String elementStateToString(int elementState) {
-        switch (elementState) {
+    public static String elementIdToName(int elementId) {
+        switch (elementId) {
         case ELEMENT_ALPHABET: return "alphabet";
-        /* TODO: Implement alphabet variant shift keyboard.
-        case ELEMENT_ALPHABET_MANUAL_TEMPORARY_SHIFT: return "alphabetManualTemporaryShift";
-        case ELEMENT_ALPHABET_AUTOMATIC_TEMPORARY_SHIFT: return "alphabetAutomaticTemporaryShift";
-        case ELEMENT_ALPHABET_SHIFT_LOCK: return "alphabetShiftLock";
-        case ELEMENT_ALPHABET_SHIFT_LOCK_SHIFT: return "alphabetShiftLockShift";
-        */
+        case ELEMENT_ALPHABET_MANUAL_SHIFTED: return "alphabetManualShifted";
+        case ELEMENT_ALPHABET_AUTOMATIC_SHIFTED: return "alphabetAutomaticShifted";
+        case ELEMENT_ALPHABET_SHIFT_LOCKED: return "alphabetShiftLocked";
+        case ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED: return "alphabetShiftLockShifted";
         case ELEMENT_SYMBOLS: return "symbols";
-        case ELEMENT_SYMBOLS_SHIFT: return "symbolsShift";
+        case ELEMENT_SYMBOLS_SHIFTED: return "symbolsShifted";
         case ELEMENT_PHONE: return "phone";
-        case ELEMENT_PHONE_SHIFT: return "phoneShift";
+        case ELEMENT_PHONE_SHIFTED: return "phoneShifted";
         case ELEMENT_NUMBER: return "number";
         default: return null;
         }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
index 2852520..c7f964a 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
@@ -40,6 +40,7 @@
 import java.lang.ref.SoftReference;
 import java.util.HashMap;
 import java.util.Locale;
+import java.util.Map;
 
 /**
  * This class represents a set of keyboards. Each of them represents a different keyboard
@@ -57,7 +58,18 @@
     private final Context mContext;
     private final Params mParams;
 
-    private static class Params {
+    static class KeyboardElement {
+        final int mElementId;
+        final int mLayoutId;
+        final boolean mAutoGenerate;
+        KeyboardElement(int elementId, int layoutId, boolean autoGenerate) {
+            mElementId = elementId;
+            mLayoutId = layoutId;
+            mAutoGenerate = autoGenerate;
+        }
+    }
+
+    static class Params {
         int mMode;
         int mInputType;
         int mImeOptions;
@@ -69,7 +81,8 @@
         Locale mLocale;
         int mOrientation;
         int mWidth;
-        final HashMap<Integer, Integer> mElementKeyboards = new HashMap<Integer, Integer>();
+        final Map<Integer, KeyboardElement> mElementKeyboards =
+                new HashMap<Integer, KeyboardElement>();
         Params() {}
     }
 
@@ -104,16 +117,18 @@
     }
 
     private Keyboard getKeyboard(boolean isSymbols, boolean isShift) {
-        final int elementState = Builder.getElementState(mParams.mMode, isSymbols, isShift);
-        final int xmlId = mParams.mElementKeyboards.get(elementState);
-        final KeyboardId id = Builder.getKeyboardId(elementState, isSymbols, mParams);
-        final Keyboard keyboard = getKeyboard(mContext, xmlId, id);
+        final int elementId = KeyboardSet.getElementId(mParams.mMode, isSymbols, isShift);
+        final KeyboardElement keyboardElement = mParams.mElementKeyboards.get(elementId);
+        // TODO: If keyboardElement.mAutoGenerate is true, the keyboard will be auto generated
+        // based on keyboardElement.mKayoutId Keyboard XML definition.
+        final KeyboardId id = KeyboardSet.getKeyboardId(elementId, isSymbols, mParams);
+        final Keyboard keyboard = getKeyboard(mContext, keyboardElement.mLayoutId, id);
         return keyboard;
     }
 
     public KeyboardId getMainKeyboardId() {
-        final int elementState = Builder.getElementState(mParams.mMode, false, false);
-        return Builder.getKeyboardId(elementState, false, mParams);
+        final int elementId = KeyboardSet.getElementId(mParams.mMode, false, false);
+        return KeyboardSet.getKeyboardId(elementId, false, mParams);
     }
 
     private Keyboard getKeyboard(Context context, int xmlId, KeyboardId id) {
@@ -147,6 +162,30 @@
         return keyboard;
     }
 
+    private static int getElementId(int mode, boolean isSymbols, boolean isShift) {
+        switch (mode) {
+        case KeyboardId.MODE_PHONE:
+            return (isSymbols && isShift)
+                    ? KeyboardId.ELEMENT_PHONE_SHIFTED : KeyboardId.ELEMENT_PHONE;
+        case KeyboardId.MODE_NUMBER:
+            return KeyboardId.ELEMENT_NUMBER;
+        default:
+            if (isSymbols) {
+                return isShift
+                        ? KeyboardId.ELEMENT_SYMBOLS_SHIFTED : KeyboardId.ELEMENT_SYMBOLS;
+            }
+            return KeyboardId.ELEMENT_ALPHABET;
+        }
+    }
+
+    private static KeyboardId getKeyboardId(int elementId, boolean isSymbols, Params params) {
+        final boolean hasShortcutKey = params.mVoiceKeyEnabled
+                && (isSymbols != params.mVoiceKeyOnMain);
+        return new KeyboardId(elementId, params.mLocale, params.mOrientation, params.mWidth,
+                params.mMode, params.mInputType, params.mImeOptions, params.mSettingsKeyEnabled,
+                params.mNoSettingsKey, params.mVoiceKeyEnabled, hasShortcutKey);
+    }
+
     public static class Builder {
         private final Context mContext;
         private final String mPackageName;
@@ -211,38 +250,15 @@
             try {
                 parseKeyboardSet(mResources, R.xml.keyboard_set);
             } catch (Exception e) {
-                //
+                throw new RuntimeException(e.getMessage() + " in "
+                        + mResources.getResourceName(R.xml.keyboard_set)
+                        + " of locale " + mParams.mLocale);
             } finally {
                 LocaleUtils.setSystemLocale(mResources, savedLocale);
             }
             return new KeyboardSet(mContext, mParams);
         }
 
-        // TODO: Move this method to KeyboardSet
-        static KeyboardId getKeyboardId(int elementState, boolean isSymbols, Params params) {
-            final boolean hasShortcutKey = params.mVoiceKeyEnabled
-                    && (isSymbols != params.mVoiceKeyOnMain);
-            return new KeyboardId(elementState, params.mLocale, params.mOrientation, params.mWidth,
-                    params.mMode, params.mInputType, params.mImeOptions, params.mSettingsKeyEnabled,
-                    params.mNoSettingsKey, params.mVoiceKeyEnabled, hasShortcutKey);
-        }
-
-        // TODO: Move this method to KeyboardSet
-        static int getElementState(int mode, boolean isSymbols, boolean isShift) {
-            switch (mode) {
-            case KeyboardId.MODE_PHONE:
-                return (isSymbols && isShift)
-                        ? KeyboardId.ELEMENT_PHONE_SHIFT : KeyboardId.ELEMENT_PHONE;
-            case KeyboardId.MODE_NUMBER:
-                return KeyboardId.ELEMENT_NUMBER;
-            default:
-                if (isSymbols) {
-                    return isShift ? KeyboardId.ELEMENT_SYMBOLS_SHIFT : KeyboardId.ELEMENT_SYMBOLS;
-                }
-                return KeyboardId.ELEMENT_ALPHABET;
-            }
-        }
-
         private void parseKeyboardSet(Resources res, int resId) throws XmlPullParserException,
                 IOException {
             final XmlResourceParser parser = res.getXml(resId);
@@ -302,7 +318,10 @@
                         R.styleable.KeyboardSet_Element_elementName, 0);
                 final int elementKeyboard = a.getResourceId(
                         R.styleable.KeyboardSet_Element_elementKeyboard, 0);
-                mParams.mElementKeyboards.put(elementName, elementKeyboard);
+                final boolean elementAutoGenerate = a.getBoolean(
+                        R.styleable.KeyboardSet_Element_elementAutoGenerate, false);
+                mParams.mElementKeyboards.put(elementName, new KeyboardElement(
+                        elementName, elementKeyboard, elementAutoGenerate));
             } finally {
                 a.recycle();
             }
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index abc220e..c2798bb 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -557,7 +557,7 @@
         float positionX = centerX;
         if (key.mLabel != null) {
             // Switch the character to uppercase if shift is pressed
-            final CharSequence label = mKeyboard.adjustLabelCase(key.mLabel);
+            final String label = mKeyboard.adjustLabelCase(key.mLabel);
             // For characters, use large font. For labels like "Done", use smaller font.
             paint.setTypeface(key.selectTypeface(params.mKeyTextStyle));
             final int labelSize = key.selectTextSize(params.mKeyLetterSize,
@@ -639,7 +639,7 @@
 
         // Draw hint label.
         if (key.mHintLabel != null) {
-            final CharSequence hint = key.mHintLabel;
+            final String hint = key.mHintLabel;
             final int hintColor;
             final int hintSize;
             if (key.hasHintLabel()) {
@@ -778,12 +778,12 @@
         return width;
     }
 
-    private static float getLabelWidth(CharSequence label, Paint paint) {
+    private static float getLabelWidth(String label, Paint paint) {
         paint.getTextBounds(label.toString(), 0, label.length(), sTextBounds);
         return sTextBounds.width();
     }
 
-    public float getDefaultLabelWidth(CharSequence label, Paint paint) {
+    public float getDefaultLabelWidth(String label, Paint paint) {
         paint.setTextSize(mKeyDrawParams.mKeyLabelSize);
         paint.setTypeface(mKeyDrawParams.mKeyTextStyle);
         return getLabelWidth(label, paint);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
index faea389..b7215ec 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStyles.java
@@ -40,8 +40,8 @@
     private static final KeyStyle EMPTY_KEY_STYLE = new EmptyKeyStyle();
 
     public interface KeyStyle {
-        public String[] getTextArray(TypedArray a, int index);
-        public CharSequence getText(TypedArray a, int index);
+        public String[] getStringArray(TypedArray a, int index);
+        public String getString(TypedArray a, int index);
         public int getInt(TypedArray a, int index, int defaultValue);
         public int getFlag(TypedArray a, int index, int defaultValue);
     }
@@ -52,13 +52,13 @@
         }
 
         @Override
-        public String[] getTextArray(TypedArray a, int index) {
-            return parseTextArray(a, index);
+        public String[] getStringArray(TypedArray a, int index) {
+            return parseStringArray(a, index);
         }
 
         @Override
-        public CharSequence getText(TypedArray a, int index) {
-            return a.getText(index);
+        public String getString(TypedArray a, int index) {
+            return a.getString(index);
         }
 
         @Override
@@ -71,16 +71,15 @@
             return a.getInt(index, defaultValue);
         }
 
-        protected static String[] parseTextArray(TypedArray a, int index) {
+        protected static String[] parseStringArray(TypedArray a, int index) {
             if (!a.hasValue(index))
                 return null;
-            final CharSequence text = a.getText(index);
-            return parseCsvText(text.toString(), a.getResources(), R.string.english_ime_name);
+            return parseCsvString(a.getString(index), a.getResources(), R.string.english_ime_name);
         }
     }
 
     /* package for test */
-    static String[] parseCsvText(String rawText, Resources res, int packageNameResId) {
+    static String[] parseCsvString(String rawText, Resources res, int packageNameResId) {
         final String text = Utils.resolveStringResource(rawText, res, packageNameResId);
         final int size = text.length();
         if (size == 0) {
@@ -139,15 +138,15 @@
         private final HashMap<Integer, Object> mAttributes = new HashMap<Integer, Object>();
 
         @Override
-        public String[] getTextArray(TypedArray a, int index) {
+        public String[] getStringArray(TypedArray a, int index) {
             return a.hasValue(index)
-                    ? super.getTextArray(a, index) : (String[])mAttributes.get(index);
+                    ? super.getStringArray(a, index) : (String[])mAttributes.get(index);
         }
 
         @Override
-        public CharSequence getText(TypedArray a, int index) {
+        public String getString(TypedArray a, int index) {
             return a.hasValue(index)
-                    ? super.getText(a, index) : (CharSequence)mAttributes.get(index);
+                    ? super.getString(a, index) : (String)mAttributes.get(index);
         }
 
         @Override
@@ -170,10 +169,10 @@
             // TODO: Currently not all Key attributes can be declared as style.
             readInt(keyAttr, R.styleable.Keyboard_Key_code);
             readInt(keyAttr, R.styleable.Keyboard_Key_altCode);
-            readText(keyAttr, R.styleable.Keyboard_Key_keyLabel);
-            readText(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
-            readText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
-            readTextArray(keyAttr, R.styleable.Keyboard_Key_moreKeys);
+            readString(keyAttr, R.styleable.Keyboard_Key_keyLabel);
+            readString(keyAttr, R.styleable.Keyboard_Key_keyOutputText);
+            readString(keyAttr, R.styleable.Keyboard_Key_keyHintLabel);
+            readStringArray(keyAttr, R.styleable.Keyboard_Key_moreKeys);
             readFlag(keyAttr, R.styleable.Keyboard_Key_keyLabelFlags);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIcon);
             readInt(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled);
@@ -183,9 +182,9 @@
             readFlag(keyAttr, R.styleable.Keyboard_Key_keyActionFlags);
         }
 
-        private void readText(TypedArray a, int index) {
+        private void readString(TypedArray a, int index) {
             if (a.hasValue(index))
-                mAttributes.put(index, a.getText(index));
+                mAttributes.put(index, a.getString(index));
         }
 
         private void readInt(TypedArray a, int index) {
@@ -199,8 +198,8 @@
                 mAttributes.put(index, a.getInt(index, 0) | (value != null ? value : 0));
         }
 
-        private void readTextArray(TypedArray a, int index) {
-            final CharSequence[] value = parseTextArray(a, index);
+        private void readStringArray(TypedArray a, int index) {
+            final String[] value = parseStringArray(a, index);
             if (value != null)
                 mAttributes.put(index, value);
         }
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index bc8b7e3..38c31ad 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -43,6 +43,8 @@
         public void setAlphabetManualShiftedKeyboard();
         public void setAlphabetAutomaticShiftedKeyboard();
         public void setAlphabetShiftLockedKeyboard();
+        // TODO: Add this.
+        //public void setAlphabetShiftLockShiftedKeyboard();
         public void setSymbolsKeyboard();
         public void setSymbolsShiftedKeyboard();
 
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
index 3d26d97..f42b8e6 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
@@ -72,7 +72,7 @@
                 int pos = fromPos, rowStartPos = fromPos;
                 final int size = Math.min(suggestions.size(), SuggestionsView.MAX_SUGGESTIONS);
                 while (pos < size) {
-                    final CharSequence word = suggestions.getWord(pos);
+                    final String word = suggestions.getWord(pos).toString();
                     // TODO: Should take care of text x-scaling.
                     mWidths[pos] = (int)view.getDefaultLabelWidth(word, paint) + padding;
                     final int numColumn = pos - rowStartPos + 1;
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
index 29881d9..2ae8027 100644
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
@@ -39,7 +39,7 @@
     }
 
     private void assertTextArray(String message, String value, String ... expected) {
-        final String actual[] = KeyStyles.parseCsvText(value, mTestResources,
+        final String actual[] = KeyStyles.parseCsvString(value, mTestResources,
                 R.string.empty_string);
         if (expected.length == 0) {
             assertNull(message, actual);