aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java')
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java73
1 files changed, 45 insertions, 28 deletions
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
index e3455c1a1..322127a12 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
@@ -17,7 +17,6 @@
package com.android.inputmethod.accessibility;
import android.content.Context;
-import android.inputmethodservice.InputMethodService;
import android.os.SystemClock;
import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.ViewCompat;
@@ -35,6 +34,7 @@ import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
import com.android.inputmethod.keyboard.MainKeyboardView;
import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat {
private static final AccessibleKeyboardViewProxy sInstance = new AccessibleKeyboardViewProxy();
@@ -54,7 +54,6 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_URL, R.string.keyboard_mode_url);
}
- private InputMethodService mInputMethod;
private MainKeyboardView mView;
private Keyboard mKeyboard;
private AccessibilityEntityProvider mAccessibilityNodeProvider;
@@ -67,11 +66,11 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
private int mEdgeSlop;
/** The most recently set keyboard mode. */
- private int mLastKeyboardMode;
- private static final int NOT_A_KEYBOARD_MODE = -1;
+ private int mLastKeyboardMode = KEYBOARD_IS_HIDDEN;
+ private static final int KEYBOARD_IS_HIDDEN = -1;
- public static void init(final InputMethodService inputMethod) {
- sInstance.initInternal(inputMethod);
+ public static void init(final Context context) {
+ sInstance.initInternal(context);
}
public static AccessibleKeyboardViewProxy getInstance() {
@@ -82,9 +81,8 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
// Not publicly instantiable.
}
- private void initInternal(final InputMethodService inputMethod) {
- mInputMethod = inputMethod;
- mEdgeSlop = inputMethod.getResources().getDimensionPixelSize(
+ private void initInternal(final Context context) {
+ mEdgeSlop = context.getResources().getDimensionPixelSize(
R.dimen.config_accessibility_edge_slop);
}
@@ -124,20 +122,27 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
if (keyboard == null) {
return;
}
- mKeyboard = keyboard;
if (mAccessibilityNodeProvider != null) {
mAccessibilityNodeProvider.setKeyboard(keyboard);
}
- final int keyboardMode = keyboard.mId.mMode;
+ final Keyboard lastKeyboard = mKeyboard;
+ final int lastKeyboardMode = mLastKeyboardMode;
+ mKeyboard = keyboard;
+ mLastKeyboardMode = keyboard.mId.mMode;
// Since this method is called even when accessibility is off, make sure
- // to check the state before announcing anything. Also, don't announce
- // changes within the same mode.
- if (AccessibilityUtils.getInstance().isAccessibilityEnabled()
- && (mLastKeyboardMode != keyboardMode)) {
- announceKeyboardMode(keyboardMode);
+ // to check the state before announcing anything.
+ if (!AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
+ return;
+ }
+ // Announce the language name only when the language is changed.
+ if (lastKeyboard == null || !lastKeyboard.mId.mSubtype.equals(keyboard.mId.mSubtype)) {
+ announceKeyboardLanguage(keyboard);
+ }
+ // Announce the mode only when the mode is changed.
+ if (lastKeyboardMode != keyboard.mId.mMode) {
+ announceKeyboardMode(keyboard);
}
- mLastKeyboardMode = keyboardMode;
}
/**
@@ -148,23 +153,35 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
return;
}
announceKeyboardHidden();
- mLastKeyboardMode = NOT_A_KEYBOARD_MODE;
+ mLastKeyboardMode = KEYBOARD_IS_HIDDEN;
+ }
+
+ /**
+ * Announces which language of keyboard is being displayed.
+ *
+ * @param keyboard The new keyboard.
+ */
+ private void announceKeyboardLanguage(final Keyboard keyboard) {
+ final String languageText = SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(
+ keyboard.mId.mSubtype);
+ sendWindowStateChanged(languageText);
}
/**
- * Announces which type of keyboard is being displayed. If the keyboard type
- * is unknown, no announcement is made.
+ * Announces which type of keyboard is being displayed.
+ * If the keyboard type is unknown, no announcement is made.
*
- * @param mode The new keyboard mode.
+ * @param keyboard The new keyboard.
*/
- private void announceKeyboardMode(final int mode) {
- final int resId = KEYBOARD_MODE_RES_IDS.get(mode);
- if (resId == 0) {
+ private void announceKeyboardMode(final Keyboard keyboard) {
+ final int mode = keyboard.mId.mMode;
+ final Context context = mView.getContext();
+ final int modeTextResId = KEYBOARD_MODE_RES_IDS.get(mode);
+ if (modeTextResId == 0) {
return;
}
- final Context context = mView.getContext();
- final String keyboardMode = context.getString(resId);
- final String text = context.getString(R.string.announce_keyboard_mode, keyboardMode);
+ final String modeText = context.getString(modeTextResId);
+ final String text = context.getString(R.string.announce_keyboard_mode, modeText);
sendWindowStateChanged(text);
}
@@ -265,7 +282,7 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
// will call this method multiple times it is a good practice to
// cache the provider instance.
if (mAccessibilityNodeProvider == null) {
- mAccessibilityNodeProvider = new AccessibilityEntityProvider(mView, mInputMethod);
+ mAccessibilityNodeProvider = new AccessibilityEntityProvider(mView);
}
return mAccessibilityNodeProvider;
}