From 080327154f93784f8b6f2478f342238e266ae473 Mon Sep 17 00:00:00 2001 From: alanv Date: Thu, 31 May 2012 16:15:21 -0700 Subject: [PATCH] Add special case for speaking ACTION_ENTER keys. Bug: 6576058 Change-Id: If9a4fc2ddd5bcbac5f610d705441aa379c499a6f --- java/res/values/strings.xml | 2 + .../KeyCodeDescriptionMapper.java | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index e1f03714a..d51d3789a 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -188,6 +188,8 @@ Smiley face Return + + Search Dot diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java index 7e1889a74..23acb8b74 100644 --- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java +++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java @@ -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.