summaryrefslogtreecommitdiff
path: root/core/java/android/text/StaticLayout.java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2017-09-29 16:42:18 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-09-29 16:42:18 +0000
commit9c99f3257c51c6d02aab9e9f1c18030ee6b15146 (patch)
tree5d9ad3c84fe6706b76c54631fb72658da6823ad6 /core/java/android/text/StaticLayout.java
parent0df0cd3c820680938188a2b1e70a37b3c5d0cdf9 (diff)
parent1bee3335268a019fc19de943aa8fcfde33cf60ff (diff)
Merge "Fix StaticLayoutLineBreaker tests"
Diffstat (limited to 'core/java/android/text/StaticLayout.java')
-rw-r--r--core/java/android/text/StaticLayout.java41
1 files changed, 27 insertions, 14 deletions
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index b6911fe8cb29..e71ad5b21fcf 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -28,6 +28,7 @@ import android.text.style.LineHeightSpan;
import android.text.style.MetricAffectingSpan;
import android.text.style.TabStopSpan;
import android.util.Log;
+import android.util.Pair;
import android.util.Pools.SynchronizedPool;
import com.android.internal.util.ArrayUtils;
@@ -439,29 +440,34 @@ public class StaticLayout extends Layout {
* After all paragraphs, call finish() to release expensive buffers.
*/
- /* package */ float addStyleRun(TextPaint paint, int start, int end, boolean isRtl) {
+ private Pair<String, long[]> getLocaleAndHyphenatorIfChanged(TextPaint paint) {
final LocaleList locales = paint.getTextLocales();
final String languageTags;
long[] hyphenators;
if (!locales.equals(mLocales)) {
- languageTags = locales.toLanguageTags();
- hyphenators = getHyphenators(locales);
+ mLocales = locales;
+ return new Pair(locales.toLanguageTags(), getHyphenators(locales));
} else {
// passing null means keep current locale.
// TODO: move locale change detection to native.
- languageTags = null;
- hyphenators = null;
+ return new Pair(null, null);
}
+ }
+
+ /* package */ float addStyleRun(TextPaint paint, int start, int end, boolean isRtl) {
+ Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint);
return nAddStyleRun(mNativePtr, paint.getNativeInstance(), start, end, isRtl,
- languageTags, hyphenators);
+ locHyph.first, locHyph.second);
}
- /* package */ void addMeasuredRun(int start, int end, float[] widths) {
- nAddMeasuredRun(mNativePtr, start, end, widths);
+ /* package */ void addMeasuredRun(TextPaint paint, int start, int end, float[] widths) {
+ Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint);
+ nAddMeasuredRun(mNativePtr, start, end, widths, locHyph.first, locHyph.second);
}
- /* package */ void addReplacementRun(int start, int end, float width) {
- nAddReplacementRun(mNativePtr, start, end, width);
+ /* package */ void addReplacementRun(TextPaint paint, int start, int end, float width) {
+ Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint);
+ nAddReplacementRun(mNativePtr, start, end, width, locHyph.first, locHyph.second);
}
/**
@@ -810,6 +816,9 @@ public class StaticLayout extends Layout {
}
}
+ // TODO: Move locale tracking code to native.
+ b.mLocales = null; // Reset the locale tracking.
+
nSetupParagraph(b.mNativePtr, chs, paraEnd - paraStart,
firstWidth, firstWidthLineCount, restWidth,
variableTabStops, TAB_INCREMENT, b.mBreakStrategy, b.mHyphenationFrequency,
@@ -1539,14 +1548,18 @@ public class StaticLayout extends Layout {
@IntRange(from = 0) int indentsOffset);
private static native float nAddStyleRun(
- /* non zero */ long nativePtr, /* non zero */ long nativePaint,
+ /* non-zero */ long nativePtr, /* non-zero */ long nativePaint,
@IntRange(from = 0) int start, @IntRange(from = 0) int end, boolean isRtl,
@Nullable String languageTags, @Nullable long[] hyphenators);
- private static native void nAddMeasuredRun(long nativePtr,
- int start, int end, float[] widths);
+ private static native void nAddMeasuredRun(/* non-zero */ long nativePtr,
+ @IntRange(from = 0) int start, @IntRange(from = 0) int end, @NonNull float[] widths,
+ @Nullable String languageTags, @Nullable long[] hyphenators);
- private static native void nAddReplacementRun(long nativePtr, int start, int end, float width);
+ private static native void nAddReplacementRun(/* non-zero */ long nativePtr,
+ @IntRange(from = 0) int start, @IntRange(from = 0) int end,
+ @FloatRange(from = 0.0f) float width, @Nullable String languageTags,
+ @Nullable long[] hyphenators);
private static native void nGetWidths(long nativePtr, float[] widths);