From 9ecdb831db6c2fe7b476ab8bb23970d8056a8da6 Mon Sep 17 00:00:00 2001
From: Satoshi Kataoka <satok@google.com>
Date: Thu, 3 Oct 2013 16:04:12 +0900
Subject: [PATCH] Fix the subtype id of the additional subtypes

Bug: 11032428
Change-Id: I5d422f1c15a582015770ef9a652348ca6eb8ab85
---
 .../latin/utils/AdditionalSubtypeUtils.java   | 29 ++++++++++++++++---
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java b/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
index 44b201642..ff332cdee 100644
--- a/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
@@ -61,10 +61,8 @@ public final class AdditionalSubtypeUtils {
                 StringUtils.appendToCommaSplittableTextIfNotExists(
                         IS_ADDITIONAL_SUBTYPE, layoutDisplayNameExtraValue);
         final int nameId = SubtypeLocaleUtils.getSubtypeNameId(localeString, keyboardLayoutSetName);
-        return new InputMethodSubtype(nameId, R.drawable.ic_ime_switcher_dark,
-                localeString, KEYBOARD_MODE, layoutExtraValue + "," + additionalSubtypeExtraValue
-                        + "," + Constants.Subtype.ExtraValue.ASCII_CAPABLE
-                        + "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE, false, false);
+        return buildInputMethodSubtype(
+                nameId, localeString, layoutExtraValue, additionalSubtypeExtraValue);
     }
 
     public static String getPrefSubtype(final InputMethodSubtype subtype) {
@@ -137,4 +135,27 @@ public final class AdditionalSubtypeUtils {
         }
         return sb.toString();
     }
+
+    private static InputMethodSubtype buildInputMethodSubtype(int nameId, String localeString,
+            String layoutExtraValue, String additionalSubtypeExtraValue) {
+        // CAVEAT! If you want to change subtypeId after changing the extra values,
+        // you must change "getInputMethodSubtypeId". But it will remove the additional keyboard
+        // from the current users. So, you should be really careful to change it.
+        final int subtypeId = getInputMethodSubtypeId(nameId, localeString, layoutExtraValue,
+                additionalSubtypeExtraValue);
+        // TODO: Use InputMethodSubtypeBuilder once we use SDK version 19.
+        return new InputMethodSubtype(nameId, R.drawable.ic_ime_switcher_dark,
+                localeString, KEYBOARD_MODE, layoutExtraValue + "," + additionalSubtypeExtraValue
+                        + "," + Constants.Subtype.ExtraValue.ASCII_CAPABLE
+                        + "," + Constants.Subtype.ExtraValue.EMOJI_CAPABLE, false, false,
+                        subtypeId);
+    }
+
+    private static int getInputMethodSubtypeId(int nameId, String localeString,
+            String layoutExtraValue, String additionalSubtypeExtraValue) {
+        // TODO: Use InputMethodSubtypeBuilder once we use SDK version 19.
+        return (new InputMethodSubtype(nameId, R.drawable.ic_ime_switcher_dark,
+                localeString, KEYBOARD_MODE, layoutExtraValue + "," + additionalSubtypeExtraValue,
+                        false, false)).hashCode();
+    }
 }