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

Commit c70a4560 authored by jasonwshsu's avatar jasonwshsu
Browse files

Fix talkback did not speak out ReplacementSpan's content description.

* setContentDescription() back to ReplacementSpan when receiving parcel
* extend writeToParcel to handle AccessibilityReplacementSpan

Bug: 155833272
Test: atest AccessibilityNodeInfoTest#testSetTextWithImageSpan_shouldTextSetToInfo
Change-Id: Iab902bdcee53fc09cbba2c7c06858823524a3af9
parent 2d39120f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -738,7 +738,7 @@ public class TextUtils {
    /** @hide */
    public static final int ACCESSIBILITY_REPLACEMENT_SPAN = 29;
    /** @hide */
    public static final int LAST_SPAN = LINE_HEIGHT_SPAN;
    public static final int LAST_SPAN = ACCESSIBILITY_REPLACEMENT_SPAN;

    /**
     * Flatten a CharSequence and whatever styles can be copied across processes
+13 −8
Original line number Diff line number Diff line
@@ -22,30 +22,35 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.text.ParcelableSpan;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityNodeInfo;

/**
 * This class serves as a parcelable placeholder for the ReplacementSpans.
 * This class serves as a parcelable placeholder for the {@link ReplacementSpan}.
 *
 * This span contains content description of original span to let Accessibility service to do the
 * substitution for it.
 * It is used to replace ReplacementSpans in {@link AccessibilityNodeInfo#setText(CharSequence)}.
 *
 * @hide
 */
public class AccessibilityReplacementSpan extends ReplacementSpan
        implements ParcelableSpan {
    // The content description of the span this one replaces
    private CharSequence mContentDescription;

    /**
     * Sets the content description to the parent class.
     *
     * @param contentDescription The content description of the span this one replaces
     */
    public AccessibilityReplacementSpan(CharSequence contentDescription) {
        this.setContentDescription(contentDescription);
        mContentDescription = contentDescription;
    }

    /**
     * Sets the content description to the parent class.
     *
     * @param p The parcel to de-serialize from
     */
    public AccessibilityReplacementSpan(Parcel p) {
        mContentDescription = p.readCharSequence();
        final CharSequence contentDescription = p.readCharSequence();
        this.setContentDescription(contentDescription);
    }

    @Override
@@ -70,7 +75,7 @@ public class AccessibilityReplacementSpan extends ReplacementSpan

    @Override
    public void writeToParcelInternal(Parcel dest, int flags) {
        dest.writeCharSequence(mContentDescription);
        dest.writeCharSequence(this.getContentDescription());
    }

    @Override