Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 24305da7 authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "Add listener for changes to touch exploration state" into klp-dev

parents b3da3db3 5baeb9ad
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -29287,6 +29287,7 @@ package android.view.accessibility {
  public final class AccessibilityManager {
  public final class AccessibilityManager {
    method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
    method public boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
    method public boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
    method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
    method public deprecated java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
@@ -29294,6 +29295,7 @@ package android.view.accessibility {
    method public boolean isEnabled();
    method public boolean isEnabled();
    method public boolean isTouchExplorationEnabled();
    method public boolean isTouchExplorationEnabled();
    method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
    method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
    method public boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
    method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
    method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
  }
  }
@@ -29301,6 +29303,10 @@ package android.view.accessibility {
    method public abstract void onAccessibilityStateChanged(boolean);
    method public abstract void onAccessibilityStateChanged(boolean);
  }
  }
  public static abstract interface AccessibilityManager.TouchExplorationStateChangeListener {
    method public abstract void onTouchExplorationStateChanged(boolean);
  }
  public class AccessibilityNodeInfo implements android.os.Parcelable {
  public class AccessibilityNodeInfo implements android.os.Parcelable {
    method public void addAction(int);
    method public void addAction(int);
    method public void addChild(android.view.View);
    method public void addChild(android.view.View);
+76 −20
Original line number Original line Diff line number Diff line
@@ -91,25 +91,45 @@ public final class AccessibilityManager {


    boolean mIsTouchExplorationEnabled;
    boolean mIsTouchExplorationEnabled;


    final CopyOnWriteArrayList<AccessibilityStateChangeListener> mAccessibilityStateChangeListeners =
    private final CopyOnWriteArrayList<AccessibilityStateChangeListener>
        new 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
     * Listener for the system accessibility state. To listen for changes to the
     * state on the device, implement this interface and register it with the system by
     * accessibility state on the device, implement this interface and register
     * calling {@link AccessibilityManager#addAccessibilityStateChangeListener
     * it with the system by calling {@link #addAccessibilityStateChangeListener}.
     * addAccessibilityStateChangeListener()}.
     */
     */
    public interface AccessibilityStateChangeListener {
    public interface AccessibilityStateChangeListener {


        /**
        /**
         * Called back on change in the accessibility state.
         * Called when the accessibility enabled state changes.
         *
         *
         * @param enabled Whether accessibility is enabled.
         * @param enabled Whether accessibility is enabled.
         */
         */
        public void onAccessibilityStateChanged(boolean 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() {
    final IAccessibilityManagerClient.Stub mClient = new IAccessibilityManagerClient.Stub() {
        public void setState(int state) {
        public void setState(int state) {
            mHandler.obtainMessage(DO_SET_STATE, state, 0).sendToTarget();
            mHandler.obtainMessage(DO_SET_STATE, state, 0).sendToTarget();
@@ -363,40 +383,76 @@ 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) {
    public boolean addTouchExplorationStateChangeListener(
        final boolean accessibilityEnabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0;
            TouchExplorationStateChangeListener listener) {
        setAccessibilityState(accessibilityEnabled);
        return mTouchExplorationStateChangeListeners.add(listener);
        mIsTouchExplorationEnabled = (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0;
    }
    }


    /**
    /**
     * 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) {
        synchronized (mHandler) {
            if (isEnabled != mIsEnabled) {
            mIsEnabled = enabled;
                mIsEnabled = isEnabled;
            mIsTouchExplorationEnabled = touchExplorationEnabled;
                notifyAccessibilityStateChanged();

            if (enabled != mIsEnabled) {
                notifyAccessibilityStateChangedLh();
            }

            if (touchExplorationEnabled != mIsTouchExplorationEnabled) {
                notifyTouchExplorationStateChangedLh();
            }
            }
        }
        }
    }
    }


    /**
    /**
     * Notifies the registered {@link AccessibilityStateChangeListener}s.
     * 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();
        final int listenerCount = mAccessibilityStateChangeListeners.size();
        for (int i = 0; i < listenerCount; i++) {
        for (int i = 0; i < listenerCount; i++) {
            mAccessibilityStateChangeListeners.get(i).onAccessibilityStateChanged(mIsEnabled);
            mAccessibilityStateChangeListeners.get(i).onAccessibilityStateChanged(mIsEnabled);
        }
        }
    }
    }


    /**
     * 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.
     * Adds an accessibility interaction connection interface for a given window.
     * @param windowToken The window token to which a connection is added.
     * @param windowToken The window token to which a connection is added.