diff options
| author | Dieter Hsu <dieterhsu@google.com> | 2020-01-15 12:52:17 +0800 |
|---|---|---|
| committer | Dieter Hsu <dieterhsu@google.com> | 2020-02-18 12:18:52 +0800 |
| commit | f1273c4fcacb70f28d804ae65adb0c3a3caf64e7 (patch) | |
| tree | bf6d0cfba66af0d7c73de2ecaaf9ae9d76d3b8e1 /core/java/android/widget/TextView.java | |
| parent | 2d4e0f25f2571910af0220cde751a45eaf32421b (diff) | |
Refresh new extra data AccessibilityNodeInfo.ExtraRenderingInfo
Bug: 136404500
Test: atest AccessibilityTextActionTest AccessibilityNodeInfoTest
Change-Id: Ib1a8556d662d31ffbf3366e1482588ba058530cd
Diffstat (limited to 'core/java/android/widget/TextView.java')
| -rw-r--r-- | core/java/android/widget/TextView.java | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 0182975c13c0..815cc5cbb10d 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -17,6 +17,7 @@ package android.widget; import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL; +import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_RENDERING_INFO_KEY; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; @@ -727,6 +728,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @UnsupportedAppUsage private Layout mLayout; private boolean mLocalesChanged = false; + private int mTextSizeUnit = -1; // True if setKeyListener() has been explicitly called private boolean mListenerChanged = false; @@ -3842,6 +3844,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener ColorStateList mTextColorHint = null; ColorStateList mTextColorLink = null; int mTextSize = -1; + int mTextSizeUnit = -1; LocaleList mTextLocales = null; String mFontFamily = null; Typeface mFontTypeface = null; @@ -3869,6 +3872,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener + " mTextColorHint:" + mTextColorHint + "\n" + " mTextColorLink:" + mTextColorLink + "\n" + " mTextSize:" + mTextSize + "\n" + + " mTextSizeUnit:" + mTextSizeUnit + "\n" + " mTextLocales:" + mTextLocales + "\n" + " mFontFamily:" + mFontFamily + "\n" + " mFontTypeface:" + mFontTypeface + "\n" @@ -3980,6 +3984,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener case com.android.internal.R.styleable.TextAppearance_textSize: attributes.mTextSize = appearance.getDimensionPixelSize(attr, attributes.mTextSize); + attributes.mTextSizeUnit = appearance.peekValue(attr).getComplexUnit(); break; case com.android.internal.R.styleable.TextAppearance_textLocale: final String localeString = appearance.getString(attr); @@ -4073,6 +4078,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } if (attributes.mTextSize != -1) { + mTextSizeUnit = attributes.mTextSizeUnit; setRawTextSize(attributes.mTextSize, true /* shouldRequestLayout */); } @@ -4295,6 +4301,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener r = c.getResources(); } + mTextSizeUnit = unit; setRawTextSize(TypedValue.applyDimension(unit, size, r.getDisplayMetrics()), shouldRequestLayout); } @@ -4315,6 +4322,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } /** + * Gets the text size unit defined by the developer. It may be specified in resources or be + * passed as the unit argument of {@link #setTextSize(int, float)} at runtime. + * + * @return the dimension type of the text size unit originally defined. + * @see TypedValue#TYPE_DIMENSION + */ + public int getTextSizeUnit() { + return mTextSizeUnit; + } + + /** * Gets the extent by which text should be stretched horizontally. * This will usually be 1.0. * @return The horizontal scale factor. @@ -11769,8 +11787,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PARAGRAPH | AccessibilityNodeInfo.MOVEMENT_GRANULARITY_PAGE); info.addAction(AccessibilityNodeInfo.ACTION_SET_SELECTION); - info.setAvailableExtraData( - Arrays.asList(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY)); + info.setAvailableExtraData(Arrays.asList( + EXTRA_DATA_RENDERING_INFO_KEY, + EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY + )); + } else { + info.setAvailableExtraData(Arrays.asList( + EXTRA_DATA_RENDERING_INFO_KEY + )); } if (isFocused()) { @@ -11824,11 +11848,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener @Override public void addExtraDataToAccessibilityNodeInfo( AccessibilityNodeInfo info, String extraDataKey, Bundle arguments) { - // The only extra data we support requires arguments. - if (arguments == null) { - return; - } - if (extraDataKey.equals(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY)) { + if (arguments != null && extraDataKey.equals(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY)) { int positionInfoStartIndex = arguments.getInt( EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX, -1); int positionInfoLength = arguments.getInt( @@ -11856,6 +11876,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } info.getExtras().putParcelableArray(extraDataKey, boundingRects); + return; + } + if (extraDataKey.equals(AccessibilityNodeInfo.EXTRA_DATA_RENDERING_INFO_KEY)) { + final AccessibilityNodeInfo.ExtraRenderingInfo extraRenderingInfo = + AccessibilityNodeInfo.ExtraRenderingInfo.obtain(); + extraRenderingInfo.setLayoutParams(getLayoutParams().width, getLayoutParams().height); + extraRenderingInfo.setTextSizeInPx(getTextSize()); + extraRenderingInfo.setTextSizeUnit(getTextSizeUnit()); + info.setExtraRenderingInfo(extraRenderingInfo); } } |
