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

Commit 029942f7 authored by Alan Viverette's avatar Alan Viverette
Browse files

Add API for obtaining max text length for accessibility

BUG: 16736956
Change-Id: I15ffb9bf68e074adf3e0dbcd230367e115c03e3c
parent 61da0fdf
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -30809,6 +30809,7 @@ package android.text {
  public static class InputFilter.LengthFilter implements android.text.InputFilter {
  public static class InputFilter.LengthFilter implements android.text.InputFilter {
    ctor public InputFilter.LengthFilter(int);
    ctor public InputFilter.LengthFilter(int);
    method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int);
    method public java.lang.CharSequence filter(java.lang.CharSequence, int, int, android.text.Spanned, int, int);
    method public int getMax();
  }
  }
  public abstract interface InputType {
  public abstract interface InputType {
@@ -36042,6 +36043,7 @@ package android.view.accessibility {
    method public android.view.accessibility.AccessibilityNodeInfo getLabelFor();
    method public android.view.accessibility.AccessibilityNodeInfo getLabelFor();
    method public android.view.accessibility.AccessibilityNodeInfo getLabeledBy();
    method public android.view.accessibility.AccessibilityNodeInfo getLabeledBy();
    method public int getLiveRegion();
    method public int getLiveRegion();
    method public int getMaxTextLength();
    method public int getMovementGranularities();
    method public int getMovementGranularities();
    method public java.lang.CharSequence getPackageName();
    method public java.lang.CharSequence getPackageName();
    method public android.view.accessibility.AccessibilityNodeInfo getParent();
    method public android.view.accessibility.AccessibilityNodeInfo getParent();
@@ -36105,6 +36107,7 @@ package android.view.accessibility {
    method public void setLabeledBy(android.view.View, int);
    method public void setLabeledBy(android.view.View, int);
    method public void setLiveRegion(int);
    method public void setLiveRegion(int);
    method public void setLongClickable(boolean);
    method public void setLongClickable(boolean);
    method public void setMaxTextLength(int);
    method public void setMovementGranularities(int);
    method public void setMovementGranularities(int);
    method public void setMultiLine(boolean);
    method public void setMultiLine(boolean);
    method public void setPackageName(java.lang.CharSequence);
    method public void setPackageName(java.lang.CharSequence);
+10 −4
Original line number Original line Diff line number Diff line
@@ -75,14 +75,15 @@ public interface InputFilter
     * greater than the specified length.
     * greater than the specified length.
     */
     */
    public static class LengthFilter implements InputFilter {
    public static class LengthFilter implements InputFilter {
        private final int mMax;

        public LengthFilter(int max) {
        public LengthFilter(int max) {
            mMax = max;
            mMax = max;
        }
        }


        public CharSequence filter(CharSequence source, int start, int end,
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
                                   Spanned dest, int dstart, int dend) {
                int dstart, int dend) {
            int keep = mMax - (dest.length() - (dend - dstart));
            int keep = mMax - (dest.length() - (dend - dstart));

            if (keep <= 0) {
            if (keep <= 0) {
                return "";
                return "";
            } else if (keep >= end - start) {
            } else if (keep >= end - start) {
@@ -99,6 +100,11 @@ public interface InputFilter
            }
            }
        }
        }


        private int mMax;
        /**
         * @return the maximum length enforced by this input filter
         */
        public int getMax() {
            return mMax;
        }
    }
    }
}
}
+36 −2
Original line number Original line Diff line number Diff line
@@ -562,6 +562,7 @@ public class AccessibilityNodeInfo implements Parcelable {
    private LongArray mChildNodeIds;
    private LongArray mChildNodeIds;
    private ArrayList<AccessibilityAction> mActions;
    private ArrayList<AccessibilityAction> mActions;


    private int mMaxTextLength = -1;
    private int mMovementGranularities;
    private int mMovementGranularities;


    private int mTextSelectionStart = UNDEFINED_SELECTION_INDEX;
    private int mTextSelectionStart = UNDEFINED_SELECTION_INDEX;
@@ -1044,6 +1045,36 @@ public class AccessibilityNodeInfo implements Parcelable {
        return mActions.remove(action);
        return mActions.remove(action);
    }
    }


    /**
     * Sets the maximum text length, or -1 for no limit.
     * <p>
     * Typically used to indicate that an editable text field has a limit on
     * the number of characters entered.
     * <p>
     * <strong>Note:</strong> Cannot be called from an
     * {@link android.accessibilityservice.AccessibilityService}.
     * This class is made immutable before being delivered to an AccessibilityService.
     *
     * @param max The maximum text length.
     * @see #getMaxTextLength()
     *
     * @throws IllegalStateException If called from an AccessibilityService.
     */
    public void setMaxTextLength(int max) {
        enforceNotSealed();
        mMaxTextLength = max;
    }

    /**
     * Returns the maximum text length for this node.
     *
     * @return The maximum text length, or -1 for no limit.
     * @see #setMaxTextLength(int)
     */
    public int getMaxTextLength() {
        return mMaxTextLength;
    }

    /**
    /**
     * Sets the movement granularities for traversing the text of this node.
     * Sets the movement granularities for traversing the text of this node.
     * <p>
     * <p>
@@ -2469,8 +2500,8 @@ public class AccessibilityNodeInfo implements Parcelable {
            parcel.writeInt(0);
            parcel.writeInt(0);
        }
        }


        parcel.writeInt(mMaxTextLength);
        parcel.writeInt(mMovementGranularities);
        parcel.writeInt(mMovementGranularities);

        parcel.writeInt(mBooleanProperties);
        parcel.writeInt(mBooleanProperties);


        parcel.writeCharSequence(mPackageName);
        parcel.writeCharSequence(mPackageName);
@@ -2562,6 +2593,7 @@ public class AccessibilityNodeInfo implements Parcelable {
        }
        }


        mBooleanProperties = other.mBooleanProperties;
        mBooleanProperties = other.mBooleanProperties;
        mMaxTextLength = other.mMaxTextLength;
        mMovementGranularities = other.mMovementGranularities;
        mMovementGranularities = other.mMovementGranularities;


        final LongArray otherChildNodeIds = other.mChildNodeIds;
        final LongArray otherChildNodeIds = other.mChildNodeIds;
@@ -2636,8 +2668,8 @@ public class AccessibilityNodeInfo implements Parcelable {
            }
            }
        }
        }


        mMaxTextLength = parcel.readInt();
        mMovementGranularities = parcel.readInt();
        mMovementGranularities = parcel.readInt();

        mBooleanProperties = parcel.readInt();
        mBooleanProperties = parcel.readInt();


        mPackageName = parcel.readCharSequence();
        mPackageName = parcel.readCharSequence();
@@ -2695,6 +2727,7 @@ public class AccessibilityNodeInfo implements Parcelable {
        mLabeledById = ROOT_NODE_ID;
        mLabeledById = ROOT_NODE_ID;
        mWindowId = UNDEFINED_ITEM_ID;
        mWindowId = UNDEFINED_ITEM_ID;
        mConnectionId = UNDEFINED_CONNECTION_ID;
        mConnectionId = UNDEFINED_CONNECTION_ID;
        mMaxTextLength = -1;
        mMovementGranularities = 0;
        mMovementGranularities = 0;
        if (mChildNodeIds != null) {
        if (mChildNodeIds != null) {
            mChildNodeIds.clear();
            mChildNodeIds.clear();
@@ -2911,6 +2944,7 @@ public class AccessibilityNodeInfo implements Parcelable {
        builder.append("; className: ").append(mClassName);
        builder.append("; className: ").append(mClassName);
        builder.append("; text: ").append(mText);
        builder.append("; text: ").append(mText);
        builder.append("; error: ").append(mError);
        builder.append("; error: ").append(mError);
        builder.append("; maxTextLength: ").append(mMaxTextLength);
        builder.append("; contentDescription: ").append(mContentDescription);
        builder.append("; contentDescription: ").append(mContentDescription);
        builder.append("; viewIdResName: ").append(mViewIdResourceName);
        builder.append("; viewIdResName: ").append(mViewIdResourceName);


+9 −0
Original line number Original line Diff line number Diff line
@@ -8392,6 +8392,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            }
            }
        }
        }


        // Check for known input filter types.
        final int numFilters = mFilters.length;
        for (int i = 0; i < numFilters; i++) {
            final InputFilter filter = mFilters[i];
            if (filter instanceof InputFilter.LengthFilter) {
                info.setMaxTextLength(((InputFilter.LengthFilter) filter).getMax());
            }
        }

        if (!isSingleLine()) {
        if (!isSingleLine()) {
            info.setMultiLine(true);
            info.setMultiLine(true);
        }
        }