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

Commit 799d8d0a authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Add "assist block" API.

To prevent assist structure traversal down the view hierarchy.

Change-Id: I50ce5f8de6f2eca3cb862de8eacd6422c40a2f7c
parent a1f6211e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -299,6 +299,7 @@ package android {
    field public static final int anyDensity = 16843372; // 0x101026c
    field public static final int apduServiceBanner = 16843757; // 0x10103ed
    field public static final int apiKey = 16843281; // 0x1010211
    field public static final int assistBlocked = 16844020; // 0x10104f4
    field public static final int author = 16843444; // 0x10102b4
    field public static final int authorities = 16842776; // 0x1010018
    field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -4070,6 +4071,7 @@ package android.app {
    method public int getWidth();
    method public boolean isAccessibilityFocused();
    method public boolean isActivated();
    method public boolean isAssistBlocked();
    method public boolean isCheckable();
    method public boolean isChecked();
    method public boolean isClickable();
@@ -36005,6 +36007,7 @@ package android.view {
    method public void invalidateOutline();
    method public boolean isAccessibilityFocused();
    method public boolean isActivated();
    method public boolean isAssistBlocked();
    method public boolean isAttachedToWindow();
    method public boolean isClickable();
    method public boolean isDirty();
@@ -36147,6 +36150,7 @@ package android.view {
    method public void setActivated(boolean);
    method public void setAlpha(float);
    method public void setAnimation(android.view.animation.Animation);
    method public void setAssistBlocked(boolean);
    method public void setBackground(android.graphics.drawable.Drawable);
    method public void setBackgroundColor(int);
    method public deprecated void setBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -36509,6 +36513,7 @@ package android.view {
    method public abstract android.view.ViewAssistStructure newChild(int);
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setAssistBlocked(boolean);
    method public abstract void setCheckable(boolean);
    method public abstract void setChecked(boolean);
    method public abstract void setChildCount(int);
+5 −0
Original line number Diff line number Diff line
@@ -372,6 +372,7 @@ package android {
    field public static final int anyDensity = 16843372; // 0x101026c
    field public static final int apduServiceBanner = 16843757; // 0x10103ed
    field public static final int apiKey = 16843281; // 0x1010211
    field public static final int assistBlocked = 16844020; // 0x10104f4
    field public static final int author = 16843444; // 0x10102b4
    field public static final int authorities = 16842776; // 0x1010018
    field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -4161,6 +4162,7 @@ package android.app {
    method public int getWidth();
    method public boolean isAccessibilityFocused();
    method public boolean isActivated();
    method public boolean isAssistBlocked();
    method public boolean isCheckable();
    method public boolean isChecked();
    method public boolean isClickable();
@@ -38204,6 +38206,7 @@ package android.view {
    method public void invalidateOutline();
    method public boolean isAccessibilityFocused();
    method public boolean isActivated();
    method public boolean isAssistBlocked();
    method public boolean isAttachedToWindow();
    method public boolean isClickable();
    method public boolean isDirty();
@@ -38346,6 +38349,7 @@ package android.view {
    method public void setActivated(boolean);
    method public void setAlpha(float);
    method public void setAnimation(android.view.animation.Animation);
    method public void setAssistBlocked(boolean);
    method public void setBackground(android.graphics.drawable.Drawable);
    method public void setBackgroundColor(int);
    method public deprecated void setBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -38708,6 +38712,7 @@ package android.view {
    method public abstract android.view.ViewAssistStructure newChild(int);
    method public abstract void setAccessibilityFocused(boolean);
    method public abstract void setActivated(boolean);
    method public abstract void setAssistBlocked(boolean);
    method public abstract void setCheckable(boolean);
    method public abstract void setChecked(boolean);
    method public abstract void setChildCount(int);
+11 −0
Original line number Diff line number Diff line
@@ -218,6 +218,7 @@ final public class AssistStructure implements Parcelable {
        static final int FLAGS_FOCUSED = 0x00000020;
        static final int FLAGS_ACCESSIBILITY_FOCUSED = 0x04000000;
        static final int FLAGS_SELECTED = 0x00000040;
        static final int FLAGS_ASSIST_BLOCKED = 0x00000080;
        static final int FLAGS_ACTIVATED = 0x40000000;
        static final int FLAGS_CHECKABLE = 0x00000100;
        static final int FLAGS_CHECKED = 0x00000200;
@@ -356,6 +357,10 @@ final public class AssistStructure implements Parcelable {
            return mFlags&ViewNode.FLAGS_VISIBILITY_MASK;
        }

        public boolean isAssistBlocked() {
            return (mFlags&ViewNode.FLAGS_ASSIST_BLOCKED) == 0;
        }

        public boolean isEnabled() {
            return (mFlags&ViewNode.FLAGS_DISABLED) == 0;
        }
@@ -483,6 +488,12 @@ final public class AssistStructure implements Parcelable {
            mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_VISIBILITY_MASK) | visibility;
        }

        @Override
        public void setAssistBlocked(boolean state) {
            mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_ASSIST_BLOCKED)
                    | (state ? 0 : ViewNode.FLAGS_ASSIST_BLOCKED);
        }

        @Override
        public void setEnabled(boolean state) {
            mNode.mFlags = (mNode.mFlags&~ViewNode.FLAGS_DISABLED)
+60 −3
Original line number Diff line number Diff line
@@ -631,6 +631,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 * </p>
 *
 * @attr ref android.R.styleable#View_alpha
 * @attr ref android.R.styleable#View_assistBlocked
 * @attr ref android.R.styleable#View_background
 * @attr ref android.R.styleable#View_clickable
 * @attr ref android.R.styleable#View_contentDescription
@@ -2324,6 +2325,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     *                               1   PFLAG3_IS_LAID_OUT
     *                              1    PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT
     *                             1     PFLAG3_CALLED_SUPER
     *                            1      PFLAG3_APPLYING_INSETS
     *                           1       PFLAG3_FITTING_SYSTEM_WINDOWS
     *                          1        PFLAG3_NESTED_SCROLLING_ENABLED
     *                         1         PFLAG3_ASSIST_BLOCKED
     * |-------|-------|-------|-------|
     */
@@ -2380,6 +2385,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    static final int DRAG_MASK = PFLAG2_DRAG_CAN_ACCEPT | PFLAG2_DRAG_HOVERED;
    /**
     * <p>Indicates that we are allowing {@link android.view.ViewAssistStructure} to traverse
     * into this view.<p>
     */
    static final int PFLAG3_ASSIST_BLOCKED = 0x100;
    /**
     * Always allow a user to over-scroll this view, provided it is a
     * view that can scroll.
@@ -3869,6 +3880,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                        viewFlagMasks |= SAVE_DISABLED_MASK;
                    }
                    break;
                case com.android.internal.R.styleable.View_assistBlocked:
                    if (a.getBoolean(attr, false)) {
                        mPrivateFlags3 |= PFLAG3_ASSIST_BLOCKED;
                    }
                    break;
                case com.android.internal.R.styleable.View_duplicateParentState:
                    if (a.getBoolean(attr, false)) {
                        viewFlagValues |= DUPLICATE_PARENT_STATE;
@@ -5890,8 +5906,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * {@link #onProvideVirtualAssistStructure}.
     */
    public void dispatchProvideAssistStructure(ViewAssistStructure structure) {
        if (!isAssistBlocked()) {
            onProvideAssistStructure(structure);
            onProvideVirtualAssistStructure(structure);
        } else {
            structure.setClassName(getAccessibilityClassName().toString());
            structure.setAssistBlocked(true);
        }
    }
    /**
@@ -7457,6 +7478,42 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        return (mPrivateFlags & PFLAG_PRESSED) == PFLAG_PRESSED;
    }
    /**
     * Indicates whether this view will participate in data collection through
     * {@link android.view.ViewAssistStructure}.  If true, it will not provide any data
     * for itself or its children.  If false, the normal data collection will be allowed.
     *
     * @return Returns false if assist data collection is not blocked, else true.
     *
     * @see #setAssistBlocked(boolean)
     * @attr ref android.R.styleable#View_assistBlocked
     */
    public boolean isAssistBlocked() {
        return (mPrivateFlags3 & PFLAG3_ASSIST_BLOCKED) != 0;
    }
    /**
     * Controls whether assist data collection from this view and its children is enabled
     * (that is, whether {@link #onProvideAssistStructure} and
     * {@link #onProvideVirtualAssistStructure} will be called).  The default value is false,
     * allowing normal assist collection.  Setting this to false will disable assist collection.
     *
     * @param enabled Set to true to <em>disable</em> assist data collection, or false
     * (the default) to allow it.
     *
     * @see #isAssistBlocked()
     * @see #onProvideAssistStructure
     * @see #onProvideVirtualAssistStructure
     * @attr ref android.R.styleable#View_assistBlocked
     */
    public void setAssistBlocked(boolean enabled) {
        if (enabled) {
            mPrivateFlags3 |= PFLAG3_ASSIST_BLOCKED;
        } else {
            mPrivateFlags3 &= ~PFLAG3_ASSIST_BLOCKED;
        }
    }
    /**
     * Indicates whether this view will save its state (that is,
     * whether its {@link #onSaveInstanceState} method will be called).
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ public abstract class ViewAssistStructure {

    public abstract void setVisibility(int visibility);

    public abstract void setAssistBlocked(boolean state);

    public abstract void setEnabled(boolean state);

    public abstract void setClickable(boolean state);
Loading