diff options
author | 2011-10-05 16:59:31 -0700 | |
---|---|---|
committer | 2011-10-06 11:02:29 -0700 | |
commit | b0c8db018d53b103dcb4b699be27a4e1a2c2f92c (patch) | |
tree | cac1a52164bb4b77eb651c2f14578cf0e834010b /java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java | |
parent | c1368a8efce58f3e513e490e78ade396ef03b1e8 (diff) | |
download | latinime-b0c8db018d53b103dcb4b699be27a4e1a2c2f92c.tar.gz latinime-b0c8db018d53b103dcb4b699be27a4e1a2c2f92c.tar.xz latinime-b0c8db018d53b103dcb4b699be27a4e1a2c2f92c.zip |
Let accessibility users know to connect a headset when the IME connects to a password field.
Change-Id: If96cd7626950dd12e88a8a97f5e405d303d41e06
Diffstat (limited to 'java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java')
-rw-r--r-- | java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java index 7e71b5f36..4a2542dec 100644 --- a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java +++ b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java @@ -19,15 +19,19 @@ package com.android.inputmethod.accessibility; import android.content.Context; import android.content.SharedPreferences; import android.inputmethodservice.InputMethodService; +import android.media.AudioManager; import android.os.SystemClock; import android.util.Log; import android.view.MotionEvent; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; +import android.view.inputmethod.EditorInfo; -import com.android.inputmethod.compat.AccessibilityEventCompatUtils; import com.android.inputmethod.compat.AccessibilityManagerCompatWrapper; +import com.android.inputmethod.compat.AudioManagerCompatWrapper; +import com.android.inputmethod.compat.InputTypeCompatUtils; import com.android.inputmethod.compat.MotionEventCompatUtils; +import com.android.inputmethod.latin.R; public class AccessibilityUtils { private static final String TAG = AccessibilityUtils.class.getSimpleName(); @@ -37,8 +41,10 @@ public class AccessibilityUtils { private static final AccessibilityUtils sInstance = new AccessibilityUtils(); + private Context mContext; private AccessibilityManager mAccessibilityManager; private AccessibilityManagerCompatWrapper mCompatManager; + private AudioManagerCompatWrapper mAudioManager; /* * Setting this constant to {@code false} will disable all keyboard @@ -67,9 +73,14 @@ public class AccessibilityUtils { } private void initInternal(Context context, SharedPreferences prefs) { + mContext = context; mAccessibilityManager = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE); mCompatManager = new AccessibilityManagerCompatWrapper(mAccessibilityManager); + + final AudioManager audioManager = (AudioManager) context + .getSystemService(Context.AUDIO_SERVICE); + mAudioManager = new AudioManagerCompatWrapper(audioManager); } /** @@ -102,6 +113,22 @@ public class AccessibilityUtils { } /** + * @return {@code true} if the device should not speak text (eg. + * non-control) characters + */ + public boolean shouldObscureInput(EditorInfo attribute) { + if (attribute == null) + return false; + + // Always speak if the user is listening through headphones. + if (mAudioManager.isWiredHeadsetOn() || mAudioManager.isBluetoothA2dpOn()) + return false; + + // Don't speak if the IME is connected to a password field. + return InputTypeCompatUtils.isPasswordInputType(attribute.inputType); + } + + /** * Sends the specified text to the {@link AccessibilityManager} to be * spoken. * @@ -117,7 +144,7 @@ public class AccessibilityUtils { // class. Instead, we're just forcing a fake AccessibilityEvent into // the screen reader to make it speak. final AccessibilityEvent event = AccessibilityEvent - .obtain(AccessibilityEventCompatUtils.TYPE_VIEW_HOVER_ENTER); + .obtain(AccessibilityEvent.TYPE_VIEW_FOCUSED); event.setPackageName(PACKAGE); event.setClassName(CLASS); @@ -127,4 +154,18 @@ public class AccessibilityUtils { mAccessibilityManager.sendAccessibilityEvent(event); } + + /** + * Handles speaking the "connect a headset to hear passwords" notification + * when connecting to a password field. + * + * @param attribute The input connection's editor info attribute. + * @param restarting Whether the connection is being restarted. + */ + public void onStartInputViewInternal(EditorInfo attribute, boolean restarting) { + if (shouldObscureInput(attribute)) { + final CharSequence text = mContext.getText(R.string.spoken_use_headphones); + speak(text); + } + } } |