Loading java/res/values-kk/strings-talkback-descriptions.xml +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ <skip /> <!-- no translation found for spoken_auto_correct_obscured (6276420476908833791) --> <skip /> <string name="spoken_description_unknown" msgid="3197434010402179157">"Перне коды %d"</string> <!-- no translation found for spoken_description_unknown (5139930082759824442) --> <skip /> <string name="spoken_description_shift" msgid="244197883292549308">"Shift"</string> <string name="spoken_description_shift_shifted" msgid="1681877323344195035">"Shift қосулы (өшіру үшін түрту)"</string> <string name="spoken_description_caps_lock" msgid="3276478269526304432">"Caps lock қосулы (өшіру үшін түрту)"</string> Loading java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java +26 −42 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.KeyboardId; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.utils.StringUtils; import java.util.Locale; Loading Loading @@ -79,14 +80,6 @@ final class KeyCodeDescriptionMapper { /** * Returns the localized description of the action performed by a specified * key based on the current keyboard state. * <p> * The order of precedence for key descriptions is: * <ol> * <li>Manually-defined based on the key label</li> * <li>Automatic or manually-defined based on the key code</li> * <li>Automatically based on the key label</li> * <li>{code null} for keys with no label or key code defined</li> * </p> * * @param context The package's context. * @param keyboard The keyboard on which the key resides. Loading Loading @@ -121,7 +114,20 @@ final class KeyCodeDescriptionMapper { // Just attempt to speak the description. if (code != Constants.CODE_UNSPECIFIED) { return getDescriptionForKeyCode(context, keyboard, key, shouldObscure); // If the key description should be obscured, now is the time to do it. final boolean isDefinedNonCtrl = Character.isDefined(code) && !Character.isISOControl(code); if (shouldObscure && isDefinedNonCtrl) { return context.getString(OBSCURED_KEY_RES_ID); } final String description = getDescriptionForCodePoint(context, code); if (description != null) { return description; } if (!TextUtils.isEmpty(key.getLabel())) { return key.getLabel(); } return context.getString(R.string.spoken_description_unknown); } return null; } Loading Loading @@ -247,57 +253,35 @@ final class KeyCodeDescriptionMapper { /** * Returns a localized character sequence describing what will happen when * the specified key is pressed based on its key code. * <p> * The order of precedence for key code descriptions is: * <ol> * <li>Manually-defined shift-locked description</li> * <li>Manually-defined shifted description</li> * <li>Manually-defined normal description</li> * <li>Automatic based on the character represented by the key code</li> * <li>Fall-back for undefined or control characters</li> * </ol> * </p> * the specified key is pressed based on its key code point. * * @param context The package's context. * @param keyboard The keyboard on which the key resides. * @param key The key from which to obtain a description. * @param shouldObscure {@true} if text (e.g. non-control) characters should be obscured. * @return a character sequence describing the action performed by pressing the key * @param codePoint The code point from which to obtain a description. * @return a character sequence describing the code point. */ private String getDescriptionForKeyCode(final Context context, final Keyboard keyboard, final Key key, final boolean shouldObscure) { final int code = key.getCode(); public String getDescriptionForCodePoint(final Context context, final int codePoint) { // If the key description should be obscured, now is the time to do it. final boolean isDefinedNonCtrl = Character.isDefined(code) && !Character.isISOControl(code); if (shouldObscure && isDefinedNonCtrl) { return context.getString(OBSCURED_KEY_RES_ID); } final int index = mKeyCodeMap.indexOfKey(code); final int index = mKeyCodeMap.indexOfKey(codePoint); if (index >= 0) { return context.getString(mKeyCodeMap.valueAt(index)); } final String accentedLetter = getSpokenAccentedLetterDescription(context, code); final String accentedLetter = getSpokenAccentedLetterDescription(context, codePoint); if (accentedLetter != null) { return accentedLetter; } // Here, <code>code</code> may be a base (non-accented) letter. final String unsupportedSymbol = getSpokenSymbolDescription(context, code); final String unsupportedSymbol = getSpokenSymbolDescription(context, codePoint); if (unsupportedSymbol != null) { return unsupportedSymbol; } final String emojiDescription = getSpokenEmojiDescription(context, code); final String emojiDescription = getSpokenEmojiDescription(context, codePoint); if (emojiDescription != null) { return emojiDescription; } if (isDefinedNonCtrl) { return Character.toString((char) code); } if (!TextUtils.isEmpty(key.getLabel())) { return key.getLabel(); if (Character.isDefined(codePoint) && !Character.isISOControl(codePoint)) { return StringUtils.newSingleCodePointString(codePoint); } return context.getString(R.string.spoken_description_unknown, code); return null; } // TODO: Remove this method once TTS supports those accented letters' verbalization. Loading Loading
java/res/values-kk/strings-talkback-descriptions.xml +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ <skip /> <!-- no translation found for spoken_auto_correct_obscured (6276420476908833791) --> <skip /> <string name="spoken_description_unknown" msgid="3197434010402179157">"Перне коды %d"</string> <!-- no translation found for spoken_description_unknown (5139930082759824442) --> <skip /> <string name="spoken_description_shift" msgid="244197883292549308">"Shift"</string> <string name="spoken_description_shift_shifted" msgid="1681877323344195035">"Shift қосулы (өшіру үшін түрту)"</string> <string name="spoken_description_caps_lock" msgid="3276478269526304432">"Caps lock қосулы (өшіру үшін түрту)"</string> Loading
java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java +26 −42 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.KeyboardId; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.utils.StringUtils; import java.util.Locale; Loading Loading @@ -79,14 +80,6 @@ final class KeyCodeDescriptionMapper { /** * Returns the localized description of the action performed by a specified * key based on the current keyboard state. * <p> * The order of precedence for key descriptions is: * <ol> * <li>Manually-defined based on the key label</li> * <li>Automatic or manually-defined based on the key code</li> * <li>Automatically based on the key label</li> * <li>{code null} for keys with no label or key code defined</li> * </p> * * @param context The package's context. * @param keyboard The keyboard on which the key resides. Loading Loading @@ -121,7 +114,20 @@ final class KeyCodeDescriptionMapper { // Just attempt to speak the description. if (code != Constants.CODE_UNSPECIFIED) { return getDescriptionForKeyCode(context, keyboard, key, shouldObscure); // If the key description should be obscured, now is the time to do it. final boolean isDefinedNonCtrl = Character.isDefined(code) && !Character.isISOControl(code); if (shouldObscure && isDefinedNonCtrl) { return context.getString(OBSCURED_KEY_RES_ID); } final String description = getDescriptionForCodePoint(context, code); if (description != null) { return description; } if (!TextUtils.isEmpty(key.getLabel())) { return key.getLabel(); } return context.getString(R.string.spoken_description_unknown); } return null; } Loading Loading @@ -247,57 +253,35 @@ final class KeyCodeDescriptionMapper { /** * Returns a localized character sequence describing what will happen when * the specified key is pressed based on its key code. * <p> * The order of precedence for key code descriptions is: * <ol> * <li>Manually-defined shift-locked description</li> * <li>Manually-defined shifted description</li> * <li>Manually-defined normal description</li> * <li>Automatic based on the character represented by the key code</li> * <li>Fall-back for undefined or control characters</li> * </ol> * </p> * the specified key is pressed based on its key code point. * * @param context The package's context. * @param keyboard The keyboard on which the key resides. * @param key The key from which to obtain a description. * @param shouldObscure {@true} if text (e.g. non-control) characters should be obscured. * @return a character sequence describing the action performed by pressing the key * @param codePoint The code point from which to obtain a description. * @return a character sequence describing the code point. */ private String getDescriptionForKeyCode(final Context context, final Keyboard keyboard, final Key key, final boolean shouldObscure) { final int code = key.getCode(); public String getDescriptionForCodePoint(final Context context, final int codePoint) { // If the key description should be obscured, now is the time to do it. final boolean isDefinedNonCtrl = Character.isDefined(code) && !Character.isISOControl(code); if (shouldObscure && isDefinedNonCtrl) { return context.getString(OBSCURED_KEY_RES_ID); } final int index = mKeyCodeMap.indexOfKey(code); final int index = mKeyCodeMap.indexOfKey(codePoint); if (index >= 0) { return context.getString(mKeyCodeMap.valueAt(index)); } final String accentedLetter = getSpokenAccentedLetterDescription(context, code); final String accentedLetter = getSpokenAccentedLetterDescription(context, codePoint); if (accentedLetter != null) { return accentedLetter; } // Here, <code>code</code> may be a base (non-accented) letter. final String unsupportedSymbol = getSpokenSymbolDescription(context, code); final String unsupportedSymbol = getSpokenSymbolDescription(context, codePoint); if (unsupportedSymbol != null) { return unsupportedSymbol; } final String emojiDescription = getSpokenEmojiDescription(context, code); final String emojiDescription = getSpokenEmojiDescription(context, codePoint); if (emojiDescription != null) { return emojiDescription; } if (isDefinedNonCtrl) { return Character.toString((char) code); } if (!TextUtils.isEmpty(key.getLabel())) { return key.getLabel(); if (Character.isDefined(codePoint) && !Character.isISOControl(codePoint)) { return StringUtils.newSingleCodePointString(codePoint); } return context.getString(R.string.spoken_description_unknown, code); return null; } // TODO: Remove this method once TTS supports those accented letters' verbalization. Loading