From f4cb047c49e061cd0590a53d0a176233019eb906 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Thu, 4 Jun 2015 13:53:45 -0700 Subject: Bidi-format joined strings. When joining strings, we want to respect RTL formatting for the individual elements being joined, and joined string as a whole. For example... In LTR: ", " In RTL: ", " Bug: 20988802 Change-Id: I984ff364cbd0b0378bc467213274080e9524b18b --- src/com/android/dialer/util/DialerUtils.java | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/com/android/dialer/util/DialerUtils.java b/src/com/android/dialer/util/DialerUtils.java index a04719a41..a44c2eec6 100644 --- a/src/com/android/dialer/util/DialerUtils.java +++ b/src/com/android/dialer/util/DialerUtils.java @@ -28,6 +28,8 @@ import android.net.Uri; import android.os.Bundle; import android.provider.Telephony; import android.telecom.TelecomManager; +import android.text.BidiFormatter; +import android.text.TextDirectionHeuristics; import android.text.TextUtils; import android.view.View; import android.view.inputmethod.InputMethodManager; @@ -41,6 +43,8 @@ import com.android.dialer.R; import com.android.incallui.CallCardFragment; import com.android.incallui.Log; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -158,8 +162,25 @@ public class DialerUtils { * @return Joined char sequences. */ public static CharSequence join(Resources resources, Iterable list) { + StringBuilder sb = new StringBuilder(); + final BidiFormatter formatter = BidiFormatter.getInstance(); final CharSequence separator = resources.getString(R.string.list_delimeter); - return TextUtils.join(separator, list); + + Iterator itr = list.iterator(); + boolean firstTime = true; + while (itr.hasNext()) { + if (firstTime) { + firstTime = false; + } else { + sb.append(separator); + } + // Unicode wrap the elements of the list to respect RTL for individual strings. + sb.append(formatter.unicodeWrap( + itr.next().toString(), TextDirectionHeuristics.FIRSTSTRONG_LTR)); + } + + // Unicode wrap the joined value, to respect locale's RTL ordering for the whole list. + return formatter.unicodeWrap(sb.toString()); } /** -- cgit v1.2.3