From a0419de2a99a61f399da5400bdc229998edce6c2 Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Thu, 9 Jul 2015 12:36:31 -0700 Subject: [PATCH] Slightly more precise RTL check in BoringLayout.isBoring() This patch refines the crude check for potential RTL characters, based on ranges containing RTL scripts and format characters that affect bidi. This will make it much less likely that a StaticLayout will be chosen instead of a BoringLayout. Bug: 22328919 Change-Id: I9a0ed9b3f3373069052de21c836b3372f175430f --- core/java/android/text/BoringLayout.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/java/android/text/BoringLayout.java b/core/java/android/text/BoringLayout.java index e78cf8fec947c..aa8b71c5ea42b 100644 --- a/core/java/android/text/BoringLayout.java +++ b/core/java/android/text/BoringLayout.java @@ -269,7 +269,15 @@ public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback for (int a = 0; a < n; a++) { char c = temp[a]; - if (c == '\n' || c == '\t' || c >= FIRST_RIGHT_TO_LEFT) { + if (c == '\n' || c == '\t' || + (c >= 0x0590 && c <= 0x08FF) || // RTL scripts + c == 0x200F || // Bidi format character + (c >= 0x202A && c <= 0x202E) || // Bidi format characters + (c >= 0x2066 && c <= 0x2069) || // Bidi format characters + (c >= 0xD800 && c <= 0xDFFF) || // surrogate pairs + (c >= 0xFB1D && c <= 0xFDFF) || // Hebrew and Arabic presentation forms + (c >= 0xFE70 && c <= 0xFEFE) // Arabic presentation forms + ) { boring = false; break outer; }