diff --git a/java/res/values/strings-talkback-descriptions.xml b/java/res/values/strings-talkback-descriptions.xml
index 14455d0..d7978b0 100644
--- a/java/res/values/strings-talkback-descriptions.xml
+++ b/java/res/values/strings-talkback-descriptions.xml
@@ -128,11 +128,13 @@
     <string name="spoken_descrption_emoji_category_emoticons">Emoticons</string>
 
     <!-- Description of an upper case letter of LOWER_LETTER. -->
-    <string name="spoke_description_upper_case">Capital <xliff:g id="LOWER_LETTER" example="A, E, ligature">%s</xliff:g></string>
+    <string name="spoken_description_upper_case">Capital <xliff:g id="LOWER_LETTER" example="A, E, ligature">%s</xliff:g></string>
     <!-- Spoken description for Unicode code point U+0049: "I" LATIN CAPITAL LETTER I
          Note that depending on locale, the lower-case of this letter is U+0069 or U+0131. -->
     <string name="spoken_letter_0049">Capital I</string>
     <!-- Spoken description for Unicode code point U+0130: "İ" LATIN CAPITAL LETTER I WITH DOT ABOVE
          Note that depending on locale, the lower-case of this letter is U+0069 or U+0131. -->
     <string name="spoken_letter_0130">Capital I, dot above</string>
+    <!-- Spoken description for unknown emoji code point. -->
+    <string name="spoken_emoji_unknown">Unknown emoji</string>
 </resources>
diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
index 2c87fc1..58672ac 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
@@ -285,15 +285,14 @@
         if (index >= 0) {
             return context.getString(mKeyCodeMap.valueAt(index));
         }
-        final String accentedLetter = getSpokenAccentedLetterDescriptionId(context, code);
+        final String accentedLetter = getSpokenAccentedLetterDescription(context, code);
         if (accentedLetter != null) {
             return accentedLetter;
         }
-        // Here, <code>code</code> may be a base letter.
-        final int spokenEmojiId = getSpokenDescriptionId(
-                context, code, SPOKEN_EMOJI_RESOURCE_NAME_FORMAT);
-        if (spokenEmojiId != 0) {
-            return context.getString(spokenEmojiId);
+        // Here, <code>code</code> may be a base (non-accented) letter.
+        final String emojiDescription = getSpokenEmojiDescription(context, code);
+        if (emojiDescription != null) {
+            return emojiDescription;
         }
         if (isDefinedNonCtrl) {
             return Character.toString((char) code);
@@ -304,7 +303,7 @@
         return context.getString(R.string.spoken_description_unknown, code);
     }
 
-    private String getSpokenAccentedLetterDescriptionId(final Context context, final int code) {
+    private String getSpokenAccentedLetterDescription(final Context context, final int code) {
         final boolean isUpperCase = Character.isUpperCase(code);
         final int baseCode = isUpperCase ? Character.toLowerCase(code) : code;
         final int baseIndex = mKeyCodeMap.indexOfKey(baseCode);
@@ -314,7 +313,17 @@
             return null;
         }
         final String spokenText = context.getString(resId);
-        return isUpperCase ? context.getString(R.string.spoke_description_upper_case, spokenText)
+        return isUpperCase ? context.getString(R.string.spoken_description_upper_case, spokenText)
+                : spokenText;
+    }
+
+    private String getSpokenEmojiDescription(final Context context, final int code) {
+        final int resId = getSpokenDescriptionId(context, code, SPOKEN_EMOJI_RESOURCE_NAME_FORMAT);
+        if (resId == 0) {
+            return null;
+        }
+        final String spokenText = context.getString(resId);
+        return TextUtils.isEmpty(spokenText) ? context.getString(R.string.spoken_emoji_unknown)
                 : spokenText;
     }
 
