aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2011-08-08 11:05:04 -0700
committerAlan Viverette <alanv@google.com>2011-08-08 11:05:04 -0700
commit58e3f1065ef47e7116299b9d5087ba2a2b6065a2 (patch)
tree722d51e2c08f6f4d9f5ebf9fb5d6ae97f8e1f7ae /java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
parent0a5345c7b6e9282ea401a4017c2c2f9835e623b1 (diff)
downloadlatinime-58e3f1065ef47e7116299b9d5087ba2a2b6065a2.tar.gz
latinime-58e3f1065ef47e7116299b9d5087ba2a2b6065a2.tar.xz
latinime-58e3f1065ef47e7116299b9d5087ba2a2b6065a2.zip
Fixed speaking keys when editing password fields
Bug: 5042681 Change-Id: Ic4523ec38b0faa2b6a91d476ea7af7e69404861c
Diffstat (limited to 'java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java')
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java47
1 files changed, 39 insertions, 8 deletions
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index 86a56308a..1619451f0 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -20,12 +20,18 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Paint;
+import android.inputmethodservice.InputMethodService;
+import android.media.AudioManager;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityEvent;
+import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.compat.AccessibilityEventCompatUtils;
+import com.android.inputmethod.compat.AudioManagerCompatWrapper;
+import com.android.inputmethod.compat.EditorInfoCompatUtils;
+import com.android.inputmethod.compat.InputTypeCompatUtils;
import com.android.inputmethod.compat.MotionEventCompatUtils;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
@@ -39,17 +45,19 @@ public class AccessibleKeyboardViewProxy {
// Delay in milliseconds between key press DOWN and UP events
private static final long DELAY_KEY_PRESS = 10;
- private int mScaledEdgeSlop;
+ private InputMethodService mInputMethod;
+ private FlickGestureDetector mGestureDetector;
private LatinKeyboardBaseView mView;
private AccessibleKeyboardActionListener mListener;
- private FlickGestureDetector mGestureDetector;
+ private AudioManagerCompatWrapper mAudioManager;
+ private int mScaledEdgeSlop;
private int mLastHoverKeyIndex = KeyDetector.NOT_A_KEY;
private int mLastX = -1;
private int mLastY = -1;
- public static void init(Context context, SharedPreferences prefs) {
- sInstance.initInternal(context, prefs);
+ public static void init(InputMethodService inputMethod, SharedPreferences prefs) {
+ sInstance.initInternal(inputMethod, prefs);
sInstance.mListener = AccessibleInputMethodServiceProxy.getInstance();
}
@@ -65,15 +73,36 @@ public class AccessibleKeyboardViewProxy {
// Not publicly instantiable.
}
- private void initInternal(Context context, SharedPreferences prefs) {
+ private void initInternal(InputMethodService inputMethod, SharedPreferences prefs) {
final Paint paint = new Paint();
paint.setTextAlign(Paint.Align.LEFT);
paint.setTextSize(14.0f);
paint.setAntiAlias(true);
paint.setColor(Color.YELLOW);
- mGestureDetector = new KeyboardFlickGestureDetector(context);
- mScaledEdgeSlop = ViewConfiguration.get(context).getScaledEdgeSlop();
+ mInputMethod = inputMethod;
+ mGestureDetector = new KeyboardFlickGestureDetector(inputMethod);
+ mScaledEdgeSlop = ViewConfiguration.get(inputMethod).getScaledEdgeSlop();
+
+ final AudioManager audioManager = (AudioManager) inputMethod
+ .getSystemService(Context.AUDIO_SERVICE);
+ mAudioManager = new AudioManagerCompatWrapper(audioManager);
+ }
+
+ /**
+ * @return {@code true} if the device should not speak text (eg. non-control) characters
+ */
+ private boolean shouldObscureInput() {
+ // Always speak if the user is listening through headphones.
+ if (mAudioManager.isWiredHeadsetOn() || mAudioManager.isBluetoothA2dpOn())
+ return false;
+
+ final EditorInfo info = mInputMethod.getCurrentInputEditorInfo();
+ if (info == null)
+ return false;
+
+ // Don't speak if the IME is connected to a password field.
+ return InputTypeCompatUtils.isPasswordInputType(info.inputType);
}
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event,
@@ -90,8 +119,10 @@ public class AccessibleKeyboardViewProxy {
if (key == null)
break;
+ final boolean shouldObscure = shouldObscureInput();
final CharSequence description = KeyCodeDescriptionMapper.getInstance()
- .getDescriptionForKey(mView.getContext(), mView.getKeyboard(), key);
+ .getDescriptionForKey(mView.getContext(), mView.getKeyboard(), key,
+ shouldObscure);
if (description == null)
return false;