diff options
author | Alan Viverette <alanv@google.com> | 2013-10-09 14:42:05 -0700 |
---|---|---|
committer | Alan Viverette <alanv@google.com> | 2013-10-09 14:42:05 -0700 |
commit | 5baeb9ad1e68cd1bdd0df0c14fe284a1660e2ee6 (patch) | |
tree | 3db2736f32c08381c25b412d0226d7e6eb18d34a /core/java/android/view/accessibility | |
parent | 888022cfd81599e3cf32899f3453c9df44d850e6 (diff) | |
download | frameworks_base-5baeb9ad1e68cd1bdd0df0c14fe284a1660e2ee6.zip frameworks_base-5baeb9ad1e68cd1bdd0df0c14fe284a1660e2ee6.tar.gz frameworks_base-5baeb9ad1e68cd1bdd0df0c14fe284a1660e2ee6.tar.bz2 |
Add listener for changes to touch exploration state
BUG: 11141708
Change-Id: I353dfa2542ebd5e2ac89029dcd88623cc4c688e7
Diffstat (limited to 'core/java/android/view/accessibility')
-rw-r--r-- | core/java/android/view/accessibility/AccessibilityManager.java | 96 |
1 files changed, 76 insertions, 20 deletions
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index 04ce7e2..2e8f1a2 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -91,25 +91,45 @@ public final class AccessibilityManager { boolean mIsTouchExplorationEnabled; - final CopyOnWriteArrayList<AccessibilityStateChangeListener> mAccessibilityStateChangeListeners = - new CopyOnWriteArrayList<AccessibilityStateChangeListener>(); + private final CopyOnWriteArrayList<AccessibilityStateChangeListener> + mAccessibilityStateChangeListeners = new CopyOnWriteArrayList< + AccessibilityStateChangeListener>(); + + private final CopyOnWriteArrayList<TouchExplorationStateChangeListener> + mTouchExplorationStateChangeListeners = new CopyOnWriteArrayList< + TouchExplorationStateChangeListener>(); /** - * Listener for the system accessibility state. To listen for changes to the accessibility - * state on the device, implement this interface and register it with the system by - * calling {@link AccessibilityManager#addAccessibilityStateChangeListener - * addAccessibilityStateChangeListener()}. + * Listener for the system accessibility state. To listen for changes to the + * accessibility state on the device, implement this interface and register + * it with the system by calling {@link #addAccessibilityStateChangeListener}. */ public interface AccessibilityStateChangeListener { /** - * Called back on change in the accessibility state. + * Called when the accessibility enabled state changes. * * @param enabled Whether accessibility is enabled. */ public void onAccessibilityStateChanged(boolean enabled); } + /** + * Listener for the system touch exploration state. To listen for changes to + * the touch exploration state on the device, implement this interface and + * register it with the system by calling + * {@link #addTouchExplorationStateChangeListener}. + */ + public interface TouchExplorationStateChangeListener { + + /** + * Called when the touch exploration enabled state changes. + * + * @param enabled Whether touch exploration is enabled. + */ + public void onTouchExplorationStateChanged(boolean enabled); + } + final IAccessibilityManagerClient.Stub mClient = new IAccessibilityManagerClient.Stub() { public void setState(int state) { mHandler.obtainMessage(DO_SET_STATE, state, 0).sendToTarget(); @@ -363,34 +383,57 @@ public final class AccessibilityManager { } /** - * Sets the current state. + * Registers a {@link TouchExplorationStateChangeListener} for changes in + * the global touch exploration state of the system. * - * @param stateFlags The state flags. + * @param listener The listener. + * @return True if successfully registered. */ - private void setState(int stateFlags) { - final boolean accessibilityEnabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0; - setAccessibilityState(accessibilityEnabled); - mIsTouchExplorationEnabled = (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0; + public boolean addTouchExplorationStateChangeListener( + TouchExplorationStateChangeListener listener) { + return mTouchExplorationStateChangeListeners.add(listener); } /** - * Sets the enabled state. + * Unregisters a {@link TouchExplorationStateChangeListener}. * - * @param isEnabled The accessibility state. + * @param listener The listener. + * @return True if successfully unregistered. */ - private void setAccessibilityState(boolean isEnabled) { + public boolean removeTouchExplorationStateChangeListener( + TouchExplorationStateChangeListener listener) { + return mTouchExplorationStateChangeListeners.remove(listener); + } + + /** + * Sets the current state and notifies listeners, if necessary. + * + * @param stateFlags The state flags. + */ + private void setState(int stateFlags) { + final boolean enabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0; + final boolean touchExplorationEnabled = + (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0; synchronized (mHandler) { - if (isEnabled != mIsEnabled) { - mIsEnabled = isEnabled; - notifyAccessibilityStateChanged(); + mIsEnabled = enabled; + mIsTouchExplorationEnabled = touchExplorationEnabled; + + if (enabled != mIsEnabled) { + notifyAccessibilityStateChangedLh(); + } + + if (touchExplorationEnabled != mIsTouchExplorationEnabled) { + notifyTouchExplorationStateChangedLh(); } } } /** * Notifies the registered {@link AccessibilityStateChangeListener}s. + * <p> + * The caller must be locked on {@link #mHandler}. */ - private void notifyAccessibilityStateChanged() { + private void notifyAccessibilityStateChangedLh() { final int listenerCount = mAccessibilityStateChangeListeners.size(); for (int i = 0; i < listenerCount; i++) { mAccessibilityStateChangeListeners.get(i).onAccessibilityStateChanged(mIsEnabled); @@ -398,6 +441,19 @@ public final class AccessibilityManager { } /** + * Notifies the registered {@link TouchExplorationStateChangeListener}s. + * <p> + * The caller must be locked on {@link #mHandler}. + */ + private void notifyTouchExplorationStateChangedLh() { + final int listenerCount = mTouchExplorationStateChangeListeners.size(); + for (int i = 0; i < listenerCount; i++) { + mTouchExplorationStateChangeListeners.get(i) + .onTouchExplorationStateChanged(mIsTouchExplorationEnabled); + } + } + + /** * Adds an accessibility interaction connection interface for a given window. * @param windowToken The window token to which a connection is added. * @param connection The connection. |