diff options
| author | 2018-03-19 19:02:34 +0000 | |
|---|---|---|
| committer | 2018-03-19 19:02:34 +0000 | |
| commit | b3aec698e8bc5e0f40189544b46ea68e318479a1 (patch) | |
| tree | 9bf4f8ebc46da64040f094fce4b80930d2772bca | |
| parent | ba9e18c2a8c28b4f328629f443b44c27f2c999b0 (diff) | |
| parent | e887f4d2c18040276ee230fdd3dadaa6610a188e (diff) | |
Merge "Revert "Make PrecomputedText Spannable for supporting selection"" into pi-dev
| -rw-r--r-- | api/current.txt | 4 | ||||
| -rw-r--r-- | core/java/android/text/DynamicLayout.java | 7 | ||||
| -rw-r--r-- | core/java/android/text/MeasuredParagraph.java | 16 | ||||
| -rw-r--r-- | core/java/android/text/PrecomputedText.java | 52 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 9 | ||||
| -rw-r--r-- | core/jni/android_text_MeasuredParagraph.cpp | 29 |
6 files changed, 9 insertions, 108 deletions
diff --git a/api/current.txt b/api/current.txt index 69d9a9e4c73c..308b80bd841a 100644 --- a/api/current.txt +++ b/api/current.txt @@ -44045,7 +44045,7 @@ package android.text { method public abstract int getSpanTypeId(); } - public class PrecomputedText implements android.text.Spannable { + public class PrecomputedText implements android.text.Spanned { method public char charAt(int); method public static android.text.PrecomputedText create(java.lang.CharSequence, android.text.PrecomputedText.Params); method public int getParagraphCount(); @@ -44059,8 +44059,6 @@ package android.text { method public java.lang.CharSequence getText(); method public int length(); method public int nextSpanTransition(int, int, java.lang.Class); - method public void removeSpan(java.lang.Object); - method public void setSpan(java.lang.Object, int, int, int); method public java.lang.CharSequence subSequence(int, int); } diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java index febca7ec9de1..18431cacbfaf 100644 --- a/core/java/android/text/DynamicLayout.java +++ b/core/java/android/text/DynamicLayout.java @@ -704,12 +704,7 @@ public class DynamicLayout extends Layout { // Spans other than ReplacementSpan can be ignored because line top and bottom are // disjunction of all tops and bottoms, although it's not optimal. final Paint paint = getPaint(); - if (text instanceof PrecomputedText) { - PrecomputedText precomputed = (PrecomputedText) text; - precomputed.getBounds(start, end, mTempRect); - } else { - paint.getTextBounds(text, start, end, mTempRect); - } + paint.getTextBounds(text, start, end, mTempRect); final Paint.FontMetricsInt fm = paint.getFontMetricsInt(); return mTempRect.top < fm.top || mTempRect.bottom > fm.bottom; } diff --git a/core/java/android/text/MeasuredParagraph.java b/core/java/android/text/MeasuredParagraph.java index 801d6e7d850a..aafcf44a73fc 100644 --- a/core/java/android/text/MeasuredParagraph.java +++ b/core/java/android/text/MeasuredParagraph.java @@ -21,7 +21,6 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.graphics.Paint; -import android.graphics.Rect; import android.text.AutoGrowArray.ByteArray; import android.text.AutoGrowArray.FloatArray; import android.text.AutoGrowArray.IntArray; @@ -298,18 +297,6 @@ public class MeasuredParagraph { } /** - * Retrieves the bounding rectangle that encloses all of the characters, with an implied origin - * at (0, 0). - * - * This is available only if the MeasuredParagraph is computed with buildForStaticLayout. - */ - public void getBounds(@NonNull Paint paint, @IntRange(from = 0) int start, - @IntRange(from = 0) int end, @NonNull Rect bounds) { - nGetBounds(mNativePtr, mCopiedBuffer, paint.getNativeInstance(), start, end, - paint.getBidiFlags(), bounds); - } - - /** * Generates new MeasuredParagraph for Bidi computation. * * If recycle is null, this returns new instance. If recycle is not null, this fills computed @@ -741,7 +728,4 @@ public class MeasuredParagraph { @CriticalNative private static native int nGetMemoryUsage(/* Non Zero */ long nativePtr); - - private static native void nGetBounds(long nativePtr, char[] buf, long paintPtr, int start, - int end, int bidiFlag, Rect rect); } diff --git a/core/java/android/text/PrecomputedText.java b/core/java/android/text/PrecomputedText.java index 74b199fa738c..b74019373f57 100644 --- a/core/java/android/text/PrecomputedText.java +++ b/core/java/android/text/PrecomputedText.java @@ -19,8 +19,6 @@ package android.text; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; -import android.graphics.Rect; -import android.text.style.MetricAffectingSpan; import android.util.IntArray; import com.android.internal.util.Preconditions; @@ -63,7 +61,7 @@ import java.util.Objects; * {@link android.widget.TextView} will be rejected internally and compute the text layout again * with the current {@link android.widget.TextView} parameters. */ -public class PrecomputedText implements Spannable { +public class PrecomputedText implements Spanned { private static final char LINE_FEED = '\n'; /** @@ -270,7 +268,7 @@ public class PrecomputedText implements Spannable { }; // The original text. - private final @NonNull SpannableString mText; + private final @NonNull SpannedString mText; // The inclusive start offset of the measuring target. private final @IntRange(from = 0) int mStart; @@ -344,7 +342,7 @@ public class PrecomputedText implements Spannable { private PrecomputedText(@NonNull CharSequence text, @IntRange(from = 0) int start, @IntRange(from = 0) int end, @NonNull Params param, @NonNull MeasuredParagraph[] measuredTexts, @NonNull int[] paragraphBreakPoints) { - mText = new SpannableString(text); + mText = new SpannedString(text); mStart = start; mEnd = end; mParams = param; @@ -450,21 +448,6 @@ public class PrecomputedText implements Spannable { return getMeasuredParagraph(paraIndex).getWidth(start - paraStart, end - paraStart); } - /** @hide */ - public void getBounds(@IntRange(from = 0) int start, @IntRange(from = 0) int end, - @NonNull Rect bounds) { - final int paraIndex = findParaIndex(start); - final int paraStart = getParagraphStart(paraIndex); - final int paraEnd = getParagraphEnd(paraIndex); - if (start < paraStart || paraEnd < end) { - throw new RuntimeException("Cannot measured across the paragraph:" - + "para: (" + paraStart + ", " + paraEnd + "), " - + "request: (" + start + ", " + end + ")"); - } - getMeasuredParagraph(paraIndex).getBounds(mParams.mPaint, - start - paraStart, end - paraStart, bounds); - } - /** * Returns the size of native PrecomputedText memory usage. * @@ -480,35 +463,6 @@ public class PrecomputedText implements Spannable { } /////////////////////////////////////////////////////////////////////////////////////////////// - // Spannable overrides - // - // Do not allow to modify MetricAffectingSpan - - /** - * @throws IllegalArgumentException if {@link MetricAffectingSpan} is specified. - */ - @Override - public void setSpan(Object what, int start, int end, int flags) { - if (what instanceof MetricAffectingSpan) { - throw new IllegalArgumentException( - "MetricAffectingSpan can not be set to PrecomputedText."); - } - mText.setSpan(what, start, end, flags); - } - - /** - * @throws IllegalArgumentException if {@link MetricAffectingSpan} is specified. - */ - @Override - public void removeSpan(Object what) { - if (what instanceof MetricAffectingSpan) { - throw new IllegalArgumentException( - "MetricAffectingSpan can not be removed from PrecomputedText."); - } - mText.removeSpan(what); - } - - /////////////////////////////////////////////////////////////////////////////////////////////// // Spanned overrides // // Just proxy for underlying mText if appropriate. diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 1e2d18c3ad83..f77a6b72787f 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -5642,8 +5642,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener needEditableForNotification = true; } - PrecomputedText precomputed = - (text instanceof PrecomputedText) ? (PrecomputedText) text : null; if (type == BufferType.EDITABLE || getKeyListener() != null || needEditableForNotification) { createEditorIfNeeded(); @@ -5653,7 +5651,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener setFilters(t, mFilters); InputMethodManager imm = InputMethodManager.peekInstance(); if (imm != null) imm.restartInput(this); - } else if (precomputed != null) { + } else if (type == BufferType.SPANNABLE || mMovement != null) { + text = mSpannableFactory.newSpannable(text); + } else if (text instanceof PrecomputedText) { + PrecomputedText precomputed = (PrecomputedText) text; if (mTextDir == null) { mTextDir = getTextDirectionHeuristic(); } @@ -5666,8 +5667,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener + "PrecomputedText: " + precomputed.getParams() + "TextView: " + getTextMetricsParams()); } - } else if (type == BufferType.SPANNABLE || mMovement != null) { - text = mSpannableFactory.newSpannable(text); } else if (!(text instanceof CharWrapper)) { text = TextUtils.stringOrSpannedString(text); } diff --git a/core/jni/android_text_MeasuredParagraph.cpp b/core/jni/android_text_MeasuredParagraph.cpp index 9d794175de18..d33337dabae0 100644 --- a/core/jni/android_text_MeasuredParagraph.cpp +++ b/core/jni/android_text_MeasuredParagraph.cpp @@ -16,7 +16,6 @@ #define LOG_TAG "MeasuredParagraph" -#include "GraphicsJNI.h" #include "ScopedIcuLocale.h" #include "unicode/locid.h" #include "unicode/brkiter.h" @@ -110,33 +109,6 @@ static jfloat nGetWidth(jlong ptr, jint start, jint end) { return r; } -// Regular JNI -static void nGetBounds(JNIEnv* env, jobject, jlong ptr, jcharArray javaText, jlong paintPtr, - jint start, jint end, jint bidiFlags, jobject bounds) { - ScopedCharArrayRO text(env, javaText); - const minikin::U16StringPiece textBuffer(text.get(), text.size()); - - minikin::MeasuredText* mt = toMeasuredParagraph(ptr); - Paint* paint = toPaint(paintPtr); - const Typeface* typeface = Typeface::resolveDefault(paint->getAndroidTypeface()); - minikin::Layout layout = MinikinUtils::doLayout(paint, - static_cast<minikin::Bidi>(bidiFlags), typeface, textBuffer.data(), start, end - start, - textBuffer.size(), mt); - - minikin::MinikinRect rect; - layout.getBounds(&rect); - - SkRect r; - r.fLeft = rect.mLeft; - r.fTop = rect.mTop; - r.fRight = rect.mRight; - r.fBottom = rect.mBottom; - - SkIRect ir; - r.roundOut(&ir); - GraphicsJNI::irect_to_jrect(ir, env, bounds); -} - // CriticalNative static jlong nGetReleaseFunc() { return toJLong(&releaseMeasuredParagraph); @@ -156,7 +128,6 @@ static const JNINativeMethod gMethods[] = { // MeasuredParagraph native functions. {"nGetWidth", "(JII)F", (void*) nGetWidth}, // Critical Natives - {"nGetBounds", "(J[CJIIILandroid/graphics/Rect;)V", (void*) nGetBounds}, // Regular JNI {"nGetReleaseFunc", "()J", (void*) nGetReleaseFunc}, // Critical Natives {"nGetMemoryUsage", "(J)I", (void*) nGetMemoryUsage}, // Critical Native }; |