summaryrefslogtreecommitdiff
path: root/core/java/android/text/StaticLayout.java
diff options
context:
space:
mode:
authorSeigo Nonaka <nona@google.com>2017-09-27 18:37:37 -0700
committerSeigo Nonaka <nona@google.com>2017-09-28 18:48:41 -0700
commit1bee3335268a019fc19de943aa8fcfde33cf60ff (patch)
tree57f93ee27275f32a7593a809b9aac65913ad5f05 /core/java/android/text/StaticLayout.java
parent01d5224080eb6304dbc4fe30b6e1f13e074c7901 (diff)
Fix StaticLayoutLineBreaker tests
StaticLayoutLineBreaker fails due to not passing locales to word breaker. Also addReplacement needs locale and hyphenators. In addition, need to update mLocales in StaticLayout, otherwise always pases the locale to native. Bug: 67020487 Test: bit FrameworksCoreTests:android.text.StaticLayoutLineBreakingTest Change-Id: I9ef5f9a8d8beabbb4c341f6203635b649d2efed9
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);