Loading java/res/values/strings-talkback-descriptions.xml +12 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,18 @@ <string name="spoken_symbol_unknown">Unknown symbol</string> <!-- Spoken description for unknown emoji code point. --> <string name="spoken_emoji_unknown">Unknown emoji</string> <!-- Spoken description for emoticons ":-!". --> <string name="spoken_emoticon_3A_2D_21_20">Bored face</string> <!-- Spoken description for emoticons ":-$". --> <string name="spoken_emoticon_3A_2D_24_20">Embarrassed face</string> <!-- Spoken description for emoticons "B-)". --> <string name="spoken_emoticon_42_2D_29_20">Face wearing sunglasses</string> <!-- Spoken description for emoticons ":O". --> <string name="spoken_emoticon_3A_4F_20">Surprised face</string> <!-- Spoken description for emoticons ":-*". --> <string name="spoken_emoticon_3A_2D_2A_20">Kissing face</string> <!-- Spoken description for emoticons ":-[". --> <string name="spoken_emoticon_3A_2D_5B_20">Frowning face</string> <!-- Spoken descriptions when opening a more keys keyboard that has alternative characters. --> <string name="spoken_open_more_keys_keyboard">Alternative characters are available</string> Loading java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java +22 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ final class KeyCodeDescriptionMapper { private static final String SPOKEN_LETTER_RESOURCE_NAME_FORMAT = "spoken_accented_letter_%04X"; private static final String SPOKEN_SYMBOL_RESOURCE_NAME_FORMAT = "spoken_symbol_%04X"; private static final String SPOKEN_EMOJI_RESOURCE_NAME_FORMAT = "spoken_emoji_%04X"; private static final String SPOKEN_EMOTICON_RESOURCE_NAME_PREFIX = "spoken_emoticon"; private static final String SPOKEN_EMOTICON_CODE_POINT_FORMAT = "_%02X"; // The resource ID of the string spoken for obscured keys private static final int OBSCURED_KEY_RES_ID = R.string.spoken_description_dot; Loading Loading @@ -109,7 +111,9 @@ final class KeyCodeDescriptionMapper { } if (code == Constants.CODE_OUTPUT_TEXT) { return key.getOutputText(); final String outputText = key.getOutputText(); final String description = getSpokenEmoticonDescription(context, outputText); return TextUtils.isEmpty(description) ? outputText : description; } // Just attempt to speak the description. Loading Loading @@ -340,4 +344,21 @@ final class KeyCodeDescriptionMapper { } return resId; } // TODO: Remove this method once TTS supports emoticon verbalization. private String getSpokenEmoticonDescription(final Context context, final String outputText) { final StringBuilder sb = new StringBuilder(SPOKEN_EMOTICON_RESOURCE_NAME_PREFIX); final int textLength = outputText.length(); for (int index = 0; index < textLength; index = outputText.offsetByCodePoints(index, 1)) { final int codePoint = outputText.codePointAt(index); sb.append(String.format(Locale.ROOT, SPOKEN_EMOTICON_CODE_POINT_FORMAT, codePoint)); } final String resourceName = sb.toString(); final Resources resources = context.getResources(); // Note that the resource package name may differ from the context package name. final String resourcePackageName = resources.getResourcePackageName( R.string.spoken_description_unknown); final int resId = resources.getIdentifier(resourceName, "string", resourcePackageName); return (resId == 0) ? null : resources.getString(resId); } } Loading
java/res/values/strings-talkback-descriptions.xml +12 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,18 @@ <string name="spoken_symbol_unknown">Unknown symbol</string> <!-- Spoken description for unknown emoji code point. --> <string name="spoken_emoji_unknown">Unknown emoji</string> <!-- Spoken description for emoticons ":-!". --> <string name="spoken_emoticon_3A_2D_21_20">Bored face</string> <!-- Spoken description for emoticons ":-$". --> <string name="spoken_emoticon_3A_2D_24_20">Embarrassed face</string> <!-- Spoken description for emoticons "B-)". --> <string name="spoken_emoticon_42_2D_29_20">Face wearing sunglasses</string> <!-- Spoken description for emoticons ":O". --> <string name="spoken_emoticon_3A_4F_20">Surprised face</string> <!-- Spoken description for emoticons ":-*". --> <string name="spoken_emoticon_3A_2D_2A_20">Kissing face</string> <!-- Spoken description for emoticons ":-[". --> <string name="spoken_emoticon_3A_2D_5B_20">Frowning face</string> <!-- Spoken descriptions when opening a more keys keyboard that has alternative characters. --> <string name="spoken_open_more_keys_keyboard">Alternative characters are available</string> Loading
java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java +22 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ final class KeyCodeDescriptionMapper { private static final String SPOKEN_LETTER_RESOURCE_NAME_FORMAT = "spoken_accented_letter_%04X"; private static final String SPOKEN_SYMBOL_RESOURCE_NAME_FORMAT = "spoken_symbol_%04X"; private static final String SPOKEN_EMOJI_RESOURCE_NAME_FORMAT = "spoken_emoji_%04X"; private static final String SPOKEN_EMOTICON_RESOURCE_NAME_PREFIX = "spoken_emoticon"; private static final String SPOKEN_EMOTICON_CODE_POINT_FORMAT = "_%02X"; // The resource ID of the string spoken for obscured keys private static final int OBSCURED_KEY_RES_ID = R.string.spoken_description_dot; Loading Loading @@ -109,7 +111,9 @@ final class KeyCodeDescriptionMapper { } if (code == Constants.CODE_OUTPUT_TEXT) { return key.getOutputText(); final String outputText = key.getOutputText(); final String description = getSpokenEmoticonDescription(context, outputText); return TextUtils.isEmpty(description) ? outputText : description; } // Just attempt to speak the description. Loading Loading @@ -340,4 +344,21 @@ final class KeyCodeDescriptionMapper { } return resId; } // TODO: Remove this method once TTS supports emoticon verbalization. private String getSpokenEmoticonDescription(final Context context, final String outputText) { final StringBuilder sb = new StringBuilder(SPOKEN_EMOTICON_RESOURCE_NAME_PREFIX); final int textLength = outputText.length(); for (int index = 0; index < textLength; index = outputText.offsetByCodePoints(index, 1)) { final int codePoint = outputText.codePointAt(index); sb.append(String.format(Locale.ROOT, SPOKEN_EMOTICON_CODE_POINT_FORMAT, codePoint)); } final String resourceName = sb.toString(); final Resources resources = context.getResources(); // Note that the resource package name may differ from the context package name. final String resourcePackageName = resources.getResourcePackageName( R.string.spoken_description_unknown); final int resId = resources.getIdentifier(resourceName, "string", resourcePackageName); return (resId == 0) ? null : resources.getString(resId); } }