From d5f32b38f507cf0f4e3ceed5a360f6f809ada3c6 Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Wed, 9 Jul 2014 01:38:21 +0900
Subject: [PATCH] Add Telugu keyboard

Bug: 10028759
Change-Id: Id1bf030a9928124ead695aa7bf76db48ca58de4b
---
 java/res/xml-sw600dp/key_space_5kw.xml        |   7 +-
 java/res/xml-sw600dp/rows_telugu.xml          |  49 +++++
 java/res/xml/kbd_telugu.xml                   |  26 +++
 java/res/xml/key_space_5kw.xml                |   7 +-
 java/res/xml/keyboard_layout_set_telugu.xml   |  42 ++++
 java/res/xml/method.xml                       |  13 +-
 java/res/xml/rowkeys_telugu1.xml              |  97 +++++++++
 java/res/xml/rowkeys_telugu2.xml              |  78 ++++++++
 java/res/xml/rowkeys_telugu3.xml              |  67 +++++++
 java/res/xml/rows_telugu.xml                  |  45 +++++
 .../keyboard/internal/KeyboardTextsTable.java | 173 ++++++++--------
 .../KeyboardLayoutSetSubtypesCountTests.java  |   2 +-
 .../inputmethod/keyboard/layout/Telugu.java   | 189 ++++++++++++++++++
 .../keyboard/layout/tests/TestsTeluguIN.java  |  37 ++++
 .../donottranslate-more-keys.xml              |  28 +++
 15 files changed, 774 insertions(+), 86 deletions(-)
 create mode 100644 java/res/xml-sw600dp/rows_telugu.xml
 create mode 100644 java/res/xml/kbd_telugu.xml
 create mode 100644 java/res/xml/keyboard_layout_set_telugu.xml
 create mode 100644 java/res/xml/rowkeys_telugu1.xml
 create mode 100644 java/res/xml/rowkeys_telugu2.xml
 create mode 100644 java/res/xml/rowkeys_telugu3.xml
 create mode 100644 java/res/xml/rows_telugu.xml
 create mode 100644 tests/src/com/android/inputmethod/keyboard/layout/Telugu.java
 create mode 100644 tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTeluguIN.java
 create mode 100644 tools/make-keyboard-text/res/values-te-rIN/donottranslate-more-keys.xml

diff --git a/java/res/xml-sw600dp/key_space_5kw.xml b/java/res/xml-sw600dp/key_space_5kw.xml
index bf7dffbe94..8302184c71 100644
--- a/java/res/xml-sw600dp/key_space_5kw.xml
+++ b/java/res/xml-sw600dp/key_space_5kw.xml
@@ -24,9 +24,10 @@
     <switch>
         <!-- fa: Perisan
              kn: Kannada
-             ne: Nepali -->
+             ne: Nepali
+             te: Telugu -->
         <case
-            latin:languageCode="fa|kn|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="true"
         >
             <Key
@@ -38,7 +39,7 @@
                 latin:keyStyle="zwnjKeyStyle" />
         </case>
         <case
-            latin:languageCode="fa|kn|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="false"
         >
             <Key
diff --git a/java/res/xml-sw600dp/rows_telugu.xml b/java/res/xml-sw600dp/rows_telugu.xml
new file mode 100644
index 0000000000..c9aeb7ef22
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_telugu.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu1" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu2" />
+        <Key
+            latin:keyStyle="enterKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu3" />
+        <include latin:keyboardLayout="@xml/keys_exclamation_question" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml/kbd_telugu.xml b/java/res/xml/kbd_telugu.xml
new file mode 100644
index 0000000000..b4fc337d1b
--- /dev/null
+++ b/java/res/xml/kbd_telugu.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<Keyboard
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/rows_telugu" />
+</Keyboard>
diff --git a/java/res/xml/key_space_5kw.xml b/java/res/xml/key_space_5kw.xml
index 1b62eabccd..b1fe0bbeb2 100644
--- a/java/res/xml/key_space_5kw.xml
+++ b/java/res/xml/key_space_5kw.xml
@@ -24,9 +24,10 @@
     <switch>
         <!-- fa: Perisan
              kn: Kannada
-             ne: Nepali -->
+             ne: Nepali
+             te: Telugu -->
         <case
-            latin:languageCode="fa|kn|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="true"
         >
             <Key
@@ -38,7 +39,7 @@
                 latin:keyStyle="zwnjKeyStyle" />
         </case>
         <case
-            latin:languageCode="fa|kn|ne"
+            latin:languageCode="fa|kn|ne|te"
             latin:languageSwitchKeyEnabled="false"
         >
             <Key
diff --git a/java/res/xml/keyboard_layout_set_telugu.xml b/java/res/xml/keyboard_layout_set_telugu.xml
new file mode 100644
index 0000000000..aca47b9d92
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_telugu.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<KeyboardLayoutSet
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <Element
+        latin:elementName="alphabet"
+        latin:elementKeyboard="@xml/kbd_telugu"
+        latin:enableProximityCharsCorrection="true" />
+    <Element
+        latin:elementName="symbols"
+        latin:elementKeyboard="@xml/kbd_symbols" />
+    <Element
+        latin:elementName="symbolsShifted"
+        latin:elementKeyboard="@xml/kbd_symbols_shift" />
+    <Element
+        latin:elementName="phone"
+        latin:elementKeyboard="@xml/kbd_phone" />
+    <Element
+        latin:elementName="phoneSymbols"
+        latin:elementKeyboard="@xml/kbd_phone_symbols" />
+    <Element
+        latin:elementName="number"
+        latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 2a03f20d91..5021f33ee9 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -91,7 +91,8 @@
     (sr-Latn: Serbian/qwerty) # not yet implemented.
     sv: Swedish/nordic
     sw: Swahili/qwerty
-    (ta: Tamil/tamil) # This is a preliminary keyboard layout.
+    (ta_IN: Tamil (India)/tamil) # This is a preliminary keyboard layout.
+    (te_IN: Telugu (India)/telugu) # This is a preliminary keyboard layout.
     th: Thai/thai
     tl: Tagalog/spanish
     tr: Turkish/qwerty
@@ -699,6 +700,16 @@
             android:imeSubtypeExtraValue="KeyboardLayoutSet=tamil,EmojiCapable"
             android:isAsciiCapable="false"
     />
+    <!-- TODO: This telugu keyboard is a preliminary layout.
+               This isn't based on the final specification. -->
+    <subtype android:icon="@drawable/ic_ime_switcher_dark"
+            android:label="@string/subtype_generic"
+            android:subtypeId="0x1e177389"
+            android:imeSubtypeLocale="te_IN"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="KeyboardLayoutSet=telugu,EmojiCapable"
+            android:isAsciiCapable="false"
+    />
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
             android:subtypeId="0x1f94d5d4"
diff --git a/java/res/xml/rowkeys_telugu1.xml b/java/res/xml/rowkeys_telugu1.xml
new file mode 100644
index 0000000000..8a5c8506fa
--- /dev/null
+++ b/java/res/xml/rowkeys_telugu1.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0C4C: "ౌ" TELUGU VOWEL SIGN AU
+         U+0C14: "à°”" TELUGU LETTER AU -->
+    <Key
+        latin:keySpec="&#x0C4C;"
+        latin:moreKeys="&#x0C14;,%"
+        latin:keyHintLabel="1"
+        latin:additionalMoreKeys="1" />
+    <!-- U+0C48: "ై" TELUGU VOWEL SIGN AI
+         U+0C10: "ఐ" TELUGU LETTER AI -->
+    <Key
+        latin:keySpec="&#x0C48;"
+        latin:moreKeys="&#x0C10;,%"
+        latin:keyHintLabel="2"
+        latin:additionalMoreKeys="2" />
+    <!-- U+0C3E: "à°¾" TELUGU VOWEL SIGN AA
+         U+0C06: "à°†" TELUGU LETTER AA -->
+    <Key
+        latin:keySpec="&#x0C3E;"
+        latin:moreKeys="&#x0C06;,%"
+        latin:keyHintLabel="3"
+        latin:additionalMoreKeys="3" />
+    <!-- U+0C40: "à±€" TELUGU VOWEL SIGN II
+         U+0C08: "à°ˆ" TELUGU LETTER II -->
+    <Key
+        latin:keySpec="&#x0C40;"
+        latin:moreKeys="&#x0C08;,%"
+        latin:keyHintLabel="4"
+        latin:additionalMoreKeys="4" />
+    <!-- U+0C42: "ూ" TELUGU VOWEL SIGN UU
+         U+0C0A: "à°Š" TELUGU LETTER UU -->
+    <Key
+        latin:keySpec="&#x0C42;"
+        latin:moreKeys="&#x0C0A;,%"
+        latin:keyHintLabel="5"
+        latin:additionalMoreKeys="5" />
+    <!-- U+0C2C: "à°¬" TELUGU LETTER BA
+         U+0C2D: "à°­" TELUGU LETTER BHA -->
+    <Key
+        latin:keySpec="&#x0C2C;"
+        latin:moreKeys="&#x0C2D;,%"
+        latin:keyHintLabel="6"
+        latin:additionalMoreKeys="6" />
+    <!-- U+0C39: "à°¹" TELUGU LETTER HA
+         U+0C03: "à°ƒ" TELUGU SIGN VISARGA -->
+    <Key
+        latin:keySpec="&#x0C39;"
+        latin:moreKeys="&#x0C03;,%"
+        latin:keyHintLabel="7"
+        latin:additionalMoreKeys="7" />
+    <!-- U+0C17: "à°—" TELUGU LETTER GA
+         U+0C18: "à°˜" TELUGU LETTER GHA -->
+    <Key
+        latin:keySpec="&#x0C17;"
+        latin:moreKeys="&#x0C18;,%"
+        latin:keyHintLabel="8"
+        latin:additionalMoreKeys="8" />
+    <!-- U+0C26: "à°¦" TELUGU LETTER DA
+         U+0C27: "à°§" TELUGU LETTER DHA -->
+    <Key
+        latin:keySpec="&#x0C26;"
+        latin:moreKeys="&#x0C27;,%"
+        latin:keyHintLabel="9"
+        latin:additionalMoreKeys="9" />
+    <!-- U+0C1C: "జ" TELUGU LETTER JA
+         U+0C1D: "ఝ" TELUGU LETTER JHA -->
+    <Key
+        latin:keySpec="&#x0C1C;"
+        latin:moreKeys="&#x0C1D;,%"
+        latin:keyHintLabel="0"
+        latin:additionalMoreKeys="0" />
+    <!-- U+0C21: "à°¡" TELUGU LETTER DDA
+         U+0C22: "à°¢" TELUGU LETTER DDHA -->
+    <Key
+        latin:keySpec="&#x0C21;"
+        latin:moreKeys="&#x0C22;" />
+</merge>
diff --git a/java/res/xml/rowkeys_telugu2.xml b/java/res/xml/rowkeys_telugu2.xml
new file mode 100644
index 0000000000..a472fd3f84
--- /dev/null
+++ b/java/res/xml/rowkeys_telugu2.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0C4B: "ో" TELUGU VOWEL SIGN OO
+         U+0C13: "à°“" TELUGU LETTER OO -->
+    <Key
+        latin:keySpec="&#x0C4B;"
+        latin:moreKeys="&#x0C13;" />
+    <!-- U+0C47: "ే" TELUGU VOWEL SIGN EE
+         U+0C0F: "ఏ" TELUGU LETTER EE -->
+    <Key
+        latin:keySpec="&#x0C47;"
+        latin:moreKeys="&#x0C0F;" />
+    <!-- U+0C4D: "్" TELUGU SIGN VIRAMA
+         U+0C05: "à°…" TELUGU LETTER A -->
+    <Key
+        latin:keySpec="&#x0C4D;"
+        latin:moreKeys="&#x0C05;" />
+    <!-- U+0C3F: "à°¿" TELUGU VOWEL SIGN I
+         U+0C07: "à°‡" TELUGU LETTER I -->
+    <Key
+        latin:keySpec="&#x0C3F;"
+        latin:moreKeys="&#x0C07;" />
+    <!-- U+0C41: "ు" TELUGU VOWEL SIGN U
+         U+0C09: "à°‰" TELUGU LETTER U -->
+    <Key
+        latin:keySpec="&#x0C41;"
+        latin:moreKeys="&#x0C09;" />
+    <!-- U+0C2A: "à°ª" TELUGU LETTER PA
+         U+0C2B: "à°«" TELUGU LETTER PHA -->
+    <Key
+        latin:keySpec="&#x0C2A;"
+        latin:moreKeys="&#x0C2B;" />
+    <!-- U+0C30: "à°°" TELUGU LETTER RA
+         U+0C31: "à°±" TELUGU LETTER RRA
+         U+0C43: "ృ" TELUGU VOWEL SIGN VOCALIC R -->
+    <Key
+        latin:keySpec="&#x0C30;"
+        latin:moreKeys="&#x0C31;,&#x0C43;" />
+    <!-- U+0C15: "à°•" TELUGU LETTER KA
+         U+0C16: "à°–" TELUGU LETTER KHA -->
+    <Key
+        latin:keySpec="&#x0C15;"
+        latin:moreKeys="&#x0C16;" />
+    <!-- U+0C24: "à°¤" TELUGU LETTER TA
+         U+0C25: "à°¥" TELUGU LETTER THA -->
+    <Key
+        latin:keySpec="&#x0C24;"
+        latin:moreKeys="&#x0C25;" />
+    <!-- U+0C1A: "à°š" TELUGU LETTER CA
+         U+0C1B: "à°›" TELUGU LETTER CHA -->
+    <Key
+        latin:keySpec="&#x0C1A;"
+        latin:moreKeys="&#x0C1B;" />
+    <!-- U+0C1F: "à°Ÿ" TELUGU LETTER TTA
+         U+0C20: "à° " TELUGU LETTER TTHA -->
+    <Key
+        latin:keySpec="&#x0C1F;"
+        latin:moreKeys="&#x0C20;" />
+</merge>
diff --git a/java/res/xml/rowkeys_telugu3.xml b/java/res/xml/rowkeys_telugu3.xml
new file mode 100644
index 0000000000..05755ec4da
--- /dev/null
+++ b/java/res/xml/rowkeys_telugu3.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <!-- U+0C46: "ె" TELUGU VOWEL SIGN E
+         U+0C12: "à°’" TELUGU LETTER O -->
+    <Key
+        latin:keySpec="&#x0C46;"
+        latin:moreKeys="&#x0C12;" />
+    <!-- U+0C02: "à°‚" TELUGU SIGN ANUSVARA
+         U+0C0E: "à°Ž" TELUGU LETTER E -->
+    <Key
+        latin:keySpec="&#x0C02;"
+        latin:moreKeys="&#x0C0E;" />
+    <!-- U+0C2E: "à°®" TELUGU LETTER MA -->
+    <Key latin:keySpec="&#x0C2E;" />
+    <!-- U+0C28: "à°¨" TELUGU LETTER NA
+         U+0C23: "à°£" TELUGU LETTER NNA
+         U+0C19: "à°™" TELUGU LETTER NGA -->
+    <Key
+        latin:keySpec="&#x0C28;"
+        latin:moreKeys="&#x0C23;,&#x0C19;" />
+    <!-- U+0C35: "à°µ" TELUGU LETTER VA -->
+    <Key latin:keySpec="&#x0C35;" />
+    <!-- U+0C32: "à°²" TELUGU LETTER LA
+         U+0C33: "à°³" TELUGU LETTER LLA -->
+    <Key
+        latin:keySpec="&#x0C32;"
+        latin:moreKeys="&#x0C33;" />
+    <!-- U+0C38: "à°¸" TELUGU LETTER SA
+         U+0C36: "à°¶" TELUGU LETTER SHA -->
+    <Key
+        latin:keySpec="&#x0C38;"
+        latin:moreKeys="&#x0C36;" />
+    <!-- U+0C0B: "à°‹" TELUGU LETTER VOCALIC R
+         U+0C4D/U+0C30: "్ర" TELUGU SIGN VIRAMA/TELUGU LETTER RA -->
+    <Key
+        latin:keySpec="&#x0C0B;"
+        latin:moreKeys="&#x0C4D;&#x0C30;" />
+    <!-- U+0C37: "à°·" TELUGU LETTER SSA
+         U+0C15/U+0C4D/U+0C37: "క్ష" TELUGU LETTER KA/TELUGU SIGN VIRAMA/TELUGU LETTER SSA -->
+    <Key
+        latin:keySpec="&#x0C37;"
+        latin:moreKeys="&#x0C15;&#x0C4D;&#x0C37;" />
+    <!-- U+0C2F: "à°¯" TELUGU LETTER YA
+         U+0C1C/U+0C4D/U+0C1E: "జ్ఞ" TELUGU LETTER JA/TELUGU SIGN VIRAMA/TELUGU LETTER NYA -->
+    <Key
+        latin:keySpec="&#x0C2F;"
+        latin:moreKeys="&#x0C1C;&#x0C4D;&#x0C1E;" />
+</merge>
diff --git a/java/res/xml/rows_telugu.xml b/java/res/xml/rows_telugu.xml
new file mode 100644
index 0000000000..4a31d5dc3f
--- /dev/null
+++ b/java/res/xml/rows_telugu.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<merge xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <include latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu1" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu2" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+        latin:keyLabelFlags="fontNormal|autoXScale"
+    >
+        <include latin:keyboardLayout="@xml/rowkeys_telugu3" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <include latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
\ No newline at end of file
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index b508563169..eb494275fa 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -88,14 +88,14 @@ public final class KeyboardTextsTable {
         /*   2:30 */ "morekeys_u",
         /*   3:29 */ "morekeys_e",
         /*   4:28 */ "morekeys_i",
-        /*   5:27 */ "keylabel_to_alpha",
+        /*   5:28 */ "keylabel_to_alpha",
         /*   6:23 */ "morekeys_c",
         /*   7:23 */ "double_quotes",
         /*   8:22 */ "morekeys_n",
         /*   9:22 */ "single_quotes",
         /*  10:20 */ "morekeys_s",
-        /*  11:14 */ "morekeys_y",
-        /*  12:14 */ "keyspec_currency",
+        /*  11:15 */ "keyspec_currency",
+        /*  12:14 */ "morekeys_y",
         /*  13:13 */ "morekeys_d",
         /*  14:12 */ "morekeys_z",
         /*  15:10 */ "morekeys_t",
@@ -267,10 +267,9 @@ public final class KeyboardTextsTable {
         /* morekeys_n */ EMPTY,
         /* single_quotes */ "!text/single_lqm_rqm",
         /* morekeys_s */ EMPTY,
-        /* morekeys_y */ EMPTY,
         /* keyspec_currency */ "$",
-        /* morekeys_d ~ */
-        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
+        /* morekeys_y ~ */
+        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_laqm_raqm",
         /* double_angle_quotes */ "!text/double_laqm_raqm",
@@ -515,8 +514,9 @@ public final class KeyboardTextsTable {
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "Å„" LATIN SMALL LETTER N WITH ACUTE
         /* morekeys_n */ "\u00F1,\u0144",
-        /* single_quotes */ null,
-        /* morekeys_s */ null,
+        /* single_quotes ~ */
+        null, null, null,
+        /* ~ keyspec_currency */
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_y */ "\u00FD,\u0133",
@@ -696,7 +696,7 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_l */
         // U+011F: "ÄŸ" LATIN SMALL LETTER G WITH BREVE
@@ -763,8 +763,8 @@ public final class KeyboardTextsTable {
         // U+0997: "ग" BENGALI LETTER GA
         /* keylabel_to_alpha */ "\u0995\u0996\u0997",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+09F3: "৳" BENGALI RUPEE SIGN
         /* keyspec_currency */ "\u09F3",
     };
@@ -903,10 +903,10 @@ public final class KeyboardTextsTable {
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         /* morekeys_s */ "\u0161,\u00DF,\u015B",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         /* morekeys_d */ "\u010F",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -962,10 +962,10 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u00DF,\u015B,\u0161",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         /* morekeys_d */ "\u00F0",
         /* morekeys_z */ null,
@@ -1038,7 +1038,7 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null, null,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_raqm_laqm",
@@ -1199,12 +1199,12 @@ public final class KeyboardTextsTable {
         // U+0219: "È™" LATIN SMALL LETTER S WITH COMMA BELOW
         // U+015F: "ÅŸ" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u00DF,\u0161,\u015B,\u0219,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+0177: "Å·" LATIN SMALL LETTER Y WITH CIRCUMFLEX
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         // U+00FE: "þ" LATIN SMALL LETTER THORN
         /* morekeys_y */ "y,\u00FD,\u0177,\u00FF,\u00FE",
-        /* keyspec_currency */ null,
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         // U+0111: "Ä‘" LATIN SMALL LETTER D WITH STROKE
@@ -1397,10 +1397,10 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ÅŸ" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         /* morekeys_d */ "\u010F",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -1504,13 +1504,13 @@ public final class KeyboardTextsTable {
         // U+067E: "Ù¾" ARABIC LETTER PEH
         /* keylabel_to_alpha */ "\u0627\u200C\u0628\u200C\u067E",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+FDFC: "ï·¼" RIAL SIGN
         /* keyspec_currency */ "\uFDFC",
-        /* morekeys_d ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+06F1: "Û±" EXTENDED ARABIC-INDIC DIGIT ONE
         /* keyspec_symbols_1 */ "\u06F1",
@@ -1662,7 +1662,7 @@ public final class KeyboardTextsTable {
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         /* morekeys_s */ "\u0161,\u00DF,\u015B",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null,
         /* ~ morekeys_d */
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -1737,14 +1737,14 @@ public final class KeyboardTextsTable {
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,%,\u0107,\u010D",
         /* double_quotes ~ */
-        null, null, null, null,
-        /* ~ morekeys_s */
+        null, null, null, null, null,
+        /* ~ keyspec_currency */
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "%,\u00FF",
-        /* keyspec_currency ~ */
+        /* morekeys_d ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null, null, null, null, null, null,
         /* ~ keyspec_tablet_comma */
         // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
         /* keyspec_swiss_row1_11 */ "\u00E8",
@@ -1826,13 +1826,13 @@ public final class KeyboardTextsTable {
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
-        /* morekeys_d ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -1886,8 +1886,8 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         /* morekeys_s */ "\u0161,\u015B,\u00DF",
-        /* morekeys_y */ null,
         /* keyspec_currency */ null,
+        /* morekeys_y */ null,
         // U+0111: "Ä‘" LATIN SMALL LETTER D WITH STROKE
         /* morekeys_d */ "\u0111",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -2064,10 +2064,10 @@ public final class KeyboardTextsTable {
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
         /* morekeys_s */ null,
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         /* morekeys_d */ "\u00F0",
         /* morekeys_z */ null,
@@ -2153,14 +2153,13 @@ public final class KeyboardTextsTable {
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_rqm_9qm",
         /* morekeys_s */ null,
-        /* morekeys_y */ null,
         // U+20AA: "₪" NEW SHEQEL SIGN
         /* keyspec_currency */ "\u20AA",
-        /* morekeys_d ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
+        null, null, null, null, null,
         /* ~ morekeys_swiss_row2_11 */
         // U+2605: "★" BLACK STAR
         /* morekeys_star */ "\u2605",
@@ -2305,8 +2304,8 @@ public final class KeyboardTextsTable {
         // U+0CA1: "ಡ" KANNADA LETTER DDA
         /* keylabel_to_alpha */ "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
     };
@@ -2366,8 +2365,8 @@ public final class KeyboardTextsTable {
         // U+0E84: "ຄ" LAO LETTER KHO TAM
         /* keylabel_to_alpha */ "\u0E81\u0E82\u0E84",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20AD: "â‚­" KIP SIGN
         /* keyspec_currency */ "\u20AD",
     };
@@ -2436,10 +2435,10 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ÅŸ" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         /* morekeys_d */ "\u010F",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -2530,10 +2529,10 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ÅŸ" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         /* morekeys_d */ "\u010F",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -2608,8 +2607,8 @@ public final class KeyboardTextsTable {
         // U+0D05: "à´…" MALAYALAM LETTER A
         /* keylabel_to_alpha */ "\u0D05",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
     };
@@ -2625,8 +2624,8 @@ public final class KeyboardTextsTable {
         // U+0412: "Ð’" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20AE: "â‚®" TUGRIK SIGN
         /* keyspec_currency */ "\u20AE",
     };
@@ -2642,13 +2641,13 @@ public final class KeyboardTextsTable {
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
-        /* morekeys_d ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -2789,13 +2788,13 @@ public final class KeyboardTextsTable {
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN
         /* keyspec_currency */ "\u0930\u0941.",
-        /* morekeys_d ~ */
+        /* morekeys_y ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
+        null, null, null, null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -2881,6 +2880,7 @@ public final class KeyboardTextsTable {
         /* morekeys_n */ "\u00F1,\u0144",
         /* single_quotes */ "!text/single_9qm_rqm",
         /* morekeys_s */ null,
+        /* keyspec_currency */ null,
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_y */ "\u0133",
     };
@@ -2930,7 +2930,7 @@ public final class KeyboardTextsTable {
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u015B,\u00DF,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null,
         /* ~ morekeys_d */
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
@@ -3036,7 +3036,7 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u0219,\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null,
         /* ~ morekeys_z */
         // U+021B: "È›" LATIN SMALL LETTER T WITH COMMA BELOW
@@ -3152,10 +3152,10 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+015F: "ÅŸ" LATIN SMALL LETTER S WITH CEDILLA
         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         /* morekeys_d */ "\u010F",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -3196,8 +3196,8 @@ public final class KeyboardTextsTable {
         /* single_quotes */ "!text/single_9qm_lqm",
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u0161",
-        /* morekeys_y */ null,
         /* keyspec_currency */ null,
+        /* morekeys_y */ null,
         // U+0111: "Ä‘" LATIN SMALL LETTER D WITH STROKE
         /* morekeys_d */ "\u0111",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
@@ -3317,10 +3317,10 @@ public final class KeyboardTextsTable {
         // U+015F: "ÅŸ" LATIN SMALL LETTER S WITH CEDILLA
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         /* morekeys_s */ "\u015B,\u0161,\u015F,\u00DF",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "\u00FD,\u00FF",
-        /* keyspec_currency */ null,
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         /* morekeys_d */ "\u00F0,\u010F",
@@ -3405,7 +3405,7 @@ public final class KeyboardTextsTable {
         /* single_quotes */ null,
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
         /* morekeys_s */ "\u00DF",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_l */
         /* morekeys_g */ "g\'",
@@ -3422,12 +3422,29 @@ public final class KeyboardTextsTable {
         // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA
         /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+0BF9: "௹" TAMIL RUPEE SIGN
         /* keyspec_currency */ "\u0BF9",
     };
 
+    /* Locale te_IN: Telugu (India) */
+    private static final String[] TEXTS_te_IN = {
+        /* morekeys_a ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
+        // Label for "switch to alphabetic" key.
+        // U+0C24/U+0C46: "తె" TELUGU LETTER TA/TELUGU VOWEL SIGN E
+        // U+0C32/U+0C41: "లు" TELUGU LETTER LA/TELUGU VOWEL SIGN U
+        // U+0C17/U+0C41: "గు" TELUGU LETTER GA/TELUGU VOWEL SIGN U
+        /* keylabel_to_alpha */ "\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41",
+        /* morekeys_c ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        /* keyspec_currency */ "\u20B9",
+    };
+
     /* Locale th: Thai */
     private static final String[] TEXTS_th = {
         /* morekeys_a ~ */
@@ -3439,8 +3456,8 @@ public final class KeyboardTextsTable {
         // U+0E04: "ค" THAI CHARACTER KHO KHWAI
         /* keylabel_to_alpha */ "\u0E01\u0E02\u0E04",
         /* morekeys_c ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_y */
+        null, null, null, null, null,
+        /* ~ morekeys_s */
         // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
         /* keyspec_currency */ "\u0E3F",
     };
@@ -3541,7 +3558,7 @@ public final class KeyboardTextsTable {
         // U+015B: "Å›" LATIN SMALL LETTER S WITH ACUTE
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
-        /* morekeys_y ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_l */
         // U+011F: "ÄŸ" LATIN SMALL LETTER G WITH BREVE
@@ -3563,11 +3580,10 @@ public final class KeyboardTextsTable {
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
         /* morekeys_s */ null,
-        /* morekeys_y */ null,
         // U+20B4: "â‚´" HRYVNIA SIGN
         /* keyspec_currency */ "\u20B4",
-        /* morekeys_d ~ */
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        /* morekeys_y ~ */
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         /* ~ morekeys_nordic_row2_10 */
         // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
         /* keyspec_east_slavic_row1_9 */ "\u0449",
@@ -3664,14 +3680,14 @@ public final class KeyboardTextsTable {
         /* keylabel_to_alpha ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_s */
+        // U+20AB: "â‚«" DONG SIGN
+        /* keyspec_currency */ "\u20AB",
         // U+1EF3: "ỳ" LATIN SMALL LETTER Y WITH GRAVE
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+1EF7: "á»·" LATIN SMALL LETTER Y WITH HOOK ABOVE
         // U+1EF9: "ỹ" LATIN SMALL LETTER Y WITH TILDE
         // U+1EF5: "ỵ" LATIN SMALL LETTER Y WITH DOT BELOW
         /* morekeys_y */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5",
-        // U+20AB: "â‚«" DONG SIGN
-        /* keyspec_currency */ "\u20AB",
         // U+0111: "Ä‘" LATIN SMALL LETTER D WITH STROKE
         /* morekeys_d */ "\u0111",
     };
@@ -3807,12 +3823,12 @@ public final class KeyboardTextsTable {
         // U+0161: "Å¡" LATIN SMALL LETTER S WITH CARON
         // U+017F: "Å¿" LATIN SMALL LETTER LONG S
         /* morekeys_s */ "\u00DF,\u015B,\u015D,\u015F,\u0161,\u017F",
+        /* keyspec_currency */ null,
         // U+00FD: "ý" LATIN SMALL LETTER Y WITH ACUTE
         // U+0177: "Å·" LATIN SMALL LETTER Y WITH CIRCUMFLEX
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_y */ "\u00FD,\u0177,\u00FF,\u0133",
-        /* keyspec_currency */ null,
         // U+010F: "ď" LATIN SMALL LETTER D WITH CARON
         // U+0111: "Ä‘" LATIN SMALL LETTER D WITH STROKE
         // U+00F0: "ð" LATIN SMALL LETTER ETH
@@ -3867,12 +3883,12 @@ public final class KeyboardTextsTable {
     private static final Object[] LOCALES_AND_TEXTS = {
     // "locale", TEXT_ARRAY,  /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */
         "DEFAULT", TEXTS_DEFAULT, /* 168/168 DEFAULT */
-        "af"     , TEXTS_af,    /*   7/ 12 Afrikaans */
+        "af"     , TEXTS_af,    /*   7/ 13 Afrikaans */
         "ar"     , TEXTS_ar,    /*  55/110 Arabic */
         "az_AZ"  , TEXTS_az_AZ, /*   8/ 18 Azerbaijani (Azerbaijan) */
         "be_BY"  , TEXTS_be_BY, /*   9/ 32 Belarusian (Belarus) */
         "bg"     , TEXTS_bg,    /*   2/  8 Bulgarian */
-        "bn_IN"  , TEXTS_bn_IN, /*   2/ 13 Bengali (India) */
+        "bn_IN"  , TEXTS_bn_IN, /*   2/ 12 Bengali (India) */
         "ca"     , TEXTS_ca,    /*  11/ 96 Catalan */
         "cs"     , TEXTS_cs,    /*  17/ 21 Czech */
         "da"     , TEXTS_da,    /*  19/ 54 Danish */
@@ -3897,19 +3913,19 @@ public final class KeyboardTextsTable {
         "ka_GE"  , TEXTS_ka_GE, /*   3/ 10 Georgian (Georgia) */
         "kk"     , TEXTS_kk,    /*  15/121 Kazakh */
         "km_KH"  , TEXTS_km_KH, /*   2/122 Khmer (Cambodia) */
-        "kn_IN"  , TEXTS_kn_IN, /*   2/ 13 Kannada (India) */
+        "kn_IN"  , TEXTS_kn_IN, /*   2/ 12 Kannada (India) */
         "ky"     , TEXTS_ky,    /*  10/ 89 Kirghiz */
-        "lo_LA"  , TEXTS_lo_LA, /*   2/ 13 Lao (Laos) */
+        "lo_LA"  , TEXTS_lo_LA, /*   2/ 12 Lao (Laos) */
         "lt"     , TEXTS_lt,    /*  18/ 22 Lithuanian */
         "lv"     , TEXTS_lv,    /*  18/ 22 Latvian */
         "mk"     , TEXTS_mk,    /*   9/ 94 Macedonian */
-        "ml_IN"  , TEXTS_ml_IN, /*   2/ 13 Malayalam (India) */
-        "mn_MN"  , TEXTS_mn_MN, /*   2/ 13 Mongolian (Mongolia) */
+        "ml_IN"  , TEXTS_ml_IN, /*   2/ 12 Malayalam (India) */
+        "mn_MN"  , TEXTS_mn_MN, /*   2/ 12 Mongolian (Mongolia) */
         "mr_IN"  , TEXTS_mr_IN, /*  23/ 53 Marathi (India) */
         "my_MM"  , TEXTS_my_MM, /*   8/104 Burmese (Myanmar) */
         "nb"     , TEXTS_nb,    /*  11/ 54 Norwegian Bokmål */
         "ne_NP"  , TEXTS_ne_NP, /*  23/ 53 Nepali (Nepal) */
-        "nl"     , TEXTS_nl,    /*   9/ 12 Dutch */
+        "nl"     , TEXTS_nl,    /*   9/ 13 Dutch */
         "pl"     , TEXTS_pl,    /*  10/ 17 Polish */
         "pt"     , TEXTS_pt,    /*   6/  7 Portuguese */
         "rm"     , TEXTS_rm,    /*   1/  2 Raeto-Romance */
@@ -3921,8 +3937,9 @@ public final class KeyboardTextsTable {
         "sr"     , TEXTS_sr,    /*  11/ 94 Serbian */
         "sv"     , TEXTS_sv,    /*  21/ 54 Swedish */
         "sw"     , TEXTS_sw,    /*   9/ 18 Swahili */
-        "ta_IN"  , TEXTS_ta_IN, /*   2/ 13 Tamil (India) */
-        "th"     , TEXTS_th,    /*   2/ 13 Thai */
+        "ta_IN"  , TEXTS_ta_IN, /*   2/ 12 Tamil (India) */
+        "te_IN"  , TEXTS_te_IN, /*   2/ 12 Telugu (India) */
+        "th"     , TEXTS_th,    /*   2/ 12 Thai */
         "tl"     , TEXTS_tl,    /*   7/  9 Tagalog */
         "tr"     , TEXTS_tr,    /*   7/ 18 Turkish */
         "uk"     , TEXTS_uk,    /*  11/ 88 Ukrainian */
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
index 6b0652c595..eb67bc134e 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
@@ -25,7 +25,7 @@ import java.util.ArrayList;
 
 @SmallTest
 public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsBase {
-    private static final int NUMBER_OF_SUBTYPES = 76;
+    private static final int NUMBER_OF_SUBTYPES = 77;
     private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 45;
     private static final int NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES = 2;
 
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Telugu.java b/tests/src/com/android/inputmethod/keyboard/layout/Telugu.java
new file mode 100644
index 0000000000..f5d8d4148e
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/Telugu.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+package com.android.inputmethod.keyboard.layout;
+
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
+import com.android.inputmethod.latin.Constants;
+
+import java.util.Locale;
+
+/**
+ * The Telugu keyboard.
+ */
+public final class Telugu extends LayoutBase {
+    private static final String LAYOUT_NAME = "telugu";
+
+    public Telugu(final LayoutCustomizer customizer) {
+        super(customizer, Symbols.class, SymbolsShifted.class);
+    }
+
+    @Override
+    public String getName() { return LAYOUT_NAME; }
+
+    public static class TeluguCustomizer extends LayoutCustomizer {
+        public TeluguCustomizer(final Locale locale) { super(locale); }
+
+        @Override
+        public ExpectedKey getAlphabetKey() { return TELUGU_ALPHABET_KEY; }
+
+        @Override
+        public ExpectedKey getCurrencyKey() { return CURRENCY_RUPEE; }
+
+        @Override
+        public ExpectedKey[] getOtherCurrencyKeys() {
+            return SymbolsShifted.CURRENCIES_OTHER_GENERIC;
+        }
+
+        @Override
+        public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
+            return EMPTY_KEYS;
+        }
+
+        @Override
+        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
+            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
+        }
+
+        @Override
+        public ExpectedKey[] getSpaceKeys(final boolean isPhone) {
+            return joinKeys(LANGUAGE_SWITCH_KEY, SPACE_KEY, key(ZWNJ_KEY, ZWJ_KEY));
+        }
+
+        // U+0C24/U+0C46: "తె" TELUGU LETTER TA/TELUGU VOWEL SIGN E
+        // U+0C32/U+0C41: "లు" TELUGU LETTER LA/TELUGU VOWEL SIGN U
+        // U+0C17/U+0C41: "గు" TELUGU LETTER GA/TELUGU VOWEL SIGN U
+        private static final ExpectedKey TELUGU_ALPHABET_KEY = key(
+                "\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41", Constants.CODE_SWITCH_ALPHA_SYMBOL);
+
+        // U+20B9: "₹" INDIAN RUPEE SIGN
+        private static final ExpectedKey CURRENCY_RUPEE = key("\u20B9",
+                Symbols.CURRENCY_GENERIC_MORE_KEYS);
+    }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetLayout(boolean isPhone) { return ALPHABET_COMMON; }
+
+    @Override
+    ExpectedKey[][] getCommonAlphabetShiftLayout(boolean isPhone, final int elementId) {
+        return null;
+    }
+
+    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
+            .setKeysOfRow(1,
+                    // U+0C4C: "ౌ" TELUGU VOWEL SIGN AU
+                    // U+0C14: "à°”" TELUGU LETTER AU
+                    key("\u0C4C", joinMoreKeys("\u0C14", "1")),
+                    // U+0C48: "ై" TELUGU VOWEL SIGN AI
+                    // U+0C10: "ఐ" TELUGU LETTER AI
+                    key("\u0C48", joinMoreKeys("\u0C10", "2")),
+                    // U+0C3E: "à°¾" TELUGU VOWEL SIGN AA
+                    // U+0C06: "à°†" TELUGU LETTER AA
+                    key("\u0C3E", joinMoreKeys("\u0C06", "3")),
+                    // U+0C40: "à±€" TELUGU VOWEL SIGN II
+                    // U+0C08: "à°ˆ" TELUGU LETTER II
+                    key("\u0C40", joinMoreKeys("\u0C08", "4")),
+                    // U+0C42: "ూ" TELUGU VOWEL SIGN UU
+                    // U+0C0A: "à°Š" TELUGU LETTER UU
+                    key("\u0C42", joinMoreKeys("\u0C0A", "5")),
+                    // U+0C2C: "à°¬" TELUGU LETTER BA
+                    // U+0C2D: "à°­" TELUGU LETTER BHA
+                    key("\u0C2C", joinMoreKeys("\u0C2D", "6")),
+                    // U+0C39: "à°¹" TELUGU LETTER HA
+                    // U+0C03: "à°ƒ" TELUGU SIGN VISARGA
+                    key("\u0C39", joinMoreKeys("\u0C03", "7")),
+                    // U+0C17: "à°—" TELUGU LETTER GA
+                    // U+0C18: "à°˜" TELUGU LETTER GHA
+                    key("\u0C17", joinMoreKeys("\u0C18", "8")),
+                    // U+0C26: "à°¦" TELUGU LETTER DA
+                    // U+0C27: "à°§" TELUGU LETTER DHA
+                    key("\u0C26", joinMoreKeys("\u0C27", "9")),
+                    // U+0C1C: "జ" TELUGU LETTER JA
+                    // U+0C1D: "ఝ" TELUGU LETTER JHA
+                    key("\u0C1C", joinMoreKeys("\u0C1D", "0")),
+                    // U+0C21: "à°¡" TELUGU LETTER DDA
+                    // U+0C22: "à°¢" TELUGU LETTER DDHA
+                    key("\u0C21", moreKey("\u0C22")))
+            .setKeysOfRow(2,
+                    // U+0C4B: "ో" TELUGU VOWEL SIGN OO
+                    // U+0C13: "à°“" TELUGU LETTER OO
+                    key("\u0C4B", moreKey("\u0C13")),
+                    // U+0C47: "ే" TELUGU VOWEL SIGN EE
+                    // U+0C0F: "ఏ" TELUGU LETTER EE
+                    key("\u0C47", moreKey("\u0C0F")),
+                    // U+0C4D: "్" TELUGU SIGN VIRAMA
+                    // U+0C05: "à°…" TELUGU LETTER A
+                    key("\u0C4D", moreKey("\u0C05")),
+                    // U+0C3F: "à°¿" TELUGU VOWEL SIGN I
+                    // U+0C07: "à°‡" TELUGU LETTER I
+                    key("\u0C3F", moreKey("\u0C07")),
+                    // U+0C41: "ు" TELUGU VOWEL SIGN U
+                    // U+0C09: "à°‰" TELUGU LETTER U
+                    key("\u0C41", moreKey("\u0C09")),
+                    // U+0C2A: "à°ª" TELUGU LETTER PA
+                    // U+0C2B: "à°«" TELUGU LETTER PHA
+                    key("\u0C2A", moreKey("\u0C2B")),
+                    // U+0C30: "à°°" TELUGU LETTER RA
+                    // U+0C31: "à°±" TELUGU LETTER RRA
+                    // U+0C43: "ృ" TELUGU VOWEL SIGN VOCALIC R
+                    key("\u0C30", joinMoreKeys("\u0C31", "\u0C43")),
+                    // U+0C15: "à°•" TELUGU LETTER KA
+                    // U+0C16: "à°–" TELUGU LETTER KHA
+                    key("\u0C15", moreKey("\u0C16")),
+                    // U+0C24: "à°¤" TELUGU LETTER TA
+                    // U+0C25: "à°¥" TELUGU LETTER THA
+                    key("\u0C24", moreKey("\u0C25")),
+                    // U+0C1A: "à°š" TELUGU LETTER CA
+                    // U+0C1B: "à°›" TELUGU LETTER CHA
+                    key("\u0C1A", moreKey("\u0C1B")),
+                    // U+0C1F: "à°Ÿ" TELUGU LETTER TTA
+                    // U+0C20: "à° " TELUGU LETTER TTHA
+                    key("\u0C1F", moreKey("\u0C20")))
+            .setKeysOfRow(3,
+                    // U+0C46: "ె" TELUGU VOWEL SIGN E
+                    // U+0C12: "à°’" TELUGU LETTER O
+                    key("\u0C46", moreKey("\u0C12")),
+                    // U+0C02: "à°‚" TELUGU SIGN ANUSVARA
+                    // U+0C0E: "à°Ž" TELUGU LETTER E
+                    key("\u0C02", moreKey("\u0C0E")),
+                    // U+0C2E: "à°®" TELUGU LETTER MA
+                    "\u0C2E",
+                    // U+0C28: "à°¨" TELUGU LETTER NA
+                    // U+0C23: "à°£" TELUGU LETTER NNA
+                    // U+0C19: "à°™" TELUGU LETTER NGA
+                    key("\u0C28", joinMoreKeys("\u0C23", "\u0C19")),
+                    // U+0C35: "à°µ" TELUGU LETTER VA
+                    "\u0C35",
+                    // U+0C32: "à°²" TELUGU LETTER LA
+                    // U+0C33: "à°³" TELUGU LETTER LLA
+                    key("\u0C32", moreKey("\u0C33")),
+                    // U+0C38: "à°¸" TELUGU LETTER SA
+                    // U+0C36: "à°¶" TELUGU LETTER SHA
+                    key("\u0C38", moreKey("\u0C36")),
+                    // U+0C0B: "à°‹" TELUGU LETTER VOCALIC R
+                    // U+0C4D/U+0C30: "్ర" TELUGU SIGN VIRAMA/TELUGU LETTER RA
+                    key("\u0C0B", moreKey("\u0C4D\u0C30")),
+                    // U+0C37: "à°·" TELUGU LETTER SSA
+                    // U+0C15/U+0C4D/U+0C37:
+                    //     "క్ష" TELUGU LETTER KA/TELUGU SIGN VIRAMA/TELUGU LETTER SSA
+                    key("\u0C37", moreKey("\u0C15\u0C4D\u0C37")),
+                    // U+0C2F: "à°¯" TELUGU LETTER YA
+                    // U+0C1C/U+0C4D/U+0C1E:
+                    //     "జ్ఞ" TELUGU LETTER JA/TELUGU SIGN VIRAMA/TELUGU LETTER NYA
+                    key("\u0C2F", moreKey("\u0C1C\u0C4D\u0C1E")))
+            .build();
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTeluguIN.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTeluguIN.java
new file mode 100644
index 0000000000..04996d9aa2
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsTeluguIN.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+package com.android.inputmethod.keyboard.layout.tests;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.inputmethod.keyboard.layout.LayoutBase;
+import com.android.inputmethod.keyboard.layout.Telugu;
+import com.android.inputmethod.keyboard.layout.Telugu.TeluguCustomizer;
+
+import java.util.Locale;
+
+/**
+ * te_IN: Telugu (India)/telugu
+ */
+@SmallTest
+public final class TestsTeluguIN extends LayoutTestsBase {
+    private static final Locale LOCALE = new Locale("te", "IN");
+    private static final LayoutBase LAYOUT = new Telugu(new TeluguCustomizer(LOCALE));
+
+    @Override
+    LayoutBase getLayout() { return LAYOUT; }
+}
diff --git a/tools/make-keyboard-text/res/values-te-rIN/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-te-rIN/donottranslate-more-keys.xml
new file mode 100644
index 0000000000..7fa769d064
--- /dev/null
+++ b/tools/make-keyboard-text/res/values-te-rIN/donottranslate-more-keys.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, 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">
+    <!-- Label for "switch to alphabetic" key.
+         U+0C24/U+0C46: "తె" TELUGU LETTER TA/TELUGU VOWEL SIGN E
+         U+0C32/U+0C41: "లు" TELUGU LETTER LA/TELUGU VOWEL SIGN U
+         U+0C17/U+0C41: "గు" TELUGU LETTER GA/TELUGU VOWEL SIGN U -->
+    <string name="keylabel_to_alpha">&#x0C24;&#x0C46;&#x0C32;&#x0C41;&#x0C17;&#x0C41;</string>
+    <!-- U+20B9: "₹" INDIAN RUPEE SIGN -->
+    <string name="keyspec_currency">&#x20B9;</string>
+</resources>
-- 
GitLab