Add ZWNJ and ZWJ icons

Bug: 5456620
Change-Id: I7238f41c841803746ca2ab6cd332b2be8498a3ee
diff --git a/java/res/drawable-hdpi/sym_keyboard_zwj_holo.png b/java/res/drawable-hdpi/sym_keyboard_zwj_holo.png
new file mode 100644
index 0000000..5fa30ce
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_zwj_holo.png
Binary files differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_zwnj_holo.png b/java/res/drawable-hdpi/sym_keyboard_zwnj_holo.png
new file mode 100644
index 0000000..91367f3
--- /dev/null
+++ b/java/res/drawable-hdpi/sym_keyboard_zwnj_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_zwj_holo.png b/java/res/drawable-mdpi/sym_keyboard_zwj_holo.png
new file mode 100644
index 0000000..70370d8
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_zwj_holo.png
Binary files differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_zwnj_holo.png b/java/res/drawable-mdpi/sym_keyboard_zwnj_holo.png
new file mode 100644
index 0000000..a69eade
--- /dev/null
+++ b/java/res/drawable-mdpi/sym_keyboard_zwnj_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_zwj_holo.png b/java/res/drawable-xhdpi/sym_keyboard_zwj_holo.png
new file mode 100644
index 0000000..2669427
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_zwj_holo.png
Binary files differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_zwnj_holo.png b/java/res/drawable-xhdpi/sym_keyboard_zwnj_holo.png
new file mode 100644
index 0000000..75a22b6
--- /dev/null
+++ b/java/res/drawable-xhdpi/sym_keyboard_zwnj_holo.png
Binary files differ
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index e33f0ba..550f5ac 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -224,6 +224,8 @@
         <attr name="iconDisabledShortcutKey" format="reference" />
         <attr name="iconPreviewTabKey" format="reference" />
         <attr name="iconLanguageSwitchKey" format="reference" />
+        <attr name="iconZwnjKey" format="reference" />
+        <attr name="iconZwjKey" format="reference" />
     </declare-styleable>
 
     <declare-styleable name="Keyboard_Key">
@@ -309,6 +311,8 @@
             <enum name="iconSpaceKeyForNumberLayout" value="10" />
             <enum name="iconShiftKeyShifted" value="11" />
             <enum name="iconLanguageSwitchKey" value="14" />
+            <enum name="iconZwnjKey" value="15" />
+            <enum name="iconZwjKey" value="16" />
         </attr>
         <!-- The icon for disabled key -->
         <attr name="keyIconDisabled" format="enum">
diff --git a/java/res/values/keyboard-icons-black.xml b/java/res/values/keyboard-icons-black.xml
index 44fc2b9..1ff597a 100644
--- a/java/res/values/keyboard-icons-black.xml
+++ b/java/res/values/keyboard-icons-black.xml
@@ -36,5 +36,8 @@
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
         <!-- TODO: Needs dedicated black theme globe icon -->
         <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item>
+        <!-- TODO: Needs dedicated black theme ZWNJ and ZWJ icons -->
+        <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item>
+        <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo</item>
     </style>
 </resources>
diff --git a/java/res/values/keyboard-icons-ics.xml b/java/res/values/keyboard-icons-ics.xml
index 5fba025..0774d57 100644
--- a/java/res/values/keyboard-icons-ics.xml
+++ b/java/res/values/keyboard-icons-ics.xml
@@ -34,5 +34,7 @@
         <item name="iconDisabledShortcutKey">@drawable/sym_keyboard_voice_off_holo</item>
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item>
+        <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item>
+        <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo</item>
     </style>
 </resources>
diff --git a/java/res/values/keyboard-icons-white.xml b/java/res/values/keyboard-icons-white.xml
index 837b1a3..5798786 100644
--- a/java/res/values/keyboard-icons-white.xml
+++ b/java/res/values/keyboard-icons-white.xml
@@ -32,5 +32,8 @@
         <item name="iconDisabledShortcutKey">@drawable/sym_keyboard_voice_off_holo</item>
         <item name="iconPreviewTabKey">@drawable/sym_keyboard_feedback_tab</item>
         <item name="iconLanguageSwitchKey">@drawable/sym_keyboard_language_switch</item>
+        <!-- TODO: Needs dedicated black theme ZWNJ and ZWJ icons -->
+        <item name="iconZwnjKey">@drawable/sym_keyboard_zwnj_holo</item>
+        <item name="iconZwjKey">@drawable/sym_keyboard_zwj_holo</item>
     </style>
 </resources>
diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml
index a263acd..aceb4a5 100644
--- a/java/res/xml-sw600dp/key_styles_common.xml
+++ b/java/res/xml-sw600dp/key_styles_common.xml
@@ -78,11 +78,14 @@
         latin:styleName="spaceKeyStyle"
         latin:code="@integer/key_space"
         latin:keyActionFlags="noKeyPreview" />
+    <!-- U+200C: ZERO WIDTH NON-JOINER
+         U+200D: ZERO WIDTH JOINER -->
     <key-style
         latin:styleName="zwnjKeyStyle"
-        latin:keyLabel="&#x200C;"
-        latin:moreKeys="&#x200D;"
-        latin:keyLabelFlags="hasPopupHint" />
+        latin:code="0x200C"
+        latin:moreKeys="\@icon/zwjKey|&#x200D;"
+        latin:keyLabelFlags="hasPopupHint"
+        latin:keyActionFlags="noKeyPreview" />
     <key-style
         latin:styleName="smileyKeyStyle"
         latin:keyLabel=":-)"
diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml
index fade151..1774e82 100644
--- a/java/res/xml-sw768dp/key_styles_common.xml
+++ b/java/res/xml-sw768dp/key_styles_common.xml
@@ -77,11 +77,14 @@
         latin:styleName="spaceKeyStyle"
         latin:code="@integer/key_space"
         latin:keyActionFlags="noKeyPreview" />
+    <!-- U+200C: ZERO WIDTH NON-JOINER
+         U+200D: ZERO WIDTH JOINER -->
     <key-style
         latin:styleName="zwnjKeyStyle"
-        latin:keyLabel="&#x200C;"
-        latin:moreKeys="&#x200D;"
-        latin:keyLabelFlags="hasPopupHint" />
+        latin:code="0x200C"
+        latin:moreKeys="\@icon/zwjKey|&#x200D;"
+        latin:keyLabelFlags="hasPopupHint"
+        latin:keyActionFlags="noKeyPreview" />
     <key-style
         latin:styleName="smileyKeyStyle"
         latin:keyLabel=":-)"
diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml
index 087b895..66d8d4d 100644
--- a/java/res/xml/key_styles_common.xml
+++ b/java/res/xml/key_styles_common.xml
@@ -107,11 +107,15 @@
         latin:code="@integer/key_space"
         latin:keyActionFlags="noKeyPreview|enableLongPress"
         latin:backgroundType="functional" />
+    <!-- U+200C: ZERO WIDTH NON-JOINER
+         U+200D: ZERO WIDTH JOINER -->
     <key-style
         latin:styleName="zwnjKeyStyle"
-        latin:keyLabel="&#x200C;"
-        latin:moreKeys="&#x200D;"
+        latin:code="0x200C"
+        latin:keyIcon="iconZwnjKey"
+        latin:moreKeys="\@icon/zwjKey|&#x200D;"
         latin:keyLabelFlags="hasPopupHint"
+        latin:keyActionFlags="noKeyPreview"
         latin:backgroundType="functional" />
     <key-style
         latin:styleName="shortcutKeyStyle"
@@ -129,8 +133,6 @@
         latin:keyActionFlags="noKeyPreview|altCodeWhileTyping|enableLongPress"
         latin:altCode="@integer/key_space"
         latin:backgroundType="functional" />
-    <!-- U+200C: "" ZERO WIDTH NON-JOINER
-         U+200D: "" ZERO WIDTH JOINER -->
     <key-style
         latin:styleName="tabKeyStyle"
         latin:code="@integer/key_tab"
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index 9b9c861..ded89b1 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -30,7 +30,7 @@
 
     // The value should be aligned with the enum value of Key.keyIcon.
     public static final int ICON_UNDEFINED = 0;
-    private static final int NUM_ICONS = 14;
+    private static final int NUM_ICONS = 16;
 
     private final Drawable[] mIcons = new Drawable[NUM_ICONS + 1];
 
@@ -58,6 +58,8 @@
         addIconIdMap(12, "disabledShortcurKey", R.styleable.Keyboard_iconDisabledShortcutKey);
         addIconIdMap(13, "previewTabKey", R.styleable.Keyboard_iconPreviewTabKey);
         addIconIdMap(14, "languageSwitchKey", R.styleable.Keyboard_iconLanguageSwitchKey);
+        addIconIdMap(15, "zwnjKey", R.styleable.Keyboard_iconZwnjKey);
+        addIconIdMap(16, "zwjKey", R.styleable.Keyboard_iconZwjKey);
     }
 
     private static void addIconIdMap(int iconId, String name, int attrId) {