Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4936d259 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Fix verbalizing missing emoticons"

parents 5e828b2c d9d5ba42
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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>
+22 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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.
@@ -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);
    }
}