summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-03-19 19:02:34 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-03-19 19:02:34 +0000
commitb3aec698e8bc5e0f40189544b46ea68e318479a1 (patch)
tree9bf4f8ebc46da64040f094fce4b80930d2772bca
parentba9e18c2a8c28b4f328629f443b44c27f2c999b0 (diff)
parente887f4d2c18040276ee230fdd3dadaa6610a188e (diff)
Merge "Revert "Make PrecomputedText Spannable for supporting selection"" into pi-dev
-rw-r--r--api/current.txt4
-rw-r--r--core/java/android/text/DynamicLayout.java7
-rw-r--r--core/java/android/text/MeasuredParagraph.java16
-rw-r--r--core/java/android/text/PrecomputedText.java52
-rw-r--r--core/java/android/widget/TextView.java9
-rw-r--r--core/jni/android_text_MeasuredParagraph.cpp29
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
};