diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index ea9eae1..19c4983 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -25,21 +25,26 @@
 import android.app.Dialog;
 import android.app.WallpaperManager;
 import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.database.ContentObserver;
+import android.database.Cursor;
 import android.graphics.Point;
 import android.media.AudioManager;
 import android.media.ToneGenerator;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.PersistableBundle;
 import android.provider.Settings;
 import android.telecom.PhoneAccount;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
 import android.telephony.PhoneNumberUtils;
+import android.telephony.Rlog;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -168,6 +173,25 @@
 
     private boolean mAreEmergencyDialerShortcutsEnabled;
 
+    /** Key of emergency information user name */
+    private static final String KEY_EMERGENCY_INFO_NAME = "name";
+
+    /** Authority of emergency information */
+    private static final String AUTHORITY = "com.android.emergency.info.name";
+
+    /** Content path of emergency information name */
+    private static final String CONTENT_PATH = "name";
+
+    /** Content URI of emergency information */
+    private static final Uri CONTENT_URI = new Uri.Builder()
+            .scheme(ContentResolver.SCHEME_CONTENT)
+            .authority(AUTHORITY)
+            .path(CONTENT_PATH)
+            .build();
+
+    /** ContentObserver for monitoring emergency info name changes */
+    private ContentObserver mEmergencyInfoNameObserver;
+
     @Override
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
         // Do nothing
@@ -312,6 +336,10 @@
             }
         }
         unregisterReceiver(mBroadcastReceiver);
+        if (mEmergencyInfoNameObserver != null) {
+            getContentResolver().unregisterContentObserver(mEmergencyInfoNameObserver);
+            mEmergencyInfoNameObserver = null;
+        }
     }
 
     @Override
@@ -358,7 +386,7 @@
     @Override
     public void onBackPressed() {
         // If emergency dialer shortcut is enabled and Dialpad view is visible, pressing the
-        // back key will back to display FasterEmergencyDialer view.
+        // back key will back to display EmergencyShortcutView view.
         // Otherwise, it would finish the activity.
         if (mAreEmergencyDialerShortcutsEnabled && mDialpadView != null
                 && mDialpadView.getVisibility() == View.VISIBLE) {
@@ -428,7 +456,7 @@
         String phoneNumber = button.getPhoneNumber();
 
         if (!TextUtils.isEmpty(phoneNumber)) {
-            Log.d(LOG_TAG, "dial emergency number: " + phoneNumber);
+            if (DBG) Log.d(LOG_TAG, "dial emergency number: " + Rlog.pii(LOG_TAG, phoneNumber));
             TelecomManager tm = (TelecomManager) getSystemService(TELECOM_SERVICE);
             tm.placeCall(Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null), null);
         } else {
@@ -884,6 +912,19 @@
         setupEmergencyCallShortcutButton();
 
         switchView(mEmergencyShortcutView, mDialpadView, false);
+
+        mEmergencyInfoNameObserver = new ContentObserver(new Handler()) {
+            @Override
+            public void onChange(boolean selfChange) {
+                super.onChange(selfChange);
+                getEmergencyInfoNameAsync();
+            }
+        };
+        // Register ContentProvider for monitoring emergency info name changes.
+        getContentResolver().registerContentObserver(CONTENT_URI, false,
+                mEmergencyInfoNameObserver);
+        // Query emergency info name.
+        getEmergencyInfoNameAsync();
     }
 
     private void setLocationInfo(String country) {
@@ -1004,4 +1045,38 @@
                     }
                 });
     }
+
+    /**
+     * Get emergency info name from EmergencyInfo and then update EmergencyInfoGroup.
+     */
+    private void getEmergencyInfoNameAsync() {
+        new AsyncTask<Void, Void, String>() {
+            @Override
+            protected String doInBackground(Void... params) {
+                String name = "";
+                try (Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null,
+                        null)) {
+                    if (cursor != null && cursor.moveToFirst()) {
+                        int index = cursor.getColumnIndex(KEY_EMERGENCY_INFO_NAME);
+                        name = index > -1 ? cursor.getString(index) : "";
+                    }
+                } catch (IllegalArgumentException ex) {
+                    Log.w(LOG_TAG, "getEmergencyInfoNameAsync failed", ex);
+                }
+                return name;
+            }
+
+            @Override
+            protected void onPostExecute(String result) {
+                super.onPostExecute(result);
+                if (!isFinishing() && !isDestroyed()) {
+                    // Update emergency info with emergency info name
+                    EmergencyInfoGroup group = findViewById(R.id.emergency_info_group);
+                    if (group != null) {
+                        group.updateEmergencyInfo(result);
+                    }
+                }
+            }
+        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
 }
diff --git a/src/com/android/phone/EmergencyInfoGroup.java b/src/com/android/phone/EmergencyInfoGroup.java
index 8100a5a..9940b3f 100644
--- a/src/com/android/phone/EmergencyInfoGroup.java
+++ b/src/com/android/phone/EmergencyInfoGroup.java
@@ -25,6 +25,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.ImageView;
@@ -45,9 +46,10 @@
 public class EmergencyInfoGroup extends LinearLayout {
 
     private ImageView mEmergencyInfoImage;
-    private TextView mEmergencyInfoName;
+    private TextView mEmergencyInfoNameTextView;
     private View mEmergencyInfoTitle;
     private View mEmergencyInfoButton;
+    private String mDefaultEmergencyInfoName;
 
     public EmergencyInfoGroup(Context context, @Nullable AttributeSet attrs) {
         super(context, attrs);
@@ -59,7 +61,9 @@
         mEmergencyInfoTitle = findViewById(R.id.emergency_info_title);
         mEmergencyInfoButton = findViewById(R.id.emergency_info_button);
         mEmergencyInfoImage = (ImageView) findViewById(R.id.emergency_info_image);
-        mEmergencyInfoName = (TextView) findViewById(R.id.emergency_info_name);
+        mEmergencyInfoNameTextView = (TextView) findViewById(R.id.emergency_info_name);
+        mDefaultEmergencyInfoName = getContext().getResources().getString(
+                R.string.emergency_information_title);
     }
 
     @Override
@@ -87,18 +91,6 @@
                     .setPackage(packageName);
             mEmergencyInfoButton.setTag(R.id.tag_intent, intent);
             mEmergencyInfoImage.setImageDrawable(getCircularUserIcon());
-
-            /* TODO: Get user name.
-                if user name exist:
-                    1. mEmergencyInfoTitle show title.
-                    2. mEmergencyInfoName show user name.
-                if user name does not exist:
-                    1. mEmergencyInfoTitle hide.
-                    2. mEmergencyInfoName show app label. */
-            mEmergencyInfoTitle.setVisibility(View.INVISIBLE);
-            mEmergencyInfoName.setText(getContext().getResources().getString(
-                    R.string.emergency_information_title));
-
             visible = true;
         }
 
@@ -123,4 +115,19 @@
 
         return drawableUserIcon;
     }
-}
+
+    void updateEmergencyInfo(String emergencyInfoName) {
+        String infoNameDescription;
+        if (TextUtils.isEmpty(emergencyInfoName)) {
+            mEmergencyInfoTitle.setVisibility(View.INVISIBLE);
+            mEmergencyInfoNameTextView.setText(mDefaultEmergencyInfoName);
+            infoNameDescription = mDefaultEmergencyInfoName;
+        } else {
+            mEmergencyInfoTitle.setVisibility(View.VISIBLE);
+            mEmergencyInfoNameTextView.setText(emergencyInfoName);
+            infoNameDescription = getContext().getString(
+                    R.string.emergency_information_button_content_description, emergencyInfoName);
+        }
+        mEmergencyInfoNameTextView.setContentDescription(infoNameDescription);
+    }
+}
\ No newline at end of file
