diff --git a/res/xml/layout_blocked_number.xml b/res/xml/layout_blocked_number.xml
index 94cdbae..fbd7de3 100644
--- a/res/xml/layout_blocked_number.xml
+++ b/res/xml/layout_blocked_number.xml
@@ -28,8 +28,8 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentStart="true"
-        android:layout_toStartOf="@+id/delete_blocked_number"
-        android:paddingTop="@dimen/blocked_numbers_delete_icon_padding" />
+        android:paddingTop="@dimen/blocked_numbers_delete_icon_padding"
+        android:textDirection="ltr" />
 
     <ImageView
             android:id="@+id/delete_blocked_number"
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index cdda387..58f489c 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -756,6 +756,10 @@
             // We are bound, and we are connected.
             adjustServiceBindingsForEmergency();
 
+            // This is in case an emergency call is added while there is an existing call.
+            mEmergencyCallHelper.maybeGrantTemporaryLocationPermission(call,
+                    mCallsManager.getCurrentUserHandle());
+
             Log.i(this, "onCallAdded: %s", call);
             // Track the call if we don't already know about it.
             addCall(call);
@@ -807,6 +811,8 @@
                     // Check again to make sure there are no active calls.
                     if (mCallsManager.getCalls().isEmpty()) {
                         unbindFromServices();
+
+                        mEmergencyCallHelper.maybeRevokeTemporaryLocationPermission();
                     }
                 }
             }.prepare(), mTimeoutsAdapter.getCallRemoveUnbindInCallServicesDelay(
diff --git a/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java b/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java
index 705e031..1278a4b 100644
--- a/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java
+++ b/src/com/android/server/telecom/settings/BlockedNumbersAdapter.java
@@ -41,12 +41,9 @@
         super.bindView(view, context, cursor);
         final String rawNumber = cursor.getString(cursor.getColumnIndex(
                 BlockedNumberContract.BlockedNumbers.COLUMN_ORIGINAL_NUMBER));
-        String formattedNumber = PhoneNumberUtils.formatNumber(rawNumber,
-                BlockedNumbersUtil.getLocaleDefaultToUS());
-        final String finalFormattedNumber = formattedNumber == null ? rawNumber : formattedNumber;
-
+        final String formattedNumber = BlockedNumbersUtil.formatNumber(rawNumber);
         TextView numberView = (TextView) view.findViewById(R.id.blocked_number);
-        Spannable numberSpannable = new SpannableString(finalFormattedNumber);
+        Spannable numberSpannable = new SpannableString(formattedNumber);
         PhoneNumberUtils.addTtsSpan(numberSpannable, 0, numberSpannable.length());
         numberView.setText(numberSpannable);
 
@@ -54,7 +51,7 @@
         deleteButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-               showDeleteBlockedNumberDialog(context, rawNumber, finalFormattedNumber);
+                showDeleteBlockedNumberDialog(context, rawNumber, formattedNumber);
             }
         });
     }
diff --git a/src/com/android/server/telecom/settings/BlockedNumbersUtil.java b/src/com/android/server/telecom/settings/BlockedNumbersUtil.java
index 5d2e238..b75c4b3 100644
--- a/src/com/android/server/telecom/settings/BlockedNumbersUtil.java
+++ b/src/com/android/server/telecom/settings/BlockedNumbersUtil.java
@@ -18,11 +18,11 @@
 
 import android.content.Context;
 import android.telephony.PhoneNumberUtils;
+import android.text.BidiFormatter;
 import android.text.Spannable;
 import android.text.SpannableString;
+import android.text.TextDirectionHeuristics;
 import android.widget.Toast;
-import com.android.server.telecom.R;
-
 import java.util.Locale;
 
 public final class BlockedNumbersUtil {
@@ -40,18 +40,28 @@
     }
 
     /**
+     * Attempts to format the number, or returns the original number if it is not formattable. Also
+     * wraps the returned number as LTR.
+     */
+    public static String formatNumber(String number){
+      String formattedNumber = PhoneNumberUtils.formatNumber(number, getLocaleDefaultToUS());
+      return BidiFormatter.getInstance().unicodeWrap(
+              formattedNumber == null ? number : formattedNumber,
+              TextDirectionHeuristics.LTR);
+    }
+
+    /**
      * Formats the number in the string and shows a toast for {@link Toast#LENGTH_SHORT}.
      *
      * <p>Adds the number in a TsSpan so that it reads as a phone number when talk back is on.
      */
     public static void showToastWithFormattedNumber(Context context, int stringId, String number) {
-        String formattedNumber = PhoneNumberUtils.formatNumber(number, getLocaleDefaultToUS());
-        String finalFormattedNumber = formattedNumber == null ? number : formattedNumber;
-        String message = context.getString(stringId, finalFormattedNumber);
-        int startingPosition = message.indexOf(finalFormattedNumber);
+        String formattedNumber = formatNumber(number);
+        String message = context.getString(stringId, formattedNumber);
+        int startingPosition = message.indexOf(formattedNumber);
         Spannable messageSpannable = new SpannableString(message);
         PhoneNumberUtils.addTtsSpan(messageSpannable, startingPosition,
-                startingPosition + finalFormattedNumber.length());
+                startingPosition + formattedNumber.length());
         Toast.makeText(
                 context,
                 messageSpannable,
diff --git a/testapps/src/com/android/server/telecom/testapps/TestRttActivity.java b/testapps/src/com/android/server/telecom/testapps/TestRttActivity.java
index 9bb6977..78ebbe5 100644
--- a/testapps/src/com/android/server/telecom/testapps/TestRttActivity.java
+++ b/testapps/src/com/android/server/telecom/testapps/TestRttActivity.java
@@ -93,7 +93,8 @@
                     }
                     // inner read loop
                     while (true) {
-                        String receivedText = rttCall.read();
+                        String receivedText;
+                        receivedText = rttCall.read();
                         if (receivedText == null) {
                             if (Thread.currentThread().isInterrupted()) {
                                 break begin;
