Fix incorrect phone number display in Bidi language

"+ country code" should always be displayed LTR as with phone number
regardless of whether the language is LTR or RTL. Without this commit,
e.g. "+0123456789" is wrongly displayed as "0123456789+".

Bug: 35180168
Test: Manually check correct display in Bidi language
Change-Id: I8643db9e31fe01b6b06bbafe2b4d11c6f400be2a
diff --git a/src/com/android/phone/ADNList.java b/src/com/android/phone/ADNList.java
index 2e2db31..cdd136d 100644
--- a/src/com/android/phone/ADNList.java
+++ b/src/com/android/phone/ADNList.java
@@ -28,7 +28,10 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.Settings;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
 import android.util.Log;
+import android.view.View;
 import android.view.Window;
 import android.widget.CursorAdapter;
 import android.widget.SimpleCursorAdapter;
@@ -161,9 +164,31 @@
     }
 
     protected CursorAdapter newAdapter() {
-        return new SimpleCursorAdapter(this,
-                    android.R.layout.simple_list_item_2,
-                    mCursor, COLUMN_NAMES, VIEW_NAMES);
+        SimpleCursorAdapter sca = new SimpleCursorAdapter(this,
+                android.R.layout.simple_list_item_2,
+                mCursor, COLUMN_NAMES, VIEW_NAMES);
+
+        // This code block is for displaying a phone number including "+ country code" correctly
+        // in bidirectional language (b/35180168).
+        // Without this code, e.g. "+0123456789" is wrongly displayed as "0123456789+".
+        sca.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
+            public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
+                view.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+                if (columnIndex == NUMBER_COLUMN) {
+                    String num = cursor.getString(NUMBER_COLUMN);
+                    if (num != null) {
+                        BidiFormatter bf = BidiFormatter.getInstance();
+                        num = bf.unicodeWrap(num, TextDirectionHeuristics.LTR, true);
+                    }
+                    if (view instanceof TextView) {
+                        ((TextView) view).setText(num);
+                    }
+                    return true;
+                }
+                return false;
+            }
+        });
+        return sca;
     }
 
     private void displayProgress(boolean loading) {
diff --git a/src/com/android/phone/settings/fdn/EditFdnContactScreen.java b/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
index 23ef0bb..b8a761c 100644
--- a/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
+++ b/src/com/android/phone/settings/fdn/EditFdnContactScreen.java
@@ -243,6 +243,7 @@
 
         mNumberField = (EditText) findViewById(R.id.fdn_number);
         if (mNumberField != null) {
+            mNumberField.setTextDirection(View.TEXT_DIRECTION_LTR);
             mNumberField.setKeyListener(DialerKeyListener.getInstance());
             mNumberField.setOnFocusChangeListener(mOnFocusChangeHandler);
             mNumberField.setOnClickListener(mClicked);