diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-03-07 21:02:37 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-03-07 21:02:37 +0000 |
| commit | a4d970ea4022998bb55ef4f50cfc576cc2ca76fa (patch) | |
| tree | b7476bc454f6b27b5700e70c7f0e8eb2fe1837e3 /core/java/android/widget | |
| parent | 9c345022d1e4215c3a33942deb34305df24966d7 (diff) | |
| parent | e1ffb54167c8ff78855352a324ff8332a33fc805 (diff) | |
Merge "Throw an exception in case of parameter mismatch of precomputed text" into pi-dev
Diffstat (limited to 'core/java/android/widget')
| -rw-r--r-- | core/java/android/widget/TextView.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 6e40ea85e34a..d358c95ba09b 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -4141,6 +4141,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener */ public void setTextMetricsParams(@NonNull PrecomputedText.Params params) { mTextPaint.set(params.getTextPaint()); + mUserSetTextScaleX = true; mTextDir = params.getTextDirection(); mBreakStrategy = params.getBreakStrategy(); mHyphenationFrequency = params.getHyphenationFrequency(); @@ -5528,9 +5529,16 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * {@link android.text.Editable.Factory} to create final or intermediate * {@link Editable Editables}. * + * If the passed text is a {@link PrecomputedText} but the parameters used to create the + * PrecomputedText mismatches with this TextView, IllegalArgumentException is thrown. To ensure + * the parameters match, you can call {@link TextView#setTextMetricsParams} before calling this. + * * @param text text to be displayed * * @attr ref android.R.styleable#TextView_text + * @throws IllegalArgumentException if the passed text is a {@link PrecomputedText} but the + * parameters used to create the PrecomputedText mismatches + * with this TextView. */ @android.view.RemotableViewMethod public final void setText(CharSequence text) { @@ -5644,7 +5652,21 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (imm != null) imm.restartInput(this); } else if (type == BufferType.SPANNABLE || mMovement != null) { text = mSpannableFactory.newSpannable(text); - } else if (!(text instanceof PrecomputedText || text instanceof CharWrapper)) { + } else if (text instanceof PrecomputedText) { + PrecomputedText precomputed = (PrecomputedText) text; + if (mTextDir == null) { + mTextDir = getTextDirectionHeuristic(); + } + if (!precomputed.getParams().isSameTextMetricsInternal( + getPaint(), mTextDir, mBreakStrategy, mHyphenationFrequency)) { + throw new IllegalArgumentException( + "PrecomputedText's Parameters don't match the parameters of this TextView." + + "Consider using setTextMetricsParams(precomputedText.getParams()) " + + "to override the settings of this TextView: " + + "PrecomputedText: " + precomputed.getParams() + + "TextView: " + getTextMetricsParams()); + } + } else if (!(text instanceof CharWrapper)) { text = TextUtils.stringOrSpannedString(text); } |
