am 40e5f403: Merge "Add special case for speaking ACTION_ENTER keys." into jb-dev

* commit '40e5f403af49d8da1f25d9368d18541390e05c38':
  Add special case for speaking ACTION_ENTER keys.
This commit is contained in:
Charles Chen 2012-05-31 17:27:49 -07:00 committed by Android Git Automerger
commit d30cfee577
2 changed files with 53 additions and 0 deletions

View file

@ -188,6 +188,8 @@
<string name="spoken_description_smiley">Smiley face</string>
<!-- Spoken description for the "Return" keyboard key. -->
<string name="spoken_description_return">Return</string>
<!-- Spoken description for the "Search" keyboard key. -->
<string name="spoken_description_search">Search</string>
<!-- Spoken description for the "U+2022" (BULLET) keyboard key. -->
<string name="spoken_description_dot">Dot</string>

View file

@ -19,6 +19,7 @@ package com.android.inputmethod.accessibility;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
@ -104,6 +105,10 @@ public class KeyCodeDescriptionMapper {
return getDescriptionForShiftKey(context, keyboard);
}
if (code == Keyboard.CODE_ACTION_ENTER) {
return getDescriptionForActionKey(context, keyboard, key);
}
if (!TextUtils.isEmpty(key.mLabel)) {
final String label = key.mLabel.toString().trim();
@ -191,6 +196,52 @@ public class KeyCodeDescriptionMapper {
return context.getString(resId);
}
/**
* Returns a context-sensitive description of the "Enter" action key.
*
* @param context The package's context.
* @param keyboard The keyboard on which the key resides.
* @param key The key to describe.
* @return Returns a context-sensitive description of the "Enter" action
* key.
*/
private String getDescriptionForActionKey(Context context, Keyboard keyboard, Key key) {
final KeyboardId keyboardId = keyboard.mId;
final int actionId = keyboardId.imeActionId();
final int resId;
// Always use the label, if available.
if (!TextUtils.isEmpty(key.mLabel)) {
return key.mLabel.toString().trim();
}
// Otherwise, use the action ID.
switch (actionId) {
case EditorInfo.IME_ACTION_SEARCH:
resId = R.string.spoken_description_search;
break;
case EditorInfo.IME_ACTION_GO:
resId = R.string.label_go_key;
break;
case EditorInfo.IME_ACTION_SEND:
resId = R.string.label_send_key;
break;
case EditorInfo.IME_ACTION_NEXT:
resId = R.string.label_next_key;
break;
case EditorInfo.IME_ACTION_DONE:
resId = R.string.label_done_key;
break;
case EditorInfo.IME_ACTION_PREVIOUS:
resId = R.string.label_previous_key;
break;
default:
resId = R.string.spoken_description_return;
}
return context.getString(resId);
}
/**
* Returns a localized character sequence describing what will happen when
* the specified key is pressed based on its key code.