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

Commit 8ddfb479 authored by Svet Ganov's avatar Svet Ganov Committed by Eugene Susla
Browse files

Don't generate irrelevant a11y events - framework

Now before we fire an a11y event we check if this event has an
observer. As a bonus we don't push the state to clients if the
dynamic service config did not change.

Test: cts-tradefed run cts-dev -m CtsAccessibilityServiceTestCases

bug:69427760

Change-Id: Ie208e13b8557bb7a120198a43efcb79c2752f5db
parent e4cf6bf4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -47894,6 +47894,7 @@ package android.view.accessibility {
    method public void interrupt();
    method public static boolean isAccessibilityButtonSupported();
    method public boolean isEnabled();
    method public boolean isObservedEventType(int);
    method public boolean isTouchExplorationEnabled();
    method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
    method public boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+9 −0
Original line number Diff line number Diff line
@@ -958,6 +958,15 @@ package android.view {

package android.view.accessibility {

  public final class AccessibilityManager {
    method public void addAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener, android.os.Handler);
    method public void removeAccessibilityServicesStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
  }

  public static abstract interface AccessibilityManager.AccessibilityServicesStateChangeListener {
    method public abstract void onAccessibilityServicesStateChanged(android.view.accessibility.AccessibilityManager);
  }

  public class AccessibilityNodeInfo implements android.os.Parcelable {
    method public static void setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger);
  }
+3 −3
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.accessibilityservice;

import static android.content.pm.PackageManager.FEATURE_FINGERPRINT;

import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -47,8 +49,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static android.content.pm.PackageManager.FEATURE_FINGERPRINT;

/**
 * This class describes an {@link AccessibilityService}. The system notifies an
 * {@link AccessibilityService} for {@link android.view.accessibility.AccessibilityEvent}s
@@ -554,7 +554,7 @@ public class AccessibilityServiceInfo implements Parcelable {
    }

    /**
     * Updates the properties that an AccessibilitySerivice can change dynamically.
     * Updates the properties that an AccessibilityService can change dynamically.
     *
     * @param other The info from which to update the properties.
     *
+5 −4
Original line number Diff line number Diff line
@@ -21,18 +21,16 @@ import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.Paint.Align;
import android.graphics.Region.Op;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.inputmethodservice.Keyboard.Key;
import android.media.AudioManager;
import android.os.Handler;
import android.os.Message;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.GestureDetector;
@@ -986,6 +984,9 @@ public class KeyboardView extends View implements View.OnClickListener {

    private void sendAccessibilityEventForUnicodeCharacter(int eventType, int code) {
        if (mAccessibilityManager.isEnabled()) {
            if (!mAccessibilityManager.isObservedEventType(eventType)) {
                return;
            }
            AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
            onInitializeAccessibilityEvent(event);
            final String text;
+8 −4
Original line number Diff line number Diff line
@@ -7196,7 +7196,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @param text The announcement text.
     */
    public void announceForAccessibility(CharSequence text) {
        if (AccessibilityManager.getInstance(mContext).isEnabled() && mParent != null) {
        if (AccessibilityManager.getInstance(mContext).isObservedEventType(
                AccessibilityEvent.TYPE_ANNOUNCEMENT) && mParent != null) {
            AccessibilityEvent event = AccessibilityEvent.obtain(
                    AccessibilityEvent.TYPE_ANNOUNCEMENT);
            onInitializeAccessibilityEvent(event);
@@ -10915,7 +10916,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        if ((mPrivateFlags2 & PFLAG2_ACCESSIBILITY_FOCUSED) != 0) {
            mPrivateFlags2 &= ~PFLAG2_ACCESSIBILITY_FOCUSED;
            invalidate();
            if (AccessibilityManager.getInstance(mContext).isEnabled()) {
            if (AccessibilityManager.getInstance(mContext).isObservedEventType(
                    AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED)) {
                AccessibilityEvent event = AccessibilityEvent.obtain(
                        AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
                event.setAction(action);
@@ -11740,7 +11742,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    private void sendViewTextTraversedAtGranularityEvent(int action, int granularity,
            int fromIndex, int toIndex) {
        if (mParent == null) {
        if (mParent == null || !AccessibilityManager.getInstance(mContext).isObservedEventType(
                AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY)) {
            return;
        }
        AccessibilityEvent event = AccessibilityEvent.obtain(
@@ -26130,7 +26133,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        @Override
        public void run() {
            if (AccessibilityManager.getInstance(mContext).isEnabled()) {
            if (AccessibilityManager.getInstance(mContext).isObservedEventType(
                    AccessibilityEvent.TYPE_VIEW_SCROLLED)) {
                AccessibilityEvent event = AccessibilityEvent.obtain(
                        AccessibilityEvent.TYPE_VIEW_SCROLLED);
                event.setScrollDeltaX(mDeltaX);
Loading