diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index bf36337..d9e42f1 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -556,7 +556,7 @@
             <enum name="lao" value="10" />
             <enum name="latin" value="11" />
             <enum name="malayalam" value="12" />
-            <enum name="myanmar" value="13" />
+            <!-- Myanmar is disabled. <enum name="myanmar" value="13" /> -->
             <enum name="sinhala" value="14" />
             <enum name="tamil" value="15" />
             <enum name="telugu" value="16" />
diff --git a/java/res/xml-sw600dp/rows_myanmar.xml b/java/res/xml-sw600dp/rows_myanmar.xml
deleted file mode 100644
index 20d9d8a..0000000
--- a/java/res/xml-sw600dp/rows_myanmar.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?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.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar1" />
-        <Key
-            latin:keyStyle="deleteKeyStyle"
-            latin:keyWidth="fillRight" />
-    </Row>
-    <Row
-        latin:keyWidth="9.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar2" />
-    </Row>
-    <Row
-        latin:keyWidth="9.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar3" />
-        <Key
-            latin:keyStyle="enterKeyStyle"
-            latin:keyWidth="fillRight" />
-    </Row>
-    <Row
-        latin:keyWidth="9.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <Key
-            latin:keyStyle="shiftKeyStyle"
-            latin:keyWidth="10.0%p" />
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar4" />
-        <include latin:keyboardLayout="@xml/keys_exclamation_question" />
-    </Row>
-    <include latin:keyboardLayout="@xml/row_qwerty4" />
-</merge>
diff --git a/java/res/xml/kbd_myanmar.xml b/java/res/xml/kbd_myanmar.xml
deleted file mode 100644
index af997b1..0000000
--- a/java/res/xml/kbd_myanmar.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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"
-    latin:rowHeight="20%p"
-    latin:verticalGap="@fraction/config_key_vertical_gap_5row"
-    latin:keyLetterSize="@fraction/config_key_letter_ratio_5row"
-    latin:keyShiftedLetterHintRatio="@fraction/config_key_shifted_letter_hint_ratio_5row"
-    latin:touchPositionCorrectionData="@array/touch_position_correction_data_default"
->
-    <include
-        latin:keyboardLayout="@xml/rows_myanmar" />
-</Keyboard>
diff --git a/java/res/xml/keyboard_layout_set_myanmar.xml b/java/res/xml/keyboard_layout_set_myanmar.xml
deleted file mode 100644
index 5af8c06..0000000
--- a/java/res/xml/keyboard_layout_set_myanmar.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?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">
-    <Feature
-        latin:supportedScript="myanmar" />
-    <Element
-        latin:elementName="alphabet"
-        latin:elementKeyboard="@xml/kbd_myanmar"
-        latin:enableProximityCharsCorrection="true" />
-    <Element
-        latin:elementName="alphabetAutomaticShifted"
-        latin:elementKeyboard="@xml/kbd_myanmar"
-        latin:enableProximityCharsCorrection="true" />
-    <!-- On these shifted alphabet layouts the proximity characters correction should be disabled
-         because the letters on these layouts aren't the ones in different case of the above
-         unshifted layouts. -->
-    <Element
-        latin:elementName="alphabetManualShifted"
-        latin:elementKeyboard="@xml/kbd_myanmar" />
-    <Element
-        latin:elementName="alphabetShiftLocked"
-        latin:elementKeyboard="@xml/kbd_myanmar" />
-    <Element
-        latin:elementName="alphabetShiftLockShifted"
-        latin:elementKeyboard="@xml/kbd_myanmar" />
-    <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 e148622..33a10fa 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -75,7 +75,6 @@
     mn_MN: Mongolian (Mongolia)/mongolian
     mr_IN: Marathi (India)/marathi
     ms_MY: Malay (Malaysia)/qwerty
-    my_MM: Myanmar (Myanmar)/myanmar # This is a preliminary keyboard layout.
     nb: Norwegian Bokmål/nordic
     ne_NP: Nepali (Nepal) Romanized/nepali_romanized
     ne_NP: Nepali (Nepal) Traditional/nepali_traditional
@@ -545,16 +544,6 @@
             android:imeSubtypeExtraValue="KeyboardLayoutSet=qwerty,AsciiCapable,EmojiCapable"
             android:isAsciiCapable="true"
     />
-    <!-- TODO: This Myanmar 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="0xea266ea4"
-            android:imeSubtypeLocale="my_MM"
-            android:imeSubtypeMode="keyboard"
-            android:imeSubtypeExtraValue="KeyboardLayoutSet=myanmar,EmojiCapable,CombiningRules=MyanmarReordering"
-            android:isAsciiCapable="false"
-    />
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
             android:subtypeId="0x3f12ee14"
diff --git a/java/res/xml/rowkeys_myanmar1.xml b/java/res/xml/rowkeys_myanmar1.xml
deleted file mode 100644
index 1170074..0000000
--- a/java/res/xml/rowkeys_myanmar1.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?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">
-    <switch>
-        <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
-            <!-- U+1027: "ဧ" MYANMAR LETTER E -->
-            <Key latin:keySpec="&#x1027;" />
-            <!-- U+104F: "၏" MYANMAR SYMBOL GENITIVE -->
-            <Key latin:keySpec="&#x104F;" />
-            <!-- U+1024: "ဤ" MYANMAR LETTER II -->
-            <Key latin:keySpec="&#x1024;" />
-            <!-- U+1023: "ဣ" MYANMAR LETTER I -->
-            <Key latin:keySpec="&#x1023;" />
-            <!-- U+104E: "၎" MYANMAR SYMBOL AFOREMENTIONED -->
-            <Key latin:keySpec="&#x104E;" />
-            <!-- U+1000/U+103B/U+1015/U+103A: "ကျပ်"
-                 MYANMAR LETTER KA/MYANMAR CONSONANT SIGN MEDIAL YA/MYANMAR LETTER PA/MYANMAR SIGN ASAT -->
-            <Key
-                latin:keySpec="&#x1000;&#x103B;&#x1015;&#x103A;"
-                latin:keyLabelFlags="followKeyLetterRatio|autoScale" />
-            <!-- U+1029: "ဩ" MYANMAR LETTER O -->
-            <Key
-                latin:keySpec="&#x1029;"
-                latin:keyLabelFlags="autoScale" />
-            <!-- U+102A: "ဪ" MYANMAR LETTER AU -->
-            <Key
-                latin:keySpec="&#x102A;"
-                latin:keyLabelFlags="autoScale" />
-            <!-- U+104D: "၍" MYANMAR SYMBOL COMPLETED -->
-            <Key latin:keySpec="&#x104D;" />
-            <!-- U+104C: "၌" MYANMAR SYMBOL LOCATIVE -->
-            <Key latin:keySpec="&#x104C;" />
-        </case>
-        <default>
-            <!-- U+1041: "၁" MYANMAR DIGIT ONE -->
-            <Key
-                latin:keySpec="&#x1041;"
-                latin:keyHintLabel="1"
-                latin:additionalMoreKeys="1" />
-            <!-- U+1042: "၂" MYANMAR DIGIT TWO -->
-            <Key
-                latin:keySpec="&#x1042;"
-                latin:keyHintLabel="2"
-                latin:additionalMoreKeys="2" />
-            <!-- U+1043: "၃" MYANMAR DIGIT THREE -->
-            <Key
-                latin:keySpec="&#x1043;"
-                latin:keyHintLabel="3"
-                latin:additionalMoreKeys="3" />
-            <!-- U+1044: "၄" MYANMAR DIGIT FOUR -->
-            <Key
-                latin:keySpec="&#x1044;"
-                latin:keyHintLabel="4"
-                latin:additionalMoreKeys="4" />
-            <!-- U+1045: "၅" MYANMAR DIGIT FIVE -->
-            <Key
-                latin:keySpec="&#x1045;"
-                latin:keyHintLabel="5"
-                latin:additionalMoreKeys="5" />
-            <!-- U+1046: "၆" MYANMAR DIGIT SIX -->
-            <Key
-                latin:keySpec="&#x1046;"
-                latin:keyHintLabel="6"
-                latin:additionalMoreKeys="6" />
-            <!-- U+1047: "၇" MYANMAR DIGIT SEVEN -->
-            <Key
-                latin:keySpec="&#x1047;"
-                latin:keyHintLabel="7"
-                latin:additionalMoreKeys="7" />
-            <!-- U+1048: "၈" MYANMAR DIGIT EIGHT -->
-            <Key
-                latin:keySpec="&#x1048;"
-                latin:keyHintLabel="8"
-                latin:additionalMoreKeys="8" />
-            <!-- U+1049: "၉" MYANMAR DIGIT NINE -->
-            <Key
-                latin:keySpec="&#x1049;"
-                latin:keyHintLabel="9"
-                latin:additionalMoreKeys="9" />
-            <!-- U+1040: "၀" MYANMAR DIGIT ZERO -->
-            <Key
-                latin:keySpec="&#x1040;"
-                latin:keyHintLabel="0"
-                latin:additionalMoreKeys="0" />
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml/rowkeys_myanmar2.xml b/java/res/xml/rowkeys_myanmar2.xml
deleted file mode 100644
index ae71ecb..0000000
--- a/java/res/xml/rowkeys_myanmar2.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?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">
-    <switch>
-        <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
-            <!-- U+1017: "ဗ" MYANMAR LETTER BA
-                 U+1039/U+1017: "္ဗ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BA -->
-            <Key
-                latin:keySpec="&#x1017;"
-                latin:moreKeys="&#x1039;&#x1017;" />
-            <!-- U+1012: "ဒ" MYANMAR LETTER DA
-                 U+1039/U+1012: "္ဒ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DA -->
-            <Key
-                latin:keySpec="&#x1012;"
-                latin:moreKeys="&#x1039;&#x1012;" />
-            <!-- U+1013: "ဓ" MYANMAR LETTER DHA
-                 U+1039/U+1013: "္ဓ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DHA -->
-            <Key
-                latin:keySpec="&#x1013;"
-                latin:moreKeys="&#x1039;&#x1013;" />
-            <!-- U+1003: "ဃ" MYANMAR LETTER GHA -->
-            <Key latin:keySpec="&#x1003;" />
-            <!-- U+100E: "ဎ" MYANMAR LETTER DDHA -->
-            <Key latin:keySpec="&#x100E;" />
-            <!-- U+103F: "ဿ" MYANMAR LETTER GREAT SA -->
-            <Key latin:keySpec="&#x103F;" />
-            <!-- U+100F: "ဏ" MYANMAR LETTER NNA -->
-            <Key latin:keySpec="&#x100F;" />
-            <!-- U+1008: "ဈ" MYANMAR LETTER JHA
-                 U+1039/U+1008: "္ဈ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JHA -->
-            <Key
-                latin:keySpec="&#x1008;"
-                latin:moreKeys="&#x1039;&#x1008;" />
-            <!-- U+1007: "ဇ" MYANMAR LETTER JA
-                 U+1039/U+1007: "္ဇ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JA -->
-            <Key
-                latin:keySpec="&#x1007;"
-                latin:moreKeys="&#x1039;&#x1007;" />
-            <!-- U+1002: "ဂ" MYANMAR LETTER GA
-                 U+1039/U+1002: "္ဂ" MYANMAR SIGN VIRAMA/MYANMAR LETTER GA -->
-            <Key
-                latin:keySpec="&#x1002;"
-                latin:moreKeys="&#x1039;&#x1002;" />
-        </case>
-        <default>
-            <!-- U+1006: "ဆ" MYANMAR LETTER CHA
-                 U+1039/U+1006: "္ဆ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CHA -->
-            <Key
-                latin:keySpec="&#x1006;"
-                latin:moreKeys="&#x1039;&#x1006;" />
-            <!-- U+1010: "တ" MYANMAR LETTER TA
-                 U+1039/U+1010: "္တ" MYANMAR SIGN VIRAMA/MYANMAR LETTER TA -->
-            <Key
-                latin:keySpec="&#x1010;"
-                latin:moreKeys="&#x1039;&#x1010;" />
-            <!-- U+1014: "န" MYANMAR LETTER NA
-                 U+1039/U+1014: "္န" MYANMAR SIGN VIRAMA/MYANMAR LETTER NA -->
-            <Key
-                latin:keySpec="&#x1014;"
-                latin:moreKeys="&#x1039;&#x1014;" />
-            <!-- U+1019: "မ" MYANMAR LETTER MA
-                 U+1039/U+1019: "္မ" MYANMAR SIGN VIRAMA/MYANMAR LETTER MA -->
-            <Key
-                latin:keySpec="&#x1019;"
-                latin:moreKeys="&#x1039;&#x1019;" />
-            <!-- U+1021: "အ" MYANMAR LETTER A -->
-            <Key latin:keySpec="&#x1021;" />
-            <!-- U+1015: "ပ" MYANMAR LETTER PA -->
-            <Key latin:keySpec="&#x1015;" />
-            <!-- U+1000: "က" MYANMAR LETTER KA
-                 U+1039/U+1000: "္က" MYANMAR SIGN VIRAMA/MYANMAR LETTER KA -->
-            <Key
-                latin:keySpec="&#x1000;"
-                latin:moreKeys="&#x1039;&#x1000;" />
-            <!-- U+1004: "င" MYANMAR LETTER NGA -->
-            <Key latin:keySpec="&#x1004;" />
-            <!-- U+101E: "သ" MYANMAR LETTER SA -->
-            <Key latin:keySpec="&#x101E;" />
-            <!-- U+1005: "စ" MYANMAR LETTER CA
-                 U+1039/U+1005: "္စ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CA -->
-            <Key
-                latin:keySpec="&#x1005;"
-                latin:moreKeys="&#x1039;&#x1005;" />
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml/rowkeys_myanmar3.xml b/java/res/xml/rowkeys_myanmar3.xml
deleted file mode 100644
index 4dafe09..0000000
--- a/java/res/xml/rowkeys_myanmar3.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?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">
-    <switch>
-        <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
-            <!-- U+101A: "ယ" MYANMAR LETTER YA -->
-            <Key latin:keySpec="&#x101A;" />
-            <!-- U+1039: "္" MYANMAR SIGN VIRAMA -->
-            <Key latin:keySpec="&#x1039;" />
-            <!-- U+1004/U+103A/U+1039: "င်္င" MYANMAR LETTER NGA/MYANMAR SIGN ASAT/MYANMAR SIGN VIRAMA -->
-            <Key
-                latin:keySpec="&#x1004;&#x103A;&#x1039;"
-                latin:keyLabelFlags="followKeyLetterRatio" />
-            <!-- U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA -->
-            <Key latin:keySpec="&#x103E;" />
-            <!-- U+102E: "ီ" MYANMAR VOWEL SIGN II -->
-            <Key latin:keySpec="&#x102E;" />
-            <!-- U+1030: "ူ" MYANMAR VOWEL SIGN UU -->
-            <Key latin:keySpec="&#x1030;" />
-            <!-- U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA -->
-            <Key latin:keySpec="&#x102B;" />
-            <!-- U+1032: "ဲ" MYANMAR VOWEL SIGN AI -->
-            <Key latin:keySpec="&#x1032;" />
-            <!-- U+1036: "ံ" MYANMAR SIGN ANUSVARA -->
-            <Key latin:keySpec="&#x1036;" />
-            <!-- U+101F: "ဟ" MYANMAR LETTER HA -->
-            <Key latin:keySpec="&#x101F;" />
-        </case>
-        <default>
-            <!-- U+1031: "ေ" MYANMAR VOWEL SIGN E -->
-            <Key latin:keySpec="&#x1031;" />
-            <!-- U+103B: "ျ" MYANMAR CONSONANT SIGN MEDIAL YA -->
-            <Key latin:keySpec="&#x103B;" />
-            <!-- U+103C: "ြ" MYANMAR CONSONANT SIGN MEDIAL RA -->
-            <Key latin:keySpec="&#x103C;" />
-            <!-- U+103D: "ွ" MYANMAR CONSONANT SIGN MEDIAL WA
-                 U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA
-                 U+103D/U+103E: "ွှ" MYANMAR CONSONANT SIGN MEDIAL WA/MYANMAR CONSONANT SIGN MEDIAL HA -->
-            <Key
-                latin:keySpec="&#x103D;"
-                latin:moreKeys="&#x103E;,&#x103D;&#x103E;" />
-            <!-- U+102D: "ိ" MYANMAR VOWEL SIGN I
-                 U+102E: "ီ" MYANMAR VOWEL SIGN II -->
-            <Key
-                latin:keySpec="&#x102D;"
-                latin:moreKeys="&#x102E;" />
-            <!-- U+102F: "ု" MYANMAR VOWEL SIGN U
-                 U+1030: "ူ" MYANMAR VOWEL SIGN UU -->
-            <Key
-                latin:keySpec="&#x102F;"
-                latin:moreKeys="&#x1030;" />
-            <!-- U+102C: "ာ" MYANMAR VOWEL SIGN AA
-                 U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA -->
-            <Key
-                latin:keySpec="&#x102C;"
-                latin:moreKeys="&#x102B;" />
-            <!-- U+103A: "်" MYANMAR SIGN ASAT
-                 U+1032: "ဲ" MYANMAR VOWEL SIGN AI -->
-            <Key
-                latin:keySpec="&#x103A;"
-                latin:moreKeys="&#x1032;" />
-            <!-- U+1037: "့" MYANMAR SIGN DOT BELOW
-                 U+1036: "ံ" MYANMAR SIGN ANUSVARA -->
-            <Key
-                latin:keySpec="&#x1037;"
-                latin:moreKeys="&#x1036;" />
-            <!-- U+1038: "း" MYANMAR SIGN VISARGA -->
-            <Key latin:keySpec="&#x1038;" />
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml/rowkeys_myanmar4.xml b/java/res/xml/rowkeys_myanmar4.xml
deleted file mode 100644
index a1befcf..0000000
--- a/java/res/xml/rowkeys_myanmar4.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?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">
-    <switch>
-        <case latin:keyboardLayoutSetElement="alphabetManualShifted|alphabetShiftLocked|alphabetShiftLockShifted">
-            <!-- U+1025: "ဥ" MYANMAR LETTER U -->
-            <Key latin:keySpec="&#x1025;" />
-            <!-- U+1026: "ဦ" MYANMAR LETTER UU -->
-            <Key latin:keySpec="&#x1026;" />
-            <!-- U+100C: "ဌ" MYANMAR LETTER TTHA -->
-            <Key latin:keySpec="&#x100C;" />
-            <!-- U+100B: "ဋ" MYANMAR LETTER TTA -->
-            <Key latin:keySpec="&#x100B;" />
-            <!-- U+100D: "ဍ" MYANMAR LETTER DDA -->
-            <Key latin:keySpec="&#x100D;" />
-            <!-- U+1020: "ဠ" MYANMAR LETTER LLA -->
-            <Key latin:keySpec="&#x1020;" />
-            <!-- U+100B/U+1039/U+100C: "ဋ္ဌ" MYANMAR LETTER TTA/MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA -->
-            <Key
-                latin:keySpec="&#x100B;&#x1039;&#x100C;"
-                latin:keyLabelFlags="followKeyLetterRatio" />
-            <!-- U+100F/U+1039/U+100D: "ဏ္ဍ" MYANMAR LETTER NNA/MYANMAR SIGN VIRAMA/MYANMAR LETTER DDA
-                 U+100F/U+1039/U+100C: "ဏ္ဌ" MYANMAR LETTER NNA/MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA -->
-            <Key
-                latin:keySpec="&#x100F;&#x1039;&#x100D;"
-                latin:moreKeys="&#x100F;&#x1039;&#x100C;"
-                latin:keyLabelFlags="followKeyLetterRatio" />
-        </case>
-        <default>
-            <!-- U+1016: "ဖ" MYANMAR LETTER PHA -->
-            <Key latin:keySpec="&#x1016;" />
-            <!-- U+1011: "ထ" MYANMAR LETTER THA
-                 U+1039/U+1011: "္ထ" MYANMAR SIGN VIRAMA/MYANMAR LETTER THA -->
-            <Key
-                latin:keySpec="&#x1011;"
-                latin:moreKeys="&#x1039;&#x1011;" />
-            <!-- U+1001: "ခ" MYANMAR LETTER KHA
-                 U+1039/U+1001: "္ခ" MYANMAR SIGN VIRAMA/MYANMAR LETTER KHA -->
-            <Key
-                latin:keySpec="&#x1001;"
-                latin:moreKeys="&#x1039;&#x1001;" />
-            <!-- U+101C: "လ" MYANMAR LETTER LA
-                 U+1039/U+101C: "္လ" MYANMAR SIGN VIRAMA/MYANMAR LETTER LA -->
-            <Key
-                latin:keySpec="&#x101C;"
-                latin:moreKeys="&#x1039;&#x101C;" />
-            <!-- U+1018: "ဘ" MYANMAR LETTER BHA
-                 U+1039/U+1018: "္ဘ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BHA -->
-            <Key
-                latin:keySpec="&#x1018;"
-                latin:moreKeys="&#x1039;&#x1018;" />
-            <!-- U+100A: "ည" MYANMAR LETTER NNYA
-                 U+1009: "ဉ" MYANMAR LETTER NYA -->
-            <Key
-                latin:keySpec="&#x100A;"
-                latin:moreKeys="&#x1009;" />
-            <!-- U+101B: "ရ" MYANMAR LETTER RA -->
-            <Key latin:keySpec="&#x101B;" />
-            <!-- U+101D: "ဝ" MYANMAR LETTER WA -->
-            <Key latin:keySpec="&#x101D;" />
-        </default>
-    </switch>
-</merge>
diff --git a/java/res/xml/rows_myanmar.xml b/java/res/xml/rows_myanmar.xml
deleted file mode 100644
index 54538a9..0000000
--- a/java/res/xml/rows_myanmar.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?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="10.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar1" />
-    </Row>
-    <Row
-        latin:keyWidth="10.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar2" />
-    </Row>
-    <Row
-        latin:keyWidth="10.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar3" />
-    </Row>
-    <Row
-        latin:keyWidth="10.0%p"
-        latin:keyLabelFlags="fontNormal|autoXScale"
-    >
-        <Key latin:keyStyle="shiftKeyStyle" />
-        <include latin:keyboardLayout="@xml/rowkeys_myanmar4" />
-        <Key latin:keyStyle="deleteKeyStyle" />
-    </Row>
-    <include latin:keyboardLayout="@xml/row_qwerty4" />
-</merge>
\ No newline at end of file
diff --git a/java/src/com/android/inputmethod/event/CombinerChain.java b/java/src/com/android/inputmethod/event/CombinerChain.java
index 5858faa..d77ece8 100644
--- a/java/src/com/android/inputmethod/event/CombinerChain.java
+++ b/java/src/com/android/inputmethod/event/CombinerChain.java
@@ -22,7 +22,6 @@
 import com.android.inputmethod.latin.common.Constants;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 
 import javax.annotation.Nonnull;
 
@@ -45,13 +44,6 @@
     private SpannableStringBuilder mStateFeedback;
     private final ArrayList<Combiner> mCombiners;
 
-    private static final HashMap<String, Class<? extends Combiner>> IMPLEMENTED_COMBINERS =
-            new HashMap<>();
-    static {
-        IMPLEMENTED_COMBINERS.put("MyanmarReordering", MyanmarReordering.class);
-    }
-    private static final String COMBINER_SPEC_SEPARATOR = ";";
-
     /**
      * Create an combiner chain.
      *
@@ -61,15 +53,11 @@
      * cursor: we'll start after this.
      *
      * @param initialText The text that has already been combined so far.
-     * @param combinerList A list of combiners to be applied in order.
      */
-    public CombinerChain(final String initialText, final Combiner... combinerList) {
+    public CombinerChain(final String initialText) {
         mCombiners = new ArrayList<>();
         // The dead key combiner is always active, and always first
         mCombiners.add(new DeadKeyCombiner());
-        for (final Combiner combiner : combinerList) {
-            mCombiners.add(combiner);
-        }
         mCombinedText = new StringBuilder(initialText);
         mStateFeedback = new SpannableStringBuilder();
     }
@@ -146,30 +134,4 @@
         final SpannableStringBuilder s = new SpannableStringBuilder(mCombinedText);
         return s.append(mStateFeedback);
     }
-
-    public static Combiner[] createCombiners(final String spec) {
-        if (TextUtils.isEmpty(spec)) {
-            return new Combiner[0];
-        }
-        final String[] combinerDescriptors = spec.split(COMBINER_SPEC_SEPARATOR);
-        final Combiner[] combiners = new Combiner[combinerDescriptors.length];
-        int i = 0;
-        for (final String combinerDescriptor : combinerDescriptors) {
-            final Class<? extends Combiner> combinerClass =
-                    IMPLEMENTED_COMBINERS.get(combinerDescriptor);
-            if (null == combinerClass) {
-                throw new RuntimeException("Unknown combiner descriptor: " + combinerDescriptor);
-            }
-            try {
-                combiners[i++] = combinerClass.newInstance();
-            } catch (InstantiationException e) {
-                throw new RuntimeException("Unable to instantiate combiner: " + combinerDescriptor,
-                        e);
-            } catch (IllegalAccessException e) {
-                throw new RuntimeException("Unable to instantiate combiner: " + combinerDescriptor,
-                        e);
-            }
-        }
-        return combiners;
-    }
 }
diff --git a/java/src/com/android/inputmethod/event/MyanmarReordering.java b/java/src/com/android/inputmethod/event/MyanmarReordering.java
deleted file mode 100644
index 7bc1630..0000000
--- a/java/src/com/android/inputmethod/event/MyanmarReordering.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * 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.event;
-
-import com.android.inputmethod.latin.common.Constants;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import javax.annotation.Nonnull;
-
-/**
- * A combiner that reorders input for Myanmar.
- */
-public class MyanmarReordering implements Combiner {
-    // U+1031 MYANMAR VOWEL SIGN E
-    private final static int VOWEL_E = 0x1031; // Code point for vowel E that we need to reorder
-    // U+200C ZERO WIDTH NON-JOINER
-    // U+200B ZERO WIDTH SPACE
-    private final static int ZERO_WIDTH_NON_JOINER = 0x200B; // should be 0x200C
-
-    private final ArrayList<Event> mCurrentEvents = new ArrayList<>();
-
-    // List of consonants :
-    // U+1000 MYANMAR LETTER KA
-    // U+1001 MYANMAR LETTER KHA
-    // U+1002 MYANMAR LETTER GA
-    // U+1003 MYANMAR LETTER GHA
-    // U+1004 MYANMAR LETTER NGA
-    // U+1005 MYANMAR LETTER CA
-    // U+1006 MYANMAR LETTER CHA
-    // U+1007 MYANMAR LETTER JA
-    // U+1008 MYANMAR LETTER JHA
-    // U+1009 MYANMAR LETTER NYA
-    // U+100A MYANMAR LETTER NNYA
-    // U+100B MYANMAR LETTER TTA
-    // U+100C MYANMAR LETTER TTHA
-    // U+100D MYANMAR LETTER DDA
-    // U+100E MYANMAR LETTER DDHA
-    // U+100F MYANMAR LETTER NNA
-    // U+1010 MYANMAR LETTER TA
-    // U+1011 MYANMAR LETTER THA
-    // U+1012 MYANMAR LETTER DA
-    // U+1013 MYANMAR LETTER DHA
-    // U+1014 MYANMAR LETTER NA
-    // U+1015 MYANMAR LETTER PA
-    // U+1016 MYANMAR LETTER PHA
-    // U+1017 MYANMAR LETTER BA
-    // U+1018 MYANMAR LETTER BHA
-    // U+1019 MYANMAR LETTER MA
-    // U+101A MYANMAR LETTER YA
-    // U+101B MYANMAR LETTER RA
-    // U+101C MYANMAR LETTER LA
-    // U+101D MYANMAR LETTER WA
-    // U+101E MYANMAR LETTER SA
-    // U+101F MYANMAR LETTER HA
-    // U+1020 MYANMAR LETTER LLA
-    // U+103F MYANMAR LETTER GREAT SA
-    private static boolean isConsonant(final int codePoint) {
-        return (codePoint >= 0x1000 && codePoint <= 0x1020) || 0x103F == codePoint;
-    }
-
-    // List of medials :
-    // U+103B MYANMAR CONSONANT SIGN MEDIAL YA
-    // U+103C MYANMAR CONSONANT SIGN MEDIAL RA
-    // U+103D MYANMAR CONSONANT SIGN MEDIAL WA
-    // U+103E MYANMAR CONSONANT SIGN MEDIAL HA
-    // U+105E MYANMAR CONSONANT SIGN MON MEDIAL NA
-    // U+105F MYANMAR CONSONANT SIGN MON MEDIAL MA
-    // U+1060 MYANMAR CONSONANT SIGN MON MEDIAL LA
-    // U+1082 MYANMAR CONSONANT SIGN SHAN MEDIAL WA
-    private static int[] MEDIAL_LIST = { 0x103B, 0x103C, 0x103D, 0x103E,
-            0x105E, 0x105F, 0x1060, 0x1082};
-    private static boolean isMedial(final int codePoint) {
-        return Arrays.binarySearch(MEDIAL_LIST, codePoint) >= 0;
-    }
-
-    private static boolean isConsonantOrMedial(final int codePoint) {
-        return isConsonant(codePoint) || isMedial(codePoint);
-    }
-
-    private Event getLastEvent() {
-        final int size = mCurrentEvents.size();
-        if (size <= 0) {
-            return null;
-        }
-        return mCurrentEvents.get(size - 1);
-    }
-
-    private CharSequence getCharSequence() {
-        final StringBuilder s = new StringBuilder();
-        for (final Event e : mCurrentEvents) {
-            s.appendCodePoint(e.mCodePoint);
-        }
-        return s;
-    }
-
-    /**
-     * Clears the currently combining stream of events and returns the resulting software text
-     * event corresponding to the stream. Optionally adds a new event to the cleared stream.
-     * @param newEvent the new event to add to the stream. null if none.
-     * @return the resulting software text event. Never null.
-     */
-    @Nonnull
-    private Event clearAndGetResultingEvent(final Event newEvent) {
-        final CharSequence combinedText;
-        if (mCurrentEvents.size() > 0) {
-            combinedText = getCharSequence();
-            mCurrentEvents.clear();
-        } else {
-            combinedText = null;
-        }
-        if (null != newEvent) {
-            mCurrentEvents.add(newEvent);
-        }
-        return null == combinedText ? Event.createConsumedEvent(newEvent)
-                : Event.createSoftwareTextEvent(combinedText, Event.NOT_A_KEY_CODE);
-    }
-
-    @Override
-    @Nonnull
-    public Event processEvent(ArrayList<Event> previousEvents, Event newEvent) {
-        final int codePoint = newEvent.mCodePoint;
-        if (VOWEL_E == codePoint) {
-            final Event lastEvent = getLastEvent();
-            if (null == lastEvent) {
-                mCurrentEvents.add(newEvent);
-                return Event.createConsumedEvent(newEvent);
-            }
-            if (isConsonantOrMedial(lastEvent.mCodePoint)) {
-                final Event resultingEvent = clearAndGetResultingEvent(null);
-                mCurrentEvents.add(Event.createSoftwareKeypressEvent(ZERO_WIDTH_NON_JOINER,
-                        Event.NOT_A_KEY_CODE,
-                        Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE,
-                        false /* isKeyRepeat */));
-                mCurrentEvents.add(newEvent);
-                return resultingEvent;
-            }
-            // VOWEL_E == lastCodePoint. But if that was anything else this is correct too.
-            return clearAndGetResultingEvent(newEvent);
-        }
-        if (isConsonant(codePoint)) {
-            final Event lastEvent = getLastEvent();
-            if (null == lastEvent) {
-                mCurrentEvents.add(newEvent);
-                return Event.createConsumedEvent(newEvent);
-            }
-            if (VOWEL_E == lastEvent.mCodePoint) {
-                final int eventSize = mCurrentEvents.size();
-                if (eventSize >= 2
-                        && mCurrentEvents.get(eventSize - 2).mCodePoint == ZERO_WIDTH_NON_JOINER) {
-                    // We have a ZWJN before a vowel E. We need to remove the ZWNJ and then
-                    // reorder the vowel with respect to the consonant.
-                    mCurrentEvents.remove(eventSize - 1);
-                    mCurrentEvents.remove(eventSize - 2);
-                    mCurrentEvents.add(newEvent);
-                    mCurrentEvents.add(lastEvent);
-                    return Event.createConsumedEvent(newEvent);
-                }
-                // If there is already a consonant, then we are starting a new syllable.
-                for (int i = eventSize - 2; i >= 0; --i) {
-                    if (isConsonant(mCurrentEvents.get(i).mCodePoint)) {
-                        return clearAndGetResultingEvent(newEvent);
-                    }
-                }
-                // If we come here, we didn't have a consonant so we reorder
-                mCurrentEvents.remove(eventSize - 1);
-                mCurrentEvents.add(newEvent);
-                mCurrentEvents.add(lastEvent);
-                return Event.createConsumedEvent(newEvent);
-            }
-            // lastCodePoint is a consonant/medial. But if it's something else it's fine
-            return clearAndGetResultingEvent(newEvent);
-        }
-        if (isMedial(codePoint)) {
-            final Event lastEvent = getLastEvent();
-            if (null == lastEvent) {
-                mCurrentEvents.add(newEvent);
-                return Event.createConsumedEvent(newEvent);
-            }
-            if (VOWEL_E == lastEvent.mCodePoint) {
-                final int eventSize = mCurrentEvents.size();
-                // If there is already a consonant, then we are in the middle of a syllable, and we
-                // need to reorder.
-                boolean hasConsonant = false;
-                for (int i = eventSize - 2; i >= 0; --i) {
-                    if (isConsonant(mCurrentEvents.get(i).mCodePoint)) {
-                        hasConsonant = true;
-                        break;
-                    }
-                }
-                if (hasConsonant) {
-                    mCurrentEvents.remove(eventSize - 1);
-                    mCurrentEvents.add(newEvent);
-                    mCurrentEvents.add(lastEvent);
-                    return Event.createConsumedEvent(newEvent);
-                }
-                // Otherwise, we just commit everything.
-                return clearAndGetResultingEvent(null);
-            }
-            // lastCodePoint is a consonant/medial. But if it's something else it's fine
-            return clearAndGetResultingEvent(newEvent);
-        }
-        final Event lastEvent = getLastEvent();
-        if (Constants.CODE_DELETE == newEvent.mKeyCode && null != lastEvent) {
-            final int eventSize = mCurrentEvents.size();
-            if (VOWEL_E == lastEvent.mCodePoint) {
-                // We have a VOWEL_E at the end. There are four cases.
-                // - The vowel is the only code point in the buffer. Remove it.
-                // - The vowel is preceded by a ZWNJ. Remove both vowel E and ZWNJ.
-                // - The vowel is preceded by a consonant/medial, remove the consonant/medial.
-                // - In all other cases, it's strange, so just remove the last code point.
-                if (eventSize <= 1) {
-                    mCurrentEvents.clear();
-                } else { // eventSize >= 2
-                    final int previousCodePoint = mCurrentEvents.get(eventSize - 2).mCodePoint;
-                    if (previousCodePoint == ZERO_WIDTH_NON_JOINER) {
-                        mCurrentEvents.remove(eventSize - 1);
-                        mCurrentEvents.remove(eventSize - 2);
-                    } else if (isConsonantOrMedial(previousCodePoint)) {
-                        mCurrentEvents.remove(eventSize - 2);
-                    } else {
-                        mCurrentEvents.remove(eventSize - 1);
-                    }
-                }
-                return Event.createConsumedEvent(newEvent);
-            } else if (eventSize > 0) {
-                mCurrentEvents.remove(eventSize - 1);
-                return Event.createConsumedEvent(newEvent);
-            }
-        }
-        // This character is not part of the combining scheme, so we should reset everything.
-        if (mCurrentEvents.size() > 0) {
-            // If we have events in flight, then add the new event and return the resulting event.
-            mCurrentEvents.add(newEvent);
-            return clearAndGetResultingEvent(null);
-        }
-        // If we don't have any events in flight, then just pass this one through.
-        return newEvent;
-    }
-
-    @Override
-    public CharSequence getCombiningStateFeedback() {
-        return getCharSequence();
-    }
-
-    @Override
-    public void reset() {
-        mCurrentEvents.clear();
-    }
-}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index a81d7ea..b50c0a8 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -2781,41 +2781,6 @@
         /* additional_morekeys_symbols_0 */ "0",
     };
 
-    /* Locale my_MM: Burmese (Myanmar) */
-    private static final String[] TEXTS_my_MM = {
-        /* morekeys_a ~ */
-        null, null, null, null,
-        /* ~ morekeys_u */
-        // Label for "switch to alphabetic" key.
-        // U+1000: "က" MYANMAR LETTER KA
-        // U+1001: "ခ" MYANMAR LETTER KHA
-        // U+1002: "ဂ" MYANMAR LETTER GA
-        /* keylabel_to_alpha */ "\u1000\u1001\u1002",
-        /* morekeys_i ~ */
-        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_nordic_row2_11 */
-        /* morekeys_punctuation */ "!autoColumnOrder!9,\u104A,.,?,!,#,),(,/,;,...,',@,:,-,\",+,\\%,&",
-        // U+104A: "၊" MYANMAR SIGN LITTLE SECTION
-        // U+104B: "။" MYANMAR SIGN SECTION
-        /* keyspec_tablet_comma */ "\u104A",
-        /* keyspec_period */ "\u104B",
-        /* morekeys_period */ null,
-        /* keyspec_tablet_period */ "\u104B",
-        /* keyspec_swiss_row1_11 ~ */
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null,
-        /* ~ keyspec_comma */
-        /* morekeys_tablet_comma */ "\\,",
-        /* keyhintlabel_period */ "\u104A",
-        /* morekeys_question ~ */
-        null, null, null, null, null, null, null, null, null, null, null, null, null,
-        /* ~ keyspec_south_slavic_row3_8 */
-        /* morekeys_tablet_punctuation */ "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\",+,\\%,&",
-    };
-
     /* Locale nb: Norwegian Bokmål */
     private static final String[] TEXTS_nb = {
         // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
@@ -4189,7 +4154,6 @@
         "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/ 98 Burmese (Myanmar) */
         "nb"     , TEXTS_nb,    /*  11/ 55 Norwegian Bokmål */
         "ne_NP"  , TEXTS_ne_NP, /*  27/ 60 Nepali (Nepal) */
         "nl"     , TEXTS_nl,    /*   9/ 13 Dutch */
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index e605bfe..e80e362 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -103,8 +103,7 @@
         final String nonNullCombiningSpec = null == combiningSpec ? "" : combiningSpec;
         if (!nonNullCombiningSpec.equals(mCombiningSpec)) {
             mCombinerChain = new CombinerChain(
-                    mCombinerChain.getComposingWordWithCombiningFeedback().toString(),
-                    CombinerChain.createCombiners(nonNullCombiningSpec));
+                    mCombinerChain.getComposingWordWithCombiningFeedback().toString());
             mCombiningSpec = nonNullCombiningSpec;
         }
     }
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java b/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java
deleted file mode 100644
index 026e701..0000000
--- a/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * 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.KeyboardId;
-import com.android.inputmethod.keyboard.layout.customizer.LayoutCustomizer;
-import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
-import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
-import com.android.inputmethod.latin.common.Constants;
-
-import java.util.Locale;
-
-/**
- * The Myanmar alphabet keyboard.
- */
-public final class Myanmar extends LayoutBase {
-    private static final String LAYOUT_NAME = "myanmar";
-
-    public Myanmar(final Locale locale) {
-        super(new MyanmarCustomizer(locale), Symbols.class, SymbolsShifted.class);
-    }
-
-    @Override
-    public String getName() { return LAYOUT_NAME; }
-
-    private static class MyanmarCustomizer extends LayoutCustomizer {
-        MyanmarCustomizer(final Locale locale) { super(locale); }
-
-        @Override
-        public int getNumberOfRows() { return 5; }
-
-        @Override
-        public ExpectedKey getAlphabetKey() { return MYANMAR_ALPHABET_KEY; }
-
-        @Override
-        public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
-            return isPhone ? EMPTY_KEYS : EXCLAMATION_AND_QUESTION_MARKS;
-        }
-
-        @Override
-        public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
-            // U+002C: "," COMMA
-            // U+104A: "၊" MYANMAR SIGN LITTLE SECTION
-            return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY))
-                    : joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY));
-        }
-
-        @Override
-        public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
-            // U+104B: "။" MYANMAR SIGN SECTION
-            final ExpectedKey periodKey = key("\u104B", getPunctuationMoreKeys(isPhone));
-            return joinKeys(periodKey);
-        }
-
-        @Override
-        public ExpectedKey[] getPunctuationMoreKeys(final boolean isPhone) {
-            return isPhone ? MYANMAR_PHONE_PUNCTUATION_MORE_KEYS
-                    : MYANMAR_TABLET_PUNCTUATION_MORE_KEYS;
-        }
-
-        // U+1000: "က" MYANMAR LETTER KA
-        // U+1001: "ခ" MYANMAR LETTER KHA
-        // U+1002: "ဂ" MYANMAR LETTER GA
-        private static final ExpectedKey MYANMAR_ALPHABET_KEY = key(
-                "\u1000\u1001\u1002", Constants.CODE_SWITCH_ALPHA_SYMBOL);
-
-        // U+104A: "၊" MYANMAR SIGN LITTLE SECTION
-        // Punctuation more keys for phone form factor.
-        private static final ExpectedKey[] MYANMAR_PHONE_PUNCTUATION_MORE_KEYS = joinKeys(
-                "\u104A", ".", "?", "!", "#", ")", "(", "/", ";",
-                "...", "'", "@", ":", "-", "\"", "+", "%", "&");
-        // Punctuation more keys for tablet form factor.
-        private static final ExpectedKey[] MYANMAR_TABLET_PUNCTUATION_MORE_KEYS = joinKeys(
-                ".", "'", "#", ")", "(", "/", ";", "@",
-                "...", ":", "-", "\"", "+", "%", "&");
-    }
-
-    @Override
-    ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { return ALPHABET_COMMON; }
-
-    @Override
-    public ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone,
-            final int elementId) {
-        if (elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
-            return getCommonAlphabetLayout(isPhone);
-        }
-        return ALPHABET_SHIFTED_COMMON;
-    }
-
-    private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
-            .setKeysOfRow(1,
-                    // U+1041: "၁" MYANMAR DIGIT ONE
-                    key("\u1041", moreKey("1")),
-                    // U+1042: "၂" MYANMAR DIGIT TWO
-                    key("\u1042", moreKey("2")),
-                    // U+1043: "၃" MYANMAR DIGIT THREE
-                    key("\u1043", moreKey("3")),
-                    // U+1044: "၄" MYANMAR DIGIT FOUR
-                    key("\u1044", moreKey("4")),
-                    // U+1045: "၅" MYANMAR DIGIT FIVE
-                    key("\u1045", moreKey("5")),
-                    // U+1046: "၆" MYANMAR DIGIT SIX
-                    key("\u1046", moreKey("6")),
-                    // U+1047: "၇" MYANMAR DIGIT SEVEN
-                    key("\u1047", moreKey("7")),
-                    // U+1048: "၈" MYANMAR DIGIT EIGHT
-                    key("\u1048", moreKey("8")),
-                    // U+1049: "၉" MYANMAR DIGIT NINE
-                    key("\u1049", moreKey("9")),
-                    // U+1040: "၀" MYANMAR DIGIT ZERO
-                    key("\u1040", moreKey("0")))
-            .setKeysOfRow(2,
-                    // U+1006: "ဆ" MYANMAR LETTER CHA
-                    // U+1039/U+1006: "္ဆ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CHA
-                    key("\u1006", moreKey("\u1039\u1006")),
-                    // U+1010: "တ" MYANMAR LETTER TA
-                    // U+1039/U+1010: "္တ" MYANMAR SIGN VIRAMA/MYANMAR LETTER TA
-                    key("\u1010", moreKey("\u1039\u1010")),
-                    // U+1014: "န" MYANMAR LETTER NA
-                    // U+1039/U+1014: "္န" MYANMAR SIGN VIRAMA/MYANMAR LETTER NA
-                    key("\u1014", moreKey("\u1039\u1014")),
-                    // U+1019: "မ" MYANMAR LETTER MA
-                    // U+1039/U+1019: "္မ" MYANMAR SIGN VIRAMA/MYANMAR LETTER MA
-                    key("\u1019", moreKey("\u1039\u1019")),
-                    // U+1021: "အ" MYANMAR LETTER A
-                    // U+1015: "ပ" MYANMAR LETTER PA
-                    "\u1021", "\u1015",
-                    // U+1000: "က" MYANMAR LETTER KA
-                    // U+1039/U+1000: "္က" MYANMAR SIGN VIRAMA/MYANMAR LETTER KA
-                    key("\u1000", moreKey("\u1039\u1000")),
-                    // U+1004: "င" MYANMAR LETTER NGA
-                    // U+101E: "သ" MYANMAR LETTER SA
-                    "\u1004", "\u101E",
-                    // U+1005: "စ" MYANMAR LETTER CA
-                    // U+1039/U+1005: "္စ" MYANMAR SIGN VIRAMA/MYANMAR LETTER CA
-                    key("\u1005", moreKey("\u1039\u1005")))
-            .setKeysOfRow(3,
-                    // U+1031: "ေ" MYANMAR VOWEL SIGN E
-                    // U+103B: "ျ" MYANMAR CONSONANT SIGN MEDIAL YA
-                    // U+103C: "ြ" MYANMAR CONSONANT SIGN MEDIAL RA
-                    "\u1031", "\u103B", "\u103C",
-                    // U+103D: "ွ" MYANMAR CONSONANT SIGN MEDIAL WA
-                    // U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA
-                    // U+103D/U+103E:
-                    //     "ွှ" MYANMAR CONSONANT SIGN MEDIAL WA/MYANMAR CONSONANT SIGN MEDIAL HA
-                    key("\u103D", joinMoreKeys("\u103E", "\u103D\u103E")),
-                    // U+102D: "ိ" MYANMAR VOWEL SIGN I
-                    // U+102E: "ီ" MYANMAR VOWEL SIGN II
-                    key("\u102D", moreKey("\u102E")),
-                    // U+102F: "ု" MYANMAR VOWEL SIGN U
-                    // U+1030: "ူ" MYANMAR VOWEL SIGN UU
-                    key("\u102F", moreKey("\u1030")),
-                    // U+102C: "ာ" MYANMAR VOWEL SIGN AA
-                    // U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA
-                    key("\u102C", moreKey("\u102B")),
-                    // U+103A: "်" MYANMAR SIGN ASAT
-                    // U+1032: "ဲ" MYANMAR VOWEL SIGN AI
-                    key("\u103A", moreKey("\u1032")),
-                    // U+1037: "့" MYANMAR SIGN DOT BELOW
-                    // U+1036: "ံ" MYANMAR SIGN ANUSVARA
-                    key("\u1037", moreKey("\u1036")),
-                    // U+1038: "း" MYANMAR SIGN VISARGA
-                    "\u1038")
-            .setKeysOfRow(4,
-                    // U+1016: "ဖ" MYANMAR LETTER PHA
-                    "\u1016",
-                    // U+1011: "ထ" MYANMAR LETTER THA
-                    // U+1039/U+1011: "္ထ" MYANMAR SIGN VIRAMA/MYANMAR LETTER THA
-                    key("\u1011", moreKey("\u1039\u1011")),
-                    // U+1001: "ခ" MYANMAR LETTER KHA
-                    // U+1039/U+1001: "္ခ" MYANMAR SIGN VIRAMA/MYANMAR LETTER KHA
-                    key("\u1001", moreKey("\u1039\u1001")),
-                    // U+101C: "လ" MYANMAR LETTER LA
-                    // U+1039/U+101C: "္လ" MYANMAR SIGN VIRAMA/MYANMAR LETTER LA
-                    key("\u101C", moreKey("\u1039\u101C")),
-                    // U+1018: "ဘ" MYANMAR LETTER BHA
-                    // U+1039/U+1018: "္ဘ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BHA
-                    key("\u1018", moreKey("\u1039\u1018")),
-                    // U+100A: "ည" MYANMAR LETTER NNYA
-                    // U+1009: "ဉ" MYANMAR LETTER NYA
-                    key("\u100A", moreKey("\u1009")),
-                    // U+101B: "ရ" MYANMAR LETTER RA
-                    // U+101D: "ဝ" MYANMAR LETTER WA
-                    "\u101B", "\u101D")
-            .build();
-
-    private static final ExpectedKey[][] ALPHABET_SHIFTED_COMMON = new ExpectedKeyboardBuilder()
-            .setKeysOfRow(1,
-                    // U+1027: "ဧ" MYANMAR LETTER E
-                    // U+104F: "၏" MYANMAR SYMBOL GENITIVE
-                    // U+1024: "ဤ" MYANMAR LETTER II
-                    // U+1023: "ဣ" MYANMAR LETTER I
-                    // U+104E: "၎" MYANMAR SYMBOL AFOREMENTIONED
-                    // U+1000/U+103B/U+1015/U+103A: "ကျပ်" MYANMAR LETTER KA
-                    //     /MYANMAR CONSONANT SIGN MEDIAL YA/MYANMAR LETTER PA/MYANMAR SIGN ASAT
-                    // U+1029: "ဩ" MYANMAR LETTER O
-                    // U+102A: "ဪ" MYANMAR LETTER AU
-                    // U+104D: "၍" MYANMAR SYMBOL COMPLETED
-                    // U+104C: "၌" MYANMAR SYMBOL LOCATIVE
-                    "\u1027", "\u104F", "\u1024", "\u1023", "\u104E", "\u1000\u103B\u1015\u103A",
-                    "\u1029", "\u102A", "\u104D", "\u104C")
-            .setKeysOfRow(2,
-                    // U+1017: "ဗ" MYANMAR LETTER BA
-                    // U+1039/U+1017: "္ဗ" MYANMAR SIGN VIRAMA/MYANMAR LETTER BA
-                    key("\u1017", moreKey("\u1039\u1017")),
-                    // U+1012: "ဒ" MYANMAR LETTER DA
-                    // U+1039/U+1012: "္ဒ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DA
-                    key("\u1012", moreKey("\u1039\u1012")),
-                    // U+1013: "ဓ" MYANMAR LETTER DHA
-                    // U+1039/U+1013: "္ဓ" MYANMAR SIGN VIRAMA/MYANMAR LETTER DHA
-                    key("\u1013", moreKey("\u1039\u1013")),
-                    // U+1003: "ဃ" MYANMAR LETTER GHA
-                    // U+100E: "ဎ" MYANMAR LETTER DDHA
-                    // U+103F: "ဿ" MYANMAR LETTER GREAT SA
-                    // U+100F: "ဏ" MYANMAR LETTER NNA
-                    "\u1003", "\u100E", "\u103F", "\u100F",
-                    // U+1008: "ဈ" MYANMAR LETTER JHA
-                    // U+1039/U+1008: "္ဈ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JHA
-                    key("\u1008", moreKey("\u1039\u1008")),
-                    // U+1007: "ဇ" MYANMAR LETTER JA
-                    // U+1039/U+1007: "္ဇ" MYANMAR SIGN VIRAMA/MYANMAR LETTER JA
-                    key("\u1007", moreKey("\u1039\u1007")),
-                    // U+1002: "ဂ" MYANMAR LETTER GA
-                    // U+1039/U+1002: "္ဂ" MYANMAR SIGN VIRAMA/MYANMAR LETTER GA
-                    key("\u1002", moreKey("\u1039\u1002")))
-            .setKeysOfRow(3,
-                    // U+101A: "ယ" MYANMAR LETTER YA
-                    // U+1039: "္" MYANMAR SIGN VIRAMA
-                    // U+1004/U+103A/U+1039: "င်္င" MYANMAR LETTER NGA
-                    //     /MYANMAR SIGN ASAT/MYANMAR SIGN VIRAMA
-                    // U+103E: "ှ" MYANMAR CONSONANT SIGN MEDIAL HA
-                    // U+102E: "ီ" MYANMAR VOWEL SIGN II
-                    // U+1030: "ူ" MYANMAR VOWEL SIGN UU
-                    // U+102B: "ါ" MYANMAR VOWEL SIGN TALL AA
-                    // U+1032: "ဲ" MYANMAR VOWEL SIGN AI
-                    // U+1036: "ံ" MYANMAR SIGN ANUSVARA
-                    // U+101F: "ဟ" MYANMAR LETTER HA
-                    "\u101A", "\u1039", "\u1004\u103A\u1039", "\u103E", "\u102E", "\u1030",
-                    "\u102B", "\u1032", "\u1036", "\u101F")
-            .setKeysOfRow(4,
-                    // U+1025: "ဥ" MYANMAR LETTER U
-                    // U+1026: "ဦ" MYANMAR LETTER UU
-                    // U+100C: "ဌ" MYANMAR LETTER TTHA
-                    // U+100B: "ဋ" MYANMAR LETTER TTA
-                    // U+100D: "ဍ" MYANMAR LETTER DDA
-                    // U+1020: "ဠ" MYANMAR LETTER LLA
-                    // U+100B/U+1039/U+100C: "ဋ္ဌ" MYANMAR LETTER TTA
-                    //     /MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA
-                    "\u1025", "\u1026", "\u100C", "\u100B", "\u100D", "\u1020",
-                    "\u100B\u1039\u100C",
-                    // U+100F/U+1039/U+100D: "ဏ္ဍ" MYANMAR LETTER NNA
-                    //     /MYANMAR SIGN VIRAMA/MYANMAR LETTER DDA
-                    // U+100F/U+1039/U+100C: "ဏ္ဌ" MYANMAR LETTER NNA
-                    //     /MYANMAR SIGN VIRAMA/MYANMAR LETTER TTHA
-                    key("\u100F\u1039\u100D", moreKey("\u100F\u1039\u100C")))
-            .build();
-}
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/KeyboardLayoutSetSubtypesCountTests.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/KeyboardLayoutSetSubtypesCountTests.java
index 6f747b3..3e351b6 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/tests/KeyboardLayoutSetSubtypesCountTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/KeyboardLayoutSetSubtypesCountTests.java
@@ -27,7 +27,7 @@
 
 @SmallTest
 public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsBase {
-    private static final int NUMBER_OF_SUBTYPES = 85;
+    private static final int NUMBER_OF_SUBTYPES = 84;
     private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 50;
     private static final int NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES = 2;
 
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsMyanmarMM.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsMyanmarMM.java
deleted file mode 100644
index b581e4a..0000000
--- a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsMyanmarMM.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.Myanmar;
-
-import java.util.Locale;
-
-/**
- * my_MM: Myanmar (Myanmar)/myanmar
- */
-@SmallTest
-public final class TestsMyanmarMM extends LayoutTestsBase {
-    private static final Locale LOCALE = new Locale("my", "MM");
-    private static final LayoutBase LAYOUT = new Myanmar(LOCALE);
-
-    @Override
-    LayoutBase getLayout() { return LAYOUT; }
-}
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTestsReorderingMyanmar.java b/tests/src/com/android/inputmethod/latin/InputLogicTestsReorderingMyanmar.java
deleted file mode 100644
index 1372514..0000000
--- a/tests/src/com/android/inputmethod/latin/InputLogicTestsReorderingMyanmar.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2012 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.latin;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-import android.util.Pair;
-
-/*
- * Relevant characters for this test :
- * Spurs the need to reorder :
- * U+1031 MYANMAR VOWEL SIGN E : ေ
- * U+1004 U+103A U+1039 Kinzi. It's a compound character.
- *
- * List of consonants :
- * U+1000 MYANMAR LETTER KA က
- * U+1001 MYANMAR LETTER KHA ခ
- * U+1002 MYANMAR LETTER GA ဂ
- * U+1003 MYANMAR LETTER GHA ဃ
- * U+1004 MYANMAR LETTER NGA င
- * U+1005 MYANMAR LETTER CA စ
- * U+1006 MYANMAR LETTER CHA ဆ
- * U+1007 MYANMAR LETTER JA ဇ
- * U+1008 MYANMAR LETTER JHA ဈ
- * U+1009 MYANMAR LETTER NYA ဉ
- * U+100A MYANMAR LETTER NNYA ည
- * U+100B MYANMAR LETTER TTA ဋ
- * U+100C MYANMAR LETTER TTHA ဌ
- * U+100D MYANMAR LETTER DDA ဍ
- * U+100E MYANMAR LETTER DDHA ဎ
- * U+100F MYANMAR LETTER NNA ဏ
- * U+1010 MYANMAR LETTER TA တ
- * U+1011 MYANMAR LETTER THA ထ
- * U+1012 MYANMAR LETTER DA ဒ
- * U+1013 MYANMAR LETTER DHA ဓ
- * U+1014 MYANMAR LETTER NA န
- * U+1015 MYANMAR LETTER PA ပ
- * U+1016 MYANMAR LETTER PHA ဖ
- * U+1017 MYANMAR LETTER BA ဗ
- * U+1018 MYANMAR LETTER BHA ဘ
- * U+1019 MYANMAR LETTER MA မ
- * U+101A MYANMAR LETTER YA ယ
- * U+101B MYANMAR LETTER RA ရ
- * U+101C MYANMAR LETTER LA လ
- * U+101D MYANMAR LETTER WA ဝ
- * U+101E MYANMAR LETTER SA သ
- * U+101F MYANMAR LETTER HA ဟ
- * U+1020 MYANMAR LETTER LLA ဠ
- * U+103F MYANMAR LETTER GREAT SA ဿ
- *
- * List of medials :
- * U+103B MYANMAR CONSONANT SIGN MEDIAL YA ျ
- * U+103C MYANMAR CONSONANT SIGN MEDIAL RA ြ
- * U+103D MYANMAR CONSONANT SIGN MEDIAL WA ွ
- * U+103E MYANMAR CONSONANT SIGN MEDIAL HA ှ
- * U+105E MYANMAR CONSONANT SIGN MON MEDIAL NA ၞ
- * U+105F MYANMAR CONSONANT SIGN MON MEDIAL MA ၟ
- * U+1060 MYANMAR CONSONANT SIGN MON MEDIAL LA ၠ
- * U+1082 MYANMAR CONSONANT SIGN SHAN MEDIAL WA ႂ
- *
- * Other relevant characters :
- * U+200C ZERO WIDTH NON-JOINER
- * U+200B ZERO WIDTH SPACE
- */
-
-@LargeTest
-// These tests are inactive until the combining code for Myanmar Reordering is sorted out.
-@Suppress
-public class InputLogicTestsReorderingMyanmar extends InputTestsBase {
-    // The tests are formatted as follows.
-    // Each test is an entry in the array of Pair arrays.
-
-    // One test is an array of pairs. Each pair contains, in the `first' member,
-    // the code points that the next key press should contain. In the `second'
-    // member is stored the string that should be in the text view after this
-    // key press.
-
-    private static final Pair<?, ?>[][] TESTS = {
-
-        // Tests for U+1031 MYANMAR VOWEL SIGN E : ေ
-        new Pair[] { // Type : U+1031 U+1000 U+101F ေ က ဟ
-            Pair.create(new int[] { 0x1031 }, "\u1031"), // ေ
-            Pair.create(new int[] { 0x1000 }, "\u1000\u1031"), // ကေ
-            Pair.create(new int[] { 0x101F }, "\u1000\u1031\u101F") // ကေဟ
-        },
-
-        new Pair[] { // Type : U+1000 U+1031 U+101F က ေ ဟ
-            Pair.create(new int[] { 0x1000 }, "\u1000"), // က
-            Pair.create(new int[] { 0x1031 }, "\u1000\u200B\u1031"), // က‌ေ
-            Pair.create(new int[] { 0x101F }, "\u1000\u101F\u1031") // ကဟေ
-        },
-
-        new Pair[] { // Type : U+1031 U+101D U+103E U+1018 ေ ဝ ှ ဘ
-            Pair.create(new int[] { 0x1031 }, "\u1031"), // ေ
-            Pair.create(new int[] { 0x101D }, "\u101D\u1031"), // ဝေ
-            Pair.create(new int[] { 0x103E }, "\u101D\u103E\u1031"), // ဝှေ
-            Pair.create(new int[] { 0x1018 }, "\u101D\u103E\u1031\u1018") // ဝှေဘ
-        },
-
-        new Pair[] { // Type : U+1031 U+1014 U+1031 U+1000 U+102C U+1004 U+103A U+1038 U+101C
-            // U+102C U+1038 U+104B ေ န ေ က ာ င ် း လ ာ း ။
-            Pair.create(new int[] { 0x1031 }, "\u1031"), // ေ
-            Pair.create(new int[] { 0x1014 }, "\u1014\u1031"), // နေ
-            Pair.create(new int[] { 0x1031 }, "\u1014\u1031\u1031"), // နေ‌ေ
-            Pair.create(new int[] { 0x1000 }, "\u1014\u1031\u1000\u1031"), // နေကေ
-            Pair.create(new int[] { 0x102C }, "\u1014\u1031\u1000\u1031\u102C"), // နေကော
-            Pair.create(new int[] { 0x1004 }, "\u1014\u1031\u1000\u1031\u102C\u1004"), // နေကောင
-            Pair.create(new int[] { 0x103A }, // နေကောင်
-                    "\u1014\u1031\u1000\u1031\u102C\u1004\u103A"),
-            Pair.create(new int[] { 0x1038 }, // နေကောင်း
-                    "\u1014\u1031\u1000\u1031\u102C\u1004\u103A\u1038"),
-            Pair.create(new int[] { 0x101C }, // နေကောင်းလ
-                    "\u1014\u1031\u1000\u1031\u102C\u1004\u103A\u1038\u101C"),
-            Pair.create(new int[] { 0x102C }, // နေကောင်းလာ
-                    "\u1014\u1031\u1000\u1031\u102C\u1004\u103A\u1038\u101C\u102C"),
-            Pair.create(new int[] { 0x1038 }, // နေကောင်းလား
-                    "\u1014\u1031\u1000\u1031\u102C\u1004\u103A\u1038\u101C\u102C\u1038"),
-            Pair.create(new int[] { 0x104B }, // နေကောင်းလား။
-                    "\u1014\u1031\u1000\u1031\u102C\u1004\u103A\u1038\u101C\u102C\u1038\u104B")
-        },
-
-        new Pair[] { // Type : U+1031 U+1031 U+1031 U+1000 ေ ေ ေ က
-            Pair.create(new int[] { 0x1031 }, "\u1031"), // ေ
-            Pair.create(new int[] { 0x1031 }, "\u1031\u1031"), // ေေ
-            Pair.create(new int[] { 0x1031 }, "\u1031\u1031\u1031"), // U+1031ေေေ
-            Pair.create(new int[] { 0x1000 }, "\u1031\u1031\u1000\u1031") // ေေကေ
-        },
-
-        new Pair[] { // Type : U+1031 U+1001 U+103B U+103D U+1038 ေ ခ ျ ွ း
-            Pair.create(new int[] { 0x1031 }, "\u1031"), // ေ
-            Pair.create(new int[] { 0x1001 }, "\u1001\u1031"), // ခေ
-            Pair.create(new int[] { 0x103B }, "\u1001\u103B\u1031"), // ချေ
-            Pair.create(new int[] { 0x103D }, "\u1001\u103B\u103D\u1031"), // ချွေ
-            Pair.create(new int[] { 0x1038 }, "\u1001\u103B\u103D\u1031\u1038") // ချွေး
-        },
-
-        // Tests for Kinzi U+1004 U+103A U+1039 :
-
-        /* Kinzi reordering is not implemented yet. Uncomment these tests when it is.
-
-        new Pair[] { // Type : U+1021 U+1002 (U+1004 U+103A U+1039)
-            // U+101C U+1014 U+103A အ ဂ (င ် ္) လ န ်
-            Pair.create(new int[] { 0x1021 }, "\u1021"), // အ
-            Pair.create(new int[] { 0x1002 }, "\u1021\u1002"), // အဂ
-            Pair.create(new int[] { 0x1004, 0x103A, 0x1039 }, // အင်္ဂ
-                    "\u1021\u1004\u103A\u1039\u1002"),
-            Pair.create(new int[] { 0x101C }, // အင်္ဂလ
-                    "\u1021\u1004\u103A\u1039\u1002\u101C"),
-            Pair.create(new int[] { 0x1014 }, // အင်္ဂလန
-                    "\u1021\u1004\u103A\u1039\u1002\u101C\u1014"),
-            Pair.create(new int[] { 0x103A }, // အင်္ဂလန်
-                    "\u1021\u1004\u103A\u1039\u1002\u101C\u1014\u103A")
-        },
-
-        new Pair[] { //Type : kinzi after a whole syllable U+101E U+1001 U+103B U+102D U+102F
-            // (U+1004 U+103A U+1039) U+1004 U+103A U+1038 သ ခ ျ ိ ု င ် ္ င ် း
-            Pair.create(new int[] { 0x101E }, "\u101E"), // သခ
-            Pair.create(new int[] { 0x1001 }, "\u101E\u1001"), // သခ
-            Pair.create(new int[] { 0x103B }, "\u101E\u1001\u103B"), // သချ
-            Pair.create(new int[] { 0x102D }, "\u101E\u1001\u103B\u102D"), // သချိ
-            Pair.create(new int[] { 0x102F }, "\u101E\u1001\u103B\u102D\u102F"), // သချို
-            Pair.create(new int[] { 0x1004, 0x103A, 0x1039}, // သင်္ချို
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F"),
-            Pair.create(new int[] { 0x1004 }, // သင်္ချိုင
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F\u1004"),
-            Pair.create(new int[] { 0x103A }, // သင်္ချိုင်
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F\u1004\u103A"),
-            Pair.create(new int[] { 0x1038 }, // သင်္ချိုင်း
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F\u1004\u103A\u1038")
-        },
-
-        new Pair[] { // Type : kinzi after the consonant U+101E U+1001 (U+1004 U+103A U+1039)
-            // U+103B U+102D U+102F U+1004 U+103A U+1038 သ ခ င ် ္ ျ ိ ု င ် း
-            Pair.create(new int[] { 0x101E }, "\u101E"), // သခ
-            Pair.create(new int[] { 0x1001 }, "\u101E\u1001"), // သခ
-            Pair.create(new int[] { 0x1004, 0x103A, 0x1039 }, // သင်္ခ
-                    "\u101E\u1004\u103A\u1039\u1001"),
-            Pair.create(new int[] { 0x103B }, // သင်္ချ
-                    "\u101E\u1004\u103A\u1039\u1001\u103B"),
-            Pair.create(new int[] { 0x102D }, // သင်္ချိ
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D"),
-            Pair.create(new int[] { 0x102F }, // သင်္ချို
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F"),
-            Pair.create(new int[] { 0x1004 }, // သင်္ချိုင
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F\u1004"),
-            Pair.create(new int[] { 0x103A }, // သင်္ချိုင်
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F\u1004\u103A"),
-            Pair.create(new int[] { 0x1038 }, // သင်္ချိုင်း
-                    "\u101E\u1004\u103A\u1039\u1001\u103B\u102D\u102F\u1004\u103A\u1038")
-        },
-        */
-    };
-
-    private void doMyanmarTest(final int testNumber, final Pair<?, ?>[] test) {
-        int stepNumber = 0;
-        for (final Pair<?, ?> step : test) {
-            ++stepNumber;
-            final int[] input = (int[]) step.first;
-            final String expectedResult = (String) step.second;
-            if (input.length > 1) {
-                mLatinIME.onTextInput(new String(input, 0, input.length));
-            } else {
-                type(input[0]);
-            }
-            assertEquals("Myanmar reordering test " + testNumber + ", step " + stepNumber,
-                    expectedResult, mEditText.getText().toString());
-        }
-    }
-
-    public void testMyanmarReordering() {
-        int testNumber = 0;
-        changeLanguage("my_MM", "CombiningRules=MyanmarReordering");
-        for (final Pair<?, ?>[] test : TESTS) {
-            // Small trick to reset LatinIME : setText("") and send updateSelection with values
-            // LatinIME has never seen, and cursor pos 0,0.
-            mEditText.setText("");
-            mLatinIME.onUpdateSelection(1, 1, 0, 0, -1, -1);
-            doMyanmarTest(++testNumber, test);
-        }
-    }
-}
