Add Italian (Switzerland) it_CH layout

Bug: 13920900
Change-Id: I57df8ca12b0d8cc4bbca2372c0470dcae5b5cbfb
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 6d8f787..594378f 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -57,6 +57,7 @@
     in: Indonesian/qwerty    # "id" is the official language code of Indonesian.
     is: Icelandic/qwerty
     it: Italian/qwerty
+    it_CH: Italian (Switzerland)/swiss
     iw: Hebrew/hebrew        # "he" is the official language code of Hebrew.
     ka_GE: Georgian (Georgia)/georgian
     kk: Kazakh/east_slavic
@@ -385,6 +386,14 @@
             android:imeSubtypeExtraValue="AsciiCapable,SupportTouchPositionCorrection,EmojiCapable"
             android:isAsciiCapable="true"
     />
+    <subtype android:icon="@drawable/ic_ime_switcher_dark"
+            android:label="@string/subtype_generic"
+            android:subtypeId="0xd914fe1a"
+            android:imeSubtypeLocale="it_CH"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="KeyboardLayoutSet=swiss,AsciiCapable,EmojiCapable"
+            android:isAsciiCapable="true"
+    />
     <!-- Java uses the deprecated "iw" code instead of the standard "he" code for Hebrew. -->
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index f0356df..0254f98 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -141,43 +141,43 @@
         /*  51: 4 */ "additional_morekeys_symbols_8",
         /*  52: 4 */ "additional_morekeys_symbols_9",
         /*  53: 4 */ "additional_morekeys_symbols_0",
-        /*  54: 3 */ "morekeys_punctuation",
-        /*  55: 3 */ "morekeys_star",
-        /*  56: 3 */ "keyspec_left_parenthesis",
-        /*  57: 3 */ "keyspec_right_parenthesis",
-        /*  58: 3 */ "keyspec_left_square_bracket",
-        /*  59: 3 */ "keyspec_right_square_bracket",
-        /*  60: 3 */ "keyspec_left_curly_bracket",
-        /*  61: 3 */ "keyspec_right_curly_bracket",
-        /*  62: 3 */ "keyspec_less_than",
-        /*  63: 3 */ "keyspec_greater_than",
-        /*  64: 3 */ "keyspec_less_than_equal",
-        /*  65: 3 */ "keyspec_greater_than_equal",
-        /*  66: 3 */ "keyspec_left_double_angle_quote",
-        /*  67: 3 */ "keyspec_right_double_angle_quote",
-        /*  68: 3 */ "keyspec_left_single_angle_quote",
-        /*  69: 3 */ "keyspec_right_single_angle_quote",
-        /*  70: 3 */ "keyspec_tablet_comma",
-        /*  71: 3 */ "morekeys_tablet_period",
-        /*  72: 3 */ "morekeys_question",
-        /*  73: 2 */ "morekeys_h",
-        /*  74: 2 */ "morekeys_w",
-        /*  75: 2 */ "morekeys_east_slavic_row2_2",
-        /*  76: 2 */ "morekeys_cyrillic_u",
-        /*  77: 2 */ "morekeys_cyrillic_en",
-        /*  78: 2 */ "morekeys_cyrillic_ghe",
-        /*  79: 2 */ "morekeys_cyrillic_o",
-        /*  80: 2 */ "morekeys_cyrillic_i",
-        /*  81: 2 */ "keyspec_south_slavic_row1_6",
-        /*  82: 2 */ "keyspec_south_slavic_row2_11",
-        /*  83: 2 */ "keyspec_south_slavic_row3_1",
-        /*  84: 2 */ "keyspec_south_slavic_row3_8",
-        /*  85: 2 */ "keyspec_swiss_row1_11",
-        /*  86: 2 */ "keyspec_swiss_row2_10",
-        /*  87: 2 */ "keyspec_swiss_row2_11",
-        /*  88: 2 */ "morekeys_swiss_row1_11",
-        /*  89: 2 */ "morekeys_swiss_row2_10",
-        /*  90: 2 */ "morekeys_swiss_row2_11",
+        /*  54: 3 */ "keyspec_swiss_row1_11",
+        /*  55: 3 */ "keyspec_swiss_row2_10",
+        /*  56: 3 */ "keyspec_swiss_row2_11",
+        /*  57: 3 */ "morekeys_swiss_row1_11",
+        /*  58: 3 */ "morekeys_swiss_row2_10",
+        /*  59: 3 */ "morekeys_swiss_row2_11",
+        /*  60: 3 */ "morekeys_punctuation",
+        /*  61: 3 */ "morekeys_star",
+        /*  62: 3 */ "keyspec_left_parenthesis",
+        /*  63: 3 */ "keyspec_right_parenthesis",
+        /*  64: 3 */ "keyspec_left_square_bracket",
+        /*  65: 3 */ "keyspec_right_square_bracket",
+        /*  66: 3 */ "keyspec_left_curly_bracket",
+        /*  67: 3 */ "keyspec_right_curly_bracket",
+        /*  68: 3 */ "keyspec_less_than",
+        /*  69: 3 */ "keyspec_greater_than",
+        /*  70: 3 */ "keyspec_less_than_equal",
+        /*  71: 3 */ "keyspec_greater_than_equal",
+        /*  72: 3 */ "keyspec_left_double_angle_quote",
+        /*  73: 3 */ "keyspec_right_double_angle_quote",
+        /*  74: 3 */ "keyspec_left_single_angle_quote",
+        /*  75: 3 */ "keyspec_right_single_angle_quote",
+        /*  76: 3 */ "keyspec_tablet_comma",
+        /*  77: 3 */ "morekeys_tablet_period",
+        /*  78: 3 */ "morekeys_question",
+        /*  79: 2 */ "morekeys_h",
+        /*  80: 2 */ "morekeys_w",
+        /*  81: 2 */ "morekeys_east_slavic_row2_2",
+        /*  82: 2 */ "morekeys_cyrillic_u",
+        /*  83: 2 */ "morekeys_cyrillic_en",
+        /*  84: 2 */ "morekeys_cyrillic_ghe",
+        /*  85: 2 */ "morekeys_cyrillic_o",
+        /*  86: 2 */ "morekeys_cyrillic_i",
+        /*  87: 2 */ "keyspec_south_slavic_row1_6",
+        /*  88: 2 */ "keyspec_south_slavic_row2_11",
+        /*  89: 2 */ "keyspec_south_slavic_row3_1",
+        /*  90: 2 */ "keyspec_south_slavic_row3_8",
         /*  91: 2 */ "keyspec_spanish_row2_10",
         /*  92: 2 */ "morekeys_bullet",
         /*  93: 2 */ "morekeys_left_parenthesis",
@@ -291,8 +291,9 @@
         // Label for "switch to symbols" key.
         /* keylabel_to_symbol */ "?123",
         /* additional_morekeys_symbols_1 ~ */
-        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
-        /* ~ additional_morekeys_symbols_0 */
+        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
+        EMPTY, EMPTY, EMPTY,
+        /* ~ morekeys_swiss_row2_11 */
         /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&",
         // U+2020: "†" DAGGER
         // U+2021: "‡" DOUBLE DAGGER
@@ -325,9 +326,8 @@
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_question */ "\u00BF",
         /* morekeys_h ~ */
-        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
-        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
-        /* ~ morekeys_swiss_row2_11 */
+        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
+        /* ~ keyspec_south_slavic_row3_8 */
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         /* keyspec_spanish_row2_10 */ "\u00F1",
         // U+266A: "♪" EIGHTH NOTE
@@ -571,7 +571,9 @@
         // U+066B: "٫" ARABIC DECIMAL SEPARATOR
         // U+066C: "٬" ARABIC THOUSANDS SEPARATOR
         /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
-        /* morekeys_punctuation */ null,
+        /* keyspec_swiss_row1_11 ~ */
+        null, null, null, null, null, null, null,
+        /* ~ morekeys_punctuation */
         // U+2605: "★" BLACK STAR
         // U+066D: "٭" ARABIC FIVE POINTED STAR
         /* morekeys_star */ "\u2605,\u066D",
@@ -603,8 +605,7 @@
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_question */ "?,\u00BF",
         /* morekeys_h ~ */
-        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_spanish_row2_10 */
         // U+266A: "♪" EIGHTH NOTE
         /* morekeys_bullet */ "\u266A",
@@ -806,15 +807,14 @@
         /* morekeys_g ~ */
         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,
-        /* ~ additional_morekeys_symbols_0 */
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~ morekeys_swiss_row2_11 */
         // U+00B7: "·" MIDDLE DOT
         /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&",
         /* morekeys_star ~ */
         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 */
+        /* ~ keyspec_south_slavic_row3_8 */
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         /* keyspec_spanish_row2_10 */ "\u00E7",
         /* morekeys_bullet ~ */
@@ -1023,10 +1023,8 @@
         /* keyspec_currency ~ */
         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, null, null, null,
-        null, null, null, null, null, null,
-        /* ~ keyspec_south_slavic_row3_8 */
+        null, null, null, null, null,
+        /* ~ additional_morekeys_symbols_0 */
         // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
         /* keyspec_swiss_row1_11 */ "\u00FC",
         // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
@@ -1220,7 +1218,7 @@
         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, null, null, null, null, null, null,
         /* ~ morekeys_question */
         // U+0125: "ĥ" LATIN SMALL LETTER H WITH CIRCUMFLEX
         // U+0127: "ħ" LATIN SMALL LETTER H WITH STROKE
@@ -1228,9 +1226,8 @@
         // U+0175: "ŵ" LATIN SMALL LETTER W WITH CIRCUMFLEX
         /* morekeys_w */ "w,\u0175",
         /* morekeys_east_slavic_row2_2 ~ */
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null,
-        /* ~ morekeys_swiss_row2_11 */
+        null, null, null, null, null, null, null, null, null, null,
+        /* ~ keyspec_south_slavic_row3_8 */
         // U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX
         /* keyspec_spanish_row2_10 */ "\u0135",
         /* morekeys_bullet ~ */
@@ -1307,8 +1304,8 @@
         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,
-        /* ~ additional_morekeys_symbols_0 */
+        null, null, null, null, null, null, null,
+        /* ~ morekeys_swiss_row2_11 */
         // U+00A1: "¡" INVERTED EXCLAMATION MARK
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,#,),(,/,;,\u00A1,',@,:,-,\",+,\\%,&,\u00BF",
@@ -1525,7 +1522,9 @@
         // U+066B: "٫" ARABIC DECIMAL SEPARATOR
         // U+066C: "٬" ARABIC THOUSANDS SEPARATOR
         /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
-        /* morekeys_punctuation */ null,
+        /* keyspec_swiss_row1_11 ~ */
+        null, null, null, null, null, null, null,
+        /* ~ morekeys_punctuation */
         // U+2605: "★" BLACK STAR
         // U+066D: "٭" ARABIC FIVE POINTED STAR
         /* morekeys_star */ "\u2605,\u066D",
@@ -1553,8 +1552,7 @@
         // U+00BF: "¿" INVERTED QUESTION MARK
         /* morekeys_question */ "?,\u00BF",
         /* morekeys_h ~ */
-        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_spanish_row2_10 */
         // U+266A: "♪" EIGHTH NOTE
         /* morekeys_bullet */ "\u266A",
@@ -1714,10 +1712,8 @@
         /* 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, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null,
-        /* ~ keyspec_south_slavic_row3_8 */
+        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~ additional_morekeys_symbols_0 */
         // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
         /* keyspec_swiss_row1_11 */ "\u00E8",
         // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
@@ -1938,8 +1934,9 @@
         /* morekeys_s ~ */
         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,
-        /* ~ additional_morekeys_symbols_0 */
+        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+055E: "՞" ARMENIAN QUESTION MARK
         // U+055C: "՜" ARMENIAN EXCLAMATION MARK
         // U+055A: "՚" ARMENIAN APOSTROPHE
@@ -1967,8 +1964,7 @@
         /* morekeys_h ~ */
         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, null, null, null, null, null, null, null,
         /* ~ morekeys_greater_than */
         // U+0589: "։" ARMENIAN FULL STOP
         /* keyspec_period */ "\u0589",
@@ -2078,6 +2074,24 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B",
+        /* morekeys_c ~ */
+        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,
+        /* ~ additional_morekeys_symbols_0 */
+        // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
+        /* keyspec_swiss_row1_11 */ "\u00FC",
+        // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
+        /* keyspec_swiss_row2_10 */ "\u00F6",
+        // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
+        /* keyspec_swiss_row2_11 */ "\u00E4",
+        // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
+        /* morekeys_swiss_row1_11 */ "\u00E8",
+        // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
+        /* morekeys_swiss_row2_10 */ "\u00E9",
+        // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
+        /* morekeys_swiss_row2_11 */ "\u00E0",
     };
 
     /* Locale iw: Hebrew */
@@ -2101,7 +2115,7 @@
         /* morekeys_r ~ */
         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_punctuation */
         // U+2605: "★" BLACK STAR
         /* morekeys_star */ "\u2605",
@@ -2130,8 +2144,7 @@
         /* keyspec_tablet_comma ~ */
         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, null, null, null, null, null, null, null,
         /* ~ morekeys_tablet_punctuation */
         // U+00B1: "±" PLUS-MINUS SIGN
         // U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN
@@ -2184,7 +2197,8 @@
         /* morekeys_nordic_row2_11 ~ */
         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, null,
+        null, null, null, null,
         /* ~ morekeys_w */
         // U+0456: "і" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
         /* morekeys_east_slavic_row2_2 */ "\u0456",
@@ -2199,8 +2213,7 @@
         /* morekeys_cyrillic_o */ "\u04E9",
         /* morekeys_cyrillic_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,
         /* ~ keyspec_x */
         // U+04BB: "һ" CYRILLIC SMALL LETTER SHHA
         /* morekeys_east_slavic_row2_11 */ "\u04BB",
@@ -2265,7 +2278,8 @@
         /* morekeys_nordic_row2_11 ~ */
         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, null, null,
+        null, null, null, null, null,
         /* ~ morekeys_east_slavic_row2_2 */
         // U+04AF: "ү" CYRILLIC SMALL LETTER STRAIGHT U
         /* morekeys_cyrillic_u */ "\u04AF",
@@ -2504,7 +2518,8 @@
         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,
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null,
         /* ~ morekeys_cyrillic_o */
         // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
         /* morekeys_cyrillic_i */ "\u045D",
@@ -3045,7 +3060,8 @@
         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,
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null,
         /* ~ morekeys_cyrillic_o */
         // U+045D: "ѝ" CYRILLIC SMALL LETTER I WITH GRAVE
         /* morekeys_cyrillic_i */ "\u045D",
@@ -3369,7 +3385,8 @@
         /* morekeys_nordic_row2_11 ~ */
         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, null,
+        null, null, null, null,
         /* ~ morekeys_w */
         // U+0457: "ї" CYRILLIC SMALL LETTER YI
         /* morekeys_east_slavic_row2_2 */ "\u0457",
@@ -3639,7 +3656,7 @@
         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, null, null, null, null, null, null,
         /* ~ morekeys_question */
         // U+0125: "ĥ" LATIN SMALL LETTER H WITH CIRCUMFLEX
         /* morekeys_h */ "\u0125",
@@ -3647,8 +3664,7 @@
         /* morekeys_w */ "\u0175",
         /* morekeys_east_slavic_row2_2 ~ */
         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_v */
         // U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX
         /* morekeys_j */ "\u0135",
@@ -3665,32 +3681,32 @@
         "ca"     , TEXTS_ca,    /*  11/120 Catalan */
         "cs"     , TEXTS_cs,    /*  17/ 21 Czech */
         "da"     , TEXTS_da,    /*  19/ 33 Danish */
-        "de"     , TEXTS_de,    /*  16/ 91 German */
+        "de"     , TEXTS_de,    /*  16/ 60 German */
         "el"     , TEXTS_el,    /*   1/ 10 Greek */
         "en"     , TEXTS_en,    /*   8/ 11 English */
         "eo"     , TEXTS_eo,    /*  26/115 Esperanto */
-        "es"     , TEXTS_es,    /*   8/ 55 Spanish */
+        "es"     , TEXTS_es,    /*   8/ 61 Spanish */
         "et_EE"  , TEXTS_et_EE, /*  22/ 27 Estonian (Estonia) */
         "eu_ES"  , TEXTS_eu_ES, /*   7/  8 Basque (Spain) */
         "fa"     , TEXTS_fa,    /*  58/123 Persian */
         "fi"     , TEXTS_fi,    /*  10/ 33 Finnish */
-        "fr"     , TEXTS_fr,    /*  13/ 91 French */
+        "fr"     , TEXTS_fr,    /*  13/ 60 French */
         "gl_ES"  , TEXTS_gl_ES, /*   7/  8 Gallegan (Spain) */
         "hi"     , TEXTS_hi,    /*  23/ 54 Hindi */
         "hr"     , TEXTS_hr,    /*   9/ 19 Croatian */
         "hu"     , TEXTS_hu,    /*   9/ 19 Hungarian */
         "hy_AM"  , TEXTS_hy_AM, /*   8/126 Armenian (Armenia) */
         "is"     , TEXTS_is,    /*  10/ 15 Icelandic */
-        "it"     , TEXTS_it,    /*   5/  5 Italian */
+        "it"     , TEXTS_it,    /*  11/ 60 Italian */
         "iw"     , TEXTS_iw,    /*  20/121 Hebrew */
         "ka_GE"  , TEXTS_ka_GE, /*   3/ 10 Georgian (Georgia) */
         "kk"     , TEXTS_kk,    /*  15/118 Kazakh */
         "km_KH"  , TEXTS_km_KH, /*   2/119 Khmer (Cambodia) */
-        "ky"     , TEXTS_ky,    /*  10/ 80 Kirghiz */
+        "ky"     , TEXTS_ky,    /*  10/ 86 Kirghiz */
         "lo_LA"  , TEXTS_lo_LA, /*   2/ 20 Lao (Laos) */
         "lt"     , TEXTS_lt,    /*  18/ 22 Lithuanian */
         "lv"     , TEXTS_lv,    /*  18/ 22 Latvian */
-        "mk"     , TEXTS_mk,    /*   9/ 85 Macedonian */
+        "mk"     , TEXTS_mk,    /*   9/ 91 Macedonian */
         "mn_MN"  , TEXTS_mn_MN, /*   2/ 20 Mongolian (Mongolia) */
         "my_MM"  , TEXTS_my_MM, /*   1/ 10 Burmese (Myanmar) */
         "nb"     , TEXTS_nb,    /*  11/ 33 Norwegian Bokmål */
@@ -3703,13 +3719,13 @@
         "ru"     , TEXTS_ru,    /*   9/ 32 Russian */
         "sk"     , TEXTS_sk,    /*  20/ 22 Slovak */
         "sl"     , TEXTS_sl,    /*   8/ 19 Slovenian */
-        "sr"     , TEXTS_sr,    /*  11/ 85 Serbian */
+        "sr"     , TEXTS_sr,    /*  11/ 91 Serbian */
         "sv"     , TEXTS_sv,    /*  21/ 33 Swedish */
         "sw"     , TEXTS_sw,    /*   9/ 17 Swahili */
         "th"     , TEXTS_th,    /*   2/ 20 Thai */
         "tl"     , TEXTS_tl,    /*   7/  8 Tagalog */
         "tr"     , TEXTS_tr,    /*   7/ 17 Turkish */
-        "uk"     , TEXTS_uk,    /*  11/ 79 Ukrainian */
+        "uk"     , TEXTS_uk,    /*  11/ 85 Ukrainian */
         "vi"     , TEXTS_vi,    /*   8/ 20 Vietnamese */
         "zu"     , TEXTS_zu,    /*   8/ 11 Zulu */
         "zz"     , TEXTS_zz,    /*  19/109 Alphabet */
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
index 18390b2..e4aaf03 100644
--- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetSubtypesCountTests.java
@@ -25,8 +25,8 @@
 
 @SmallTest
 public class KeyboardLayoutSetSubtypesCountTests extends KeyboardLayoutSetTestsBase {
-    private static final int NUMBER_OF_SUBTYPES = 69;
-    private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 44;
+    private static final int NUMBER_OF_SUBTYPES = 70;
+    private static final int NUMBER_OF_ASCII_CAPABLE_SUBTYPES = 45;
     private static final int NUMBER_OF_PREDEFINED_ADDITIONAL_SUBTYPES = 2;
 
     private static String toString(final ArrayList<InputMethodSubtype> subtypeList) {
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsItalian.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsItalian.java
index 4a22003..fe83bbf 100644
--- a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsItalian.java
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsItalian.java
@@ -20,6 +20,7 @@
 
 import com.android.inputmethod.keyboard.layout.LayoutBase;
 import com.android.inputmethod.keyboard.layout.LayoutBase.EuroCustomizer;
+import com.android.inputmethod.keyboard.layout.LayoutBase.LayoutCustomizer;
 import com.android.inputmethod.keyboard.layout.Qwerty;
 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
 
@@ -31,12 +32,26 @@
 @SmallTest
 public final class TestsItalian extends LayoutTestsBase {
     private static final Locale LOCALE = new Locale("it");
-    private static final LayoutBase LAYOUT = new Qwerty(new ItalianCustomizer(LOCALE));
+    private static final LayoutBase LAYOUT = new Qwerty(new ItalianITCustomizer(LOCALE));
 
     @Override
     LayoutBase getLayout() { return LAYOUT; }
 
-    private static class ItalianCustomizer extends EuroCustomizer {
+    private static class ItalianITCustomizer extends EuroCustomizer {
+        private final ItalianCustomizer mItalianCustomizer;
+
+        public ItalianITCustomizer(final Locale locale) {
+            super(locale);
+            mItalianCustomizer = new ItalianCustomizer(locale);
+        }
+
+        @Override
+        public ExpectedKeyboardBuilder setAccentedLetters(final ExpectedKeyboardBuilder builder) {
+            return mItalianCustomizer.setAccentedLetters(builder);
+        }
+    }
+
+    static class ItalianCustomizer extends LayoutCustomizer {
         public ItalianCustomizer(final Locale locale) { super(locale); }
 
         @Override
diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsItalianCH.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsItalianCH.java
new file mode 100644
index 0000000..65f74bf
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsItalianCH.java
@@ -0,0 +1,57 @@
+/*
+ * 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.Swiss;
+import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
+import com.android.inputmethod.keyboard.layout.tests.TestsItalian.ItalianCustomizer;
+
+import java.util.Locale;
+
+/**
+ * it_CH: Italian (Switzerland)/swiss
+ */
+@SmallTest
+public final class TestsItalianCH extends LayoutTestsBase {
+    private static final Locale LOCALE = new Locale("it", "CH");
+    private static final LayoutBase LAYOUT = new Swiss(new ItalianCHCustomizer(LOCALE));
+
+    @Override
+    LayoutBase getLayout() { return LAYOUT; }
+
+    private static class ItalianCHCustomizer extends ItalianCustomizer {
+        public ItalianCHCustomizer(final Locale locale) { super(locale); }
+
+        @Override
+        public ExpectedKeyboardBuilder setAccentedLetters(final ExpectedKeyboardBuilder builder) {
+            super.setAccentedLetters(builder);
+            return builder
+                    // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
+                    // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE
+                    .replaceKeyOfLabel(Swiss.ROW1_11, key("\u00FC", moreKey("\u00E8")))
+                    // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS
+                    // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE
+                    .replaceKeyOfLabel(Swiss.ROW2_10, key("\u00F6", moreKey("\u00E9")))
+                    // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
+                    // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
+                    .replaceKeyOfLabel(Swiss.ROW2_11, key("\u00E4", moreKey("\u00E0")));
+        }
+    }
+}
diff --git a/tools/make-keyboard-text/res/values-it/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-it/donottranslate-more-keys.xml
index 6492553..e809f48 100644
--- a/tools/make-keyboard-text/res/values-it/donottranslate-more-keys.xml
+++ b/tools/make-keyboard-text/res/values-it/donottranslate-more-keys.xml
@@ -59,4 +59,16 @@
          U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS
          U+016B: "ū" LATIN SMALL LETTER U WITH MACRON -->
     <string name="morekeys_u">&#x00F9;,&#x00FA;,&#x00FB;,&#x00FC;,&#x016B;</string>
+    <!-- U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS -->
+    <string name="keyspec_swiss_row1_11">&#x00FC;</string>
+    <!-- U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE -->
+    <string name="morekeys_swiss_row1_11">&#x00E8;</string>
+    <!-- U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS -->
+    <string name="keyspec_swiss_row2_10">&#x00F6;</string>
+    <!-- U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE -->
+    <string name="morekeys_swiss_row2_10">&#x00E9;</string>
+    <!-- U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS -->
+    <string name="keyspec_swiss_row2_11">&#x00E4;</string>
+    <!-- U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE -->
+    <string name="morekeys_swiss_row2_11">&#x00E0;</string>
 </resources>