aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/accessibility
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/accessibility')
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java1
-rw-r--r--java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java (renamed from java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java)196
-rw-r--r--java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java (renamed from java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java)17
3 files changed, 71 insertions, 143 deletions
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
index bc094b117..d50dd3ee6 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
@@ -68,7 +68,6 @@ public final class AccessibilityUtils {
// These only need to be initialized if the kill switch is off.
sInstance.initInternal(context);
KeyCodeDescriptionMapper.init();
- AccessibleKeyboardViewProxy.init(context);
}
public static AccessibilityUtils getInstance() {
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
index 322127a12..10929424b 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
@@ -36,9 +36,7 @@ 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();
-
+public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelegateCompat {
/** Map of keyboard modes to resource IDs. */
private static final SparseIntArray KEYBOARD_MODE_RES_IDS = new SparseIntArray();
@@ -54,9 +52,9 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_URL, R.string.keyboard_mode_url);
}
- private MainKeyboardView mView;
+ private final MainKeyboardView mView;
private Keyboard mKeyboard;
- private AccessibilityEntityProvider mAccessibilityNodeProvider;
+ private MainKeyboardAccessibilityNodeProvider mAccessibilityNodeProvider;
private Key mLastHoverKey = null;
@@ -69,46 +67,14 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
private int mLastKeyboardMode = KEYBOARD_IS_HIDDEN;
private static final int KEYBOARD_IS_HIDDEN = -1;
- public static void init(final Context context) {
- sInstance.initInternal(context);
- }
-
- public static AccessibleKeyboardViewProxy getInstance() {
- return sInstance;
- }
-
- private AccessibleKeyboardViewProxy() {
- // Not publicly instantiable.
- }
-
- private void initInternal(final Context context) {
+ public MainKeyboardAccessibilityDelegate(final MainKeyboardView view) {
+ final Context context = view.getContext();
mEdgeSlop = context.getResources().getDimensionPixelSize(
R.dimen.config_accessibility_edge_slop);
- }
-
- /**
- * Sets the view wrapped by this proxy.
- *
- * @param view The view to wrap.
- */
- public void setView(final MainKeyboardView view) {
- if (view == null) {
- // Ignore null views.
- return;
- }
mView = view;
// Ensure that the view has an accessibility delegate.
ViewCompat.setAccessibilityDelegate(view, this);
-
- if (mAccessibilityNodeProvider == null) {
- return;
- }
- mAccessibilityNodeProvider.setView(view);
-
- // Since this class is constructed lazily, we might not get a subsequent
- // call to setKeyboard() and therefore need to call it now.
- setKeyboard(view.getKeyboard());
}
/**
@@ -136,12 +102,19 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
return;
}
// Announce the language name only when the language is changed.
- if (lastKeyboard == null || !lastKeyboard.mId.mSubtype.equals(keyboard.mId.mSubtype)) {
+ if (lastKeyboard == null || !keyboard.mId.mSubtype.equals(lastKeyboard.mId.mSubtype)) {
announceKeyboardLanguage(keyboard);
+ return;
}
// Announce the mode only when the mode is changed.
- if (lastKeyboardMode != keyboard.mId.mMode) {
+ if (keyboard.mId.mMode != lastKeyboardMode) {
announceKeyboardMode(keyboard);
+ return;
+ }
+ // Announce the keyboard type only when the type is changed.
+ if (keyboard.mId.mElementId != lastKeyboard.mId.mElementId) {
+ announceKeyboardType(keyboard, lastKeyboard);
+ return;
}
}
@@ -149,9 +122,6 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
* Called when the keyboard is hidden and accessibility is enabled.
*/
public void onHideWindow() {
- if (mView == null) {
- return;
- }
announceKeyboardHidden();
mLastKeyboardMode = KEYBOARD_IS_HIDDEN;
}
@@ -174,9 +144,8 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
* @param keyboard The new keyboard.
*/
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);
+ final int modeTextResId = KEYBOARD_MODE_RES_IDS.get(keyboard.mId.mMode);
if (modeTextResId == 0) {
return;
}
@@ -186,6 +155,50 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
}
/**
+ * Announces which type of keyboard is being displayed.
+ *
+ * @param keyboard The new keyboard.
+ * @param lastKeyboard The last keyboard.
+ */
+ private void announceKeyboardType(final Keyboard keyboard, final Keyboard lastKeyboard) {
+ final int lastElementId = lastKeyboard.mId.mElementId;
+ final int resId;
+ switch (keyboard.mId.mElementId) {
+ case KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED:
+ case KeyboardId.ELEMENT_ALPHABET:
+ if (lastElementId == KeyboardId.ELEMENT_ALPHABET
+ || lastElementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) {
+ return;
+ }
+ resId = R.string.spoken_description_mode_alpha;
+ break;
+ case KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED:
+ resId = R.string.spoken_description_shiftmode_on;
+ break;
+ case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED:
+ case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED:
+ resId = R.string.spoken_description_shiftmode_locked;
+ break;
+ case KeyboardId.ELEMENT_SYMBOLS:
+ resId = R.string.spoken_description_mode_symbol;
+ break;
+ case KeyboardId.ELEMENT_SYMBOLS_SHIFTED:
+ resId = R.string.spoken_description_mode_symbol_shift;
+ break;
+ case KeyboardId.ELEMENT_PHONE:
+ resId = R.string.spoken_description_mode_phone;
+ break;
+ case KeyboardId.ELEMENT_PHONE_SYMBOLS:
+ resId = R.string.spoken_description_mode_phone_shift;
+ break;
+ default:
+ return;
+ }
+ final String text = mView.getContext().getString(resId);
+ sendWindowStateChanged(text);
+ }
+
+ /**
* Announces that the keyboard has been hidden.
*/
private void announceKeyboardHidden() {
@@ -214,7 +227,7 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
}
/**
- * Proxy method for View.getAccessibilityNodeProvider(). This method is called in SDK
+ * Delegate method for View.getAccessibilityNodeProvider(). This method is called in SDK
* version 15 (Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) and higher to obtain the virtual
* node hierarchy provider.
*
@@ -222,10 +235,7 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
* @return The accessibility node provider for the current keyboard.
*/
@Override
- public AccessibilityEntityProvider getAccessibilityNodeProvider(final View host) {
- if (mView == null) {
- return null;
- }
+ public MainKeyboardAccessibilityNodeProvider getAccessibilityNodeProvider(final View host) {
return getAccessibilityNodeProvider();
}
@@ -238,10 +248,6 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
* @return {@code true} if the event is handled
*/
public boolean dispatchHoverEvent(final MotionEvent event, final KeyDetector keyDetector) {
- if (mView == null) {
- return false;
- }
-
final int x = (int) event.getX();
final int y = (int) event.getY();
final Key previousKey = mLastHoverKey;
@@ -275,14 +281,14 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
}
/**
- * @return A lazily-instantiated node provider for this view proxy.
+ * @return A lazily-instantiated node provider for this view delegate.
*/
- private AccessibilityEntityProvider getAccessibilityNodeProvider() {
+ private MainKeyboardAccessibilityNodeProvider getAccessibilityNodeProvider() {
// Instantiate the provide only when requested. Since the system
// will call this method multiple times it is a good practice to
// cache the provider instance.
if (mAccessibilityNodeProvider == null) {
- mAccessibilityNodeProvider = new AccessibilityEntityProvider(mView);
+ mAccessibilityNodeProvider = new MainKeyboardAccessibilityNodeProvider(mView);
}
return mAccessibilityNodeProvider;
}
@@ -301,7 +307,7 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
}
/**
- * Simulates a key press by injecting touch event into the keyboard view.
+ * Simulates a key press by injecting touch an event into the keyboard view.
* This avoids the complexity of trackers and listeners within the keyboard.
*
* @param key The key to press.
@@ -318,7 +324,7 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
}
/**
- * Simulates a key release by injecting touch event into the keyboard view.
+ * Simulates a key release by injecting touch an event into the keyboard view.
* This avoids the complexity of trackers and listeners within the keyboard.
*
* @param key The key to release.
@@ -367,7 +373,7 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
if (key == null) {
return false;
}
- final AccessibilityEntityProvider provider = getAccessibilityNodeProvider();
+ final MainKeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
switch (event.getAction()) {
case MotionEvent.ACTION_HOVER_ENTER:
@@ -383,72 +389,4 @@ public final class AccessibleKeyboardViewProxy extends AccessibilityDelegateComp
}
return true;
}
-
- /**
- * Notifies the user of changes in the keyboard shift state.
- */
- public void notifyShiftState() {
- if (mView == null || mKeyboard == null) {
- return;
- }
-
- final KeyboardId keyboardId = mKeyboard.mId;
- final int elementId = keyboardId.mElementId;
- final Context context = mView.getContext();
- final CharSequence text;
-
- switch (elementId) {
- case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED:
- case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED:
- text = context.getText(R.string.spoken_description_shiftmode_locked);
- break;
- case KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED:
- case KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED:
- case KeyboardId.ELEMENT_SYMBOLS_SHIFTED:
- text = context.getText(R.string.spoken_description_shiftmode_on);
- break;
- default:
- text = context.getText(R.string.spoken_description_shiftmode_off);
- }
- AccessibilityUtils.getInstance().announceForAccessibility(mView, text);
- }
-
- /**
- * Notifies the user of changes in the keyboard symbols state.
- */
- public void notifySymbolsState() {
- if (mView == null || mKeyboard == null) {
- return;
- }
-
- final KeyboardId keyboardId = mKeyboard.mId;
- final int elementId = keyboardId.mElementId;
- final Context context = mView.getContext();
- final int resId;
-
- switch (elementId) {
- case KeyboardId.ELEMENT_ALPHABET:
- case KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED:
- case KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED:
- case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED:
- case KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCKED:
- resId = R.string.spoken_description_mode_alpha;
- break;
- case KeyboardId.ELEMENT_SYMBOLS:
- case KeyboardId.ELEMENT_SYMBOLS_SHIFTED:
- resId = R.string.spoken_description_mode_symbol;
- break;
- case KeyboardId.ELEMENT_PHONE:
- resId = R.string.spoken_description_mode_phone;
- break;
- case KeyboardId.ELEMENT_PHONE_SYMBOLS:
- resId = R.string.spoken_description_mode_phone_shift;
- break;
- default:
- return;
- }
-
- final String text = context.getString(resId);
- AccessibilityUtils.getInstance().announceForAccessibility(mView, text);
- }
}
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java
index ec1ab3565..f69d316c9 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java
@@ -47,8 +47,8 @@ import java.util.List;
* virtual views, thus conveying their logical structure.
* </p>
*/
-public final class AccessibilityEntityProvider extends AccessibilityNodeProviderCompat {
- private static final String TAG = AccessibilityEntityProvider.class.getSimpleName();
+public final class MainKeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderCompat {
+ private static final String TAG = MainKeyboardAccessibilityNodeProvider.class.getSimpleName();
private static final int UNDEFINED = Integer.MIN_VALUE;
private final KeyCodeDescriptionMapper mKeyCodeDescriptionMapper;
@@ -64,23 +64,14 @@ public final class AccessibilityEntityProvider extends AccessibilityNodeProvider
private int mAccessibilityFocusedView = UNDEFINED;
/** The current keyboard view. */
- private KeyboardView mKeyboardView;
+ private final KeyboardView mKeyboardView;
/** The current keyboard. */
private Keyboard mKeyboard;
- public AccessibilityEntityProvider(final KeyboardView keyboardView) {
+ public MainKeyboardAccessibilityNodeProvider(final KeyboardView keyboardView) {
mKeyCodeDescriptionMapper = KeyCodeDescriptionMapper.getInstance();
mAccessibilityUtils = AccessibilityUtils.getInstance();
- setView(keyboardView);
- }
-
- /**
- * Sets the keyboard view represented by this node provider.
- *
- * @param keyboardView The keyboard view to represent.
- */
- public void setView(final KeyboardView keyboardView) {
mKeyboardView = keyboardView;
updateParentLocation();